Files
blog/scripts/__pycache__/subset-font-safe.cpython-312.pyc
T

97 lines
17 KiB
Plaintext
Raw Normal View History

2026-06-25 13:17:45 +08:00
Ë
ʬ<jê6ãóv—dZddlZddlZddlZddlmZddlmZmZd d„Z d„Z
d„Z d„Z d „Z
ed
k(re
«yy) uv
字体�集化脚本 - 安全版本
从HTML和CSS文件中��实际使用的字符,生�优化的�集字体
éN)ÚTTFont)Ú SubsetterÚOptionsc
ó4‡—t«}|D�]R}tjj|«st d|›�«Œ2t d|›�«tj
|«D]û\}}}|D]ðŠt
ˆfd„|D««sŒtjj|‰«} t|dd¬«5}|j«} tjd| «}
|j|
«tjd| «} |j| «tjd | «} |j| «td
«}
|j|
«d d d «ŒòŒý�ŒU|S#1swYŒxYw#t$r}t d |›d
|›�«Yd }~�Œ&d }~wwxYw)u!从文件中æ��å�–使用的字符u"âš ï¸� 目录ä¸�存在,跳过: uðŸ”� 扫æ��目录: c3ó@•K—|]}‰j|«–—Œy­w)N)Úendswith)Ú.0ÚextÚfiles €úscripts\subset-font-safe.pyú <genexpr>z+extract_chars_from_files.<locals>.<genexpr>søèø€Ò@¨c�t—}‘} S×)Ñ@ùsƒÚrúutf-8©Úencodingõ [一-é¿¿]õ[ -〿＀-￯]ú [a-zA-Z0-9]z!!@#$%^&*()_+-=[]{}|;:,.<>?/\`~"'-Nuâš ï¸� 读å�–文件失败 ú: )ÚsetÚosÚpathÚexistsÚprintÚwalkÚanyÚjoinÚopenÚreadÚreÚfindallÚupdateÚ Exception)Ú directoriesÚ
extensionsÚcharsÚ directoryÚrootÚdirsÚfilesÚfilepathÚfÚcontentÚ
chinese_charsÚ cjk_punctÚ ascii_charsÚen_punctÚer s @r Úextract_chars_from_filesr3
sø€ä ‹E€Eà ó Mˆ Ü�w‰w�~‰~˜iÔ(Ü Ð6°y°kÐBÔ CØ ä
Ð# I ;Ð/Ô0ä!#§¡¨Ó!3ò MÑ ˆD�$˜Øò
M�ÜÓ@°ZÔ@Õ@Ü!Ÿw™wŸ|™|¨D°$Ó7�HðMÜ! (¨C¸'ÔBð3ÀaØ&'§f¡f£h˜Gô-/¯J©J°|ÀWÓ,M˜MØ!ŸL™L¨Ô7ô)+¯
©
Ð3FÈÓ(P˜IØ!ŸL™L¨Ô3ô+-¯*©*°^ÀWÓ*M˜KØ!ŸL™L¨Ô5ô(+Ð+PÓ'Q˜HØ!ŸL™L¨Ô2÷#3øñ 
Mò Mð MðD €L÷-3ð3ûô&%òMÜÐ ;¸H¸:ÀRÈÀsÐK×LÒLûðMús1Â%E2Â3B"E& ÅE2Å&E/
Å+E2Å2 F Å;F ÆF c
ó¬—t«}ddl}|D�] }tjj |«st d|›�«Œ2t d|›�« t
|dd¬«5}|j|«}|j|d¬ «}tjd
|«}|j|«tjd |«}|j|«tjd |«} |j| «t d
|›dt|«›d�«ddd«�Œ|S#1swYŒxYw#t$r}
t d|›d|
›�«Yd}
~
�Œ=d}
~
wwxYw)uO从JSONæ•°æ�®æ–‡ä»¶ä¸­æ��å�–字符(用于å�‹é“¾ã€�朋å�‹åœˆç­‰åЍæ€�内容)rNu&âš ï¸� JSON文件ä¸�存在,跳过: uðŸ”� 扫æ��JSON文件: rrrF©Ú ensure_asciirrru ✅ 从 u æ��å�–了 õ 个中文字符uâš ï¸� 读å�–JSON文件失败 r)rÚjsonrrrrrÚloadÚdumpsr r!r"Úlenr#) Ú
json_filesr&r8Ú json_filer,Údatar-r.r/r0r2s r Úextract_chars_from_jsonr?5sK€ä ‹E€EãàóFˆ Ü�w‰w�~‰~˜iÔ(Ü Ð:¸9¸+ÐFÔ GØ ä
Ð'¨  {Ð3Ô4ð FÜ�i ¨wÔ7ð
`¸1Ø—y‘y “|�ðŸ*™* T¸˜*Ó>�ô!#§
¡
¨<¸Ó A�
Ø— ‘ ˜]Ô+ôŸJ™JÐ':¸GÓD� Ø— ‘ ˜YÔ'ô!Ÿj™j¨¸ÓA� Ø— ‘ ˜[Ô)ä˜  I ;¨k¼#¸mÓ:LÐ9MÐM]Ð^Ô_÷%
`ùðFð> €L÷/
`ð
`ûô(ò FÜ Ð3°I°;¸bÀÀÐD× EÒ Eûð Fús1ÁD.Á B5D"ÄD.Ä"D+ Ä'D.Ä. EÄ7EÅEcóL—t«} ddl}ddl}ddl}|j «}|D]Ú}t d|›�« |j j|ddi¬«}|j j||d¬«5}|j«jd «} |j| «}
|j|
d
¬ «} tjd | «} |j| «t d
t!| «›d�«ddd«ŒÜ |S#|j"$rt d«YŒ)wxYw#1swYŒ.xYw#|j$j&$r}
t d|
›�«Yd}
~
�Œ9d}
~
wt($r}
t d|
›�«Yd}
~
�ŒYd}
~
wwxYw#t*$rt d«Y|SwxYw)uT从API接å�£èŽ·å�–æ•°æ�®å¹¶æ��å�–字符(用于动æ€�内容如å�‹é“¾ã€�朋å�‹åœˆï¼‰rNuðŸŒ� å°�试从API获å�–: z
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36)Úheadersé)ÚcontextÚtimeoutrFr5ru ✅ 从APIæ��å�–了 r7u- âš ï¸� å“�应ä¸�是有效的JSON,跳过u â�Œ API请求失败: u â�Œ 处ç�†APIå“�应失败: u)âš ï¸� urllibä¸�å�¯ç”¨ï¼Œè·³è¿‡API扫æ��)rÚurllib.requestr8ÚsslÚ_create_unverified_contextrÚrequestÚRequestÚurlopenrÚdecodeÚloadsr:r r!r"r;ÚJSONDecodeErrorÚerrorÚURLErrorr#Ú ImportError)Úurlsr&Úurllibr8rFrCÚurlÚreqÚresponser>Ú json_datar-r.r2s r Ú fetch_and_extract_chars_from_apirW\s¯€ä ‹E€Eð';ÛÛÛð×0Ñ0Ó2ˆàò <ˆCÜ Ð-¨c¨UÐ3Ô 4ð
<Ø—n‘n×,Ñ,Øà$Ð&dðð-ó�ð—^‘^×+Ñ+¨C¸È"Ð+ÓMð
PÐQYØ#Ÿ=™=›?×1Ñ1°'Ó:�Dð
PØ$(§J¡J¨tÓ$4˜ Ø"&§*¡*¨YÀU *Ó"K˜ô)+¯
©
°<ÀÓ(I˜
ØŸ ™  ]Ô3äÐ 7¼¸MÓ8JÐ7KÐK[Ð\Ô]÷
Pøñ <ðB €Løð ×/Ñ/òPÜÐ MÖOðPú÷
Pð
Pûð—<‘<×(Ñ(ò
6ÜÐ0°°Ð4×5Ò5ûÜò
<ÜÐ6°q°cÐ:×;Ò;ûð
<ûô ò;Ü
Ð9Õ:à €Lð;úsƒŒ/F ¼=D6Á9 D*ÂA#D
Ã=D6ÄF Ä
D'Ä$D*Ä&D'Ä'D*Ä*D3 Ä/D6Ä6FÅE#ÅF Å# FÅ/FÅ=F ÆFÆF Æ F#Æ"F#cód—td|›�«tjj|«std|›�«y t |«}|j
«}|r t|«nd}tjj|«}td«td|›�«td |d
z d ›d �«t«}|jd
«rd|_ n|jd«rd|_ d|_ ddg|_
t|¬«} dj|«}
td«tdt|«›�« | j!|
¬«| j#|« |j%|«tjj|«} t |«} | j
«}
|
r t|
«nd}|| z
}|dkDr||z dznd}td«td«td|›�«td| d
z d ›d �«td |d
z d ›d!|d ›d"�«| |k\r"td#«td$«td%«yy#t
$r}td|›�«Yd}~yd}~wwxYw#t
$r}td|›�«Yd}~yd}~wwxYw#t
$r}td|›�«Yd}~yd}~wwxYw)&u生æˆ�å­�集字体u
📦 加载字体: õâ�Œ 字体文件ä¸�存在: Fuâ�Œ 加载字体失败: Nru📊 原始字体信æ�¯:u 字符数: u 文件大å°�: éú.1fú KBz.woff2Úwoff2z.woffÚwoffTÚkernÚliga)ÚoptionsÚu$
✂ï¸� 正在生æˆ�å­�集字体...u æ��å�–的字符数: )Útextuâ�Œ å­�集化失败: uâ�Œ ä¿�存字体失败: édu
✅ �集化完��u📊 优化结果:u �集字符数: u �集文件大�: u �少: z KB (z%)u/