update at 2026-02-09 16:09:44
This commit is contained in:
@@ -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 位数字 id(0001、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 = {}
|
||||
|
||||
Reference in New Issue
Block a user