
    Mhy                        d dl Z d dlmZmZmZmZmZmZ ddlm	Z	 ddl
mZ ddlmZ erddlmZ ddlmZmZ dd	lmZ dd
lmZ dgZ e j        d          Zdez   dz   Zdez   dz   Zdddee         dddefdZdddee         de	defdZdddedede	deeef         f
dZddd eeeeeef                  f         de	deeeeeef                  f         fd!Z d"d#dededefd$Z!d"d#d%edefd&Z"d"d#d%edededef
d'Z#d)d(Z$dS )*    N)TYPE_CHECKINGAnyDictListMatchUnion   )
BlockState)
LINK_LABEL)unikey)BlockParser)BaseRendererInlineState)InlineParser)Markdown	footnotesz\n{2,}z/^(?P<footnote_lead> {0,3})\[\^(?P<footnote_key>zU)]:[ \t](?P<footnote_text>[^\n]*(?:\n+|$)(?:(?P=footnote_lead) {1,3}(?! )[^\n]*\n+)*)z\[\^(?P<footnote_key>z)\]inliner   mstater   returnc                    t          |                    d                    }|j                            d          }|rw||v rs|j                            d          }|sg }||vr|                    |           ||j        d<   |                    d|d|                    |          dz   id           n+|                    d|                    d	          d
           |                                S )Nfootnote_keyref_footnotesr   footnote_refindex   )typerawattrstextr   )r   r   )r   groupenvgetappendappend_tokenr   end)r   r   r   keyrefnotess         Y/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mistune/plugins/footnotes.pyparse_inline_footnoter+      s    
((
)
)C
)--
(
(C
 	@sczz	k** 	EeLL%*EIk"N3'SXS^S^_bScScfgSgIhiijjjjF1771::>>???5577N    blockr   c                     |j                             d          }|si }t          |                    d                    }||vr"|                    d          ||<   ||j         d<   |                                S )Nr   r   footnote_text)r"   r#   r   r!   r&   )r-   r   r   r(   r'   s        r*   parse_ref_footnoter0   -   sr    
)--
(
(C 
((
)
)C
#~~77?++C%(	/"5577Nr,   r'   r   c                 f   |j                             d          }|st          d          ||         }|                                }d }|dd          D ]}|r n|rt	          |          t	          |                                          z
  }t          j        dt          |          z   dz   t          j	                  }	|	
                    d|                                          }t                              |          }
d |
D             }n|                                }d	|d
g}d|||ddS )Nr   zMissing 'ref_footnotes'.r   z^ {z,})flags c                     g | ]}d |dS )	paragraphr   r     ).0ss     r*   
<listcomp>z'parse_footnote_item.<locals>.<listcomp>J   s     DDD[!44DDDr,   r5   r6   footnote_item)r'   r   )r   childrenr   )r"   r#   
ValueError
splitlineslenlstriprecompilestrMsubstrip_PARAGRAPH_SPLITsplit)r-   r'   r   r   r(   r    linessecond_linespacespatternitemsr<   s               r*   parse_footnote_itemrN   9   sE   
)--
(
(C 53444s8DOOEKQRRy   	E	  9[!!C(:(:(<(<$=$==*Vc&kk1E9FFF{{2t$$**,, &&t,,DDeDDDzz||($778#CZ_D`D`aaar,   mdr   resultc                      j                             d          }|s|S  fdt          |          D             }t                      d|dg_                                       }||z   S )Nr   c                 J    g | ]\  }}t          j        ||d z              S )r   )rN   r-   )r8   ikrO   r   s      r*   r:   z%md_footnotes_hook.<locals>.<listcomp>X   s2    \\\41a#BHaQ>>\\\r,   )r   r<   )r"   r#   	enumerater
   tokensrender_state)rO   rP   r   r)   r<   outputs   ` `   r*   md_footnotes_hookrY   Q   s     IMM+&&E \\\\\9UZK[K[\\\HLLE(h??@EL__U##FF?r,   rendererr   c                 R    t          |          }d|z   dz   }|dz   |z   dz   |z   dz   S )Nz$<sup class="footnote-ref" id="fnref-">z<a href="#fn-z
</a></sup>)rC   )rZ   r'   r   rS   htmls        r*   render_footnote_refr^   _   s;    E

A1A5<D/!A%,q0<??r,   r    c                     d|z   dz   S )Nz!<section class="footnotes">
<ol>
z</ol>
</section>
r7   )rZ   r    s     r*   render_footnotesr`   e   s    047:OOOr,   c                     t          |          }d|z   dz   }|                                d d         |z   dz   }d|z   dz   |z   dz   S )Nz<a href="#fnref-z" class="footnote">&#8617;</a>z</p>z<li id="fn-r\   z</li>
)rC   rstrip)rZ   r    r'   r   rS   backs         r*   render_footnote_itemre   i   sW    E

A!$DDD;;=="$v-D1t#d*Y66r,   c                    | j                             dt          t          d           | j                            dt
          t          d           | j                            t                     | j
        rr| j
        j        dk    rd| j
                            dt                     | j
                            dt                     | j
                            d	t                     d
S d
S d
S )a  A mistune plugin to support footnotes, spec defined at
    https://michelf.ca/projects/php-markdown/extra/#footnotes

    Here is an example:

    .. code-block:: text

        That's some text with a footnote.[^1]

        [^1]: And that's the footnote.

    It will be converted into HTML:

    .. code-block:: html

        <p>That's some text with a footnote.<sup class="footnote-ref" id="fnref-1"><a href="#fn-1">1</a></sup></p>
        <section class="footnotes">
        <ol>
        <li id="fn-1"><p>And that's the footnote.<a href="#fnref-1" class="footnote">&#8617;</a></p></li>
        </ol>
        </section>

    :param md: Markdown instance
    footnotelink)beforeref_footnoteref_linkr]   r   r;   r   N)r   registerINLINE_FOOTNOTEr+   r-   REF_FOOTNOTEr0   after_render_hooksr$   rY   rZ   NAMEr^   re   r`   )rO   s    r*   r   r   p   s    2 I	     H	       !2333	{ <r{'611
^-@AAA
_.BCCC
[*:;;;;;< <11r,   )rO   r   r   N)%rA   typingr   r   r   r   r   r   corer
   helpersr   utilr   block_parserr   r   r   inline_parserr   markdownr   __all__rB   rG   rn   rm   rC   intr+   r0   rN   rY   r^   r`   re   r   r7   r,   r*   <module>rz      s   				 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?                         $******00000000,,,,,,######-2:i(( )*-		  +Z7&@. U3Z  Z]     	m 	c
 	: 	RU 	 	 	 	b} b3 bs b: bZ^_bdg_gZh b b b b0!#tDcN';";<EO
3T#s(^$$%   @. @s @3 @3 @ @ @ @P~ PS PS P P P P7> 7 73 7s 7WZ 7 7 7 7*< *< *< *< *< *<r,   