
    giG                    4   d Z ddlmZ ddlZddlmZmZmZmZ ddl	m
Z
 ddlmZmZmZ ddlmZ erdd	lmZ eee         d
f         Zee         Z G d de          Z eddd          ZdZd                    d  edd          D                        ed          z   Z G d de          ZdPdZ dQd"Z!	 	 	 dRdSd(Z" G d) d*          Z#dTd.Z$dUd4Z%dVd6Z&dWd7Z'dXd9Z(	 dYdZd>Z)d[d@Z*d\dAZ+d]dDZ,d^dGZ-d_dIZ.d`dLZ/ G dM dN          Z0 G dO d
          Z1dS )az
Parse inline elements
    )annotationsN)TYPE_CHECKINGMatch
NamedTupleUnion   )patterns)	find_next	is_pairednormalize_label)InlineElement)SourceMatchObjc                  .    e Zd ZU ded<   ded<   ded<   dS )Groupintstartendz
str | NonetextN)__name__
__module____qualname____annotations__     k/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/marko/inline_parser.pyr   r      s0         JJJHHHr   r   z 
	 c              #  4   K   | ]}t          |          V  d S N)chr).0is     r   	<genexpr>r$      s(      551A555555r          c                      e Zd ZdZdS )
ParseErrorzRaised when parsing fails.N)r   r   r   __doc__r   r   r   r(   r(   !   s        $$$$r   r(   r   strelementslist[ElementType]fallbackElementTypesourcer   returnlist[InlineElement]c           
         G fddt                     }g }t          | j        j                  D ]'}|                    t          ||| |                     (|D ]A}|                    |           D ]'}|                    t          ||| |                     (B|                                 t          |          }t          || |          S )zParse given text and produce a list of inline elements.

    :param text: the text to be parsed.
    :param elements: the element types to be included in parsing
    :param fallback: fallback class when no other element type is matched.
    c                       e Zd ZdZd fdZdS )	parse.<locals>.LinkOrEmphTmatch_Matchr0   r   c                r    t          |t                    sJ  j        j        |j                 |          S r    )
isinstancer   parserinline_elementsetype)clsr5   r/   s     r   __new__z!parse.<locals>.LinkOrEmph.__new__2   s5    eX.....=6=0=eDDDr   N)r5   r6   r0   r   )r   r   r   parse_childrenr=   r/   s   r   
LinkOrEmphr4   /   s@        	E 	E 	E 	E 	E 	E 	E 	Er   r@   r?   )r-   )
r   find_links_or_emphsrootlink_ref_defsappendTokenfindsort_resolve_overlapmake_elements)	r   r+   r-   r/   r@   tokensmr;   r5   s	      `     r   parserL   %   s   E E E E E E E] E E E F v{'@AA < <eJ4::;;;; ? ?ZZVZ44 	? 	?EMM%udH==>>>>	?
KKMMMf%%F9999r   rJ   list[Token]c                   | s| S g }| d         }| dd          D ]}|                     |          }|t          j        k    r|                    |           |}?|t          j        k    r|                    |           e|t          j        k    r|j        j        |j        j        k     r|}|                    |           |S Nr   r   )	relationrE   PRECEDErD   CONTAINappend_child	INTERSECTr;   priority)rJ   resultprevcurrs        r   rH   rH   C   s     F!9Dabbz  MM#MM$DD%-c""""%/!!dj&9CI<N&N&ND
MM$Mr   r   r   r   
int | NoneElementType | Nonec                Z   g }|pt          |          }|}| D ]f}||j        k     r+|                     ||||j                                      |                    |                                           |j        }g||k     r&|                     ||||                              |S )a  Make elements from a list of parsed tokens.
    It will turn all unmatched holes into fallback elements.

    :param tokens: a list of parsed tokens.
    :param text: the original tet.
    :param start: the offset of where parsing starts. Defaults to the start of text.
    :param end: the offset of where parsing ends. Defauls to the end of text.
    :param fallback: fallback element type.
    :returns: a list of inline elements.
    )lenr   rD   
as_elementr   )rJ   r   r   r   r-   rV   prev_endtokens           r   rI   rI   U   s    " #%F

TCH  ek!!MM((45;(>#?@@AAAe&&(()))9#~~hhtHSL122333Mr   c                  R    e Zd ZdZdZdZdZdZddZddZ	ddZ
ddZd dZd!dZdS )"rE   zoAn intermediate class to wrap the match object.
    It can be converted to element by :meth:`as_element()`
    r   r         r;   r.   r5   r6   r   r*   r-   r0   Nonec                ,   || _         || _        |                                | _        |                                | _        |                    |j                  | _        |                    |j                  | _        || _        || _        g | _	        d S r    )
r;   r5   r   r   parse_groupinner_start	inner_endr   r-   children)selfr;   r5   r   r-   s        r   __init__zToken.__init__}   sv     

[[]]
99;; ;;u'8995#455	 %'r   otherr   c                2   | j         |j        k    rt          j        S | j         |j         k    r`| j        j        r,|j        | j        k    r|j         | j        k    rt          j        S | j        j        r| j        |j        k    rt          j	        S t          j
        S r    )r   r   rE   rQ   r;   r>   rg   rh   rR   SHADErT   rj   rl   s     r   rP   zToken.relation   s    8u{""= 8uy  
)%K4#333I//}$z( #T^u{-J-J{"r   childc                V    | j         j        sd S | j                            |           d S r    )r;   r>   ri   rD   )rj   rp   s     r   rS   zToken.append_child   s0    z( 	FU#####r   r   c                    |                      | j                  }|j        rJt          | j                  | _        t          | j        | j        | j        | j        | j	                  |_        |S r    )
r;   r5   r>   rH   ri   rI   r   rg   rh   r-   )rj   es     r   r^   zToken.as_element   sc    JJtz"" 	,T];;DM&	  AJ r   c                n    d                     | j        j        | j        j        | j        | j                  S )Nz<{}: {} start={} end={}>)format	__class__r   r;   r   r   rj   s    r   __repr__zToken.__repr__   s1    )00N#TZ%8$*dh
 
 	
r   oboolc                "    | j         |j         k     S r    )r   )rj   ry   s     r   __lt__zToken.__lt__   s    zAG##r   N)
r;   r.   r5   r6   r   r*   r-   r.   r0   rd   )rl   rE   r0   r   )rp   rE   r0   rd   )r0   r   r0   r*   )ry   rE   r0   rz   )r   r   r   r)   rQ   rT   rR   rn   rk   rP   rS   r^   rx   r|   r   r   r   rE   rE   s   s          GIGE( ( ( (   $ $ $ $
   
 
 
 

$ $ $ $ $ $r   rE   rC   dict[str, tuple[str, str]]list[MatchObj]c                   t          j        d          }d}g }d}g }t          j        d          }|t          |           k     r|rd}|dz  }n| |         dk    rd}|dz  }n|                    | |          r)|                    | |                                          }n| |         dk    rEt          | ||||          }|r*|                                }|                    |           n[|dz  }nU|                    | |          }	|	r8|                    t          |	|                      |	                                }n|dz  }|t          |           k     t          | |d	|           |S )
zFink links/images or emphasis from text.

    :param text: the original text.
    :param link_ref_defs: a mapping of link ref definitions.
    :returns: an iterable of match object.
    z(?:!?\[|\*+|_+)r   Fz&(?<!`)(`+)(?!`)([\s\S]+?)(?<!`)\1(?!`)r   \T]N)	recompiler]   r5   r   look_for_image_or_linkrD   	Delimiterprocess_emphasis)
r   rC   delimiters_rer#   
delimitersescapematchescode_patternnoderK   s
             r   rA   rA      s    J122M	A"$JF G:GHHL
c$ii-- 	FFAA!W__FFAAa(( 	""4++//11AA!W^^)$
A}gVVD HHJJt$$$$Q##D!,,A !!)At"4"4555EEGGQ- c$ii--. T:tW555Nr   r   list[Delimiter]closer   MatchObj | Nonec                t   t          t          |                    d d d         D ]\  }}|j        dvr|j        s nt	          | |j        |                   s nt          |j        || |j        |                   }|j        J |j        dk    rdnd}t          | |dz             pt          | |dz   |j        |          }	|	s nlt          || |j        |	d         ||	d         |	d                   }
t          | |||           |dk    r|d |         D ]}|j        d	k    rd
|_        ||= |
c S d S ||= d S )Nr   )[![r   ImageLinkr   rb   r   r   F)list	enumeratecontentactive_is_legal_link_textr   r   r   _expect_inline_link_expect_reference_linkr   r   r   )r   r   r   rC   r   r#   d	link_textr;   r5   rvs              r   r   r      s    Yz**++DDbD1  19K''x 	E"4#677 	E!%QUU](;<<	~)))9,,&#D%!)44 
8N%!)Y^]9
 9
  	EeT17E!Hiq5QR8TTz1g666F??^ % %9##$AHqM			 t14r   rz   c                $    t          | dd          S )Nr   r   )r   )r   s    r   r   r     s    T3$$$r   c                    |}d}|t          |           k     r:| |         dk    r|rn+d}n| |         t          vrn|dz  }|t          |           k     :|S )NF
Tr   )r]   
WHITESPACE)r   r   r#   has_newlines       r   _parse_link_separatorr   	  sm    AK
c$ii--7d?? KK!WJ&&	Q c$ii-- Hr   Group | Nonec                   | ||dz            dk    rd S t          | d|dz   d          }|dk     rd S | |dz   |         }|                                rt          |          dk    rd S t          ||dz   | ||dz                      S )Nr   r   r   
disallowedr   i  )r
   stripr]   r   )r   r   r#   labels       r   _parse_link_labelr     s    EEAI#%%t$UQY3777A1uutQE;;== CJJ,,tAtEAEM2333r   Fr   	is_inlinetuple[Group, Group]c                   |t          |           k    rt                      | |         dk    rIt          | d|dz   d          }|dk     rt                      |dz   }t          ||| ||                   }nd}d}|}|t          |           k     r| |         }|rd}n||dk    rd	}ns|t          v rn|t
          v rt          d
          |dk    r|dz  }nE|dk    r?|dk    r|dz  }n3|r"t          ||| ||                   }|t          fS t          d          |dz  }|t          |           k     |rt          d          t          ||| ||                   }|j        st          d          |}	t          | |          }|t          |           k    s| |         dk    s| |         dk    r|r	|t          fS | |         dk    rt          | d|dz             }
ng| |         dk    rt          | d|dz             }
nF| |         dk    rt          | d|dz   d          }
n#d| |	|         v r	|t          fS t                      d|cxk     rt          |           k     r#n n | |dz
           t          vrt                      |
dk     rt                      d| ||
         v rt                      t          ||
dz   | ||
dz                      }||fS )N<>r   z<
r   r   Fr   Tz%Invalid character in link destination()zunmatched parenthesiszNo right parenthesis is foundzEmpty link destinationr   "'z

)	r]   r(   r
   r   r   ASCII_CONTROL_EMPTY_GROUPr   r   )r   r   r   right_bracketr#   	link_destescapedpairscrW   r   
link_titles               r   _parse_link_dest_titler   #  s\    Ill3!)S%!)NNN1,,A%IeAg$677		#i..  !A >djm## !HIIIc
c199QJEE > %eQ	%'0B C CI$l22$%<===FA) #i..  ,  B !@AAA%IeAg$677	~ 	75666Di++AC	NNild22ilc6I6Ii6I,&&|s	3A..	1			3A..	1			3A#>>>	46"	"	",&&ll1s9~~)AE"2*"D"Dll
Qwwll1S5!!!llq#'9Qq[#9::Jj  r   tuple[Group, Group, int] | Nonec                f   |t          |           dz
  k    s| |         dk    rdS t          | |dz             }	 t          | |d          \  }}n# t          $ r Y dS w xY wt	          |j        |j                  }t          | |          }|t          |           k    s| |         dk    rdS |||dz   fS )z(link_dest "link_title")r   r   NT)r   r   )r]   r   r   r(   maxr   )r   r   r#   r   r   r   s         r   r   r   e  s    D		Ae!3!3tdEAI..A 6tQ$ O O O	::   tt
imZ^
,
,C
c
*
*C
c$ii49++tj#'))s   A 
AAc                J   t          | |          }|}||j        J |j        dd         p|}n%| ||dz            dk    rt          ||dz   d          }t          ||          }|sd S t          |||d                   }t          |||d                   }|||r|j        n|fS )Nr   r   rb   z[]r   )r   r   r   _get_reference_linkr   )	r   r   r   rC   
link_labelr   rV   r   r   s	            r   r   r   v  s     #4//JE***"%2	eeai	 D	(	(5%!)T22
 66F teUF1I..IueVAY//JzZ#J:>>UKKr   r   tuple[str, str] | Nonec                J    t          |           }|                    |          S r    )r   get)r   rC   normalized_labels      r   r   r     s'     'z22-...r   stack_bottomrd   c                   |x}}t          ||          }|||         }|j        d         dk    r|n|}t          |||          }	|	"||	         }
t          |
j                  dk    rt          |j                  dk    rdnd}t	          |dk    rdnd| |
j        |z
  |j        |z   t          |
j        |j        | |
j        |j                                     }|                    |           ||	dz   |= |||	z
  dz
  z  }|
	                    |          r|	                    |
           |dz  }|	                    |d          r|	                    |           |dk    r|dz
  nd }nL|dk    r|dz
  nd }|j        d         dk    r|}n|}|j
        s"|	                    |           |dk    r|dz
  nd }t          ||          }|||dz   nd}||d = d S )Nr   *rb   r   StrongEmphasisEmphasisT)_next_closerr   _nearest_openerr]   r   r   r   r   rD   removecan_open)r   r   r   r   star_bottomunderscore_bottomrX   d_closerbottomopenerd_openernr5   lowers                 r   r   r     sM    '32K#
z<
0
0C
/c? ( 0 3s : :@Q S&99!&)H)**a//C8H4I4IQ4N4NTUA$%FF  
q "L(.$x|hn7T2U  E NN5!!!6A:+,3<!##Cq!! !!(+++qq$'' ,!!(+++ 1WW#''$CC #aS1WWTF"c))$$*!$ 3!!(+++!$qcAggd:s++E /F !- 8L1aE566r   boundc                    ||dz   nd}|t          |           k     r3| |         }t          |dd          r|S |dz  }|t          |           k     3d S )Nr   r   	can_closeF)r]   getattr)r   r   r#   r   s       r   r   r     sj    &		AA
c*oo

qM1k5)) 	H	Q	 c*oo


 4r   higherr   c                    |dz
  }||nd}||k    rA| |         }t          |dd          r|                    | |                   r|S |dz  }||k    Ad S )Nr   r   r   F)r   	closed_by)r   r   r   r#   r   s        r   r   r     sy     	
A&EEBE
e))qM1j%(( 	Q[[F9K-L-L 	H	Q	 e))
 4r   c                      e Zd Z ej        dej                  Zdd	ZddZddZ	ddZ
ddZddZddZddZdddZddZdS ) r   z\s)flagsr5   r6   r   r*   r0   rd   c                >   |                                 | _         |                                | _        |                                | _        || _        d| _        | j        d         dv r4|                                 | _        |                                 | _	        d S d S )NTr   )r   _)
r   r   groupr   r   r   	_can_openr   
_can_closer   )rj   r5   r   s      r   rk   zDelimiter.__init__  s|    [[]]
99;;{{}}	<?j(( NN,,DM!__..DNNN )(r   rz   c                    | j         d         dk    r|                                 S |                                 o(|                                  p|                                 S Nr   r   )r   is_left_flankingis_right_flankingpreceded_by_puncrw   s    r   r   zDelimiter._can_open  sa    <?c!!((***$$&& 
&&(((CD,A,A,C,C	
r   c                    | j         d         dk    r|                                 S |                                 o(|                                  p|                                 S r   )r   r   r   followed_by_puncrw   s    r   r   zDelimiter._can_close  sa    <?c!!))+++%%'' 
%%'''B4+@+@+B+B	
r   c                F   | j         t          | j                  k     o&| j                            | j        | j                   d u o]|                                  pH| j        dk    p=|                                 p)| j                            | j        | j        dz
            d uS rO   )r   r]   r   whitespace_rer5   r   r   r   rw   s    r   r   zDelimiter.is_left_flanking  s    Hs49~~% F"((DH==E
 %%''' OzQO$$&&O !''	4:>BB$N	
r   c                F   | j         dk    o)| j                            | j        | j         dz
            d u ol|                                  pW| j        t          | j                  k    p:|                                 p&| j                            | j        | j                  d uS rO   )r   r   r5   r   r   r   r]   r   rw   s    r   r   zDelimiter.is_right_flanking  s    JN L"((DJNCCtK
 %%''' Ix3ty>>)I$$&&I !''	48<<DH	
r   c                    | j         t          | j                  k     o#t          j        | j        | j                            S r    )r   r]   r   r	   is_punctuationrw   s    r   r   zDelimiter.followed_by_punc  s9    x#di..( 
X-DIdh.
 .
 	
r   c                f    | j         dk    o&t          j        | j        | j         dz
                     S rO   )r   r	   r   r   rw   s    r   r   zDelimiter.preceded_by_punc  s,    zA~T("9$)DJQRN:S"T"TTr   rl   c                    | j         d         |j         d         k    pZ| j        r| j        s|j        oE|j        o>t          | j         |j         z             dz  dk    ot	          d | |fD                         S )Nr   rc   c              3  L   K   | ]}t          |j                  d z  dk    V   dS )rc   r   N)r]   r   )r"   r   s     r   r$   z&Delimiter.closed_by.<locals>.<genexpr>  s4      GGAAI*a/GGGGGGr   )r   r   r   r]   allro   s     r   r   zDelimiter.closed_by  s    LOu}Q// H0$.VEN4Vu HDL5=011A5:HGG$GGGGGG	
 	
r   Fr   r   leftc                    t          | j                  |k    rdS |r| xj        |z  c_        n| xj        |z  c_        | j        |d          | _        dS )NTF)r]   r   r   r   )rj   r   r   s      r   r   zDelimiter.remove  s[    t|!!4 	JJ!OJJJHHMHH|ABB'ur   c                N    d                     | j        | j        | j                  S )Nz <Delimiter {!r} start={} end={}>)ru   r   r   r   rw   s    r   rx   zDelimiter.__repr__   s'    188L$*dh
 
 	
r   N)r5   r6   r   r*   r0   rd   )r0   rz   )rl   r   r0   rz   )F)r   r   r   rz   r0   rz   r}   )r   r   r   r   r   UNICODEr   rk   r   r   r   r   r   r   r   r   rx   r   r   r   r   r     s        BJuBJ777M/ / / /
 
 
 

 
 
 
	
 	
 	
 	
	
 	
 	
 	

 
 
 

U U U U
 
 
 
    
 
 
 
 
 
r   r   c                  B    e Zd ZdZddZdddZdddZdddZdddZdS )r   z/A fake match object that memes re.match methodsr;   r*   r   r   r   r   groupsr   r0   rd   c                L    || _         || _        || _        || _        || _        d S r    )_text_start_end_groupsr;   )rj   r;   r   r   r   r   s         r   rk   zMatchObj.__init__)  s+     
	


r   r   r   c                l    |dk    r| j         | j        | j                 S | j        |dz
           d         S )Nr   r   rb   )r   r   r  r  rj   r   s     r   r   zMatchObj.group2  s7    66:dkDI566|AE"1%%r   c                H    |dk    r| j         S | j        |dz
           d         S rO   )r   r  r  s     r   r   zMatchObj.start7  s)    66;|AE"1%%r   c                H    |dk    r| j         S | j        |dz
           d         S rO   )r  r  r  s     r   r   zMatchObj.end<  s)    669|AE"1%%r   tuple[int, int]c                V    |                      |          |                     |          fS r    )r   r   r  s     r   spanzMatchObj.spanA  s!    

1txx{{++r   N)r;   r*   r   r*   r   r   r   r   r   r   r0   rd   )r   )r   r   r0   r*   )r   r   r0   r   )r   r   r0   r  )	r   r   r   r)   rk   r   r   r   r	  r   r   r   r   r   &  s        99   & & & & &
& & & & &
& & & & &
, , , , , , ,r   )
r   r*   r+   r,   r-   r.   r/   r   r0   r1   )rJ   rM   r0   rM   )r   NN)rJ   rM   r   r*   r   r   r   rZ   r-   r[   r0   r1   )r   r*   rC   r~   r0   r   )r   r*   r   r   r   r   rC   r~   r   r   r0   r   )r   r*   r0   rz   )r   r*   r   r   r0   r   )r   r*   r   r   r0   r   )r   F)r   r*   r   r   r   rz   r0   r   )r   r*   r   r   r0   r   )
r   r*   r   r   r   r*   rC   r~   r0   r   )r   r*   rC   r~   r0   r   )
r   r*   r   r   r   rZ   r   r   r0   rd   )r   r   r   rZ   r0   rZ   )r   r   r   r   r   rZ   r0   rZ   )2r)   
__future__r   r   typingr   r   r   r   r   r	   helpersr
   r   r   inliner   r/   r   r*   r6   typer.   r   r   r   joinranger!   r   
ValueErrorr(   rL   rH   rI   rE   rA   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r     sH    # " " " " " 				 : : : : : : : : : : : :       : : : : : : : : : : ! ! ! ! ! ! &5:z)*F}%K    J    uRT""
55a55555C@% % % % % % % %: : : :<   * #'    <=$ =$ =$ =$ =$ =$ =$ =$@( ( ( (V$ $ $ $N% % % %   	4 	4 	4 	4 7<?! ?! ?! ?! ?!D* * * *"L L L L$/ / / /, , , ,^   
 
 
 
N
 N
 N
 N
 N
 N
 N
 N
b, , , , , , , , , ,r   