
    ͆h&.                    `   S r SSKJr  SSKJrJr  SSKrSSKrSSKrSSK	r	SSK
Jr  SSKJs  Jr  SSKJrJrJrJr  SSKJr  \(       a  SS	KJr  \R2                  " S
\R4                  \R6                  -  5      r\R2                  " S5      r\R2                  " S5      r\" S5      rS$S%S jjr S&S jr!S'S jr"S(S jr#          S)S jr$S*S jr%S+S jr&S,S-S jjr'S,S-S jjr(S.S jr)\!" \#\)5      r*S/S jr+S/S jr,S/S jr-S0S jr.S1S jr/S2S3S jjr0\+4S4S jjr1S5S jr2\1" S \-5      r3 " S! S"\S#9r4g)6zBlock class.    )annotations)ABCMetaabstractmethodN)util)AnyCallableTypeVarTYPE_CHECKING)Iterable   )BlocksProcessorz
    (?:(?:-?(?:[^\x00-\x2f\x30-\x40\x5B-\x5E\x60\x7B-\x9f])+|--)
    (?:[^\x00-\x2c\x2e\x2f\x3A-\x40\x5B-\x5E\x60\x7B-\x9f])*)
    z(?m)^([ ]*)[^ \n]z(?m)^([ ]*)($)?_Tc                x    U H  n U" U 5      s  $    [        S[        U 5       S35      e! [          a     M5  f = f)zMulti types.zType 'z)' did not match any of the provided types
ValueErrortype)valuetypests      M/opt/services/DDDS/venv/lib/python3.13/site-packages/pymdownx/blocks/block.py_type_multir      sK     	U8O  vd5k]*ST
UU  		s   +
99c                 4    [         R                  " [        U S9$ )z-Validate a type with multiple type functions.)r   )	functoolspartialr   )argss    r   
type_multir   +   s     [55    c                    U $ )zAccepts any type. r   s    r   type_anyr!   1   s	     Lr   c                8    U b  [        [        U 5       S35      eg)zEnsure type None or fail.Nz is not Noner   r    s    r   	type_noner#   7   s%     DK=566 r   c                v    U" U 5      nUb  XA:  a  [        U SU 35      eUb  XB:  a  [        U SU 35      eU$ )z)Check the range of the given number type.z is not greater than r   )r   minimummaximumnumber_type_values        r   _ranged_numberr*   >   sW     Fv/F8#8	BCCv/F8#8	BCCMr   c                l    [        U [        [        45      (       d  [        S[	        U 5       S35      eU $ )zEnsure type number or fail.Could not convert type z to a number)
isinstancefloatintr   r   r    s    r   type_numberr0   P   s3     eeS\**24;-|LMMLr   c                    [        U [        5      (       a  U $ [        U [        5      (       a  U R                  5       (       d  [	        S[        U 5       S35      e[        U 5      $ )zEnsure type integer or fail.r,   z to an integer)r-   r/   r.   
is_integerr   r   r    s    r   type_integerr3   Y   sT     %eU##5+;+;+=+=24;-~NOOu:r   c                >    [         R                  " [        X[        S9$ )z$Ensure typed number is within range.r&   r'   r(   )r   r   r*   r0   r&   r'   s     r   type_ranged_numberr7   d   s     ^W[fggr   c                >    [         R                  " [        X[        S9$ )z%Ensured type integer is within range.r5   )r   r   r*   r3   r6   s     r   type_ranged_integerr9   j   s     ^W[ghhr   c                `    [        U [        5      (       d  [        S[        U 5       S35      eU $ )zEnsure type boolean or fail.r,   z to a boolean)r-   boolr   r   r    s    r   type_booleanr<   p   s/     eT""24;-}MNNLr   c                `    [        U [        5      (       a  U $ [        S[        U 5       S35      e)zEnsure type string or fail.r,   z to a string)r-   strr   r   r    s    r   type_stringr?   {   s/     %
.tE{m<H
IIr   c                4    [        U 5      R                  5       $ )z&Ensure type string and normalize case.)r?   lowerr    s    r   type_string_insensitiverB      s     u##%%r   c                    [        U 5      n [        R                  U 5      nUc  [        S5      eUR	                  S5      $ )z(Ensure type HTML attribute name or fail.z'A valid attribute name must be providedr   )r?   RE_IDENT	fullmatchr   group)r   ms     r   type_html_identifierrH      s=     E5!AyBCC771:r   c                    / n[        U 5      nUR                  U5       H5  nUR                  5       nU(       d  M  U" U5      nUR                  U5        M7     U$ )zASplit the string by the delimiter and then parse with the parser.)r?   splitstripappend)stringrJ   string_typel_stringss         r   
_delimiterrR      sR     	A&!G]]5!GGIN	 " Hr   c                B    U" U 5      nX1;  a  [        U SU< 35      eU$ )z1Ensure type string is within the accepted values.z not found in r%   )r   acceptedrN   r)   s       r   
_string_inrU      s/     FF8>(>??Mr   c                \    [         R                  " [        U U(       a  [        S9$ [        S9$ )z/Ensure type string is within the accepted list.)rT   rN   )r   r   rU   rB   r?   )rT   insensitives     r   type_string_inrX      s4     /:+  AL r   c                4    [         R                  " [        XS9$ )zString delimiter function.rJ   rN   )r   r   rR   rZ   s     r   type_string_delimiterr[      s     ZuNNr   c                8   [        U [        5      (       d  [        S5      e0 nU R                  5        Hc  u  p#[	        U5      nUR                  5       S:X  a  Sn[        U5      nO-UR                  5       S:X  a  Sn[	        U5      nO[        U5      nX1U'   Me     U$ )zAttribute dictionary.z2Attributes should be contained within a dictionaryclassid)r-   dictr   itemsrH   rA   type_html_classesr?   )r   
attributeskvs       r   type_html_attribute_dictre      s     eT""MNNJ #779A!!$AWWY$A$Q'AAA1  r    c                      \ rS rSr% SrSrSrS\S'   0 rS\S'   SS	 jr	SS
 jr
SS jrSS jrSSS jjrSS jrS S jrS!S jrS"S jr\S#S j5       rS#S jrS$S jrS$S jrS%S jrS$S jrSrg)&Block   zBlock. Fzbool | NoneARGUMENTz+dict[str, tuple[Any, Callable[[Any], Any]]]OPTIONSc                ^   U R                   U l        [        R                  " U R                  5      U l        SU R
                  ;   a  [        S5      e0 [        4U R
                  S'   X0l        Xl	        X l
        UR                  U l        / U l        0 U l        X@l        U R                  5         g)a`  
Initialize.

- `length` specifies the length (number of slashes) that the header used
- `tracker` is a persistent storage for the life of the current Markdown page.
  It is a dictionary where we can keep references until the parent extension is reset.
- `md` is the Markdown object just in case access is needed to something we
  didn't think about.

attrsz9'attrs' is a reserved option name and cannot be overridenN)rk   arg_speccopydeepcopyrl   option_specr   re   
_block_mgrlengthtrackermd	argumentsoptionsconfigon_init)selfrt   ru   	block_mgrry   s        r   __init__Block.__init__   s     ==6d&&&XYY%')A$B!#,,$&')r   c                8    U R                   R                  U5      $ )zIs raw element.)rs   is_rawr{   tags     r   r   Block.is_raw   s     %%c**r   c                8    U R                   R                  U5      $ )zIs block element.)rs   is_blockr   s     r   r   Block.is_block  s     '',,r   c                r    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;>z&gt;)replace)r{   texts     r   html_escapeBlock.html_escape	  s9     ||C)||C(||C(r   Nc                   Uc  U R                   R                  n[        R                  n[        R                  U5       H  n[        [        U5      U5      nM     [        X25      nU4SS jjn[        R                  XQ5      $ )zDedent raw text.c                R    U R                  S5      b  S$ U R                  S5      US  $ )Nr   rj      )rF   )rG   rO   s     r   on_matchBlock.dedent.<locals>.on_match  s(    /2CQWWQZ^Cr   )rG   zre.Match[str]rO   r/   returnr>   )
rv   
tab_lengthsysmaxsize	RE_INDENTfindallminlen	RE_DEDENTsub)r{   r   rt   
min_lengthxr   s         r   dedentBlock.dedent  sj     >WW''F[[
""4(ASVZ0J ),
0: 	D }}X,,r   c                    g)zOn initialize.Nr   r{   s    r   rz   Block.on_init!       	r   c                    g)z;Check how element should be treated by the Markdown parser.autor   r   s    r   on_markdownBlock.on_markdown&  s     r   c                   U R                   b1  U(       a  U R                   (       a  U(       d  U R                   (       a  gX l        U R                  n0 nUR                  5        H  u  pgUS   XV'   M     UR                  5        H#  u  pgXd;  a    gXF   S   nUb	   U" U5      nXuU'   M%     XPl        U R                  U5      $ ! [         a       gf = f)zParse configuration.Fr   r   )ro   argumentrr   r`   	Exceptionrx   on_validate)	r{   parentargrx   specparsedrc   rd   parsers	            r   	_validateBlock._validate+  s     MM%CsW[WdWd JJLDA!FI ! MMODA } %%"1I 1I! $& '' % %$%s   C
CCc                    g)z
Handle validation event.

Run after config parsing completes and allows for the opportunity
to invalidate the block if argument, options, or even the parent
element do not meet certain criteria.

Return `False` to invalidate the block.
Tr   r{   r   s     r   r   Block.on_validateR  s     r   c                    g)z(Create the needed element and return it.Nr   r   s     r   	on_createBlock.on_create_  s    r   c                   U R                  U5      nUR                  nU R                  S   R                  5        HA  u  pEUS:X  a2  XC;   a  [	        S5      " US   5      U-   nSR                  U5      US'   M=  XSU'   MC     U$ )zCreate the element.rn   r]   rf   )r   attribrx   r`   r[   join)r{   r   elr   rc   rd   s         r   _createBlock._createc  s~     ^^F# LL)//1DAG|;-c26'?CaGA"%((1+wq	 2 	r   c                6   U R                  5       nU R                  U5      nUS:X  d  US:X  a[  U R                  U5      (       aE  UR                  b  UR                  OSn[        R
                  " U R                  U5      5      Ul        U R                  U5        g)zCReached end of the block, dedent raw blocks and call `on_end` hook.rawr   Nrj   )r   on_addr   r   mutilAtomicStringr   on_end)r{   blockmodeaddr   s        r   _end
Block._endt  sv     !kk% 5=TV^C0@0@"xx3388D))$++d*;<CHEr   c                    g)zPerform any action on end.Nr   r{   r   s     r   r   Block.on_end  r   r   c                    U$ )z
Adjust where the content is added and return the desired element.

Is there a sub-element where this content should go?
This runs before processing every new block.
r   r   s     r   r   Block.on_add  s	     r   c                    g)z1Perform action on the block after inline parsing.Nr   r   s     r   on_inline_endBlock.on_inline_end  r   r   )
rs   ro   r   rw   ry   rt   rv   rr   rx   ru   )rt   r/   ru   r   r|   r   ry   r   )r   etree.Elementr   r;   )r   r>   r   r>   )N)r   r>   rt   
int | Noner   r>   )r   None)r   r>   )r   r   r   r   rx   r   r   r;   )r   r   r   r;   )r   r   r   r   )r   r   r   r   )r   r   r   r   )__name__
__module____qualname____firstlineno____doc__NAMErk   __annotations__rl   r}   r   r   r   r   rz   r   r   r   r   r   r   r   r   r   r   __static_attributes__r   r   r   rh   rh      s~     D "Hk!;=G8=:+
-
- 

%(N 7 7"	
r   rh   )	metaclass)r   )r   r   r   zIterable[Callable[[Any], _T]]r   r   )r   Callable[[Any], _T]r   r   )r   r   r   r   )r   r   r   r   )
r   r   r&   int | float | Noner'   r   r(   Callable[[Any], int | float]r   int | float)r   r   r   r   )r   r   r   r/   )NN)r&   r   r'   r   r   r   )r   r   r   r;   )r   r   r   r>   )rM   r   rJ   r>   rN   Callable[[Any], str]r   z	list[str])r   r   rT   Iterable[str]rN   r   r   r>   )T)rT   r   rW   r;   r   r   )rJ   r>   rN   r   r   zCallable[[Any], list[str]])r   r   r   zdict[str, str | list[str]])5r   
__future__r   abcr   r   r   rp   rer   markdownr   r   xml.etree.ElementTreeetreeElementTreetypingr   r   r	   r
   collections.abcr   blocksr   compileIXrD   r   r   r   r   r   r!   r#   r*   r0   r3   r7   r9   r<   type_ternaryr?   rB   rH   rR   rU   rX   r[   re   ra   rh   r   r   r   <module>r      s?    " '   	 
 " % % 8 8 $(:: DD244K JJ+,	JJ)*	T]	V67   .	
 $hi )\2J&  KV O. *#/CD zg zr   