
    ̆hG                       S 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
JrJr  SSKJr  SS	KJ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  \(       a  SSKJr  S"S#S jjrS$S jr \RB                  " S5      r"S%S jr#\
" S5      S&S j5       r$\
" S5      S'S(S jj5       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 r, " S S\5      r- " S S \5      r.S! r/g
)-z
Add table of contents support to Python-Markdown.

See the [documentation](https://Python-Markdown.github.io/extensions/toc)
for details.
    )annotations   )	Extension   )Treeprocessor)parseBoolValueAMP_SUBSTITUTE
deprecatedHTML_PLACEHOLDER_REAtomicString)UnescapeTreeprocessor)RE_AMPN)deepcopy)TYPE_CHECKINGAnyIterator
MutableSet)Markdownc                4   U(       d8  [         R                  " SU 5      n U R                  SS5      R                  S5      n [        R
                  " SSU 5      R                  5       R                  5       n [        R
                  " SR                  U5      X5      $ )z+Slugify a string, to make it URL friendly. NFKDasciiignorez[^\w\s-] z[{}\s]+)	unicodedata	normalizeencodedecoderesubstriplowerformat)value	separatorunicodes      O/opt/services/DDDS/venv/lib/python3.13/site-packages/markdown/extensions/toc.pyslugifyr'   &   sr    %%fe4Wh/66w?FF;E*00288:E66*##I.	AA    c                    [        XSS9$ )zOSlugify a string, to make it URL friendly while preserving Unicode characters. T)r%   )r'   )r#   r$   s     r&   slugify_unicoder*   0   s    5T22r(   z^(.*)_([0-9]+)$c                
   X;   d  U (       de  [         R                  U 5      nU(       a2  SUR                  S5      [        UR                  S5      5      S-   4-  n OSU S4-  n X;   a  M\  U (       d  Me  UR	                  U 5        U $ )z?Ensure id is unique in set of ids. Append '_1', '_2'... if not z%s_%dr   r   )
IDCOUNT_REmatchgroupintadd)ididsms      r&   uniquer4   8   so    
)2R AGGAJAGGAJ(9::BB7"B )22 GGBKIr(   z0Use `render_inner_html` and `striptags` instead.c                   / nU R                  5        HP  n[        U[        5      (       a'  UR                  [        R
                  " U5      5        M?  UR                  U5        MR     SR                  U5      R                  5       $ )zGet title name.r   )itertext
isinstancer   appendhtmlunescapejoinr    )eltextcs      r&   get_namer?   D   s_     D[[]a&&KKa()KKN	 
 774=  r(   zIUse `run_postprocessors`, `render_inner_html` and/or `striptags` instead.c                D   ^^ SUU4S jjn[         R                  " X05      $ )zMExtract raw HTML from stash, reduce to plain text and swap with placeholder. c                (  >  TR                   R                  [        U R                  S5      5         n[        R                  " SSU5      nT(       a  [        R                  " SSU5      nU$ ! [        [
        4 a    U R                  S5      s $ f = f)z%Substitute raw html with plain text. r   r   z	(<[^>]+>)r   z(&[\#a-zA-Z0-9]+;))	htmlStashrawHtmlBlocksr/   r.   
IndexError	TypeErrorr   r   )r3   rawresmdstrip_entitiess      r&   	_html_sub#stashedHTML2text.<locals>._html_subT   s{    	,,,,S_=C ff\2s+&&.C8C
 I& 	771:	s   1A- -!BB)r3   zre.Match[str]returnstr)r   r   )r=   rH   rI   rJ   s    `` r&   stashedHTML2textrN   Q   s     
 
 ""933r(   c                8    [        5       nUR                  U 5      $ )z*Unescape Markdown backslash escaped text. )r   r:   )r=   r>   s     r&   r:   r:   c   s    A::dr(   c                   U R                  S5      =nS:w  aW  U R                  SU5      =nS:w  a?  U SU  XS-   S  3n U R                  S5      =nS:w  a  U R                  SU5      =nS:w  a  M?  U R                  S5      =nS:w  aW  U R                  SU5      =nS:w  a?  U SU  XS-   S  3n U R                  S5      =nS:w  a  U R                  SU5      =nS:w  a  M?  S	R                  U R                  5       5      n U $ )
zKStrip HTML tags and return plain text. Note: HTML entities are unaffected. z<!--z-->N   <>r    )findr;   split)r=   startends      r&   
strip_tagsrZ   i   s    IIf%%5"
,5%9P2P#UW1Wv,1WX/0 IIf%%5"
,5%9P2P#UW1W IIcN"5r
)diiU6K/KsPR.Rv,1WX/0 IIcN"5r
)diiU6K/KsPR.R 88DJJL!DKr(   c                    SU ;   a  [         R                  " SU 5      n SU ;   a  U R                  SS5      n SU ;   a  U R                  SS5      n U $ )zEscape character data. &z&amp;rS   z&lt;rT   z&gt;)r   r   replace)r=   s    r&   escape_cdatar^   w   sL    
d{zz'4(
d{||C(
d{||C(Kr(   c                j    UR                    H  nUR                  U 5      n M     U R                  5       $ )z3Run postprocessors from Markdown instance on text. )postprocessorsrunr    )r=   rH   pps      r&   run_postprocessorsrc      s+    vvd|  ::<r(   c                    [        UR                  U 5      5      nUR                  S5      S-   nUR                  S5      nX#U R	                  5       n[        X!5      $ )z;Fully render inner html of an `etree` element as a string. rT   r   rS   )r:   
serializerindexrindexr    rc   )r<   rH   r=   rX   rY   s        r&   render_inner_htmlrh      sV     BMM"%&D JJsOaE
++c
Cc?  "Dd''r(   c                   [        U R                  S5      S5      c  U $ [        U 5      n U R                  S5       H  nSn[	        U5       H  nUR
                  S:X  aR  UR                  SS5      R                  S5      (       a,  UR                  =(       d    S U 3nUR                  U5        Me  U(       d  Mn  UR                  =(       d    S U 3Ul        SnM     U(       d  M  UR                  =(       d    S U 3Ul
        M     U $ )zKRemove footnote references from a copy of the element, if any are present. supNz	.//sup/..r   r1   fnref)nextiterr   findallreversedtagget
startswithtailremover=   )rootparent
carry_textchilds       r&   remove_fnrefsry      s     DIIed#+D>D,,{+
f%EyyE!eiib&9&D&DW&M&M %

 0b1*>
e$ %

 0b1*>

 & :#[[.B/
|<FK , Kr(   c                `   / n[        U 5      (       Ga  U R                  S5      n/ US'   US   /nUR                  U5        / nU (       a  U R                  S5      nUS   n/ US'   XcS   :  aW  UR                  5         Sn[        U5       H  nXhS   ::  a  US-  nM    O   U(       a  USU*  nUSU*  nUR                  U5        XcS   :X  a!  U(       a  US   S   OUR                  U5        O6US   R                  U5        UR                  U5        UR                  U5        UnU (       a  M  U$ )a6  Given an unsorted list with errors and skips, return a nested one.

    [{'level': 1}, {'level': 2}]
    =>
    [{'level': 1, 'children': [{'level': 2, 'children': []}]}]

A wrong list is also converted:

    [{'level': 2}, {'level': 1}]
    =>
    [{'level': 2, 'children': []}, {'level': 1, 'children': []}]
r   childrenlevelrQ   r   N)lenpopr8   ro   )	toc_listordered_listlastlevelsparentstcurrent_levelto_popps	            r&   nest_toc_tokensr      sC    L
8}}||AZw-D! QAgJMAjM bz)

 !'*A$'
2!	 +
 #HfW-F%hw/G m, r
*,3Z("FF1I
 Z ''*t$m,DI hL r(   c                  v   ^  \ rS rSrSrSU 4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
 jrSrU =r$ )TocTreeprocessor   z%Step through document and build TOC. c                  > [         TU ]  U5        US   U l        US   U l        [	        US   5      S-
  U l        US   U l        US   U l        US   U l        US   U l	        [        US	   5      U l        US
   U l        [        US   S5      U l        U R                  c
  US   U l        US   U l        US   U l        [        US   S5      U l        ["        R$                  " S5      U l        [)        US   [*        5      (       aE  SUS   ;   a<  US   R-                  S5       Vs/ s H  n[	        U5      PM     snu  U l        U l        g SU l        [	        US   5      U l        g s  snf )Nmarkertitle	baselevelr   r'   r$   	toc_classtitle_class
anchorlinkanchorlink_class	permalinkFpermalink_classpermalink_titlepermalink_leadingz[Hh][123456]	toc_depth-)super__init__r   r   r/   
base_levelr'   sepr   r   r   use_anchorsr   use_permalinksr   r   r   r   compile
header_rgxr7   rM   rW   toc_top
toc_bottom)selfrH   configx	__class__s       r&   r   TocTreeprocessor.__init__   sm   !(+ /
f[12Q6i(+&, &} 5!/|0D!E%+,>%?,VK-@%H&"("5D$*+<$=$*+<$=.<VDW=XZ_.`**^4f[)3//C6+;N4N=CK=P=V=VWZ=[,\=[SV=[,\)DL$/DL!&"56DO -]s   %E&c              #     #    U H_  nU R                   R                  UR                  5      (       a  M/  UR                  S;  d  MA  X4v   U R                  U5       Sh  vN   Ma     g N	7f)z>Iterator wrapper to get allowed parent and child all at once. )precodeN)r   r-   rp   
iterparent)r   noderx   s      r&   r   TocTreeprocessor.iterparent  sT      E??((33		8Xk!??5111  2s   .A+A+A+A) 
A+c                   U R                  U5       H  u  p4SR                  UR                  5       5      R                  5       nU(       d  M;  UR                  (       d  MN  UR                  R                  5       U R
                  :X  d  Mx  [        U5      S:X  d  M  [        [        U5      5       H  nX6   U:X  d  M  X#U'     M     M     g)zReplace marker with elem. r   r   N)r   r;   r6   r    r=   r   r}   range)r   ru   elemr   r>   r=   is          r&   replace_markerTocTreeprocessor.replace_marker  s    ood+FQ771::<(..0D vvv!&&,,.DKK7CFaKs1vAtqy#! ' ,r(   c                r    [        UR                  S   5      U R                  -   nUS:  a  SnSU-  Ul        g)z-Adjust header level according to base level. rQ      zh%dN)r/   rp   r   )r   r   r|   s      r&   	set_levelTocTreeprocessor.set_level+  s4    DHHRL!DOO319E5=r(   c                x   [         R                  " S5      nUR                  Ul        SU-   UR                  S'   U R                  UR                  S'   SUl        U H  nUR                  U5        M     [        U5      (       a&  UR                  US   5        [        U5      (       a  M&  UR                  U5        g )Na#hrefclassr   r   )etreeElementr=   attribr   r8   r}   rt   )r   r>   elem_idanchorr   s        r&   
add_anchorTocTreeprocessor.add_anchor2  s    s#ff #gf!%!6!6gDMM$ !ffHHQqTN !ff	r(   c                   [         R                  " S5      nU R                  SL a	  S[        -  OU R                  Ul        SU-   UR
                  S'   U R                  UR
                  S'   U R                  (       a  U R                  UR
                  S'   U R                  (       a+  UR                  Ul	        SUl        UR                  S	U5        g UR                  U5        g )
Nr   Tz%spara;r   r   r   r   r   r   )r   r   r   r	   r=   r   r   r   r   rs   insertr8   )r   r>   r   r   s       r&   add_permalinkTocTreeprocessor.add_permalink>  s    MM#&	!00D8 $n4#22 	 $'=	 $($8$8	!(,(<(<IW%!!VVINAFHHQ	"HHYr(   c                  ^ [         R                  " S5      nU R                  UR                  S'   U R                  (       aR  [         R
                  " US5      nU R                  (       a  U R                  UR                  S'   U R                  Ul        SU4S jjmT" X5        SU R                  R                  ;   a(  U R                  R                  S   R                  U5        U$ )z&Return a string div given a toc list. divr   spanc                F  > [         R                  " US5      nU  H  n[         R                  " US5      n[         R                  " US5      nUR                  SS5      Ul        SUR                  SS5      -   UR                  S'   US	   (       d  Mv  T" US	   U5        M     U$ )
Nullir   namer   r   r1   r   r{   )r   
SubElementrq   r=   r   )r   rv   r   itemr   linkbuild_etree_uls         r&   r   6TocTreeprocessor.build_toc_div.<locals>.build_etree_ulZ  s    !!&$/B %%b$/''C0 HHVR0	&)DHHT2,>&>F#
##"4
#3R8 ! Ir(   prettify)r   listrv   etree.ElementrL   r   )r   r   r   r   r   r   r   r=   rH   treeprocessorsra   )r   r   r   headerr   s       @r&   build_toc_divTocTreeprocessor.build_toc_divN  s    mmE""nn

7 ::%%c62F)-)9)9g&**FK
	 	x%///GG"":.2237
r(   c           	        [        5       nUR                  5        H3  nSUR                  ;   d  M  UR                  UR                  S   5        M5     / nUR                  5        GH1  n[	        UR
                  [        5      (       d  M%  U R                  R                  UR
                  5      (       d  MQ  U R                  U5        [        [        U5      U R                  5      n[        U5      nSUR                  ;  aG  [        U R                  [         R"                  " U5      U R$                  5      U5      UR                  S'   SnSUR                  ;   aM  ['        [#        UR                  S   5      U R                  5      n[)        [        U5      5      nUR                  S	 [+        UR
                  S   5      U R,                  :  ai  [+        UR
                  S   5      U R.                  ::  aC  UR1                  [+        UR
                  S   5      [#        UR                  S   5      UUUS.5        U R2                  (       a  U R5                  X3R                  S   5        U R6                  S;  d  GM  U R9                  X3R                  S   5        GM4     [;        U5      nU R=                  U5      nU R>                  (       a  U RA                  X5        U R                  RC                  U5      n	U R                  RD                   H  n
U
RG                  U	5      n	M     X@R                  l$        XR                  l%        g )Nr1   r   data-toc-labelrQ   )r|   r1   r   r9   r   )FN)&setrm   r   r0   r7   rp   rM   r   r-   r   rh   ry   rH   rZ   r4   r'   r9   r:   r   rc   r^   r/   r   r   r8   r   r   r   r   r   r   r   r   re   r`   ra   
toc_tokenstoc)r   docused_idsr<   r   	innerhtmlr   data_toc_labelr   r   rb   s              r&   ra   TocTreeprocessor.runm  sW   5((*Bryy RYYt_-  
((*B"&&#&&4??+@+@+H+Hr"-mB.?I	!), ryy(&,T\\$--:Mtxx-XZb&cBIIdO!##ryy0%7K[A\8]_c_f_f%gN'
>(BCD		"23rvvbz?dll2s266":$//7Y%%!$RVVBZ&ryy7 $ )*8'  ##OOB		$8&&m;&&r99T?;= @ %Z0
  ,;;) gg  %''((B&&+C )'r(   )r   r   r   r   r   r   r   r   r'   r   r   r   r   r   r   r   )rH   r   r   zdict[str, Any])r   r   rL   z-Iterator[tuple[etree.Element, etree.Element]])ru   r   r   r   rL   None)r   r   rL   r   )r>   r   r   rM   rL   r   )r   r   rL   r   )r   r   rL   r   )__name__
__module____qualname____firstlineno____doc__r   r   r   r   r   r   r   ra   __static_attributes____classcell__r   s   @r&   r   r      s3    072	2*!
  >2 2r(   r   c                  <   ^  \ rS rSr\rU 4S jrS rSS jrSr	U =r
$ )TocExtensioni  c                   > SS/SS/SS/SS/S	S
/SS/SS/SS/SS/S	S/SS/[         S/SS/SS/S.U l         [        TU ]  " S0 UD6  g )Nz[TOC]zeText to find and replace with Table of Contents. Set to an empty string to disable. Default: `[TOC]`.r   z;Title to insert into TOC `<div>`. Default: an empty string.toctitlez2CSS class used for the title. Default: `toctitle`.r   z4CSS class(es) used for the link. Default: `toclink`.Fz7True if header should be a self link. Default: `False`.toclinkz5CSS class(es) used for the link. Defaults: `toclink`.r   zPTrue or link text if a Sphinx-style permalink should be added. Default: `False`.
headerlinkz7CSS class(es) used for the link. Default: `headerlink`.zPermanent linkz<Title attribute of the permalink. Default: `Permanent link`.z\True if permalinks should be placed at start of the header, rather than end. Default: False.1z%Base level for headers. Default: `1`.zFFunction to generate anchors based on header text. Default: `slugify`.r   zWord separator. Default: `-`.r   a'  Define the range of section levels to include in the Table of Contents. A single integer (b) defines the bottom section level (<h1>..<hb>) only. A string consisting of two digits separated by a hyphen in between (`2-5`) defines the top (t) and the bottom (b) (<ht>..<hb>). Default: `6` (bottom).)r   r   r   r   r   r   r   r   r   r   r   r'   r$   r    )r'   r   r   r   )r   kwargsr   s     r&   r   TocExtension.__init__  s     $ Q P M P R! e W  !"`  n" FGa >?)O.
^ 	/"6"r(   c                    UR                  U 5        Xl        U R                  5         U R                  XR	                  5       5      nUR
                  R                  USS5        g)z$Add TOC tree processor to Markdown. r      N)registerExtensionrH   resetTreeProcessorClass
getConfigsr   register)r   rH   tocexts      r&   extendMarkdownTocExtension.extendMarkdown  sM    
T"

((__->?
""65!4r(   c                H    SU R                   l        / U R                   l        g )Nr   )rH   r   r   )r   s    r&   r   TocExtension.reset  s    r(   )r   rH   )rL   r   )r   r   r   r   r   r   r   r  r   r   r   r   s   @r&   r   r     s    )2#h5   r(   r   c                     [        S0 U D6$ )Nr   )r   )r   s    r&   makeExtensionr    s    !&!!r(   )F)r#   rM   r$   rM   r%   boolrL   rM   )r#   rM   r$   rM   rL   rM   )r1   rM   r2   zMutableSet[str]rL   rM   )r<   r   rL   rM   )T)r=   rM   rH   r   rI   r  rL   rM   )r=   rM   rL   rM   )r=   rM   rH   r   rL   rM   )r<   r   rH   r   rL   rM   )ru   r   rL   r   )0r   
__future__r   r   r   r   r   utilr   r	   r
   r   r   r   serializersr   r   r9   r   copyr   xml.etree.ElementTreer   ElementTreetypingr   r   r   r   markdownr   r'   r*   r   r,   r4   r?   rN   r:   rZ   r^   rc   rh   ry   r   r   r   r  r   r(   r&   <module>r     s    #  * ` ` 2   	    % % ; ;!B3
 ZZ*+
	 >?	! @	! WX4 Y4"	
(.>Bp} pfB 9 B J"r(   