+
    ÇB·j&  ã                   óè   € R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt]P                  ! ]
4      P                  4       P                  P                  tR tR tR tR tR t]R8X  d
   ]! 4        R# R# )u‰  Scaffold a new demo page: www/<slug>/index.html (+ style.css), its entry in CATEGORIES
(scripts/gen_nav.py), its card on the home page, then regenerate every page's nav.

Run from the repo root:
    python3 scripts/new_demo.py <category> <slug> --name çŸ­å�� --icon ðŸ§© \
        --title 'é¡µé�¢æ ‡é¢˜' --subtitle 'å‰¯æ ‡é¢˜ï¼ˆå�¯å�« HTMLï¼‰' --help-html 'æ“�ä½œæ��ç¤º' \
        --card-desc 'é¦–é¡µå�¡ç‰‡ä¸€å�¥è¯�' --tag 'å�¡ç‰‡æ ‡ç­¾' [--body body.html] [--css]

The crate (crates/<category>/<slug>/), index.js and scripts/explain/<slug>.json are still
written by hand; after writing the explain JSON run `python3 scripts/gen_explain.py <slug>`.
Nc                óÊ   € V'       d   RMRpVP                  R4      ;'       g    RpR\        P                  ! V 4       RV R\        P                  ! V4       RV R	V R
V R2# )zWThe page skeleton every demo shares; nav and explain panel are filled in by generators.z-
    <link rel="stylesheet" href="style.css">Ú Ú
z2        <p id="perf-info" class="status-line"></p>z°<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
    <title>u�    â€” Rust + WebAssembly</title>
    <link rel="stylesheet" href="../style.css">
    <link rel="stylesheet" href="../explain.css">z’
    <script src="../nav.js" defer></script>
</head>
<body class="has-nav">
    <nav class="top-nav"></nav>

    <div id="container">
        <h1>z"</h1>
        <p class="subtitle">z</p>

z'

        <p class="help">
            z‰
        </p>
        <details class="explain"></details>
    </div>

    <script type="module" src="index.js"></script>
</body>
</html>
)ÚrstripÚhtmlÚescape)ÚtitleÚh1ÚsubtitleÚbodyÚ	help_htmlÚown_cssÚcsss   &&&&&& Ú(/work/data/stt/webtt/scripts/new_demo.pyÚ	page_htmlr      s‡   € ç>EÑ
:È2€CØ�;‰;�tÓ×TÐTÐ T€Dðô
 �KŠK˜ÓÐð  2à25°ð 7ô �[Š[˜‹_Ðð Ø%˜Jð 'à€ð ð ˆKð ð)ð ó    c                ó|  € \         P                  ! R\         P                  ! V4       R2V \         P                  4      pV'       g   \	        RV 24      hV P                  RVP                  4       4      pRV R2WP                  4       V 9   d   \	        V RV 24      hRV RV R	2pV R
V V,           WR
 ,           # )zPReturn gen_nav.py source with (slug, name) appended to the category's demo list.z^    \('z', zunknown category: z    ]),
z('z is already in z
        ('z', 'z'),
N)ÚreÚsearchr   ÚMÚ
ValueErrorÚindexÚendÚstart)ÚsourceÚcategoryÚslugÚnamer   r   Úentrys   &&&&   r   Úadd_to_categoriesr   :   s¶   € ä�IŠI˜¤"§)¢)¨HÓ"5Ð!6°cÐ:¸FÄBÇDÁDÓI€EßÜÐ-¨h¨ZÐ8Ó9Ð9Ø
�,‰,�{ E§I¡I£KÓ
0€CØ	ˆDˆ6�€~˜§¡£¨cÐ2Ô2Ü˜D˜6 °°
Ð;Ó<Ð<Ø˜˜˜d 4 &¨Ð.€EØ�$�3ˆ<˜%Õ &¨ ,Õ.Ð.r   c	                óð  € RV R2V 9   d   \        V R24      hRV RV R\        P                  ! V4       R\        P                  ! V4       R\        P                  ! V4       R	2p	\        P                  ! R
V R2V \        P
                  4      p
V
'       d;   V RV
P                  ^4       R,           V	,           W
P                  ^4      R ,           # RV RV RV RV RV RV	 R2p\        \        P                  ! RV \        P                  4      4      pV'       g   \        R4      hV RVR,          P                  4        R,           V,           R,           WR,          P                  4       R ,           # )zŽReturn the home page with a card for the demo in its category's section
(creating the section after the previous existing category if needed).zhref="z/"z already has a cardz            <a href="z8/" class="card">
                <div class="card-icon">z</div>
                <h3>z</h3>
                <p>z,</p>
                <span class="card-tag">z</span>
            </a>z&(        <section class="cat" id="cat-zM".*?<div class="card-grid">\n)(.*?)(\n            </div>\n        </section>)Nz

z%        <section class="cat" id="cat-z" aria-labelledby="cat-z3-title">
            <h2 class="cat-title" id="cat-z-title">z<small>z2</small></h2>
            <div class="card-grid">
z&
            </div>
        </section>z^        </section>\nz"home page has no category sectionsr   éÿÿÿÿ)
r   r   r   r   r   ÚSr   ÚlistÚfinditerr   )Úhomer   ÚlabelÚdescriptionr   Úiconr   ÚdescÚtagÚcardÚmÚsectionÚlasts   &&&&&&&&&    r   Úadd_cardr/   F   s™  € ð 
�ˆv�RÐ˜DÔ Ü˜D˜6Ð!4Ð5Ó6Ð6Ø$ T Fð +(Ø(, vð .Ü—[’[ Ó'Ð(ð )Ü—K’K Ó%Ð&ð '(Ü(,¯ª°CÓ(8Ð'9ð :ð	€Dô 	�	Š	Ð;¸H¸:ð  FSð  Tð  VZô  \^÷  \`ñ  \`ó  	a€AßØ�I�Q—U‘U˜1“Xˆ Õ'¨$Õ.°·e±e¸A³h°i°Õ@Ð@Ø7¸°zÐAXÐYaÐXbð c+Ø+3¨*°H¸U¸GÀ7È;È-ð Xà€ð ð€Gô ”—’Ð4°d¼B¿D¹DÓAÓB€DßÜÐ=Ó>Ð>Ø���b•—‘“Ð  4Õ'¨'Õ1°DÕ8¸4ÀRÅÇÁÃÀÐ;PÕPÐPr   c                  óò   € \         P                  P                  R \        R,          R,          4      p \         P                  P	                  V 4      pV P
                  P                  V4       VP                  # )Úgen_navÚscriptsú
gen_nav.py)Ú	importlibÚutilÚspec_from_file_locationÚROOTÚmodule_from_specÚloaderÚexec_moduleÚ
CATEGORIES)ÚspecÚmods     r   Úload_categoriesr>   `   sS   € Ü�>‰>×1Ñ1°)¼TÀIÕ=MÐP\Õ=\Ó]€DÜ
�.‰.×
)Ñ
)¨$Ó
/€CØ‡K�K×Ñ˜CÔ Ø�>‰>Ðr   c                  óú	  € \         P                  ! \        \         P                  R 7      p V P	                  R4       V P	                  R4       V P	                  RRRR7       V P	                  RRR7       V P	                  R	RR
R7       V P	                  RRR7       V P	                  RRRR7       V P	                  RRRR7       V P	                  RRR7       V P	                  RRR7       V P	                  RRR7       V P	                  RRRR7       V P                  4       p\        P                  ! RVP                  4      '       g   \        P                  ! R4       \        4        UUUUu/ uF
  w  r#rEW#V3bK  	  pppppVP                  V9  d7   \        P                  ! RVP                  : RRP                  V4       24       \        R,          VP                  ,          pVR,          P                  4       '       d   \        P                  ! V R 24       \        R!,          R",          \        R,          R,          r˜ \!        VP#                  R#R$7      VP                  VP                  VP$                  4      p
WaP                  ,          w  r4\'        V	P#                  R#R$7      VP                  W4VP                  VP(                  VP*                  VP,                  VP.                  4	      pVP4                  '       d1   \6        P8                  ! VP4                  4      P#                  R#R$7      MR&pVP;                  RR'7       VR,          P=                  \?        VP*                  VP@                  ;'       g    VP*                  VPB                  WÑPD                  VPF                  4      R#R$7       VPF                  '       d)   VR(,          P=                  R)VP                   R*2R#R$7       VP=                  X
R#R$7       V	P=                  XR#R$7       \H        PJ                  ! \        PL                  \3        V4      .R\H        PN                  R+7       \Q        R,VP                   R-VP                   R.24       \Q        R/VP                   R0VP                   R1VP                   R2VP                   R32	4       R%# u uppppi   \0         d+   p\        P                  ! \3        T4      4        R%p?ELR%p?ii ; i)4)r'   Úformatter_classr   r   z--nameTzshort name for the top nav)ÚrequiredÚhelpz--icon)rA   z--titlez$page title, also the home card titlez--h1zpage heading (default: --title))rB   z
--subtitlezHTML allowedz--help-htmlz--card-descz--tagz--bodyz/file with the page body HTML (8-space indented)z--cssÚ
store_truez also create www/<slug>/style.css)ÚactionrB   z[a-z0-9]+(-[a-z0-9]+)*z*slug must be lowercase words joined by "-"zunknown category z
; one of: z, Úwwwz
index.htmlz/index.html already existsr2   r3   zutf-8)ÚencodingNr   )Úparentsz	style.cssz/* z	 demo */
)ÚcheckÚstdoutzcreated www/u   / Â· added to u     Â· home card Â· nav regeneratedznext: crates/Ú/z/, www/z/index.js, scripts/explain/z.json))ÚargparseÚArgumentParserÚ__doc__ÚRawDescriptionHelpFormatterÚadd_argumentÚ
parse_argsr   Ú	fullmatchr   ÚsysÚexitr>   r   Újoinr7   Úexistsr   Ú	read_textr   r/   r(   r   Ú	card_descr*   r   Ústrr   ÚpathlibÚPathÚmkdirÚ
write_textr   r	   r
   r   r   Ú
subprocessÚrunÚ
executableÚDEVNULLÚprint)ÚapÚaÚkeyr&   r)   Ú_Ú
categoriesÚpage_dirÚnav_pathÚ	home_pathÚnav_srcr%   Úer   s                 r   Úmainrl   g   sË  € Ü	×	 Ò	 ¬WÄh×FjÑFjÔ	k€BØ‡O�O�JÔØ‡O�O�FÔØ‡O�O�H tÐ2N€OÔOØ‡O�O�H t€OÔ,Ø‡O�O�I¨Ð3Y€OÔZØ‡O�O�FÐ!B€OÔCØ‡O�O�L¨4°n€OÔEØ‡O�O�M¨D°~€OÔFØ‡O�O�M¨D€OÔ1Ø‡O�O�G d€OÔ+Ø‡O�O�HÐ#T€OÔUØ‡O�O�G LÐ7Y€OÔZØ
�‰‹€Aä�<Š<Ð1°1·6±6×:Ò:Ü�ŠÐ=Ô>Ü@OÔ@QÖRÑ@QÑ)<¨°T�#˜t�}Ò$Ñ@Q€JÓRØ‡z�z˜Ô#Ü�ŠÐ$ Q§Z¡Z¡N°*¸T¿Y¹YÀzÓ=RÐ<SÐTÔUÜ�e�|˜aŸf™fÕ$€HØ�<Õ×'Ñ'×)Ò)Ü�Š�H�:Ð7Ð8Ô9ô  Õ*¨\Õ9¼4À%½<È,Õ;VˆiðÜ# H×$6Ñ$6ÀÐ$6Ó$HÈ!Ï*É*ÐVW×V\ÑV\Ð^_×^dÑ^dÓeˆØ §¡Õ,‰ˆÜ˜	×+Ñ+°WÐ+Ó=¸q¿z¹zÈ5ØŸ™ §¡¨¯©°·±¸a¿e¹eóEˆð @A¿v¿v¸vŒ7�<Š<˜Ÿ™Ó×)Ñ)°7Ð)Ô;È2€Dà‡N�N˜4€NÔ Ø�Õ×(Ñ(¬°1·7±7¸A¿D¹D¿O¸OÀAÇGÁGÈQÏZÉZÐY]×_jÑ_jÐlm×lqÑlqÓ)rð  ~EÐ(ô  FØ‡u‡u€uØ	�KÕ	×+Ñ+¨c°!·&±&°¸Ð,DÈwÐ+ÔWØ×Ñ˜¨'ÐÔ2Ø×Ñ˜¨ÐÔ0Ü‡N‚N”C—N‘N¤C¨£MÐ2¸$Äz×GYÑGYÕZÜ	ˆL˜Ÿ™˜ ¨q¯z©z¨lÐ:ZÐ
[Ô\Ü	ˆM˜!Ÿ*™*˜ Q q§v¡v h¨g°a·f±f°XÐ=XÐYZ×Y_ÑY_ÐX`Ð`eÐ
fÖgùõ5 Søô ô Ü�Š”�Q“×Òûðús   Å,R=
ÉB.S ÓS:ÓS5Ó5S:Ú__main__)rM   rK   r   Úimportlib.utilr4   rY   r   r]   rR   rZ   Ú__file__ÚresolveÚparentr7   r   r   r/   r>   rl   Ú__name__© r   r   Ú<module>rt      su   ðñ
ó Û Û Û Û 	Û Û 
à‡|‚|�HÓ×%Ñ%Ó'×.Ñ.×5Ñ5€ò òF	/òQò4ò,hð^ ˆzÔÙ†Fñ r   