Ë
    Ÿ2Úi~  ã                  ó®   — d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
mZmZ dd	lmZmZ dd
lmZ ddlmZ ddlZ G d„ de«      Z G d„ de«      Zd„ Zy)z£
This extension adds Fenced Code Blocks to Python-Markdown.

See the [documentation](https://Python-Markdown.github.io/extensions/fenced_code_blocks)
for details.
é    )Úannotations)Údedenté   )Ú	Extensioné   )ÚPreprocessor)Ú
CodeHiliteÚCodeHiliteExtensionÚparse_hl_lines)Ú	get_attrsÚAttrListExtension)ÚparseBoolValue©Ú_escape_attrib_htmlNc                  ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚFencedCodeExtensionc                ó<   •— dddgi| _         	 t        ‰| �  di |¤Ž y )NÚlang_prefixú	language-z6Prefix prepended to the language. Default: "language-"© )ÚconfigÚsuperÚ__init__)ÚselfÚkwargsÚ	__class__s     €úV/var/www/html/acx/venv/lib/python3.12/site-packages/markdown/extensions/fenced_code.pyr   zFencedCodeExtension.__init__#   s,   ø€ à˜KÐ)aÐbð
ˆŒð 	/Ü‰ÑÑ"˜6Ó"ó    c                ó�   — |j                  | «       |j                  j                  t        || j	                  «       «      dd«       y)z9 Add `FencedBlockPreprocessor` to the Markdown instance. Úfenced_code_blocké   N)ÚregisterExtensionÚpreprocessorsÚregisterÚFencedBlockPreprocessorÚ
getConfigs)r   Úmds     r   ÚextendMarkdownz"FencedCodeExtension.extendMarkdown*   s9   € à
×Ñ˜TÔ"à
×Ñ×!Ñ!Ô"9¸"¸d¿o¹oÓ>OÓ"PÐReÐgiÕjr   )Ú__name__Ú
__module__Ú__qualname__r   r(   Ú__classcell__©r   s   @r   r   r   "   s   ø„ ô#ökr   r   c                  ó®   ‡ — e Zd ZdZ ej
                   ed«      ej                  ej                  z  ej                  z  «      Z
ˆ fd„Zd„ Zd„ Zd„ Zˆ xZS )r%   z& Find and extract fenced code blocks. a}  
            (?P<fence>^(?:~{3,}|`{3,}))[ ]*                          # opening fence
            ((\{(?P<attrs>[^\}\n]*)\})|                              # (optional {attrs} or
            (\.?(?P<lang>[\w#.+-]*)[ ]*)?                            # optional (.)lang
            (hl_lines=(?P<quot>"|')(?P<hl_lines>.*?)(?P=quot)[ ]*)?) # optional hl_lines)
            \n                                                       # newline (end of opening fence)
            (?P<code>.*?)(?<=\n)                                     # the code block
            (?P=fence)[ ]*$                                          # closing fence
        c                ón   •— t         ‰| �  |«       || _        d| _        i | _        d| _        g d¢| _        y )NF)ÚlinenumsÚ
guess_langÚ	noclassesÚuse_pygments)r   r   r   Úchecked_for_depsÚcodehilite_confÚuse_attr_listÚbool_options)r   r'   r   r   s      €r   r   z FencedBlockPreprocessor.__init__A   s9   ø€ Ü‰Ñ˜ÔØˆŒØ %ˆÔØ!ˆÔØ"ˆÔò
ˆÕr   c           	     ó°  — | j                   s_| j                  j                  D ]?  }t        |t        «      r|j                  «       | _        t        |t        «      sŒ9d| _        ŒA d| _         dj                  |«      }	 | j                  j                  |«      }|�r¨ddg i f\  }}}}|j                  d«      rJ| j                  t        |j                  d«      «      «      \  }}}t        |«      rb|j!                  d«      }nP|j                  d«      r|j                  d«      }|j                  d«      rt#        |j                  d«      «      |d<   | j                  r¶| j                  d	   r§|j%                  d	d«      r•| j                  j'                  «       }	|	j)                  |«       |r'd
j+                  dj                  |«      |	d   «      |	d<   t-        |j                  d«      f||	j!                  dd«      dœ|	¤Ž}
|
j/                  d¬«      }nÞdx}x}x}}|r-| j0                  j%                  dd«      }d|› t3        |«      › d�}|rdt3        dj                  |«      «      › d�}|rdt3        |«      › d�}| j                  r:|r8|j%                  d	d«      s&dj                  d„ |j5                  «       D «       «      }| j7                  |j                  d«      «      }d|› |› d|› |› d|› d�	}| j                  j8                  j;                  |«      }|d|j=                  «        › d|› d||j?                  «       d › �}nn�ŒÉ|jA                  d«      S )z8 Match and store Fenced Code Blocks in the `HtmlStash`. Tú
NÚ Úattrsr   ÚlangÚhl_linesr3   z{} {}ú Ú	css_classÚcodeÚpygments_styleÚdefault)r<   ÚstyleF)Úshebangr   r   z class="ú"z id="c              3  óR   K  — | ]  \  }}|d k7  sŒd|› dt        |«      › d�–— Œ! y­w)r3   r>   z="rE   Nr   )Ú.0ÚkÚvs      r   ú	<genexpr>z.FencedBlockPreprocessor.run.<locals>.<genexpr>Ž   s8   è ø€ ò +ÙCGÀ1ÀaÐ]^ÐbpÓ]p˜a ˜s "Ô%8¸Ó%;Ð$<¸AÔ>ñ+ùs   ‚'�'z<prez><codeú>z</code></pre>)!r4   r'   ÚregisteredExtensionsÚ
isinstancer
   r&   r5   r   r6   ÚjoinÚFENCED_BLOCK_REÚsearchÚgroupÚhandle_attrsr   ÚlenÚpopr   ÚgetÚcopyÚupdateÚformatr	   Úhiliter   r   ÚitemsÚ_escapeÚ	htmlStashÚstoreÚstartÚendÚsplit)r   ÚlinesÚextÚtextÚmr<   ÚidÚclassesr   Úlocal_configÚ	highliterr@   Úid_attrÚ	lang_attrÚ
class_attrÚkv_pairsÚprefixÚplaceholders                     r   ÚrunzFencedBlockPreprocessor.runO   sE  € ð ×$Ò$Ø—w‘w×3Ñ3ò .�Ü˜cÔ#6Ô7Ø+.¯>©>Ó+;�DÔ(Ü˜cÔ#4Õ5Ø)-�DÕ&ð	.ð %)ˆDÔ!à�y‰y˜ÓˆØØ×$Ñ$×+Ñ+¨DÓ1ˆAÚØ,0°"°b¸"Ð,<Ñ)��b˜' 6Ø—7‘7˜7Ô#Ø*.×*;Ñ*;¼IÀaÇgÁgÈgÓFVÓ<WÓ*XÑ'�B˜ Ü˜7”|Ø&Ÿ{™{¨1›~™à—w‘w˜v”Ø Ÿw™w v›˜Ø—w‘w˜zÔ*ä-;¸A¿G¹GÀJÓ<OÓ-P˜˜zÑ*ð ×'Ò'¨D×,@Ñ,@ÀÒ,PÐU[×U_ÑU_Ð`nÐptÔUuØ#'×#7Ñ#7×#<Ñ#<Ó#>�LØ ×'Ñ'¨Ô/ñ Ø4;·N±NØŸH™H WÓ-Ø(¨Ñ5ó5˜ [Ñ1ô !+ØŸ™ ›ð!à!Ø*×.Ñ.Ð/?ÀÓKñ!ð 'ñ	!�Ið %×+Ñ+°EÐ+Ó:‘DàBDÐD�GÐD˜iÐD¨*°xÙØ!%§¡§¡°ÀÓ!L˜Ø&.¨v¨hÔ7JÈ4Ó7PÐ6QÐQRÐ$S˜	ÙØ'/Ô0CÀCÇHÁHÈWÓDUÓ0VÐ/WÐWXÐ%Y˜
ÙØ$)Ô*=¸bÓ*AÐ)BÀ!Ð"D˜Ø×)Ò)©f¸V¿Z¹ZÈÐX]Ô=^ð $&§7¡7ñ +ØKQÏ<É<Ë>ô+ó $˜ð  Ÿ<™<¨¯©°«Ó8�DØ! ' ¨:¨,°f¸Y¸KÈÀzÐQRÐSWÐRXÐXeÐf�Dà"Ÿg™g×/Ñ/×5Ñ5°dÓ;�Ø˜z §¡£	Ð*Ð+¨2¨k¨]¸"¸TÀ!Ç%Á%Ã'À(¸^Ð<LÐM‘àñu ðv �z‰z˜$ÓÐr   c                óÜ   — d}g }i }|D ]]  \  }}|dk(  r|}Œ|dk(  r|j                  |«       Œ%|dk(  rt        |«      ||<   Œ9|| j                  v rt        |dd¬«      ||<   ŒY|||<   Œ_ |||fS )z6 Return tuple: `(id, [list, of, classes], {configs})` r:   re   ú.r=   FT)Úfail_on_errorsÚpreserve_none)Úappendr   r7   r   )r   r;   re   rf   ÚconfigsrH   rI   s          r   rR   z$FencedBlockPreprocessor.handle_attrsš   s‘   € àˆØˆØˆØò 
	‰DˆAˆqØ�DŠyØ‘Ø�c’Ø—‘˜qÕ!Ø�j’Ü+¨AÓ.�˜’
Ø�d×'Ñ'Ñ'Ü+¨A¸eÐSWÔX�˜’
à�˜’
ð
	ð �7˜GÐ#Ð#r   c                ó–   — |j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|S )	z basic html escaping ú&z&amp;ú<z&lt;rK   z&gt;rE   z&quot;)Úreplace)r   Útxts     r   r[   zFencedBlockPreprocessor._escape¬   sG   € à�k‰k˜#˜wÓ'ˆØ�k‰k˜#˜vÓ&ˆØ�k‰k˜#˜vÓ&ˆØ�k‰k˜#˜xÓ(ˆØˆ
r   )r)   r*   r+   Ú__doc__ÚreÚcompiler   Ú	MULTILINEÚDOTALLÚVERBOSErO   r   ro   rR   r[   r,   r-   s   @r   r%   r%   1   sT   ø„ Ù0à �b—j‘jÙð ó 	ð 	�‰�r—y‘yÑ  2§:¡:Ñ-ó€Oô
òI òV$ö$r   r%   c                 ó   — t        di | ¤ŽS )Nr   )r   )r   s    r   ÚmakeExtensionr‚   µ   s   € ÜÑ( Ñ(Ð(r   )r{   Ú
__future__r   Útextwrapr   r:   r   r#   r   Ú
codehiliter	   r
   r   Ú	attr_listr   r   Úutilr   Úserializersr   r|   r   r%   r‚   r   r   r   ú<module>r‰      sL   ðñõ #å Ý Ý (ß GÑ Gß 3Ý !Ý -Û 	ôk˜)ô kôA˜lô AóH)r   