Ë
    Ájo   ã                  óÒ   — 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ddlmZmZmZ erddlm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_and_remainderÚAttrListExtension)ÚparseBoolValue©Ú_escape_attrib_htmlN)ÚTYPE_CHECKINGÚAnyÚIterable)ÚMarkdownc                  ó$   ‡ — 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     €úR/var/www/html/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
dˆ fd„Zdd„Zd	d„Zd
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__E   s9   ø€ Ü‰Ñ˜ÔØˆŒØ %ˆÔØ/1ˆÔØ"ˆÔò
ˆÕr"   c           	     ó&  — | j                   s_| j                  j                  D ]?  }t        |t        «      r|j                  «       | _        t        |t        «      sŒ9d| _        ŒA d| _         dj                  |«      }d}	 | j                  j                  ||«      }|�ràddg i f\  }}}}	|j                  d«      rct        |j                  d«      «      \  }
}|r|j                  d«      }Œm| j                  |
«      \  }}}	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œ|¤Ž}|j1                  d¬«      }nÞdx}x}x}}|r-| j2                  j'                  dd«      }d|› t5        |«      › d�}|rdt5        dj                  |«      «      › d�}|rdt5        |«      › d�}| j                  r:|	r8|	j'                  d
d«      s&dj                  d„ |	j7                  «       D «       «      }| j9                  |j                  d«      «      }d|› |› d|› |› d|› d�	}| j                  j:                  j=                  |«      }|d|j?                  «        › d|› d||j                  «       d › �}|j?                  «       dz   t!        |«      z   }nn�Œ|jA                  d«      S )z8 Match and store Fenced Code Blocks in the `HtmlStash`. TÚ
r   r   NÚ ÚattrsÚlangÚhl_linesr7   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)r7   rB   z="rI   Nr   )Ú.0ÚkÚvs      r!   Ú	<genexpr>z.FencedBlockPreprocessor.run.<locals>.<genexpr>—   s7   è ø€ ð +ÙKYÁ4À1ÀaÐ]^ÐbpÓ]p˜a ˜s "Ô%8¸Ó%;Ð$<¸AÔ>É>ùs   ‚'�'z<prez><codeÚ>z</code></pre>)!r8   r+   ÚregisteredExtensionsÚ
isinstancer
   r*   r9   r   r:   ÚjoinÚFENCED_BLOCK_REÚsearchÚgroupr   ÚendÚhandle_attrsÚlenÚpopr   ÚgetÚcopyÚupdateÚformatr	   Úhiliter   r   ÚitemsÚ_escapeÚ	htmlStashÚstoreÚstartÚsplit)r   ÚlinesÚextÚtextÚindexÚmr@   ÚidÚclassesr   r?   Ú	remainderÚlocal_configÚ	highliterrD   Úid_attrÚ	lang_attrÚ
class_attrÚkv_pairsÚprefixÚplaceholders                        r!   ÚrunzFencedBlockPreprocessor.runS   s}  € ð ×$Ò$Ø—w‘w×3Ô3�Ü˜cÔ#6Ô7Ø+.¯>©>Ó+;�DÔ(Ü˜cÔ#4Õ5Ø)-�DÕ&ð	 4ð %)ˆDÔ!à�y‰y˜ÓˆØˆØØ×$Ñ$×+Ñ+¨D°%Ó8ˆAÚØ,0°"°b¸"Ð,<Ñ)��b˜' 6Ø—7‘7˜7Ô#Ü'>¸q¿w¹wÀwÓ?OÓ'PÑ$�E˜9Ù Ø !§¡ g£˜Ø Ø*.×*;Ñ*;¸EÓ*BÑ'�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�àŸ™›	 A™¬¨KÓ(8Ñ8‘àñA ðB �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>   rj   Ú.rA   FT)Úfail_on_errorsÚpreserve_none)Úappendr   r;   r   )r   r?   rj   rk   ÚconfigsrL   rM   s          r!   rW   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;rO   z&gt;rI   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   zdict[str, Any])re   ú	list[str]Úreturnr�   )r?   zIterable[tuple[str, str]]r‚   z%tuple[str, list[str], dict[str, Any]])r€   Ústrr‚   rƒ   )r-   r.   r/   Ú__doc__ÚreÚcompiler   Ú	MULTILINEÚDOTALLÚVERBOSErS   r   ru   rW   r`   r0   r1   s   @r!   r)   r)   5   sT   ø„ Ù0à �b—j‘jÙð ó 	ð 	�‰�r—y‘yÑ  2§:¡:Ñ-ó€Oõ
óP ód$÷$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…   Útypingr   r   r   Úmarkdownr   r   r)   r‹   r   r"   r!   Ú<module>r”      sX   ðñõ #å Ý Ý (ß GÑ Gß AÝ !Ý -Û 	ß /Ñ /áÝ!ôk˜)ô kôH˜lô HóV)r"   