
    j                        d Z ddlmZ ddlZddlZddlmZmZmZ dZ	dD  cg c]  }  ee
      j                  | z   c} Zg dZg dZd	j                  d
  edd      D              ZdedededefdZd Zd Zedk(  r e        yyc c} w )u  
墨舟 OS 字库生成器（07a 模拟版）
================================
和 lesson01/make_font.py 同一套原理：把 Windows 黑体里的字符渲染成
点阵数组。区别：字表换成了墨舟 UI 需要的全部文案。

改 UI 文案？
  1. 改下面的 STRINGS_16 / STRINGS_32（所有要上屏的中英文都列全）
  2. 运行：.venv/Scripts/python.exe inkboat/make_inkboat_font.py
  3. inkboat_sim.py 重新启动即可吃到新字库（烧录阶段同一份 font.h 进固件）

字库格式与 lesson01/06 完全一致：
  ASCII16[95][16] / ZH16_IDS[] / ZH16_BITMAPS[][32]
  ASCII32[95][96] / ZH32_IDS[] / ZH32_BITMAPS[][128]
    )PathN)Image	ImageDraw	ImageFontzC:/Windows/Fonts/simhei.ttf)zdaodejing.txtzxinjing.txtz	lunyu.txtzzhuangzi.txt)8u,   时钟 阅读 闹钟 音乐 翻转棋 设置u0   周一 周二 周三 周四 周五 周六 周日u   电87%u   闹钟 未设置u   今日一句 道德经u   道可道 非常道u%   上善若水 水善利万物而不争u   千里之行 始于足下u   知人者智 自知者明u&   大方无隅 大器晚成 大音希声u   天网恢恢 疏而不失u   治大国 若烹小鲜u   胜人者有力 自胜者强u   短按PWR=菜单u%   全文约五千字 书签断电记忆u"   两组闹钟 深睡中准时唤醒u"   方波合成器 五首内置曲目u   人机对弈 三档难度u   敬请期待u   短按PWR=返回u!   软关机 重启 真关机 取消u   轻按任一键唤醒u   长按PWR开机u   全刷周期u   局刷计数u   短按BOOT=调节u   短按选行 长按调节u   目录u   长按BOOT=跳转u   阅读字号   书架u   四本随身书u   长按BOOT=打开u   难度u   简单 标准 大师   黑胜 白胜 平局u   再来一局u   认输 新局u   轮到你 轮到我u   无子可落已跳过.   小星星 欢乐颂 茉莉花 送别 墨舟谣u   播放中 已暂停 音量u   短按切曲 长按播放u   闹钟一 闹钟二u   每天 工作日 单次u   时 分 重复u	   响铃中u   贪睡十分钟u   短按贪睡 长按停止u   长按编 短按换行u   短按BOOT=菜单u"   自动睡眠 永不 5分 15分 100u   音量u
   转 停续u	   换难度u   短按上下选 长按调节)u   墨舟u   电源u   设置u   扁舟暂泊u%   时钟 阅读 闹钟 音乐 翻转棋r   r	   r    c              #   2   K   | ]  }t        |        y w)N)chr).0cs     J   S:\AI2\zwp1\日常工作z1\墨水屏开发板\inkboat\make_inkboat_font.py	<genexpr>r   ]   s     5c!f5s          chpxcell_wreturnc                    t        j                  t        |      }t        j                  d||fd      }t        j                  |      }|j                  |       \  }}}}	|j                  ||z
  |z   dz  |z
  ||	z
  |z   dz  |z
  f| |d       g }
t        |      D ]]  }d}t        |      D ]$  }|j                  ||f      s|d|dz
  |z
  z  z  }& |
j                  |j                  |dz   dz  d             _ d	j                  |
      S )
u_   把一个字符渲染成 cell_w x px 的 1bpp 位图（MSB 在左，行尾补零到整字节）1r         )fontfill      big    )r   truetype	FONT_FILEr   newr   Drawgetbboxtextrangegetpixelappendto_bytesjoin)r   r   r   r   imgdrawx0y0x1y1rowsyrowxs                 r   render_glyphr6   `   s   i,D
))C&"q
)C>>#D\\"%NBBIIb Q&+b2glq-@2-EFt!  %D2Y <v 	-A||QF#qVaZ!^,,	- 	CLL&1*!2E:;< 88D>r    c           	      l   |r| j                  d| d| d| d       | j                  d| d| d       t        dd	      D ]R  }t        t        |      ||      }| j                  d
dj	                  d |D              z   dt        |       dz          T | j                  d       yt        |      }| j                  d| d| d| d       | j                  d| d       | j                  ddj	                  d |D              z          | j                  d       | j                  d| d| d       |D ]h  }t        |||      }t        |      |k(  sJ | d| dt        |       d|        | j                  d
dj	                  d |D              z   d| z          j | j                  d       y)uF   ascii_first=True 生成 ASCII 全表；否则按 chars 生成中文表z	// ASCII u   px：r5   u*    点阵，95 个，下标 = 字符码 - 32zconst uint8_t ASCIIz[95][z] = {r   r   z  {,c              3   (   K   | ]
  }d |d  yw0x02XN r   bs     r   r   zemit_font.<locals>.<genexpr>y        'A"QsG'A   z},  // ''z};
u
   // 中文 u%    点阵，IDS 码表 + BITMAPS 字模zconst uint16_t ZHz
_IDS[] = {z  c              3   :   K   | ]  }d t        |      d  yw)r;   04XN)ord)r   r   s     r   r   zemit_font.<locals>.<genexpr>   s     "F"RB}#5"Fs   z};zconst uint8_t ZHz_BITMAPS[][@zpx z != c              3   (   K   | ]
  }d |d  ywr:   r=   r>   s     r   r   zemit_font.<locals>.<genexpr>   r@   rA   z},  // N)r)   r'   r6   r   r+   sortedlen)	outcharssizer   nbyteascii_firstr   bmr   s	            r   	emit_fontrP   r   s   

YtfE&4&8bcd

(eE7&ABr3 	[Ac!fdF3BJJusxx'Ab'AAAiPSTUPVxWXDYYZ	[ 	

6u

ZvU6(!D69^_`

&tfK89

4#(("F"FFFG

4

%dV;ugVDE 	UBb$/Br7e#Jt1TF#c"gYd5'%JJ#JJusxx'Ab'AAAhrdOST	U 	

6r    c                     d} t         D ]7  }|j                         r| |j                  d      z  } )t        d| d       9 dj	                  t
              }|| z   D ch c]  }t        |      dk\  s| c}dhz  }|}|}t        D ch c]  }|D ]  }t        |      dk\  s|  }}}g d}	t        |	d d	d
d	d       t        |	|d	d	dd       t        |	d dddd       t        |	|dddd       t        |	|dddd       t        |	|dddd       t        t              j                  dz  }
|
j                  dj	                  |	      d       t        t              j                  j                  dz  dz  dz  }|j                  dj	                  |	      d       t        d|
        t        d|        t        dt        |       dt        |       d       t        d       y c c}w c c}}w )Nr
   zutf-8)encodingu   [警告] 找不到 u!   ，字库将不含该书正文！   u   　)uH   // 本文件由 inkboat/make_inkboat_font.py 自动生成，手改无效ua   // 位图格式：每行 (格宽+7)//8 字节，MSB 在左；位 1=白 0=黑（同驱动约定）z#pragma oncez#include <Arduino.h>r
      r   T)rN   r   F   `         <   zfont.h
lesson07Lesson07_InkBoatu   [OK] 已生成 u        同步固件副本 → u        16/12/20px 中文各 u    字（UI + 全书），32px u    字u&        另含 ASCII 16px 与 32px 全表)	TXT_FILESexists	read_textprintr+   
STRINGS_16rE   
STRINGS_32rP   r   __file__parent
write_textrI   )bookfui16r   zh16zh12zh20szh32rJ   destfws               r   mainrp      s   D N88:AKKK11D's*KLM	N 77:D72B3B78*DDDD"A1QAr#b'S.BABADA7C c4Q5c4R7c4R6c4R%8c4R7c4R7>  8+DOODIIcNWO5	h			%	%
	25G	G(	RBMM$))C.7M3	OD6
"#	(
-.	&s4yk1NsSWykY]
^_	24/ 8 Bs   G/3G/G4$G4__main__)__doc__pathlibr   resysPILr   r   r   r"   rc   rd   r]   ra   rb   r+   r'   ASCII_CHARSstrintbytesr6   rP   rp   __name__)ns   0r   <module>r}      s      	 
 + +)	JL1T(^""Q& L	2
j	
 gg5eBn55S c 3 5 $.!5H zF iLs   B