update at 2026-02-09 16:09:44

This commit is contained in:
douboer
2026-02-09 16:09:44 +08:00
parent ffb7367d3a
commit 917f210dae
20 changed files with 790 additions and 184 deletions

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python3
"""
生成字体清单文件
扫描 frontend/public/fonts/ 目录下的所有字体文件,同时生成:
扫描 fonts/ 目录下的所有字体文件,同时生成:
1. frontend/public/fonts.json
2. miniprogram/assets/fonts.json
3. miniprogram/assets/fonts.js
@@ -11,7 +11,7 @@ import os
import json
from pathlib import Path
def scan_fonts(font_dir='frontend/public/fonts'):
def scan_fonts(font_dir='fonts'):
"""扫描字体目录,返回字体信息列表"""
fonts = []
font_dir_path = Path(font_dir)
@@ -34,19 +34,43 @@ def scan_fonts(font_dir='frontend/public/fonts'):
relative_path = font_file.relative_to(font_dir_path).as_posix()
# 生成字体信息
# 生成基础信息id 在后续统一按序号回填
font_info = {
'id': f"{category_name}/{font_file.stem}",
'id': '',
'name': font_file.stem,
'filename': font_file.name,
'category': category_name,
'path': f"/fonts/{relative_path}",
'relativePath': relative_path,
}
fonts.append(font_info)
# 统一排序后分配 4 位数字 id0001、0002...
fonts = sorted(fonts, key=lambda x: (x['category'], x['name'], x['filename']))
for index, font in enumerate(fonts, start=1):
font['id'] = f"{index:04d}"
return fonts
def build_manifest(fonts, path_prefix):
"""根据路径前缀构建对外清单"""
prefix = f"/{str(path_prefix or '').strip('/')}"
if prefix == '/':
prefix = ''
manifest = []
for font in fonts:
manifest.append({
'id': font['id'],
'name': font['name'],
'filename': font['filename'],
'category': font['category'],
'path': f"{prefix}/{font['relativePath']}",
})
return manifest
def write_fonts_json(fonts, output_file):
"""写入字体清单 JSON 文件"""
os.makedirs(os.path.dirname(output_file), exist_ok=True)
@@ -66,15 +90,19 @@ def write_fonts_js(fonts, output_file):
def main():
"""主函数"""
# 扫描字体(唯一来源:frontend/public/fonts
fonts = scan_fonts('frontend/public/fonts')
# 扫描字体(唯一来源:仓库根目录 fonts/
fonts = scan_fonts('fonts')
print(f"找到 {len(fonts)} 个字体文件")
# 同步写入 Web 与小程序清单
write_fonts_json(fonts, 'frontend/public/fonts.json')
write_fonts_json(fonts, 'miniprogram/assets/fonts.json')
write_fonts_js(fonts, 'miniprogram/assets/fonts.js')
# Web 清单:统一指向根目录 fonts
web_fonts = build_manifest(fonts, '/fonts')
write_fonts_json(web_fonts, 'frontend/public/fonts.json')
# 小程序清单:同样指向根目录 fonts与 web 共用一份字体目录)
miniprogram_fonts = build_manifest(fonts, '/fonts')
write_fonts_json(miniprogram_fonts, 'miniprogram/assets/fonts.json')
write_fonts_js(miniprogram_fonts, 'miniprogram/assets/fonts.js')
# 统计信息
categories = {}