ó
    ›ökj£"  ã                  óÜ   • S r SSKJr  SSKJr  SSKJr  SSKJr  SSK	J
r
JrJr  SS	KJrJr  SS
KJr  SSKJr  SSKrSSKJrJrJr  \(       a  SSKJr   " S S\5      r " S S\5      rS rg)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                  ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )ÚFencedCodeExtensioné&   c                ó>   >• SSS/0U l          [        TU ]  " S0 UD6  g )NÚlang_prefixú	language-z6Prefix prepended to the language. Default: "language-"© )ÚconfigÚsuperÚ__init__)ÚselfÚkwargsÚ	__class__s     €Ú­C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\markdown/extensions/fenced_code.pyr   ÚFencedCodeExtension.__init__'   s,   ø€ à˜KÐ)aÐbð
ˆŒð 	/Ü‰ÒÑ"˜6Ó"ó    c                óŽ   • UR                  U 5        UR                  R                  [        XR	                  5       5      SS5        g)a"  
Register the processor.

| Class Instance                                                              | Registry                                                         | Name   | Priority |
| --------------------------------------------------------------------------- | ---------------------------------------------------------------- | ------ | :------: |
| [`FencedBlockPreprocessor`][markdown.extensions.fenced_code.FencedBlockPreprocessor] | [`blockprocessors`][markdown.blockprocessors.build_block_parser] | `fenced_code_block` | `25` |

Úfenced_code_blocké   N)ÚregisterExtensionÚpreprocessorsÚregisterÚFencedBlockPreprocessorÚ
getConfigs)r   Úmds     r"   ÚextendMarkdownÚ"FencedCodeExtension.extendMarkdown.   s9   € ð 	×Ñ˜TÔ"à
×Ñ×!Ñ!Ô"9¸"¿o¹oÓ>OÓ"PÐReÐgiÕjr$   )r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r.   Ú__static_attributes__Ú__classcell__©r!   s   @r"   r   r   &   s   ø† õ#÷kð kr$   r   c                  óÈ   ^ • \ rS rSrSr\R                  " \" S5      \R                  \R                  -  \R                  -  5      rS	U 4S jjrS
S jrSS jrSS jrSrU =r$ )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                ól   >• [         TU ]  U5        X l        SU l        0 U l        SU l        / SQU l        g )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   Ú FencedBlockPreprocessor.__init__M   s7   ø€ Ü‰Ñ˜ÔØŒØ %ˆÔØ/1ˆÔØ"ˆÔò
ˆÕr$   c           	     óÜ  • U R                   (       dl  U R                  R                   HK  n[        U[        5      (       a  UR                  5       U l        [        U[        5      (       d  MD  SU l        MM     SU l         SR                  U5      nSn U R                  R                  X45      nU(       Ga$  SS/ 0 4u  pgp‰UR                  S5      (       al  [        UR                  S5      5      u  p«U(       a  UR                  S5      nMy  U R                  U
5      u  pxn	[!        U5      (       a  UR#                  S5      nOZUR                  S5      (       a  UR                  S5      nUR                  S	5      (       a  [%        UR                  S	5      5      U	S	'   U R                  (       aÂ  U R                  S
   (       a®  U	R'                  S
S5      (       a—  U R                  R)                  5       nUR+                  U	5        U(       a'  SR-                  SR                  U5      US   5      US'   [/        UR                  S5      4UUR#                  SS5      S.UD6nUR1                  SS9nOüS=n=n=nnU(       a-  U R2                  R'                  SS5      nSU [5        U5       S3nU(       a  S[5        SR                  U5      5       S3nU(       a  S[5        U5       S3nU R                  (       aD  U	(       a=  U	R'                  S
S5      (       d&  SR                  S U	R7                  5        5       5      nU R9                  UR                  S5      5      nSU U SU U SU S3	nU R                  R:                  R=                  U5      nUSUR?                  5         SU SX5R                  5       S  3nUR?                  5       S-   [!        U5      -   nOOGMK  URA                  S5      $ )z7Match and store Fenced Code Blocks in the `HtmlStash`. TÚ
r   r   NÚ ÚattrsÚlangÚhl_linesr=   z{} {}Ú Ú	css_classÚcodeÚpygments_styleÚdefault)rG   ÚstyleF)Úshebangr   r   z class="Ú"z id="c              3  óZ   #   • U  H!  u  pUS :w  d  M  SU S[        U5       S3v •  M#     g7f)r=   rI   z="rP   Nr   )Ú.0ÚkÚvs      r"   Ú	<genexpr>Ú.FencedBlockPreprocessor.run.<locals>.<genexpr>Ÿ   s7   é € ð +ÚKYÁ4À1Ð]^ÐbpÑ]pÓ>˜a ˜s "Ô%8¸Ó%;Ð$<¸AÕ>Ê>ùs   ‚+’+z<prez><codeÚ>z</code></pre>)!r>   r-   ÚregisteredExtensionsÚ
isinstancer
   r,   r?   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ÚmrG   ÚidÚclassesr   rF   Ú	remainderÚlocal_configÚ	highliterrK   Úid_attrÚ	lang_attrÚ
class_attrÚkv_pairsÚprefixÚplaceholders                        r"   ÚrunÚFencedBlockPreprocessor.run[   sˆ  € ð ×$×$Ø—w‘w×3Ô3�Ü˜cÔ#6×7Ñ7Ø+.¯>©>Ó+;�DÔ(Ü˜cÔ#4×5Ó5Ø)-�DÖ&ñ	 4ð %)ˆDÔ!à�y‰y˜ÓˆØˆØØ×$Ñ$×+Ñ+¨DÓ8ˆAßØ,0°"°b¸"Ð,<Ñ)�˜'Ø—7‘7˜7×#Ñ#Ü'>¸q¿w¹wÀwÓ?OÓ'PÑ$�EÞ Ø !§¡ 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Ñ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                óà   • Sn/ n0 nU H_  u  pVUS:X  a  UnM  US:X  a  UR                  U5        M(  US:X  a  [        U5      XE'   M=  XPR                  ;   a  [        USSS9XE'   M[  XdU'   Ma     X#U4$ )z5Return tuple: `(id, [list, of, classes], {configs})` rE   rr   Ú.rH   FT)Úfail_on_errorsÚpreserve_none)Úappendr   rA   r   )r   rF   rr   rs   ÚconfigsrS   rT   s          r"   r_   Ú$FencedBlockPreprocessor.handle_attrs­   s€   € àˆØˆØˆÛ‰DˆAØ�D‹yØ’Ø�c“Ø—‘˜qÖ!Ø�j“Ü+¨AÓ.�“
Ø×'Ñ'Ó'Ü+¨A¸eÐSWÑX�“
à˜“
ñ ð ˜GÐ#Ð#r$   c                ó–   • UR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  SS5      nU$ )	zbasic html escaping Ú&z&amp;Ú<z&lt;rW   z&gt;rP   z&quot;)Úreplace)r   Útxts     r"   rh   ÚFencedBlockPreprocessor._escape¿   sG   € à�k‰k˜#˜wÓ'ˆØ�k‰k˜#˜vÓ&ˆØ�k‰k˜#˜vÓ&ˆØ�k‰k˜#˜xÓ(ˆØˆ
r$   )rA   r>   r?   r   r@   )r-   r   r   zdict[str, Any])rm   ú	list[str]ÚreturnrŒ   )rF   zIterable[tuple[str, str]]r�   z%tuple[str, list[str], dict[str, Any]])rŠ   Ústrr�   rŽ   )r0   r1   r2   r3   Ú__doc__ÚreÚcompiler   Ú	MULTILINEÚDOTALLÚVERBOSEr[   r   r}   r_   rh   r4   r5   r6   s   @r"   r+   r+   =   sW   ø† Ù0à—j’jÙð ó 	ð 	�‰�r—y‘yÑ  2§:¡:Ñ-ó€O÷
ôP ôd$÷$ò r$   r+   c                 ó   • [        S0 U D6$ )Nr   )r   )r    s    r"   ÚmakeExtensionr–   È   s   € ÜÑ( Ñ(Ð(r$   )r�   Ú
__future__r   Útextwrapr   rE   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$   