1
1
import os
2
2
import re
3
- import yaml
4
3
from collections import defaultdict
5
4
6
5
7
- def extract_metadata (content : str ):
8
- # 检查是否包含 YAML front matter
9
- if content .startswith ("---\n " ):
10
- # 使用正则表达式匹配 YAML front matter
11
- match = re .match (r"^---\n(.*?)\n---\n" , content , re .DOTALL )
12
- if match :
13
- yaml_content = match .group (1 )
14
- # 解析 YAML 内容
15
- metadata = yaml .safe_load (yaml_content )
16
- # 获取剩余的 Markdown 内容
17
- remaining_content = content [match .end () :]
18
- return metadata , remaining_content
19
- # 如果没有 metadata,返回空字典和原始内容
20
- return {}, content
21
-
22
-
23
6
for contest_file in ["docs/contest.md" , "docs-en/contest.md" ]:
24
7
with open (contest_file , "r" , encoding = "utf-8" ) as f :
25
8
content = f .read ()
@@ -40,30 +23,6 @@ def extract_metadata(content: str):
40
23
f .write (content )
41
24
42
25
43
- code_dict = {
44
- "py" : ("Python3" , "python" ),
45
- "java" : ("Java" , "java" ),
46
- "cpp" : ("C++" , "cpp" ),
47
- "go" : ("Go" , "go" ),
48
- "ts" : ("TypeScript" , "ts" ),
49
- "rs" : ("Rust" , "rust" ),
50
- "js" : ("JavaScript" , "js" ),
51
- "cs" : ("C#" , "cs" ),
52
- "php" : ("PHP" , "php" ),
53
- "c" : ("C" , "c" ),
54
- "scala" : ("Scala" , "scala" ),
55
- "swift" : ("Swift" , "swift" ),
56
- "rb" : ("Ruby" , "rb" ),
57
- "kt" : ("Kotlin" , "kotlin" ),
58
- "dart" : ("Dart" , "dart" ),
59
- "nim" : ("Nim" , "nim" ),
60
- "sql" : ("MySQL" , "sql" ),
61
- "sh" : ("Shell" , "bash" ),
62
- }
63
-
64
- mapping = {lang : name for name , lang in code_dict .values ()}
65
-
66
-
67
26
def get_paths (dirs : str , m : int ):
68
27
paths = []
69
28
for root , _ , files in os .walk (dirs ):
@@ -102,12 +61,6 @@ def get_paths(dirs: str, m: int):
102
61
# p = 'solution/0000-0099/0003.Longest Substring Without Repeating Characters/README.md'
103
62
with open (p , "r" , encoding = "utf-8" ) as f :
104
63
content = f .read ()
105
- metadata , content = extract_metadata (content )
106
- # [中文文档](/lcci/01.01.Is%20Unique/README.md)
107
- # 正则匹配 [中文文档](xxx) 并且移除
108
- content = re .sub (r"\[中文文档]\((.*?)\)" , "" , content )
109
- content = re .sub (r"\[English Version]\((.*?)\)" , "" , content )
110
-
111
64
title = content [content .find ("[" ) + 1 : content .find ("]" )]
112
65
dot = title .find ("." ) if dir != "lcci" else title .rfind ("." )
113
66
num = (
@@ -140,38 +93,10 @@ def get_paths(dirs: str, m: int):
140
93
navdata_en [dir ].append (f" - { num } . { name } : { target_dir } /{ num } .md" )
141
94
else :
142
95
navdata_cn [dir ].append (f" - { num } . { name } : { target_dir } /{ num } .md" )
143
- # 修改代码块
144
- while True :
145
- start = "<!-- tabs:start -->"
146
- end = "<!-- tabs:end -->"
147
- i = content .find (start )
148
- j = content .find (end )
149
- if i == - 1 or j == - 1 :
150
- break
151
- j = content .find (end )
152
- codes = content [i + len (start ) : j ].strip ()
153
- res = re .findall (r"```(.*?)\n(.*?)\n```" , codes , re .S )
154
- result = []
155
- if res :
156
- for lang , code in res :
157
- name = mapping .get (lang )
158
- code = code or ""
159
- # 需要将 code 缩进 4 个空格
160
- code = code .replace ("\n " , "\n " )
161
- code_snippet = f'=== "{ name } "\n \n ```{ lang } linenums="1"\n { code } \n ```\n '
162
- result .append (code_snippet )
163
- content = content [:i ] + "\n " .join (result ) + content [j + len (end ) :]
164
96
docs_dir = ("docs-en" if is_en else "docs" ) + os .sep + target_dir
165
97
if not os .path .exists (docs_dir ):
166
98
os .makedirs (docs_dir )
167
99
new_path = os .path .join (docs_dir , f"{ num } .md" )
168
-
169
- yaml_metadata = yaml .dump (
170
- metadata , default_flow_style = False , allow_unicode = True
171
- )
172
- print (metadata )
173
- metadata_section = f"---\n { yaml_metadata } ---\n \n "
174
- content = metadata_section + content
175
100
with open (new_path , "w" , encoding = "utf-8" ) as f :
176
101
f .write (content )
177
102
0 commit comments