§
    ²+Ûj
  ã                   óæ  — d Z ddlZ ej        d¦  «        Z ej        d¦  «        Zd„ Zd„ Zd„ Zd„ Zd	„ Z	d
„ Z
d„ Zedk    r¯ddlZej        d         ej        d         cZZ eed¬¦  «        5 Ze                     ¦   «         Zddd¦  «         n# 1 swxY w Y    eedd¬¦  «        5 Ze                      ee¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y    ede› de› �¦  «         dS dS )u‰  am åŽŸç”Ÿ md è§„æ•´å™¨ â€”â€” æŠŠå¼•æ“Žå¤�ç›˜ md å�˜æˆ� am èƒ½æ­£ç¡®è½¬ HTML çš„å†™æ³•ï¼ˆå�ªæ”¹ç‰ˆå¼�ï¼Œä¸�æ”¹å†…å®¹ï¼‰

2026-10-21 ç”¨æˆ·è¦�æ±‚: å¤�ç›˜ md çš„ç‰ˆå¼�å¿…é¡»ç¬¦å�ˆ answer-me-with-html çš„ mdâ†’html è§„èŒƒã€‚
æ—§ md çš„ä¸‰ä¸ªç—…:
  1. `## æ¨¡å�— 1:æ¶ˆæ�¯é�¢ä¸Žé©±åŠ¨å½’å› ` â€”â€” am è‡ªåŠ¨å�‘ A/B/C é�¢æ�¿å¾½æ ‡ï¼Œæ ‡é¢˜å†�å¸¦ã€Œæ¨¡å�— N:ã€�= å�Œç¼–å�·
  2. `#### æ¶ˆæ�¯é�¢` â€”â€” am é�¢æ�¿å†…å°�æ ‡é¢˜å�ªè®¤ `###`ï¼Œ`####` æ˜¯æ®‹ç•™åœ¨æ­£æ–‡é‡Œçš„å­¤å„¿çº§
  3. é¡¶éƒ¨ `å¤�ç›˜æ‘˜è¦�:` è£¸æ ‡ç­¾ + ç¼–å�·åˆ—è¡¨ â€”â€” am æŠŠå®ƒå½“ intro é‡Œçš„ä¸€æ®µæ­»æ–‡å­—ï¼Œæ²¡æœ‰å�¡ç‰‡
  4. æ­£æ–‡ `---` åˆ†éš”çº¿ â€”â€” ä¼šè¢«å½“æˆ� frontmatter è¾¹ç•Œï¼Œæ¡¥æŽ¥å±‚å�ªèƒ½åˆ æŽ‰

è§„æ•´è§„åˆ™ï¼ˆå¹‚ç­‰ï¼‰:
  - `## æ¨¡å�— N:æ ‡é¢˜` â†’ `## æ ‡é¢˜`
  - `#### xxx` â†’ `### xxx`
  - åˆ é™¤ç‹¬ç«‹çš„ `---` è¡Œ
  - æ­£æ–‡é¦–æ®µ `å¤�ç›˜æ‘˜è¦�:` + ç¼–å�·åˆ—è¡¨ â†’ ```callout info å¤�ç›˜æ‘˜è¦�``` + `- ` åˆ—è¡¨
é    Nu'   ^##\s*æ¨¡å�—\s*\d+\s*[:ï¼š]\s*(.+?)\s*$u   ^\s*\d+\s*[.ã€�ï¼Ž]\s*(.+?)\s*$c                 ó¦   — g }| D ]K}t                                |¦  «        }|                     |rd|                     d¦  «        › �n|¦  «         ŒL|S )Nú## é   )Ú
_MODULE_REÚmatchÚappendÚgroup)ÚlinesÚoutÚlnÚms       ú/root/web_reports/am_md_norm.pyÚ_strip_module_numbersr      s`   € Ø
€CØð 4ð 4ˆÝ×Ò˜RÑ Ô ˆØ�
Š
¨Ð2Ð%˜Ÿš ™œÐ%Ð%Ð%°Ñ3Ô3Ð3Ð3Ø€Jó    c                 ó   — d„ | D ¦   «         S )Nc                 ó:   — g | ]}t          j        d d|¦  «        ‘ŒS )z^####\s+z### )ÚreÚsub©Ú.0r   s     r   ú
<listcomp>z_demote_h4.<locals>.<listcomp>!   s&   € Ð<Ð<Ð<°�BŒF�; ¨Ñ+Ô+Ð<Ð<Ð<r   © ©r
   s    r   Ú
_demote_h4r       s   € Ø<Ð<°eÐ<Ñ<Ô<Ð<r   c                 ó   — d„ | D ¦   «         S )Nc                 óF   — g | ]}|                      ¦   «         d k    rdn|‘ŒS )z---Ú )Ústripr   s     r   r   z_drop_rules.<locals>.<listcomp>%   s.   € Ð>Ð>Ð>°"�"—(’(‘*”* Ò%Ð%ˆBˆB¨2Ð>Ð>Ð>r   r   r   s    r   Ú_drop_rulesr   $   s   € Ø>Ð>¸Ð>Ñ>Ô>Ð>r   c                 óÈ  — t          d„ t          | ¦  «        D ¦   «         t          | ¦  «        ¦  «        }| d|…         }t          d„ t          |¦  «        D ¦   «         d¦  «        }|€| S g g }}||dz   d…         D ]±}|                     ¦   «         }|sŒt                               |¦  «        }|r)|                     |                     d¦  «        ¦  «         Œ^|                     d¦  «        r|                     |¦  «         Œ‰|r|d         › d|› �|d<   Œœ|                     |¦  «         Œ²|s| S dgd	„ |D ¦   «         z   d
gz   }	|d|…         |	z   dgz   |z   | |d…         z   S )u]   æ­£æ–‡é¦–æ®µï¼ˆç¬¬ä¸€ä¸ª ## ä¹‹å‰�ï¼‰çš„ `å¤�ç›˜æ‘˜è¦�:` + ç¼–å�·åˆ—è¡¨ â†’ callout å�¡ç‰‡ã€‚c              3   óJ   K  — | ]\  }}|                      d ¦  «        ¯|V — ŒdS )r   N)Ú
startswith©r   Úir   s      r   ú	<genexpr>z&_summary_to_callout.<locals>.<genexpr>*   s7   è è € ÐPÐP™e˜a ¸2¿=º=ÈÑ;OÔ;OÐP˜ÐPÐPÐPÐPÐPÐPr   Nc              3   óš   K  — | ]F\  }}|                      ¦   «         d v s't          j        d|                      ¦   «         ¦  «        ¯B|V — ŒGdS ))u   å¤�ç›˜æ‘˜è¦�:u   å¤�ç›˜æ‘˜è¦�ï¼šu    ^\*\*å¤�ç›˜æ‘˜è¦�\*\*\s*[:ï¼š]?$N)r   r   r   r#   s      r   r%   z&_summary_to_callout.<locals>.<genexpr>,   sg   è è € ð Pð P™˜˜2Ø—X’X‘Z”ZÐ#GÐGÐGÝ”XÐAÀ2Ç8Â8Á:Ä:ÑNÔNð Hð ØGÐGÐGÐGðPð Pr   r   )ú#ú|ú>ú```éÿÿÿÿú u   ```callout info å¤�ç›˜æ‘˜è¦�c                 ó   — g | ]}d |› �‘ŒS )z- r   )r   Úbs     r   r   z'_summary_to_callout.<locals>.<listcomp>E   s   € Ð/JÐ/JÐ/J¸Q°°Q°°Ð/JÐ/JÐ/Jr   r*   r   )	ÚnextÚ	enumerateÚlenr   Ú_NUM_ITEM_REr   r   r	   r"   )
r
   Úfirst_panelÚheadÚstartÚbulletsÚtailr   Úsr   Úblocks
             r   Ú_summary_to_calloutr:   (   s»  € åÐPÐP¥y°Ñ'7Ô'7ÐPÑPÔPÕRUÐV[ÑR\ÔR\Ñ]Ô]€KØ��+�Ô€DÝð Pð P¥¨4¡¤ð Pñ Pô PàQUñWô W€Eð €}Øˆà˜ˆT€GØ�5˜1‘9�:�:Ôð ð ˆØ�HŠH‰JŒJˆØð 	ØÝ×Ò˜qÑ!Ô!ˆØð 	Ø�NŠN˜1Ÿ7š7 1™:œ:Ñ&Ô&Ð&ØØ�<Š<Ð.Ñ/Ô/ð 	Ø�KŠK˜‰OŒOˆOØØð 	Ø$ Rœ[Ð.Ð.¨1Ð.Ð.ˆG�B‰KˆKà�NŠN˜1ÑÔÐÐØð Øˆà+Ð,Ð/JÐ/JÀ'Ð/JÑ/JÔ/JÑJÈeÈWÑT€EØ���Œ<˜%Ñ 2 $Ñ&¨Ñ-°°k°l°lÔ0CÑCÐCr   c                 ó†   — d                      | ¦  «        }t          j        dd|¦  «        }|                     ¦   «         dz   S )Nú
z\n{3,}z

)Újoinr   r   r   )r
   Útexts     r   Ú_tidy_blankr?   I   s9   € Ø�9Š9�UÑÔ€DÝŒ6�)˜V TÑ*Ô*€DØ�:Š:‰<Œ<˜$ÑÐr   c                 óJ  — 	 ddl }ddl}|j                             d|j                             |j                             t          ¦  «        ¦  «        ¦  «         ddl}|                     | ¦  «        S # t          $ r%}t          d|› �|j        ¬¦  «         | cY d}~S d}~ww xY w)ue   æ–‡å­—å±‚ STE è§„æ•´ï¼ˆé•¿å�¥æ‹†çŸ­ã€�ç¼–å�·æ­¥éª¤â†’åˆ—è¡¨ã€�è¯�çº§è§„æ•´ï¼‰ã€‚è§� am_ste_norm.pyã€‚r   Nz[am_md_norm] ste pass skipped: )Úfile)ÚosÚsysÚpathÚinsertÚdirnameÚabspathÚ__file__Úam_ste_normÚ	normalizeÚ	ExceptionÚprintÚstderr)r>   rB   rC   rI   Úexcs        r   Ú	_ste_passrO   O   s·   € ðØˆ	ˆ	ˆ	Øˆ
ˆ
ˆ
ØŒ�Š˜˜2œ7Ÿ?š?¨2¬7¯?ª?½8Ñ+DÔ+DÑEÔEÑFÔFÐFØÐÐÐØ×$Ò$ TÑ*Ô*Ð*øÝð ð ð ÝÐ5°Ð5Ð5¸C¼JÐGÑGÔGÐGØˆˆˆˆˆˆøøøøðøøøs   ‚A0A3 Á3
B"Á=BÂB"ÂB"c                 óÜ   — |                       d¦  «        }t          |¦  «        }t          |¦  «        }t          |¦  «        }t	          |¦  «        }t          t          |¦  «        ¦  «        S )uD   md â†’ am åŽŸç”Ÿ mdï¼ˆå¹‚ç­‰ï¼‰ã€‚ç»“æž„è§„æ•´ + STE æ–‡å­—è§„æ•´ã€‚r<   )Úsplitr   r   r   r:   rO   r?   )r>   r
   s     r   Únormalize_mdrR   \   s]   € à�JŠJ�tÑÔ€EÝ! %Ñ(Ô(€EÝ�uÑÔ€EÝ˜ÑÔ€EÝ Ñ&Ô&€EÝ•[ Ñ'Ô'Ñ(Ô(Ð(r   Ú__main__r   é   zutf-8)ÚencodingÚwznormalized: z -> )Ú__doc__r   Úcompiler   r2   r   r   r   r:   r?   rO   rR   Ú__name__rC   ÚargvÚsrcÚdstÚopenÚfÚreadÚrawÚwriterL   r   r   r   ú<module>rb      s   ððð ð 
€	€	€	àˆRŒZÐBÑCÔC€
ØˆrŒzÐ<Ñ=Ô=€ðð ð ð=ð =ð =ð?ð ?ð ?ðDð Dð DðBð ð ð
ð 
ð 
ð)ð )ð )ð ˆzÒÐØ€J€J€JØŒx˜Œ{˜CœH QœK€H€CˆØ	ˆˆc˜GÐ	$Ñ	$Ô	$ð ¨Ø�fŠf‰hŒhˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð à	ˆˆc�3 Ð	)Ñ	)Ô	)ð #¨QØ	�Š��˜SÑ!Ô!Ñ"Ô"Ð"ð#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #à	€EÐ
'˜Ð
'Ð
' #Ð
'Ð
'Ñ(Ô(Ð(Ð(Ð(ð Ðs$   Á.BÂBÂBÂ(CÃCÃC