File size: 6,445 Bytes
dd495a5
8e118cf
 
 
dd495a5
8e118cf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
import streamlit as st
from pathlib import Path
import re
import urllib.parse

def load_template(template_path):
    """加载 README 模板文件"""
    with open(template_path, 'r', encoding='utf-8') as f:
        return f.read()

def get_template_variables(template_content):
    """从模板中提取所有变量"""
    pattern = r'\{\{(\w+)\}\}'
    return sorted(list(set(re.findall(pattern, template_content))))

def encode_url_safe(text):
    """将文本中的空格转换为 URL 安全的格式"""
    return urllib.parse.quote(text).replace('+', '%20')

def replace_template_variables(template_content, variables_dict):
    """替换模板中的所有变量,对特定字段进行 URL 编码"""
    url_encode_fields = ['full_name', 'bio']  # 需要 URL 编码的字段
    
    for key, value in variables_dict.items():
        if key in url_encode_fields and value:
            # 对特定字段进行 URL 编码
            encoded_value = encode_url_safe(value)
            template_content = template_content.replace(f'{{{{{key}}}}}', encoded_value)
        else:
            # 其他字段正常替��
            template_content = template_content.replace(f'{{{{{key}}}}}', value)
    
    return template_content

def create_badge(text, color="blue"):
    """创建技能徽章
    将空格替换为下划线,以确保徽章正确显示
    """
    # 处理空格
    text = text.strip()
    badge_text = text.replace(" ", "_")
    badge_logo = text.lower().replace(" ", "-")  # logo 使用连字符
    
    return f"![{text}](https://img.shields.io/badge/-{badge_text}-{color}?style=for-the-badge&logo={badge_logo}&logoColor=white)"

def process_skills(skills_text):
    """处理技能列表文本
    分割文本并生成徽章
    """
    if not skills_text:
        return ""
    
    # 分割技能并移除空白项
    skills = [skill.strip() for skill in skills_text.split(",") if skill.strip()]
    # 生成徽章
    return " ".join([create_badge(skill) for skill in skills])

def main():
    st.set_page_config(
        page_title="GitHub README Profile Generator",
        page_icon="📝",
        layout="wide"
    )
    
    st.title("GitHub README Profile Generator")
    st.markdown("### 生成你的个性化 GitHub Profile README")

    # 加载默认模板
    template_path = Path("README模板.md")
    template_content = load_template(template_path)
    
    # 创建两列布局
    col1, col2 = st.columns([1, 1])

    with col1:
        st.subheader("基本信息")
        
        # 基本信息表单
        full_name = st.text_input("姓名", value="Chan Meng")
        bio = st.text_input("个人简介", value="A minimalist")
        github_username = st.text_input("GitHub 用户名", value="ChanMeng666")
        
        # 社交链接
        st.subheader("社交链接")
        portfolio_link = st.text_input("作品集链接", value="https://chanmeng.live/")
        linkedin_link = st.text_input("LinkedIn 链接", value="https://www.linkedin.com/in/chanmeng666/")
        
        # 日常行为
        st.subheader("日常行为")
        daily_routine_1 = st.text_input("日常行为 1", value="code")
        daily_routine_2 = st.text_input("日常行为 2", value="eat")
        daily_routine_3 = st.text_input("日常行为 3", value="sleep")
        daily_routine_4 = st.text_input("日常行为 4", value="repeat")
        
        # 项目信息
        st.subheader("项目 1")
        project_1_name = st.text_input("项目 1 名称", value="My Awesome Project")
        project_1_link = st.text_input("项目 1 链接", value="#")
        project_1_image = st.text_input("项目 1 图片", value="/path/to/project1.png")
        project_1_github = st.text_input("项目 1 GitHub", value="#")
        project_1_live = st.text_input("项目 1 演示链接", value="#")
        project_1_point_1 = st.text_input("项目 1 要点 1", value="Feature 1")
        project_1_point_2 = st.text_input("项目 1 要点 2", value="Feature 2")
        project_1_point_3 = st.text_input("项目 1 要点 3", value="Feature 3")

        # 技能徽章
        st.subheader("技能栈")
        core_skills = st.text_area("核心技能 (用逗号分隔)", 
            value="React,Python,TypeScript,Machine Learning")
        frontend_skills = st.text_area("前端技能 (用逗号分隔)", 
            value="HTML5,CSS3,JavaScript,React Native")
        backend_skills = st.text_area("后端技能 (用逗号分隔)", 
            value="Node.js,MySQL,MongoDB")

        # 生成徽章
        core_skills_badges = process_skills(core_skills)
        frontend_skills_badges = process_skills(frontend_skills)
        backend_skills_badges = process_skills(backend_skills)

        # 其他信息
        st.subheader("其他信息")
        footer_text = st.text_area("页脚文本", value="Thanks for visiting my GitHub profile! Feel free to connect or check out my projects.")

        # 创建变量字典
        variables = {
            'full_name': full_name or '',
            'bio': bio or '',
            'github_username': github_username,
            'portfolio_link': portfolio_link,
            'linkedin_link': linkedin_link,
            'daily_routine_1': daily_routine_1,
            'daily_routine_2': daily_routine_2,
            'daily_routine_3': daily_routine_3,
            'daily_routine_4': daily_routine_4,
            'project_1_name': project_1_name,
            'project_1_link': project_1_link,
            'project_1_image': project_1_image,
            'project_1_github': project_1_github,
            'project_1_live': project_1_live,
            'project_1_point_1': project_1_point_1,
            'project_1_point_2': project_1_point_2,
            'project_1_point_3': project_1_point_3,
            'core_skills_badges': core_skills_badges,
            'frontend_skills_badges': frontend_skills_badges,
            'backend_skills_badges': backend_skills_badges,
            'footer_text': footer_text
        }

        # 生成预览内容
        preview_content = replace_template_variables(template_content, variables)

    with col2:
        st.subheader("预览")
        st.markdown(preview_content, unsafe_allow_html=True)
        
        if st.button("复制全部内容"):
            st.code(preview_content, language="markdown")
            st.success("内容已复制到剪贴板!")

if __name__ == "__main__":
    main()