
    gi#R                       d Z ddlmZ ddlZddlmZmZmZmZm	Z	m
Z
 ddlmZmZmZ ddlmZ ddlmZmZmZ erdd	lmZ d
Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z  G d de          Z! G d d e          Z" G d! d"e          Z# G d# d$e          Z$ G d% d&e          Z%dS )'z
Block level elements
    )annotationsN)TYPE_CHECKINGAnyMatch
NamedTupleSequencecast   )inlineinline_parserpatterns)Element)	find_nextnormalize_labelpartition_by_spaces)Source)Document	CodeBlockHeadingListListItem	BlankLineQuote
FencedCodeThematicBreak	HTMLBlock
LinkRefDefSetextHeading	Paragraphc                  x    e Zd ZU dZg Zded<   dZdZdZded<   dZ	dZ
edd            Zedd            ZddZdS )BlockElementz+Any block element should inherit this classzSequence[Element]children   F strinline_bodysourcer   returnr   c                    t                      )zTest if the source matches the element at current position.
        The source should not be consumed in the method unless you have to.

        :param source: the ``Source`` object of the content to be parsed
        NotImplementedErrorclsr'   s     c/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/marko/block.pymatchzBlockElement.match2   s     "###    c                    t                      )aa  Parses the source. This is a proper place to consume the source body and
        return an element or information to build one. The information tuple will be
        passed to ``__init__`` method afterwards. Inline parsing, if any, should also
        be performed here.

        :param source: the ``Source`` object of the content to be parsed
        r*   r,   s     r.   parsezBlockElement.parse;   s     "###r0   oboolc                "    | j         |j         k     S N)priority)selfr3   s     r.   __lt__zBlockElement.__lt__F   s    }qz))r0   N)r'   r   r(   r   )r3   r!   r(   r4   )__name__
__module____qualname____doc__r"   __annotations__r7   virtualr&   override_prefixclassmethodr/   r2   r9    r0   r.   r!   r!   "   s         55 #%H$$$$H GKHG$ $ $ [$ $ $ $ [$* * * * * *r0   r!   c                  "    e Zd ZdZdZdZddZdS )	r   zDocument node element.r$   Tr(   Nonec                "    g | _         i | _        d S r6   )r"   link_ref_defs)r8   s    r.   __init__zDocument.__init__P   s    9;r0   N)r(   rE   )r:   r;   r<   r=   rA   r?   rH   rC   r0   r.   r   r   J   s8          GG< < < < < <r0   r   c                  N    e Zd ZdZdZddZedd            Zedd            ZdS )r   zBlank linesr#   startintr(   rE   c                    || _         d S r6   )_anchor)r8   rJ   s     r.   rH   zBlankLine.__init__Z   s    r0   r'   r   r4   c                \    |                                 }|d uo|                                 S r6   )	next_linestrip)r-   r'   lines      r.   r/   zBlankLine.match]   s.    !!44

$44r0   c                    |j         }|j        sE|                     |          r0|                                 |j        s|                     |          0|S r6   )pos	exhaustedr/   consume)r-   r'   rJ   s      r.   r2   zBlankLine.parseb   s\    
" 	syy'8'8 	NN " 	syy'8'8 	r0   N)rJ   rK   r(   rE   r'   r   r(   r4   )r'   r   r(   rK   	r:   r;   r<   r=   r7   rH   rB   r/   r2   rC   r0   r.   r   r   U   ss        H    5 5 5 [5    [  r0   r   c                  |    e Zd ZdZdZ ej        dej                  Zdd	Z	e
dd            Ze
dd            ZdS )r   zHeading element: (### Hello
)   zG {0,3}(#{1,6})((?=\s)[^\n]*?|[^\n\S]*)(?:(?<=\s)(?<!\\)#+)?[^\n\S]*$\n?flagsr/   
Match[str]r(   rE   c                    t          |                    d                    | _        |                    d                                          | _        d S )Nr
      )lengrouplevelrP   r&   r8   r/   s     r.   rH   zHeading.__init__s   s?    Q((
 ;;q>>//11r0   r'   r   Match[str] | Nonec                6    |                     | j                  S r6   	expect_repatternr,   s     r.   r/   zHeading.matchw   s    ,,,r0   c                <    |j         }|                                 |S r6   )r/   rU   r-   r'   ms      r.   r2   zHeading.parse{   s    Lr0   N)r/   r\   r(   rE   r'   r   r(   rc   )r:   r;   r<   r=   r7   recompileMrg   rH   rB   r/   r2   rC   r0   r.   r   r   j   s        ((HbjRd  G
2 2 2 2 - - - [-    [  r0   r   c                      e Zd ZdZdZd	dZdS )
r   zQSetext heading: (Hello
===
)

    It can only be created by Paragraph.parse.
    Tlines	list[str]r(   rE   c                    |                                                                 d         dk    rdnd| _        d                    d |D                                                       | _        d S )Nr   =r
   r^   r$   c              3  >   K   | ]}|                                 V  d S r6   lstrip.0rQ   s     r.   	<genexpr>z)SetextHeading.__init__.<locals>.<genexpr>   s*      "C"CT4;;=="C"C"C"C"C"Cr0   )poprP   ra   joinr&   r8   rp   s     r.   rH   zSetextHeading.__init__   se    ))++++--a0C77QQQ
77"C"CU"C"C"CCCIIKKr0   Nrp   rq   r(   rE   )r:   r;   r<   r=   r?   rH   rC   r0   r.   r   r      s?         
 GL L L L L Lr0   r   c                  f    e Zd ZdZdZddZedd
            Zedd            Ze	dd            Z
dS )r   z0Indented code block: (    this is a code block
)   rp   r%   r(   rE   c                X    t          j        |d          g| _        d| _        d| _        d S )NFr$   )r   RawTextr"   langextrar|   s     r.   rH   zCodeBlock.__init__   s*    u556	


r0   r'   r   c                    |                     d          }|j        dz   }t          |j        t                    r|j        d d         dz   }|                     ||          }||j        _        |S )NF {4})rO   prefix
isinstancestater   strip_prefixcontext	code_line)r-   r'   rQ   r   s       r.   r/   zCodeBlock.match   sn    &&'flE** 	1]3B3'&0Ff--#' r0   c                   |j         dz   }|j        j        g}|                                 |                                 |j        s|                                }|l|                                sX|                                 |                     ||          }|r|	                    |           n|	                    d           nr| 
                    |          rH|	                    |j        j                   |                                 |                                 n|                                 n|j        d                    |                              d          dz   S )Nr   
r$   )r   r   r   rU   anchorrT   rO   rP   r   appendr/   resetr{   rstrip)r-   r'   r   rp   rQ   stripped_lines         r.   r2   zCodeBlock.parse   sJ   ')*" 	##%%D

    # 0 0v > >  'LL////LL&&&&6"" V^5666    " 	  wwu~~$$T**T11r0   rQ   r   c                   t          j        ||                     d                    }|sdS |                                }t	          t          |                     D ]w}| d |dz                                d          }t          |          |k     r6t          |          |z
  }|dk    r| |dz   d          c S || d          | |dz   d          z   c S dS )Nr   r$   r
   r   )rl   r/   
expandtabsendranger_   )rQ   r   r/   r   iexpandedds          r.   r   zCodeBlock.strip_prefix   s    !3!344 	2iikks4yy!! 	1 	1AGa!eG}//22H8}}s""H#AAvvAEGG}$$$QBCC=4A=0000rr0   Nrp   r%   r(   rE   r'   r   r(   r%   )rQ   r%   r   r%   r(   r%   )r:   r;   r<   r=   r7   rH   rB   r/   r2   staticmethodr   rC   r0   r.   r   r      s        ;;H   
    [ 2 2 2 [2.    \  r0   r   c                      e Zd ZdZdZ ej        dej                  Z G d de	          Z
dd
Zedd            Zedd            ZdS )r   z)Fenced code block: (```python
hello
```
)   z"( {,3})(`{3,}|~{3,})[^\n\S]*(.*?)$c                  8    e Zd ZU ded<   ded<   ded<   ded<   dS )FencedCode.ParseInfor%   r   leadingr   r   Nr:   r;   r<   r>   rC   r0   r.   	ParseInfor      s4         			




r0   r   r/   tuple[str, str, str]r(   rE   c                    t           j                            |d                   | _        |d         | _        t          j        |d         d          g| _        d S )Nr   r
   r^   F)r   Literalstrip_backslashr   r   r   r"   rb   s     r.   rH   zFencedCode.__init__   sF    N2258<<	1X
a%889r0   r'   r   rc   c                    |                     | j                  }|sd S |                                \  }}}|d         dk    rd|v rd S t          |          \  }}}|                     ||||          |j        _        |S )Nr   `)rf   rg   groupsr   r   r   	code_info)	r-   r'   rj   r   r   infor   _r   s	            r.   r/   zFencedCode.match   s    S[)) 	4 !

1:4,T22a#&==$#N#N r0   c                N   |                                  |                                 g }|j        j        }|j        s|                                 }|n|                                 t          j        d|t
          j                  }|r|j        |	                    d          v rn\|
                    |j        |          }|dk    r||d          }n|                                }|                    |           |j        |j        |j        d                    |          fS )Nz {,3}(~+|`+)[^\n\S]*$rZ   r
   r   r$   )rO   rU   r   r   rT   rl   r/   rn   r   r`   match_prefixr   rv   r   r   r   r{   )r-   r'   rp   
parse_inforQ   rj   
prefix_lens          r.   r2   zFencedCode.parse   s   +1>+C
" 	##%%D|NN14rtDDDA Z'1771::55,,Z->EEJQJKK({{}}LL " 	 
 0"''%..@@r0   N)r/   r   r(   rE   rk   )r'   r   r(   r   )r:   r;   r<   r=   r7   rl   rm   rn   rg   r   r   rH   rB   r/   r2   rC   r0   r.   r   r      s        66Hbj>EEG    J   : : : :
 	 	 	 [	 A A A [A A Ar0   r   c                  t    e Zd ZdZdZ ej        dej                  Ze	dd	            Z
e	dd
            ZdS )r   zHorizontal rules: (----
)   z {,3}([-_*][^\n\S]*){3,}$\n?rZ   r'   r   r(   r4   c           
         |                     | j                  }|sdS t          t          t	          j        dd|                                                              dk    S )NFz\s+r$   r
   )rf   rg   r_   setrl   subr`   ri   s      r.   r/   zThematicBreak.match  sU    S[)) 	53rvfb!''))445566!;;r0   c                >    |                                   |             S r6   )rU   r,   s     r.   r2   zThematicBreak.parse  s    suur0   NrV   )r'   r   r(   r   )r:   r;   r<   r=   r7   rl   rm   rn   rg   rB   r/   r2   rC   r0   r.   r   r     sv        $$Hbj8EEEG< < < [<    [  r0   r   c                  N    e Zd ZdZdZddZedd            Zedd            ZdS )r   zHTML blocks, parsed as it isr#   rp   r%   r(   rE   c                    || _         d S r6   )bodyr|   s     r.   rH   zHTMLBlock.__init__  s    			r0   r'   r   
int | boolc                   d |j         _        |                    d          rE|j        sJ t	          j        d|j                            d           d          |j         _        dS |                    d          r t	          j        d          |j         _        dS |                    d          r t	          j        d	          |j         _        d
S |                    d          r t	          j        d          |j         _        dS |                    d          r t	          j        d          |j         _        dS d                    d                    t          j
                            }|                    d|z            rd |j         _        dS |                    dt          j        t          j        dz            rd |j         _        dS dS )Nz*(?i) {,3}<(script|pre|style|textarea)[>\s]z(?i)</r
   >z	 {,3}<!--z-->r^   z {,3}<\?z\?>   z {,3}<!r   z {,3}<!\[CDATA\[z\]\]>r#   z(?:{})|z(?im) {,3}</?%s(?: +|/?>|$)rY   zG(?m) {,3}(<%(tag)s(?:%(attr)s)*[^\n\S]*/?>|</%(tag)s[^\n\S]*>)[^\n\S]*$)tagattrr   F)r   html_endrf   r/   rl   rm   r`   formatr{   r   tagstag_nameattribute_no_lf)r-   r'   	block_tags      r.   r/   zHTMLBlock.match  s   "&IJJ 	<&(j1S6<;M;Ma;P;P1S1S1S&T&TFN#1L)) 	&(j&8&8FN#1K(( 	&(j&8&8FN#1J'' 	&(j&6&6FN#1/00 	&(j&:&:FN#1$$SXXhm%<%<==	:YFGG 	&*FN#1V'1IJJK
 
 	 '+FN#1ur0   c                   g }|j         s|                                }|n|                    |           |j        j        5|j        j                            |          r|                                 nIn-|                                dk    r|                                 n|                                 |j         d	                    |          S )Nr$   )
rT   rO   r   r   r   searchrU   rP   rz   r{   )r-   r'   rp   rQ   s       r.   r2   zHTMLBlock.parse=  s    " 	##%%D|LL~&2>*11$77 NN$$$ ##		NN " 	 wwu~~r0   Nr   )r'   r   r(   r   r   rW   rC   r0   r.   r   r     ss        &&H       [>    [  r0   r   c                      e Zd ZdZdZ ej        dej                  Zdd	Z	e
dd            Zedd            Ze
ddd            Ze
dd            ZdS )r   zA paragraph elementr
   z
[^\n]+$\n?rZ   rp   rq   r(   rE   c                    d                     d |D                                           d          }|| _        d| _        d S )Nr$   c              3  >   K   | ]}|                                 V  d S r6   ru   rw   s     r.   ry   z%Paragraph.__init__.<locals>.<genexpr>W  s*      <<dDKKMM<<<<<<r0   r   F)r{   r   r&   _tight)r8   rp   	str_liness      r.   rH   zParagraph.__init__V  sC    GG<<e<<<<<CCDII	$r0   r'   r   r4   c                :    |                     | j                  d uS r6   re   r,   s     r.   r/   zParagraph.match[  s    ,,D88r0   rQ   r%   c                0    t          j        d|           d uS )Nz {,3}(=+|-+)[^\n\S]*$)rl   r/   )rQ   s    r.   is_setext_headingzParagraph.is_setext_heading_  s    x0$77tCCr0   Flazyc                T   |j         }|j        }	 |j        d                             |          s`|j        d                             |          s@|j        d                             |          s |j        d                             |          r
	 ||_        dS |rDt          |j        t
                    r*|j        d                             |          r
	 ||_        dS |j        d                             |          rt          d|j        d                                       |                                	                                d	          }|s&|d
         d d         dk    s
|d
         dv r|d         r
	 ||_        dS |j        d                             |          }|r|dk    r
	 ||_        dS |j        d                             |          r=|s1| 
                    |                                          r
	 ||_        dS 	 ||_        dS 	 ||_        dS # ||_        w xY w)Nr   r   r   r   Tr   r   type[ListItem]r   r
   r   1z*-+r   r   r   r   F)parserr/   block_elementsr   r   r   r	   parse_leadingrO   r   r   )r-   r'   r   r   
prev_matchresult	html_types          r.   break_paragraphzParagraph.break_paragraphc  sl   \
	&%g.44V<<(399&AA (5;;FCC (6<<VDD	 , &FLLL) v|T22 )*5;;FCC
   &FLLL $V,226::  $f&;J&G - 0 0 2 2 9 9 ; ;Q??    F1IcrcNc11VAY%5G5GVTUY5G &FLLL -k:@@HHI Y!^^ &FLLL $_5;;FCC  ! 5 5f6F6F6H6H I I !  &FLLL  &FLLL %FLLL:FL%%%%s&   B H <H  BH (H 7A	H 	H'list[str] | SetextHeadingc                <   t          t          |                                          g}|                                 d}|j        sU|sR|                     |          rn;|                                }|rh|                    |           |                                 |                     |          r) t          d|j        j	        d                   |          S n|j
        d d          }t          |j
                  dk    r|                                 |                                }|rC|                     |d          rd}n)|                    |           |                                 nt          |j
                  dk    ||_
        |j        s|R|S )NFztype[SetextHeading]r   r
   T)r	   r%   rO   rU   rT   r   r   r   r   r   _statesr_   	pop_state)r-   r'   rp   	end_parserQ   statesrO   s          r.   r2   zParagraph.parse  s   c6++--../	" 	(9 	(""6** ##%%D (T"""   ((.. 4-4_E      *&.))A--$$&&& & 0 0 2 2I  ..vt<< -(,II!LL333"NN,,, &.))A-- "(9 " 	(9 	(: r0   Nr}   rV   )rQ   r%   r(   r4   )F)r'   r   r   r4   r(   r4   )r'   r   r(   r   )r:   r;   r<   r=   r7   rl   rm   rn   rg   rH   rB   r/   r   r   r   r2   rC   r0   r.   r   r   P  s        Hbjbd333G   
 9 9 9 [9 D D D \D  &  &  &  & [ &D ! ! ! [! ! !r0   r   c                  J    e Zd ZdZdZdZedd            Zedd	            Zd
S )r   z$block quote element: (> hello world)rY   z {,3}>[^\n\S]?r'   r   r(   rc   c                ,    |                     d          S )Nz {,3}>)rf   r,   s     r.   r/   zQuote.match  s    	***r0   c                     |             }|                     |          5  |j                            |          |_        d d d            n# 1 swxY w Y   |S r6   )under_stater   parse_sourcer"   )r-   r'   r   s      r.   r2   zQuote.parse  s    && 	@ 	@#]77??EN	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s    AAANrk   )r'   r   r(   r   )	r:   r;   r<   r=   r7   rA   rB   r/   r2   rC   r0   r.   r   r     sb        ..HG+ + + [+    [  r0   r   c                      e Zd ZdZdZdZ ej        d          Z G d de	          Z
ddZedd            Zedd            ZdS )r   zList block elementrY   r$   $ {,3}(\d{1,9}[.)]|[*\-+])[ \t\n\r\f]c                  .    e Zd ZU ded<   ded<   ded<   dS )List.ParseInfor%   bulletr4   orderedrK   rJ   Nr   rC   r0   r.   r   r     s+         




r0   r   r   r   r(   rE   c                >    |\  | _         | _        | _        d| _        d S )NT)r   r   rJ   tight)r8   r   s     r.   rH   zList.__init__  s    04-T\4:


r0   r'   r   r4   c                $   |                     | j                  }|sdS |                    d          dd}}}|d d                                         rd}t	          |d d                   }|                     |||          |j        _        |d uS )NFr
   r   T)rf   rg   r`   isdigitrK   r   r   	list_info)r-   r'   rj   r   r   rJ   s         r.   r/   z
List.match  s    S[)) 	5!"UA#2#;   	%Gss$$E#&==%#H#H }r0   c                b    | |j         j                  }g }d}d}|j        }|                    |          5  |j        s|j        d                             |          r|j        d                             |          }t          |t                    s$ t          d|j        d                   |          }|                    |           |                                 |rd}nLt                              |          rt                              |           d}n|                                 n|j        d d d            n# 1 swxY w Y   |ot          d |D                        }|r2|D ]/}||_        |j        D ]}	t          |	t$                    r||	_        0||_        ||_        |S )NTFr   r   c              3  T   K   | ]#}|j         D ]}t          |t                    V  $d S r6   )r"   r   r   )rx   itemes      r.   ry   zList.parse.<locals>.<genexpr>  sS       "
 "
)-4="
 "
>?Jq)$$"
 "
 "
 "
 "
 "
 "
r0   )r   r   r   r   rT   r   r/   r2   r   r!   r	   r   r   r   r   anyr   r"   r   r   )
r-   r'   r   r"   r   has_blank_liner   elr   childs
             r.   r2   z
List.parse  s)   FN,--&& 	 	& (4::6BB .z:@@HHB%b,77 VT"2F4I*4UVV  OOB'''MMOOO% & %__V,, OOF+++%)NNLLNNN! & 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	$  
c "
 "
19"
 "
 "
 
 
 
  	-  - -#!] - -E!%33 -',- "s   DEE
E
N)r   r   r(   rE   rV   )r'   r   r(   r   )r:   r;   r<   r=   r7   rA   rl   rm   rg   r   r   rH   rB   r/   r2   rC   r0   r.   r   r     s        HGbj@AAG    J   
    	 	 	 [	 # # # [# # #r0   r   c                      e Zd ZdZdZdZ ej        d          Z G d de	          Z
ddZedd            Zedd            Zedd            ZdS )r   z7List item element. It can only be created by List.parseTFr   c                  .    e Zd ZU ded<   ded<   ded<   dS )ListItem.ParseInforK   indentr%   r   midNr   rC   r0   r.   r   r     s+         r0   r   r   r   r(   rE   c                    |\  }}}d|z  t          j        |          z   d|z  z   | _        dt          |          |z   |pdz   z  | _        d S )N r
   )rl   escaperA   r_   _second_prefix)r8   r   r   r   r   s        r.   rH   zListItem.__init__  sX    "V|bi&7&77#)C!S[[6%9SXA%FGr0   rQ   r%   
prefix_posrK   tuple[int, str, int, str]c                   ||d                               d                                          }t          |          |z
  t          |          z
  }t          |          \  }}}t          |          }|dk    rd}||||fS )Nr   r
   )r   rv   r_   r   )	r-   rQ   r  r   r   r   spacestailr   s	            r.   r   zListItem.parse_leading  s    Z[[)44Q77>>@@TZ'#m*<*<<2=AA&kk77CvsD((r0   r'   r   r4   c                   |j         j        d                             |          rdS |                    | j                  sdS t          t          |                    d                                        d          }d}t          j        |j
        |          }||                                }|                     |                                |          \  }}}}|j        }	t          |	t                     sJ |	j        r|d d                                         r|d         |	j        d         k    rdS |	j        s||	j        k    rdS |                     |||          |j        _        dS )Nr   Fr   r   r   T)r   r   r/   rf   rg   r	   r%   rO   r   rl   r   r   r   r   r   r   r   r   r   r   r   r   list_item_info)
r-   r'   rO   r  rj   r   r   r   r   parents
             r.   r/   zListItem.match  s]   ='8>>vFF 	5,, 	5f..u5566AA!DD	
HV]I..=J!$!2!293C3C3E3Ez!R!RQ&$'''''N	3B3K''))	 bzV]2...5~ 	&FM"9"95(+ffc(J(J%tr0   c                    | |j         j                  }g |_        |                    |          5  |                                                                s\|                                 |                                r&|                                                                s|cd d d            S |j                            |          |_        d d d            n# 1 swxY w Y   t          |j        d         t                    r?t          t          |j                                                  }|j        r|j        |_        |S )Nr   )r   r  r"   r   rO   rP   rU   r   r   r   r   r	   rz   rM   rS   )r-   r'   r   	blanklines       r.   r2   zListItem.parse4  s   FN122&& 	@ 	@##%%++-- !   '')) !1A1A1C1C1I1I1K1K ! 		@ 	@ 	@ 	@ 	@ 	@ 	@ 	@
 $]77??EN	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ enR()44 	/Y(:(:(<(<==I~ /&.
s   A6C 5C  C$'C$N)r   r   r(   rE   )rQ   r%   r  rK   r(   r  rV   )r'   r   r(   r   )r:   r;   r<   r=   r?   r   rl   rm   rg   r   r   rH   rB   r   r/   r2   rC   r0   r.   r   r      s        AAGFbj@AAG    J   
H H H H
 ) ) ) [)    [0    [  r0   r   c                      e Zd ZdZ ej        dej                  Z G d de          Z	dddZ
edd            Zedd            ZdS )r   z@Link reference definition:
    [label]: destination "title"
    z {,3}(\[[\s\S]*?)(?=\n\n|\Z)rZ   c                  8    e Zd ZU ded<   ded<   ded<   ded<   dS )LinkRefDef.ParseInfozinline_parser.Group
link_label	link_dest
link_titlerK   r   Nr   rC   r0   r.   r   r  M  s=         ''''&&&&''''r0   r   Nlabelr%   texttitle
str | Noner(   rE   c                0    || _         || _        || _        d S r6   )r  destr  )r8   r  r  r  s       r.   rH   zLinkRefDef.__init__S  s    
	


r0   r'   r   r4   c                *   |                     | j                  }|sdS |j        }t          j        ||                    d                    }|sdS |j        t          |          k    s||j                 dk    rdS t          j        ||j        dz             }	 t          j	        ||          \  }}n# t          j
        $ r Y dS w xY wt          |j        |j                  }t          |d|          }|dk    r|dz  }nt          |          }|||                                         rE|j        r<d||j        |j                 v r&t          j        }t          |d|j                  dz   }ndS |                     ||||          |j        _        dS )NFr
   :r   r   T)rf   rg   _bufferr   _parse_link_labelrJ   r   r_   _parse_link_separator_parse_link_dest_title
ParseErrormaxr   rP   r  _EMPTY_GROUPr   r   linkref_info)	r-   r'   rj   r  r  r   r  r  r   s	            r.   r/   zLinkRefDef.matchX  s   S[)) 	5~"4T1771::FF
 	5>SYY&&$z~*>#*E*E5/jnq6HII	$1$Hq$Q$Q!Izz' 	 	 	55		z~..dA&&!881HCCd))C#; 	 44	
@P0P+Q#Q#Q*7
dIM::Q> u&)mm	:s'
 '
# ts   B4 4CCc                    |j         j        \  }}}}t          |j        dd                   }|j        j        }||vr|j        |j        f||<   ||_         | ||j        |j                  S )Nr
   r   )r   r$  r   r  rootrG   rS   )r-   r'   r  r  r  rS   normalized_labelrG   s           r.   r2   zLinkRefDef.parse{  sw    "(."=tUC*5:ad+;<<1=00/3y%*.EM*+
s#TY
;;;r0   r6   )r  r%   r  r%   r  r  r(   rE   rV   )r'   r   r(   r   )r:   r;   r<   r=   rl   rm   rn   rg   r   r   rH   rB   r/   r2   rC   r0   r.   r   r   F  s          bj8EEEG    J       
       [ D < < < [< < <r0   r   )&r=   
__future__r   rl   typingr   r   r   r   r   r	   r$   r   r   r   elementr   helpersr   r   r   r'   r   __all__r!   r   r   r   r   r   r   r   r   r   r   r   r   r   rC   r0   r.   <module>r-     sP    # " " " " " 				 H H H H H H H H H H H H H H H H - - - - - - - - - -       D D D D D D D D D D "%* %* %* %* %*7 %* %* %*P< < < < <| < < <       *    l   0
L 
L 
L 
L 
LL 
L 
L 
L; ; ; ; ; ; ; ;|2A 2A 2A 2A 2A 2A 2A 2Aj    L   &8 8 8 8 8 8 8 8vX X X X X X X Xv    L   $@ @ @ @ @< @ @ @FC C C C C| C C CL=< =< =< =< =< =< =< =< =< =<r0   