§
    ¶ÙÄj¤  ã                  óè   — d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl	m
Z
mZmZmZ  ed¦  «        ZdZdZd(d„Zd)d„Zd)d„Zd)d„Zd*d„Zd+d„Zd,d„Z	 d-d.d$„Zd/d&„Zed'k    r e¦   «          dS dS )0a.  Generate a bounded native-size GFX CJK font and reproducible footprint data.

The ordered source set is GB2312 level 1 followed by level 2. Required UI and
validation characters are inserted first, so reducing the count never removes
product strings. The source font is not copied into the repository.
é    )ÚannotationsN)ÚPath)ÚImageÚ	ImageDrawÚ	ImageFontÚ__version__z8/usr/share/fonts/google-noto-cjk/NotoSansCJK-Regular.ttcéˆ  uÍ  ç©¿æˆ´å¼�æ™ºèƒ½ä½“ç»ˆç«¯éš�èº«æŸ¥çœ‹æŽ§åˆ¶å¯¹è¯�äº‘ç«¯å®¡æ‰¹æœ€ç»ˆç»“æžœå¸®åŠ©æŒ‰é”®è®¾ç½®äº®åº¦æŒ¯åŠ¨ä¸»å±�å¹•æ–‡å­—å¤§å°�ä¸»é¢˜è¡¨ç›˜ç”µæ± ç½‘ç»œç½‘å…³å›ºä»¶æ—¶é—´æ—¥æœŸæ˜ŸæœŸä¸€äºŒä¸‰å››äº”å…­æ—¥ç©ºé—²è¿�è¡Œå®Œæˆ�å¤±è´¥ç¦»çº¿ç­‰å¾…ç¡®è®¤å�‘é€�å�–æ¶ˆå·¥å…·æ´»åŠ¨ç®€ä½“ç¹�é«”è¦†è“‹æ··å�ˆå��ç§°æ£€æŸ¥æµ‹è¯•ä¾�èµ–ä¸�å�¯ç”¨é•¿ä¼šè¯�å“�åº”ç¬¬äºŒæ®µä¸�ä¸¢å¤±é¡¹ç›®å†…å­˜ç£�ç›˜æ¦‚è§ˆç³»ç»Ÿè®¾å¤‡æ˜¾ç¤ºè¯­éŸ³ã€‚ï¼Œã€�ï¼�ï¼Ÿï¼šï¼›ï¼ˆï¼‰ã€�ã€‘ã€Šã€‹â€œâ€�â€˜â€™â€”â€¦Â·Ú
first_highÚintÚ	last_highÚreturnú	list[str]c                ó†  — g }t          ¦   «         }t          | |dz   ¦  «        D ]œ}t          dd¦  «        D ]‰}	 t          ||f¦  «                             d¦  «        }n# t          $ r Y Œ4w xY wt          |¦  «        dk    r>d|cxk    rdk    r1n Œ[||vr*|                     |¦  «         |                     |¦  «         ŒŠŒ�|S )Né   é¡   éÿ   Úgb2312u   ã�€u   é¿¿)ÚsetÚrangeÚbytesÚdecodeÚUnicodeDecodeErrorÚlenÚaddÚappend)r
   r   ÚresultÚseenÚhighÚlowÚvalues          úP/home/lighthouse/esp32-dev/.cache/stopwatch-0.7.0/scripts/generate-cjk-subset.pyÚgb2312_han_rowsr"      sõ   € Ø€FÝ‘U”U€DÝ�j )¨a¡-Ñ0Ô0ð %ð %ˆÝ˜˜tÑ$Ô$ð 	%ð 	%ˆCðÝ˜t S˜kÑ*Ô*×1Ò1°(Ñ;Ô;��øÝ%ð ð ð Ø�ðøøøå�5‰zŒz˜QŠˆ 8¨uÐ#@Ð#@Ò#@Ð#@¸Ò#@Ð#@Ð#@Ð#@Ð#@ÀUÐRVÐEVÐEVØ—’˜‘”�Ø—’˜eÑ$Ô$Ð$øð	%ð €Ms   ¹$AÁ
A+Á*A+c                 ó"   — t          dd¦  «        S )Né°   é×   ©r"   © ó    r!   Úgb2312_level1_hanr)   +   ó   € Ý˜4 Ñ&Ô&Ð&r(   c                 ó"   — t          dd¦  «        S )NéØ   é÷   r&   r'   r(   r!   Úgb2312_level2_hanr.   /   r*   r(   c                 ó<   — t          ¦   «         t          ¦   «         z   S )N)r)   r.   r'   r(   r!   Ú
gb2312_hanr0   3   s   € ÝÑÔÕ!2Ñ!4Ô!4Ñ4Ð4r(   Úcountc                ó  — g }t          ¦   «         }t          d                     t          ¦   «         ¦  «        z   d                     t	          ¦   «         ¦  «        z   }|D ]Y}||vr>|                     ¦   «         s*|                     |¦  «         |                     |¦  «         t          |¦  «        | k    r nŒZt          |¦  «        | k    r#t          d| › dt          |¦  «        › d�¦  «        ‚t          |t          ¬¦  «        S )NÚ z
requested z glyphs, only z are available©Úkey)r   ÚREQUIREDÚjoinr)   r.   Úisspacer   r   r   Ú
SystemExitÚsortedÚord)r1   Úorderedr   Úsourcer    s        r!   Ú
charactersr>   7   sô   € Ø€GÝ‘U”U€DÝ˜ŸšÕ 1Ñ 3Ô 3Ñ4Ô4Ñ4°r·w²wÕ?PÑ?RÔ?RÑ7SÔ7SÑS€FØð ð ˆØ˜ÐÐ U§]¢]¡_¤_ÐØ�HŠH�U‰OŒOˆOØ�NŠN˜5Ñ!Ô!Ð!Ýˆw‰<Œ<˜5Ò Ð ØˆEð !å
ˆ7�|„|�uÒÐÝÐW eÐWÐW½3¸w¹<¼<ÐWÐWÐWÑXÔXÐXÝ�'�sÐ#Ñ#Ô#Ð#r(   ÚfontúImageFont.FreeTypeFontr    Ústrú,tuple[bytes, tuple[int, int, int, int, int]]c                ó  — |                       |d¬¦  «        \  }}}}t          d||z
  ¦  «        t          d||z
  ¦  «        }}t          dt          dt          |                      |¦  «        ¦  «        ¦  «        ¦  «        }|r|s	ddd|||ffS t          j        d||fd¦  «        }	t          j        |	¦  «         	                    | | f|| dd¬¦  «         t          ¦   «         }
dx}}t          |	d	¦  «        r|	                     ¦   «         n|	                     ¦   «         }|D ]2}|dz  |d
k    z  }|dz  }|dk    r|
                     |¦  «         dx}}Œ3|r|
                     |d|z
  z  ¦  «         t          |
¦  «        |||||ffS )NÚls)Úanchorr   r   r   r(   ÚL)r?   ÚfillrE   Úget_flattened_dataé`   é   )ÚgetbboxÚmaxÚminÚroundÚ	getlengthr   Únewr   ÚDrawÚtextÚ	bytearrayÚhasattrrH   Úgetdatar   r   )r?   r    ÚleftÚtopÚrightÚbottomÚwidthÚheightÚadvanceÚimageÚbitsÚbyteÚusedÚpixelsÚpixels                  r!   Úrasterrc   F   s³  € Ø#Ÿ|š|¨E¸$˜|Ñ?Ô?Ñ€Dˆ#ˆu�fÝ˜˜5 4™<Ñ(Ô(­#¨a°¸#±Ñ*>Ô*>ˆ6€EÝ�!•S˜�e D§N¢N°5Ñ$9Ô$9Ñ:Ô:Ñ;Ô;Ñ<Ô<€GØð /˜ð /Ø�Q˜˜7 D¨#Ð.Ð.Ð.ÝŒI�c˜E 6˜?¨AÑ.Ô.€EÝ„N�5ÑÔ×Ò  ¨ t˜}¨e¸$ÀSÐQUÐÑVÔVÐVÝ‰;Œ;€DØ€O€Dˆ4Ý+2°5Ð:NÑ+OÔ+OÐdˆU×%Ò%Ñ'Ô'Ð'ÐUZ×UbÒUbÑUdÔUd€FØð ð ˆØ˜‘	˜e rškÑ*ˆØ�‰	ˆØ�1Š9ˆ9Ø�KŠK˜ÑÔÐØˆOˆD�4øØð (Ø�Š�D˜Q ™XÑ&Ñ'Ô'Ð'Ý�‰;Œ;˜ ¨°°sÐ;Ð;Ð;r(   Ú	font_pathr   ÚfaceÚsizec                ór  — t          j        t          | ¦  «        ||¬¦  «        }t          |¦  «        }t	          ¦   «         }g }|D ]_}t          ||¦  «        \  }	}
|                     t          |¦  «        g|
¢t          |¦  «        ‘R ¦  «         | 	                    |	¦  «         Œ`||t          |¦  «        |fS )N©rf   Úindex)r   ÚtruetyperA   r>   rS   rc   r   r   r;   Úextendr   )rd   re   rf   r1   r?   ÚcharsÚbitmapsÚglyphsr    ÚbitmapÚmetrics              r!   Úencoderq   \   s´   € ÝÔ�c )™nœn°4¸tÐDÑDÔD€DÝ�uÑÔ€EÝ‰kŒk€GØ€FØð ð ˆÝ  eÑ,Ô,‰ˆ�Ø�Š•s˜7‘|”|Ð9 fÐ9­c°%©j¬jÐ9Ð9Ñ:Ô:Ð:Ø�Š�vÑÔÐÐØ��˜g™œ¨Ð.Ð.r(   r3   ÚpathÚnameÚexplicitÚdictc                ó.  — |rØt          t          |¦  «        t          ¬¦  «        }t          |¦  «        }t	          j        t          |¦  «        ||¬¦  «        }t          ¦   «         }	g }
|D ]_}t          ||¦  «        \  }}|
 	                    t          |	¦  «        g|¢t          |¦  «        ‘R ¦  «         |	 
                    |¦  «         Œ`t          |	¦  «        }	nt          ||||¦  «        \  }}}	}
|pd|› �}|rId                     d„ |D ¦   «         ¦  «                             d¦  «        }t          j        dd|¦  «        }nd|› �}| j                             d	d	¬
¦  «         g }t'          dt          |	¦  «        d¦  «        D ]E}| 	                    dd                     d„ |	||dz   …         D ¦   «         ¦  «        z   dz   ¦  «         ŒFd„ |
D ¦   «         }|                     ¦   «         \  }}||z   }t+          j        |                     ¦   «         ¦  «                             ¦   «         }d                     g d‘|› ‘d‘|› ‘d‘|› ‘d‘|› ‘d‘|› ‘d‘t3          d¦  «                             |¦  «        › ‘d‘|› ‘d‘t3          d¦  «                             |¦  «        › ‘d‘|› ‘d‘|› ‘d‘|› ‘d‘|› ‘d‘|› ‘d‘|› ‘d‘|› ‘d‘¦  «        }|                      |¦  «         ||t          |	¦  «        d|z  t          |	¦  «        d|z  z   d z   |t6          d!œS )"Nr4   rh   ÚCjkScr3   c              3  óp   K  — | ]1}|                      ¦   «         rd |                     ¦   «         z   n|V — Œ2dS )Ú_N)ÚisupperÚlower)Ú.0Úcs     r!   ú	<genexpr>zwrite_cpp.<locals>.<genexpr>x   s?   è è € ÐOÐOÀ1¨1¯9ª9©;¬;Ð=˜˜aŸgšg™iœi™˜¸AÐOÐOÐOÐOÐOÐOr(   ry   z(?<=\D)(?=\d)Úcjk_sc_T©ÚparentsÚexist_okr   é   z    ú, c              3  ó"   K  — | ]
}d |d›�V — ŒdS )Ú0xÚ02xNr'   )r|   Úvs     r!   r~   zwrite_cpp.<locals>.<genexpr>   s*   è è € Ð&YÐ&Y¸ |¨A | | |Ð&YÐ&YÐ&YÐ&YÐ&YÐ&Yr(   ú,c                óP   — g | ]#\  }}}}}}}d |d›d|› d|› d|› d|› d|› d|› d�‘Œ$S )z    {0xÚ04xr„   z},r'   )r|   ÚoffÚwÚhr\   ÚxoffÚyoffÚcodes           r!   ú
<listcomp>zwrite_cpp.<locals>.<listcomp>€   su   € ð ð ð á0ˆC��A�w  d¨Dð 	M�4ÐLÐLÐL˜sÐLÐL aÐLÐL¨1ÐLÐL°ÐLÐL¸4ÐLÐLÀ4ÐLÐLÐLðð ð r(   zm// Generated by scripts/generate-cjk-subset.py; do not edit.
// Source: Noto Sans CJK SC (SIL OFL 1.1), face=z, size=z	, glyphs=z
// Source SHA256: z`
#include "cjk_subset_font.h"

namespace wearable { namespace fonts {
namespace {
const uint8_t z_bitmaps[] PROGMEM = {
é
   z
};
const SubsetGlyph z_glyphs[] PROGMEM = {
z
};
}
const SubsetFont ú(z	_bitmaps,z_glyphs,z$);
} } // namespace wearable::fonts
é   )Úsize_pxÚglyph_countÚbitmap_bytesÚglyph_table_bytesÚestimated_binary_bytesÚsource_sha256Úpillow)r:   r   r;   r   r   rj   rA   rS   rc   r   rk   r   rq   r7   ÚlstripÚreÚsubÚparentÚmkdirr   Ú
getmetricsÚhashlibÚsha256Ú
read_bytesÚ	hexdigestÚchrÚ
write_textÚpillow_version)rr   rd   re   rf   r1   rs   rt   rl   r?   rm   rn   r    ro   rp   ÚsymbolÚstemÚrowsÚoffsetÚ
glyph_rowsÚascentÚdescentÚ	y_advanceÚsource_hashÚcontents                           r!   Ú	write_cppr´   h   sZ  € àð LÝ•s˜8‘}”}­#Ð.Ñ.Ô.ˆÝ�E‘
”
ˆÝÔ!¥# i¡.¤.°tÀ4ÐHÑHÔHˆÝ‘+”+ˆ¨˜vØð 	#ð 	#ˆEÝ# D¨%Ñ0Ô0‰NˆF�FØ�MŠM�3˜w™<œ<Ð=¨&Ð=µ#°e±*´*Ð=Ð=Ñ>Ô>Ð>Ø�NŠN˜6Ñ"Ô"Ð"Ð"Ý˜‘.”.ˆˆå'-¨i¸¸tÀUÑ'KÔ'KÑ$ˆˆe�W˜fØÐ#�^˜T�^�^€FØð  Ø�wŠwÐOÐOÈÐOÑOÔOÑOÔO×VÒVÐWZÑ[Ô[ˆÝŒvÐ&¨¨TÑ2Ô2ˆˆà˜ÐÐˆØ„K×Ò˜d¨TÐÑ2Ô2Ð2Ø€DÝ˜�3˜w™<œ<¨Ñ,Ô,ð að aˆØ�Š�F˜TŸYšYÐ&YÐ&Y¸WÀVÈFÐUWÉKÐEWÔ=XÐ&YÑ&YÔ&YÑYÔYÑYÐ\_Ñ_Ñ`Ô`Ð`Ð`ðð à4:ðñ ô €Jð —o’oÑ'Ô'�O€FˆGØ˜Ñ €IÝ”. ×!5Ò!5Ñ!7Ô!7Ñ8Ô8×BÒBÑDÔD€Kð÷ ò ð ð ð Ø15ðð ð ð Ø>Bðð ð ð ØMRðð ð ð àðð ð ð ð ðð ð ð õ €R�„‡‚ˆdÑÔðð ð ð ð ðð ð ð õ €R�„‡‚ˆjÑÔðð ð ð ð ðð ð ð ð  ðð ð ð ð +/ðð ð ð ð 9>ðð ð ð ð AGðð ð ð ð JQðð ð ð ð T]ðð ð ð ñ ô €Gð" 	‡O‚O�GÑÔÐàØÝ˜G™œØ %™ZÝ"% g¡,¤,°°e±Ñ";¸bÑ"@Ø$Ý ðð ð r(   ÚNonec                 óÚ  — t          j        ¦   «         } |                      dt          t          ¬¦  «         |                      dt
          dd¬¦  «         |                      dt
          d¬¦  «         |                      d	t
          t          ¬¦  «         |                      d
d¬¦  «         |                      dd¬¦  «         |                      dt          ¬¦  «         |                      dt          ¬¦  «         |                      ¦   «         }|j         	                    ¦   «         st          d|j        › �¦  «        ‚g }|j        rL|                     t          |j        |j        |j        |j        |j        |j        |j        ¦  «        ¦  «         nldD ]i}dD ]d}t'          |j        |j        ||¦  «        \  }}}}|                     ||t)          |¦  «        d|z  t)          |¦  «        d|z  z   dz   dœ¦  «         ŒeŒjt+          j        |dd¬¦  «        dz   }|j        r;|j        j                             dd¬¦  «         |j                             |¦  «         t7          |d¬¦  «         d S )Nz--font)ÚtypeÚdefaultz--faceé   zTTC face; 2 is Noto Sans CJK SC)r·   r¸   Úhelpz--sizeé   z--countz--namer3   )r¸   z--charactersz--output)r·   z--reportzfont not found: )rƒ   r•   r»   )i¸  i¬  r	   rƒ   r•   )r–   r—   r˜   r™   rš   F)ÚindentÚensure_asciiú
Tr€   )Úend)ÚargparseÚArgumentParserÚadd_argumentr   ÚDEFAULT_FONTr   ÚDEFAULT_GLYPH_COUNTÚ
parse_argsr?   Úis_filer9   Úoutputr   r´   re   rf   r1   rs   r>   rq   r   ÚjsonÚdumpsÚreportr    r¡   r¨   Úprint)ÚparserÚargsrÊ   rf   r1   ry   rm   rR   s           r!   ÚmainrÎ   ¤   s€  € ÝÔ$Ñ&Ô&€FØ
×Ò˜¥tµ\ÐÑBÔBÐBØ
×Ò˜¥s°AÐ<]ÐÑ^Ô^Ð^Ø
×Ò˜¥s°BÐÑ7Ô7Ð7Ø
×Ò˜	­Õ5HÐÑIÔIÐIØ
×Ò˜¨"ÐÑ-Ô-Ð-Ø
×Ò˜°ÐÑ3Ô3Ð3Ø
×Ò˜
­ÐÑ.Ô.Ð.Ø
×Ò˜
­ÐÑ.Ô.Ð.Ø×ÒÑÔ€DØŒ9×ÒÑÔð 9ÝÐ7¨D¬IÐ7Ð7Ñ8Ô8Ð8Ø€FØ„{ð Ø�Š•i ¤¨T¬Y¸¼	À4Ä9ÈdÌjØ $¤	¨4¬?ñ<ô <ñ 	=ô 	=ð 	=ð 	=ð !ð 	ð 	ˆDØ+ð ð �Ý#)¨$¬)°T´YÀÀeÑ#LÔ#LÑ ��1�g˜qØ—’Ø#°EÍ3ÈwÉ<Ì<Ø)+¨e©Ý.1°'©l¬l¸RÀ%¹ZÑ.GÈ"Ñ.Lðð ñ ô ð ð ðõ Œ:�f Q°UÐ;Ñ;Ô;¸dÑB€DØ„{ð %ØŒÔ× Ò ¨¸Ð Ñ=Ô=Ð=ØŒ×Ò˜tÑ$Ô$Ð$Ý	ˆ$�BÐÑÔÐÐÐr(   Ú__main__)r
   r   r   r   r   r   )r   r   )r1   r   r   r   )r?   r@   r    rA   r   rB   )rd   r   re   r   rf   r   r1   r   )r3   r3   )rr   r   rd   r   re   r   rf   r   r1   r   rs   rA   rt   rA   r   ru   )r   rµ   )Ú__doc__Ú
__future__r   rÀ   r£   rÈ   rž   Úpathlibr   ÚPILr   r   r   r   r©   rÃ   rÄ   r6   r"   r)   r.   r0   r>   rc   rq   r´   rÎ   Ú__name__r'   r(   r!   ú<module>rÕ      s‚  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JàˆtÐNÑOÔO€ØÐ ðBð 	ðð ð ð ð'ð 'ð 'ð 'ð'ð 'ð 'ð 'ð5ð 5ð 5ð 5ð$ð $ð $ð $ð<ð <ð <ð <ð,	/ð 	/ð 	/ð 	/ð /1ð9ð 9ð 9ð 9ð 9ðxð ð ð ðB ˆzÒÐØ€D�F„F€F€F€Fð Ðr(   