
    ̆hl                         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     W/opt/services/DDDS/venv/lib/python3.13/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)z8Add `FencedBlockPreprocessor` to the Markdown instance. fenced_code_block   N)registerExtensionpreprocessorsregisterFencedBlockPreprocessor
getConfigs)r   mds     r"   extendMarkdown"FencedCodeExtension.extendMarkdown.   s7    
T"
!!"9"oo>O"PRegi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+   5   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__E   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  pgpUR                  S5      (       al  [        UR                  S5      5      u  pU(       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OS=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      +KY41]^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.runS   s    $$ww33c#677+.>>+;D(c#455)-D&	 4 %)D!yy$$++D8A,0"b",<)'777##'>qwww?O'P$E  !g *.*;*;E*B'B7||&{{1~wwv wwvwwz**-;AGGJ<O-Pz* ''D,@,@,PU[U_U_`nptUuUu#'#7#7#<#<#>L ''/ 4;NNHHW-(55[1 !+!!*../?K! '	!I %++E+:DBDDGDiD*x!%!L&.vh7J47P6QQR$S	'/0CCHHWDU0V/WWX%Y
$)*=b*A)B!"D))fVZZX]=^=^ $&77 +KQ<<>+ $  <<8D!':,fYKzQRSWRXXefD"gg//55d;z	*+2k]"T%%'(^<LM	AK(88A B zz$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    DADycq!j+A.
'''+AeSW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    kk#w'kk#v&kk#v&kk#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+   5   sW    0jj  	 	ryy 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$   