Ë
    Ÿ2Úio9  ã                  ó  — d 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
mZmZ ddlmZ dd	lZdd	lZdd	lZdd	lmc mZ dd
„Zd„ Z ej,                  d«      Zd„ Zd„ Zddd„Zd„ Zd„ Z G d„ de«      Z G d„ de«      Zd„ Zy	)z‹
Add table of contents support to Python-Markdown.

See the [documentation](https://Python-Markdown.github.io/extensions/toc)
for details.
é    )Úannotationsé   )Ú	Extensioné   )ÚTreeprocessor)Úcode_escapeÚparseBoolValueÚAMP_SUBSTITUTEÚHTML_PLACEHOLDER_REÚAtomicString)ÚUnescapeTreeprocessorNc                ó&  — |s7t        j                  d| «      } | j                  dd«      j                  d«      } t	        j
                  dd| «      j                  «       j                  «       } t	        j
                  dj                  |«      || «      S )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      úN/var/www/html/acx/venv/lib/python3.12/site-packages/markdown/extensions/toc.pyÚslugifyr        st   € áä×%Ñ% f¨eÓ4ˆØ—‘˜W hÓ/×6Ñ6°wÓ?ˆÜ�F‰F�;  EÓ*×0Ñ0Ó2×8Ñ8Ó:€EÜ�6‰6�*×#Ñ# IÓ.°	¸5ÓAÐAó    c                ó   — t        | |d¬«      S )zP Slugify a string, to make it URL friendly while preserving Unicode characters. T)r   )r    )r   r   s     r   Úslugify_unicoder#   *   s   € ä�5˜)¨TÔ2Ð2r!   z^(.*)_([0-9]+)$c                óä   — | |v s| sXt         j                  | «      }|r2d|j                  d«      t        |j                  d«      «      dz   fz  } nd| dfz  } | |v rŒU| sŒX|j	                  | «       | S )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   Úuniquer-   2   sq   € à
�‰)™2Ü×Ñ˜RÓ ˆÙØ˜AŸG™G A›J¬¨A¯G©G°A«J«¸Ñ(9Ð:Ñ:‰Bà˜B ˜7Ñ"ˆBð �Š)š2ð ‡G�GˆB„KØ€Ir!   c                óú   — g }| j                  «       D ]H  }t        |t        «      r%|j                  t	        j
                  |«      «       Œ8|j                  |«       ŒJ dj                  |«      j                  «       S )zGet title name.r   )ÚitertextÚ
isinstancer   ÚappendÚhtmlÚunescapeÚjoinr   )ÚelÚtextÚcs      r   Úget_namer8   >   sa   € ð €DØ�[‰[‹]ò ˆÜ�aœÔ&Ø�K‰KœŸ™ aÓ(Õ)à�K‰K˜�Nð	ð
 �7‰7�4‹=×ÑÓ Ð r!   c                ó>   ‡‡— ˆˆfd„}t        j                  || «      S )zN Extract raw HTML from stash, reduce to plain text and swap with placeholder. c                ó  •— 	 ‰j                   j                  t        | j                  d«      «         }t        j                  dd|«      }‰rt        j                  dd|«      }|S # t        t
        f$ r | j                  d«      cY S w xY w)z& Substitute raw html with plain text. r   r   z	(<[^>]+>)r   z(&[\#a-zA-Z0-9]+;))Ú	htmlStashÚrawHtmlBlocksr(   r'   Ú
IndexErrorÚ	TypeErrorr   r   )r,   ÚrawÚresÚmdÚstrip_entitiess      €€r   Ú	_html_subz#stashedHTML2text.<locals>._html_subL   s{   ø€ ð	Ø—,‘,×,Ñ,¬S°·±¸³«_Ñ=ˆCô �f‰f�\ 2 sÓ+ˆÙÜ—&‘&Ð.°°CÓ8ˆCØˆ
øô œIÐ&ò 	Ø—7‘7˜1“:Òð	ús   ƒ1A& Á& B	ÂB	)r   r   )r6   rA   rB   rC   s    `` r   ÚstashedHTML2textrD   J   s   ù€ õ
ô ×"Ñ" 9¨dÓ3Ð3r!   c                ó8   — t        «       }|j                  | «      S )z Unescape escaped text. )r   r3   )r6   r7   s     r   r3   r3   [   s   € äÓ€AØ�:‰:�dÓÐr!   c                ó(  — g }t        | «      �r| j                  d«      }g |d<   |d   g}|j                  |«       g }| rÒ| j                  d«      }|d   }g |d<   ||d   k  rP|j                  «        d}t        |«      D ]  }||d   k  r|dz  }Œ n |r|d|  }|d|  }|j                  |«       ||d   k(  r|r|d   d   n|j                  |«       n6|d   j                  |«       |j                  |«       |j                  |«       |}| rŒÒ|S )aV  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Úleveléÿÿÿÿr   N)ÚlenÚpopr1   Úreversed)	Útoc_listÚordered_listÚlastÚlevelsÚparentsÚtÚcurrent_levelÚto_popÚps	            r   Únest_toc_tokensrV   a   sJ  € ð €LÜ
ˆ8…}à�|‰|˜A‹ˆØˆˆZÑØ�w‘-�ˆØ×Ñ˜DÔ!Øˆñ Ø—‘˜Q“ˆAØ˜g™JˆMØˆAˆj‰Mð ˜v b™zÒ)à—
‘
”ð �Ü! 'Ó*ò �AØ$¨¨'©
Ò2Ø !™™áð	ñ
 Ø# H f WÐ-�FØ% h¨ wÐ/�Gð —‘˜mÔ,ð   r¡
Ò*Ù,3�˜‘˜ZÒ(Ø"§F¡F¨1¥Ið
 �ZÑ ×'Ñ'¨Ô*Ø—‘˜tÔ$Ø—‘˜mÔ,ØˆDòI ðL Ðr!   c                  óT   ‡ — e Zd ZdZˆ fd„Zd„ Zd
d„Zd
d„Zd
d„Zd
d„Z	d„ Z
d	„ Zˆ xZS )ÚTocTreeprocessorz& Step through document and build TOC. c                ó¾  •— t         ‰| �  |«       |d   | _        |d   | _        t	        |d   «      dz
  | _        |d   | _        |d   | _        |d   | _        |d   | _	        t        |d	   «      | _        |d
   | _        t        |d   d«      | _        | j                  €
|d   | _        |d   | _        |d   | _        t        |d   d«      | _        t#        j$                  d«      | _        t)        |d   t*        «      r@d|d   v r9|d   j-                  d«      D �cg c]  }t	        |«      ‘Œ c}\  | _        | _        y d| _        t	        |d   «      | _        y c c}w )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__rZ   r[   r(   Ú
base_levelr    Úsepr]   r^   r	   Úuse_anchorsr`   Úuse_permalinksrb   rc   rd   r   ÚcompileÚ
header_rgxr0   ÚstrÚsplitÚtoc_topÚ
toc_bottom)ÚselfrA   ÚconfigÚxÚ	__class__s       €r   rh   zTocTreeprocessor.__init__¥   sc  ø€ Ü‰Ñ˜Ôà˜XÑ&ˆŒØ˜G‘_ˆŒ
Ü˜f [Ñ1Ó2°QÑ6ˆŒØ˜iÑ(ˆŒØ˜+Ñ&ˆŒØ Ñ,ˆŒØ! -Ñ0ˆÔÜ)¨&°Ñ*>Ó?ˆÔØ &Ð'9Ñ :ˆÔÜ,¨V°KÑ-@À%ÓHˆÔØ×ÑÐ&Ø"(¨Ñ"5ˆDÔØ%Ð&7Ñ8ˆÔØ%Ð&7Ñ8ˆÔÜ!/°Ð7JÑ0KÈUÓ!SˆÔÜŸ*™* ^Ó4ˆŒÜ�f˜[Ñ)¬3Ô/°C¸6À+Ñ;NÑ4NØ=CÀKÑ=P×=VÑ=VÐWZÓ=[Ö,\¸¬S°­VÒ,\Ñ)ˆDŒL˜$�/àˆDŒLÜ! &¨Ñ"5Ó6ˆD�Oùò -]s   ÄEc              #  óÆ   K  — |D ]V  }| j                   j                  |j                  «      rŒ)|j                  dvsŒ8||f–— | j                  |«      E d{  –—†  ŒX y7 Œ­w)z? Iterator wrapper to get allowed parent and child all at once. )ÚpreÚcodeN)rn   r&   ÚtagÚ
iterparent)rs   ÚnodeÚchilds      r   r{   zTocTreeprocessor.iterparent¾   sY   è ø€ ð ò 	2ˆEØ—?‘?×(Ñ(¨¯©Õ3¸¿	¹	ÈÒ8XØ˜E�kÒ!ØŸ?™?¨5Ó1×1Ñ1ñ	2ð 2ús   ‚+A!®A!½A!ÁAÁA!c                ón  — | j                  |«      D ]¡  \  }}dj                  |j                  «       «      j                  «       }|sŒ6|j                  sŒC|j                  j                  «       | j
                  k(  sŒkt        |«      dk(  sŒzt        t        |«      «      D ]  }||   |k(  sŒ|||<    Œ¡ Œ£ y)z Replace marker with elem. r   r   N)r{   r4   r/   r   r6   rZ   rJ   Úrange)rs   ÚrootÚelemrU   r7   r6   Úis          r   Úreplace_markerzTocTreeprocessor.replace_markerÉ   s—   € à—o‘o dÓ+ò 	‰FˆQ�Ø—7‘7˜1Ÿ:™:›<Ó(×.Ñ.Ó0ˆDÙØð �v‹v˜!Ÿ&™&Ÿ,™,›.¨D¯K©KÓ7¼CÀ»FÀa»KÜœs 1›v›ò �AØ˜‘t˜q“yØ#˜˜!™Ùññ	r!   c                óp   — t        |j                  d   «      | j                  z   }|dkD  rd}d|z  |_        y)z. Adjust header level according to base level. rI   é   zh%dN)r(   rz   ri   )rs   r�   rH   s      r   Ú	set_levelzTocTreeprocessor.set_levelÞ   s4   € ä�D—H‘H˜R‘LÓ! D§O¡OÑ3ˆØ�1Š9ØˆEØ˜5‘=ˆ�r!   c                ó\  — t        j                  d«      }|j                  |_        d|z   |j                  d<   | j                  |j                  d<   d|_        |D ]  }|j                  |«       Œ t        |«      r |j                  |d   «       t        |«      rŒ |j                  |«       y )NÚaú#ÚhrefÚclassr   r   )ÚetreeÚElementr6   Úattribr`   r1   rJ   Úremove)rs   r7   Úelem_idÚanchorr�   s        r   Ú
add_anchorzTocTreeprocessor.add_anchorå   sŽ   € Ü—‘˜sÓ#ˆØ—f‘fˆŒØ # g¡ˆ�‰�fÑØ!%×!6Ñ!6ˆ�‰�gÑØˆŒØò 	 ˆDØ�M‰M˜$Õð	 ä�!ŒfØ�H‰H�Q�q‘TŒNô �!�fà	�‰�Õr!   c                ó®  — t        j                  d«      }| j                  du r	dt        z  n| j                  |_        d|z   |j
                  d<   | j                  |j
                  d<   | j                  r| j                  |j
                  d<   | j                  r+|j                  |_	        d|_        |j                  d	|«       y |j                  |«       y )
Nrˆ   Tz%spara;r‰   rŠ   r‹   r[   r   r   )rŒ   r�   rl   r
   r6   rŽ   rb   rc   rd   ÚtailÚinsertr1   )rs   r7   r�   ra   s       r   Úadd_permalinkzTocTreeprocessor.add_permalinkñ   s¸   € Ü—M‘M #Ó&ˆ	à!×0Ñ0°DÑ8ð $¤nÒ4à#×2Ñ2ð 	Œð $'¨¡=ˆ	×Ñ˜Ñ Ø$(×$8Ñ$8ˆ	×Ñ˜Ñ!Ø×ÒØ(,×(<Ñ(<ˆI×Ñ˜WÑ%Ø×!Ò!ØŸV™VˆIŒNØˆAŒFØ�H‰H�Q˜	Õ"à�H‰H�YÕr!   c                ó°  ‡— t        j                  d«      }| j                  |j                  d<   | j                  rLt        j
                  |d«      }| j                  r| j                  |j                  d<   | j                  |_        ˆfd„Š ‰||«       d| j                  j                  v r(| j                  j                  d   j                  |«       |S )z' Return a string div given a toc list. Údivr‹   Úspanc                ó0  •— t        j                  |d«      }| D ]y  }t        j                  |d«      }t        j                  |d«      }|j                  dd«      |_        d|j                  dd«      z   |j                  d<   |d	   sŒn ‰|d	   |«       Œ{ |S )
NÚulÚlirˆ   Únamer   r‰   r*   rŠ   rG   )rŒ   Ú
SubElementÚgetr6   rŽ   )rM   Úparentr›   Úitemrœ   ÚlinkÚbuild_etree_uls         €r   r£   z6TocTreeprocessor.build_toc_div.<locals>.build_etree_ul  s–   ø€ Ü×!Ñ! &¨$Ó/ˆBØ ò 9�ä×%Ñ% b¨$Ó/�Ü×'Ñ'¨¨CÓ0�Ø ŸH™H V¨RÓ0�”	Ø&)¨D¯H©H°T¸2Ó,>Ñ&>�—‘˜FÑ#Ø˜
Ó#Ù" 4¨
Ñ#3°RÕ8ð9ð ˆIr!   Úprettify)rŒ   r�   r]   rŽ   r[   rž   r^   r6   rA   ÚtreeprocessorsÚrun)rs   rM   r˜   Úheaderr£   s       @r   Úbuild_toc_divzTocTreeprocessor.build_toc_div  s«   ø€ ä�m‰m˜EÓ"ˆØ"Ÿn™nˆ�
‰
�7Ñð �:Š:Ü×%Ñ% c¨6Ó2ˆFØ×ÒØ)-×)9Ñ)9�—‘˜gÑ&ØŸ*™*ˆFŒKô
	ñ 	�x Ô%à˜Ÿ™×/Ñ/Ñ/Ø�G‰G×"Ñ" :Ñ.×2Ñ2°3Ô7àˆ
r!   c                ó   — t        «       }|j                  «       D ]/  }d|j                  v sŒ|j                  |j                  d   «       Œ1 g }|j                  «       D �]ù  }t	        |j
                  t        «      sŒ| j                  j                  |j
                  «      sŒE| j                  |«       t        |«      }d|j                  vrRt        t        || j                  «      «      }t        | j                  || j                   «      |«      |j                  d<   t#        |j
                  d   «      | j$                  k\  rŸt#        |j
                  d   «      | j&                  k  rz|j)                  t#        |j
                  d   «      |j                  d   t        t        t+        |j                  j-                  d|«      «      | j                  d¬«      «      dœ«       d|j                  v r|j                  d= | j.                  r| j1                  ||j                  d   «       | j2                  dvs�ŒÛ| j5                  ||j                  d   «       �Œü t7        |«      }| j9                  |«      }| j:                  r| j=                  ||«       | j                  j?                  |«      }| j                  j@                  D ]  }	|	jC                  |«      }Œ || j                  _"        || j                  _#        y )Nr*   rI   zdata-toc-labelF)rB   )rH   r*   r�   )FN)$ÚsetÚiterrŽ   r)   r0   rz   ro   rn   r&   r†   r8   r3   rD   rA   r-   r    rj   r(   rq   rr   r1   r   rŸ   rk   r’   rl   r–   rV   r¨   rZ   rƒ   Ú
serializerÚpostprocessorsr¦   Ú
toc_tokensÚtoc)
rs   ÚdocÚused_idsr5   r®   r6   Ú	innertextr˜   r¯   Úpps
             r   r¦   zTocTreeprocessor.run   sM  € ä“5ˆØ—(‘(“*ò 	.ˆBØ�r—y‘yÒ Ø—‘˜RŸY™Y t™_Õ-ð	.ð ˆ
Ø—(‘(“*ó 	<ˆBÜ˜"Ÿ&™&¤#Õ&¨4¯?©?×+@Ñ+@ÀÇÁÕ+HØ—‘˜rÔ"Ü “|�ð ˜rŸy™yÑ(Ü (Ô)9¸$ÀÇÁÓ)HÓ I�IÜ&,¨T¯\©\¸)ÀTÇXÁXÓ-NÐPXÓ&Y�B—I‘I˜d‘Oä�r—v‘v˜b‘z“? d§l¡lÒ2´s¸2¿6¹6À"¹:³È$Ï/É/Ò7YØ×%Ñ%Ü!$ R§V¡V¨B¡Z£Ø Ÿi™i¨™oÜ (Ô)9Ü'¨¯	©	¯©Ð6FÈÓ(MÓNØ ŸG™G°Eô*ó !ñ'ô ð $ r§y¡yÑ0ØŸ	™	Ð"2Ð3à×#Ò#Ø—O‘O B¨¯	©	°$©Ô8Ø×&Ñ&¨mÓ;Ø×&Ñ& r¨2¯9©9°T©?Ö;ð7	<ô: % ZÓ0ˆ
Ø× Ñ  Ó,ˆØ�;Š;Ø×Ñ  SÔ)ð �g‰g× Ñ  Ó%ˆØ—'‘'×(Ñ(ò 	ˆBØ—&‘&˜“+‰Cð	à'ˆ�‰ÔØˆ�‰�r!   ©ÚreturnÚNone)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rh   r{   rƒ   r†   r’   r–   r¨   r¦   Ú__classcell__©rv   s   @r   rX   rX   ¢   s.   ø„ Ù0ô7ò2	2óó*!ó
ó ò ö>/r!   rX   c                  ó0   ‡ — e Zd ZeZˆ fd„Zd„ Zdd„Zˆ xZS )ÚTocExtensionc                ó’   •— ddgddgddgddgd	d
gddgddgddgddgd	dgddgt         dgddgddgdœ| _        	 t        ‰| �  di |¤Ž y )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`.rf   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).)rZ   r[   r^   r]   r_   r`   ra   rb   rc   rd   r\   r    r   re   © )r    rt   rg   rh   )rs   Úkwargsrv   s     €r   rh   zTocExtension.__init__V  sÕ   ø€ ð ð$ðð ÐQðð ÐPðð ÐMðð ÐPðð ÐRð!ð Ðeðð ÐWð ð !Ð"`ð ð Ønð"ð ÐFÐGäÐaðð Ð>Ð?àð)ðñO.
ˆŒð^ 	/ä‰ÑÑ"˜6Ó"r!   c                óÎ   — |j                  | «       || _        | j                  «        | j                  || j	                  «       «      }|j
                  j                  |dd«       y)z% Add TOC tree processor to Markdown. r¯   é   N)ÚregisterExtensionrA   ÚresetÚTreeProcessorClassÚ
getConfigsr¥   Úregister)rs   rA   Útocexts      r   ÚextendMarkdownzTocExtension.extendMarkdownŠ  sQ   € à
×Ñ˜TÔ"ØˆŒØ�
‰
ŒØ×(Ñ(¨¨T¯_©_Ó->Ó?ˆØ
×Ñ×"Ñ" 6¨5°!Õ4r!   c                óH   — d| j                   _        g | j                   _        y )Nr   )rA   r¯   r®   )rs   s    r   rÉ   zTocExtension.reset’  s   € Øˆ�‰ŒØˆ�‰Õr!   r´   )	r·   r¸   r¹   rX   rÊ   rh   rÎ   rÉ   r»   r¼   s   @r   r¾   r¾   R  s   ø„ à)Ðô2#òh5÷ r!   r¾   c                 ó   — t        di | ¤ŽS )NrÄ   )r¾   )rÅ   s    r   ÚmakeExtensionrÑ   —  s   € ÜÑ!˜&Ñ!Ð!r!   )F)T)rB   Úbool) rº   Ú
__future__r   r   r   r¥   r   Úutilr   r	   r
   r   r   r   r   r2   r   Úxml.etree.ElementTreerŒ   ÚElementTreer    r#   rm   r%   r-   r8   rD   r3   rV   rX   r¾   rÑ   rÄ   r!   r   ú<module>r×      sˆ   ðñõ #å Ý *ß aÕ aÝ 2Û 	Û Û ß %Ð %óBò3ð
 ˆR�Z‰ZÐ*Ó+€
ò	ò	!ô4ò"ò>ôBm�}ô mô`B �9ô B óJ"r!   