chore: 上线前测试修复与部署配置更新
- fix(test): 添加 useSearchParams mock,修正联系链接断言 - style(nav): 将"联系我们"改为"联系" - chore(deploy): 更新 Nginx 配置和部署文档 - style(logo): 更新 Logo SVG 文件 - feat(scripts): 添加字体处理和站点配置脚本
This commit was merged in pull request #9.
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""生成包含繁体'遠'的字体子集"""
|
||||
|
||||
from fontTools.ttLib import TTFont
|
||||
from fontTools.ttLib.tables import _h_m_t_x, _g_a_s_p
|
||||
from fontTools.subset import Subsetter, Options
|
||||
|
||||
# 修补表解析以跳过损坏的数据
|
||||
original_hmtx = _h_m_t_x.table__h_m_t_x.decompile
|
||||
def patched_hmtx(self, data, ttFont):
|
||||
try:
|
||||
return original_hmtx(self, data, ttFont)
|
||||
except:
|
||||
self.metrics = {}
|
||||
_h_m_t_x.table__h_m_t_x.decompile = patched_hmtx
|
||||
|
||||
original_gasp = _g_a_s_p.table__g_a_s_p.decompile
|
||||
def patched_gasp(self, data, ttFont):
|
||||
try:
|
||||
return original_gasp(self, data, ttFont)
|
||||
except:
|
||||
self.gaspRanges = {}
|
||||
_g_a_s_p.table__g_a_s_p.decompile = patched_gasp
|
||||
|
||||
# 加载字体
|
||||
font = TTFont('src/app/fonts/AoyagiReisho.ttf')
|
||||
|
||||
# 删除损坏的表
|
||||
for t in ['vmtx', 'gasp', 'VORG', 'mort', 'morx']:
|
||||
if t in font:
|
||||
del font[t]
|
||||
print(f'Deleted table: {t}')
|
||||
|
||||
# 创建子集器
|
||||
subsetter = Subsetter()
|
||||
options = Options()
|
||||
options.drop_tables = ['gasp', 'vmtx', 'VORG', 'mort', 'morx', 'GSUB', 'GPOS', 'GDEF']
|
||||
subsetter.options = options
|
||||
|
||||
# 目标字符: 睿(0x777f), 新(0x65b0), 致(0x81f4), 遠(0x9060), 空格(0x20)
|
||||
unicodes = [0x20, 0x777f, 0x65b0, 0x81f4, 0x9060]
|
||||
print(f'Target Unicode: {[hex(u) for u in unicodes]}')
|
||||
|
||||
subsetter.populate(unicodes=unicodes)
|
||||
|
||||
# 执行子集化
|
||||
try:
|
||||
subsetter.subset(font)
|
||||
except Exception as e:
|
||||
print(f'Warning during subsetting: {e}')
|
||||
|
||||
# 保存
|
||||
output_path = 'src/app/fonts/AoyagiReisho-subset.ttf'
|
||||
font.save(output_path)
|
||||
font.close()
|
||||
print(f'Saved to: {output_path}')
|
||||
|
||||
# 验证
|
||||
verify_font = TTFont(output_path)
|
||||
cmap = verify_font.getBestCmap()
|
||||
chars = [chr(k) for k in sorted(cmap.keys())]
|
||||
codes = [hex(k) for k in sorted(cmap.keys())]
|
||||
print(f'Subset characters: {chars}')
|
||||
print(f'Unicode codes: {codes}')
|
||||
print(f'Contains U+9060 (遠): {0x9060 in cmap}')
|
||||
verify_font.close()
|
||||
Reference in New Issue
Block a user