ó
    …~iy  ã                  óÒ   • S r SSKJr  SSKrSSKJrJrJr  SSKJ	r	   " S S5      r
SS	KJrJrJrJr  \(       a.  \\R                      r\\R$                     r\\R(                     rgg)
z
Base parser
é    )ÚannotationsN)ÚTYPE_CHECKINGÚTypeÚcasté   )ÚSourcec                  óh   • \ rS rSrS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S
 jrSrg)ÚParseré   a!  
All elements defined in CommonMark's spec are included in the parser
by default.

Attributes:
    block_elements(dict): a dict of name: block_element pairs
    inline_elements(dict): a dict of name: inline_element pairs

:param \*extras: extra elements to be included in parsing process.
c                óÒ   • 0 U l         0 U l        [        R                  " S [        R
                   5       S [        R
                   5       5       H  nU R                  U5        M     g )Nc              3  óB   #   • U  H  n[        [        U5      v •  M     g 7f©N)ÚgetattrÚblock©Ú.0Únames     ÚI/home/mande/repo/quber/.venv/lib/python3.13/site-packages/marko/parser.pyÚ	<genexpr>Ú"Parser.__init__.<locals>.<genexpr>   s   é € Ð<ªm dŒW”U˜D×!Ð!ªmùó   ‚c              3  óB   #   • U  H  n[        [        U5      v •  M     g 7fr   )r   Úinliner   s     r   r   r      s   é € Ð>ª~ tŒW”V˜T×"Ð"ª~ùr   )Úblock_elementsÚinline_elementsÚ	itertoolsÚchainr   Ú__all__r   Úadd_element)ÚselfÚels     r   Ú__init__ÚParser.__init__   sM   € Ø;=ˆÔØ=?ˆÔä—/’/Ù<¬e¯mªmÓ<Ù>¬v¯~ª~Ó>ö
ˆBð ×Ñ˜RÖ ò	
ó    c                óô   • 0 n[        U[        R                  5      (       a  U R                  nO7[        U[        R
                  5      (       a  U R                  nO[        S5      eXUR                  " 5       '   g)z¸Add an element to the parser.

:param element: the element class.

.. note:: If one needs to call it inside ``__init__()``, please call it after
     ``super().__init__()`` is called.
zMThe element should be a subclass of either `BlockElement` or `InlineElement`.N)	Ú
issubclassr   ÚInlineElementr   r   ÚBlockElementr   Ú	TypeErrorÚget_type)r    ÚelementÚdests      r   r   ÚParser.add_element#   sj   € ð (*ˆÜ�gœv×3Ñ3×4Ñ4Ø×'Ñ'‰DÜ˜¤×!3Ñ!3×4Ñ4Ø×&Ñ&‰Däð#óð ð $+ˆW×ÒÓÒ r$   c                ó&  • [        U5      nXl        [        [        R                  U R
                  S   " 5       5      nUR                  U5         U R                  U5      Ul        U R                  X25        SSS5        U$ ! , (       d  f       U$ = f)zDo the actual parsing and returns an AST or parsed element.

:param text: the text to parse.
:returns: the parsed root element
ÚDocumentN)
r   Úparserr   r   r/   r   Úunder_stateÚparse_sourceÚchildrenÚparse_inline)r    ÚtextÚsourceÚdocs       r   ÚparseÚParser.parse7   sz   € ô ˜“ˆØŒÜ”5—>‘> 4×#6Ñ#6°zÒ#BÓ#DÓEˆØ×Ñ Õ$Ø×,Ñ,¨VÓ4ˆCŒLØ×Ñ˜cÔ*÷ %ð ˆ
÷ %Ô$ð ˆ
ús   Á(BÂ
Bc                ó0  • U R                  5       n/ nUR                  (       dr  U HV  nUR                  U5      (       d  M  UR                  U5      n[	        US5      (       d  U" U5      nUR                  U5          O    U$ UR                  (       d  Mr  U$ )z/Parse the source into a list of block elements.Úpriority)Ú_build_block_element_listÚ	exhaustedÚmatchr8   ÚhasattrÚappend)r    r6   Úelement_listÚastÚele_typeÚresults         r   r2   ÚParser.parse_sourceE   sŒ   € à×5Ñ5Ó7ˆØ(*ˆØ×"×"Û(�Ø—>‘> &×)Ó)Ø%Ÿ^™^¨FÓ3�FÜ" 6¨:×6Ñ6ñ "*¨&Ó!1˜Ø—J‘J˜vÔ&Ùñ )ð Øˆ
ð ×"×"Ñ"ð ˆ
r$   c                ó  • UR                   (       a)  U R                  UR                   U5      Ul        SUl         gUR                   H5  n[        U[        R
                  5      (       d  M$  U R                  X25        M7     g)zNInline parsing is postponed so that all link references
are seen before that.
Ú N)Úinline_bodyÚ_parse_inliner3   Ú
isinstancer   r(   r4   )r    r+   r6   Úchilds       r   r4   ÚParser.parse_inlineY   sa   € ð ××Ø#×1Ñ1°'×2EÑ2EÀvÓNˆGÔà"$ˆGÕà ×)Ô)�Ü˜e¤U×%7Ñ%7×8Ó8Ø×%Ñ% eÖ4ò *r$   c                óh   • U R                  5       n[        R                  " XU R                  S   US9$ )zØParses text into inline elements.
RawText is not considered in parsing but created as a wrapper of holes
that don't match any other elements.

:param text: the text to be parsed.
:returns: a list of inline elements.
ÚRawText)Úfallbackr6   )Ú_build_inline_element_listÚinline_parserr8   r   )r    r5   r6   rA   s       r   rI   ÚParser._parse_inlinef   s8   € ð ×6Ñ6Ó8ˆÜ×"Ò"Ø¨×)=Ñ)=¸iÑ)HÐQWñ
ð 	
r$   c                óX   • [        S U R                  R                  5        5       S SS9$ )zIReturn a list of block elements, ordered from highest priority to lowest.c              3  óJ   #   • U  H  oR                   (       a  M  Uv •  M     g 7fr   )Úvirtual)r   Úes     r   r   Ú3Parser._build_block_element_list.<locals>.<genexpr>v   s   é € ÐFÒ4�1¿I½I�Q‰QÒ4ùs   ‚#š	#c                ó   • U R                   $ r   )r;   )rV   s    r   Ú<lambda>Ú2Parser._build_block_element_list.<locals>.<lambda>w   s   € ˜!Ÿ*š*r$   T)ÚkeyÚreverse)Úsortedr   Úvalues)r    s    r   r<   Ú Parser._build_block_element_lists   s,   € äÙF˜×+Ñ+×2Ñ2Ô4ÓFÙ$Øñ
ð 	
r$   c                ó†   • U R                   R                  5        Vs/ s H  oR                  (       a  M  UPM     sn$ s  snf )zSReturn a list of elements, each item is a list of elements
with the same priority.
)r   r^   rU   )r    rV   s     r   rP   Ú!Parser._build_inline_element_list{   s1   € ð  ×/Ñ/×6Ñ6Ô8ÓJÒ8�aÇ	Å	—Ñ8ÑJÐJùÒJs   �>µ>)r   r   N)ÚreturnÚNone)r+   ÚElementTyperb   rc   )r5   Ústrrb   zblock.Document)r6   r   rb   zlist[block.BlockElement])r+   zblock.BlockElementr6   r   rb   rc   )r5   re   r6   r   rb   zlist[inline.InlineElement])rb   zlist[BlockElementType])rb   zlist[InlineElementType])Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r"   r   r8   r2   r4   rI   r<   rP   Ú__static_attributes__© r$   r   r
   r
      s0   † ñ	ô!ô+ô(ôô(5ô
ô
÷Kr$   r
   )r   r+   r   rQ   )rj   Ú
__future__r   r   Útypingr   r   r   r6   r   r
   rG   r   r+   r   rQ   r(   ÚBlockElementTyper'   ÚInlineElementTypeÚElementrd   rl   r$   r   Ú<module>rr      sj   ðñõ #ã ß ,Ñ ,å ÷rKñ rK÷j 4Ó 3æØ˜E×.Ñ.Ñ/ÐØ˜V×1Ñ1Ñ2ÐØ�w—‘Ñ'�Kð r$   