ó
    …~iß  ã                  ó€  • S r SSKJr  SSKrSSKrSSKJr  SSKJr  SSK	J
r
Jr  SSKJr  \
(       a+  SSK	JrJrJrJrJr  S	S
KJr  \\\/\4   r\" S\S9r\" SSS9rSS jrSSS jjrSS jr   S           S S jjrS!S"S jjr\R:                  " SS9 " S S5      5       rS#S jr " S S5      r     S$S jr!g)%z&
Helper functions and data structures
é    )ÚannotationsN)Úpartial)Úimport_module)ÚTYPE_CHECKINGÚoverload)ÚRenderer)ÚAnyÚCallableÚ	ContainerÚIterableÚTypeVaré   )ÚElementÚ	TRenderer)ÚboundÚDÚ_RendererDispatcherc           	     ó€   • SnSR                  [        [        R                  [        R
                  " X5      5      5      $ )z5Takes a camelCased string and converts to snake_case.z[A-Z][a-z]+|[A-Z]+(?![a-z])Ú_)ÚjoinÚmapÚstrÚlowerÚreÚfindall)ÚnameÚpatterns     ÚJ/home/mande/repo/quber/.venv/lib/python3.13/site-packages/marko/helpers.pyÚcamel_to_snake_caser      s*   € à,€GØ�8‰8”CœŸ	™	¤2§:¢:¨gÓ#<Ó=Ó>Ð>ó    c                ó�   • SnSnU  H8  nU(       a  SnM  US:X  a  SnM  XQ:X  a  US-  nM$  XR:X  d  M+  US:X  a    gUS-  nM:     US:H  $ )z^Check if the text only contains:
1. blackslash escaped parentheses, or
2. parentheses paired.
r   FÚ\Tr   © )ÚtextÚopenÚcloseÚcountÚescapeÚcs         r   Ú	is_pairedr*      s^   € ð
 €EØ€FÛˆÞØŠFØ�$‹YØŠFØ‹YØ�Q‰JŠEØ�ZØ˜‹zÙØ�Q‰JŠEñ ð �A‰:Ðr    c                ój   • [         R                  " SSU 5      R                  5       R                  5       $ )z)Return the normalized form of link label.z\s+Ú )r   ÚsubÚstripÚcasefold)Úlabels    r   Únormalize_labelr1   4   s'   € ä�6Š6�&˜#˜uÓ%×+Ñ+Ó-×6Ñ6Ó8Ð8r    c                ó�   • Uc  [        U 5      nUnSnXS:  a/  X   nU(       a  SnOXq;   a  U$ Xt;   a  gUS:X  a  SnUS-  nXS:  a  M/  g)zðFind the next occurrence of target in text, and return the index
Characters are escaped by backslash.
Optional disallowed characters can be specified, if found, the search
will fail with -2 returned. Otherwise, -1 is returned if not found.
Féþÿÿÿr"   Tr   éÿÿÿÿ)Úlen)r$   ÚtargetÚstartÚendÚ
disallowedÚiÚescapedr)   s           r   Ú	find_nextr<   9   sc   € ð �{Ü�$‹iˆØ€AØ€GØ
‹'Ø‰GˆÞØ‰GØ‹[ØˆHØ‹_ØØ�$‹YØˆGØ	ˆQ‰ˆð �'ð r    c                ó´   • S=p#[        U 5       H   u  pEXQ;   a  US:¼  a  M  UnM  US:¼  d  M  Un  O   US:  a  U SS4$ US:  a
  U SU XS S4$ U SU XU XS 4$ )z�Split the given text by spaces or tabs, and return a tuple of
(start, delimiter, remaining). If spaces are not found, the latter
two elements will be empty.
r4   r   Ú N)Ú	enumerate)r$   Úspacesr7   r8   r:   r)   s         r   Úpartition_by_spacesrA   W   s�   € ð
 Ð€EÜ˜$–‰ˆØ‹;Ø˜‹zÙØŠEØ�a�ZØˆCÙñ  ð ˆqƒyØ�R˜ˆ|ÐØ
ˆQƒwØ�F�Uˆ|˜T &˜\¨2Ð-Ð-Ø��ˆ<˜ C˜¨$¨t¨*Ð4Ð4r    T)Úfrozenc                  ó”   • \ rS rSr% \R
                  " \S9rS\S'   \R
                  " \S9r	S\S'   \R
                  " \S9r
S\S'   Srg	)
ÚMarkoExtensionél   )Údefault_factoryz
list[type]Úparser_mixinsÚrenderer_mixinszlist[type[Element]]Úelementsr#   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚdataclassesÚfieldÚlistrG   Ú__annotations__rH   rI   Ú__static_attributes__r#   r    r   rD   rD   l   sB   ‡ à +× 1Ò 1À$Ñ G€M�:ÓGØ"-×"3Ò"3ÀDÑ"I€O�ZÓIØ$/×$5Ò$5ÀdÑ$K€HÐ!ÖKr    rD   c                ó  • SnSU ;  a   [        SU  35      nUc   [        U 5      n UR                  " S0 UD6$ ! [         a     N.f = f! [         a  n[        SU  S35      UeSnAff = f! [         a    [        SU  S35      Sef = f)	zNLoad extension object from a string.
First try `marko.ext.<name>` if possible
NÚ.z
marko.ext.z
Extension z cannot be importedzModule z+ does not have 'make_extension' attributte.r#   )r   ÚImportErrorÚmake_extensionÚAttributeError)r   ÚkwargsÚmoduleÚes       r   Úload_extensionr[   s   sÁ   € ð €FØ
�$ƒð	Ü" Z°¨vÐ#6Ó7ˆFð �~ð	MÜ" 4Ó(ˆFðØ×$Ò$Ñ. vÑ.Ð.øô ó 	Ùð	ûô
 ó 	MÜ 
¨4¨&Ð0CÐDÓEÈ1ÐLûð	Mûô
 ó ÜØ�d�VÐFÐGó
àð	ðús1   Š: œA
 ¨A, º
AÁAÁ

A)ÁA$Á$A)Á,Bc                  ó¦   • \ rS rSr% S\S'         SS jr      SS jrSS jr\SS j5       r	SS jr
\SS	 j5       r\SS
 j5       rSS jrSrg)r   é‹   r   r   c                ór   • SSK JnJn  X0U l        U R                  R	                  X44U R
                  5        g )Nr   )ÚASTRendererÚXMLRenderer)Úmarko.ast_rendererr_   r`   Ú_mappingÚ
setdefaultÚ
render_ast)ÚselfÚtypesÚfuncr_   r`   s        r   Ú__init__Ú_RendererDispatcher.__init__Ž   s,   € ÷ 	@à˜ˆŒØ�‰× Ñ  +Ð!;¸T¿_¹_ÕMr    c                ó   ^ ^• SU U4S jjnU$ )Nc                ó&   >• U TR                   T'   T$ ©N)rb   )rg   re   rf   s    €€r   Ú	decoratorÚ/_RendererDispatcher.dispatch.<locals>.decorator™   s   ø€ Ø#'ˆD�M‰M˜%Ñ ØˆKr    )rg   ÚRendererFuncÚreturnr   r#   )re   rf   rm   s   `` r   ÚdispatchÚ_RendererDispatcher.dispatch–   s   ù€ ÷	ð 	ð Ðr    c                ó   • X l         g rl   )r   )re   Úownerr   s      r   Ú__set_name__Ú _RendererDispatcher.__set_name__Ÿ   s   € Ø�	r    c                ó$   • U R                  U5      $ rl   )Úrender_children)re   Úelements     r   rd   Ú_RendererDispatcher.render_ast¢   s   € à×#Ñ# GÓ,Ð,r    c                óü   ^ • U 4S j[        U5      R                  5        5       n [        U5        [        U5      n[        UT R                  5      " X5      $ ! [
         a    [        S[        U5       35      Sef = f)z<Call on the next class in the MRO which has the same method.c              3  ó`   >#   • U  H#  nTR                   UR                  ;   d  M  Uv •  M%     g 7frl   )r   Ú__dict__)Ú.0r)   re   s     €r   Ú	<genexpr>Ú3_RendererDispatcher.super_render.<locals>.<genexpr>¨   s"   øé € ÐGšm˜¨t¯y©y¸A¿J¹JÑ/F—1‘1šmùs   ƒ.¥	.zUnsupported renderer N)ÚtypeÚmroÚnextÚgetattrr   ÚStopIterationÚNotImplementedError)re   Úrry   ÚklassesÚparents   `    r   Úsuper_renderÚ _RendererDispatcher.super_render¦   sp   ø€ äGœd 1›gŸk™kœmÓGˆð	:Ü�ŒMÜ˜'“]ˆFô ˜6 4§9¡9Ô-¨aÓ9Ð9øô ó 	SÜ%Ð(=¼dÀ1»g¸YÐ&GÓHÈdÐRð	Sús   ¦A Á#A;c                ó   • g rl   r#   ©re   Úobjrt   s      r   Ú__get__Ú_RendererDispatcher.__get__±   s   € Ø7:r    c                ó   • g rl   r#   r�   s      r   r�   r�   ´   s   € ØFIr    c                ó¸   • Uc  U $ U R                   R                  5        H"  u  p4[        X5      (       d  M  [        XA5      s  $    [        U R                  U5      $ rl   )rb   ÚitemsÚ
isinstancer   rŠ   )re   rŽ   rt   rf   rg   s        r   r�   r�   ·   sP   € Ø‰;ØˆKØŸ=™=×.Ñ.Ö0‰KˆEÜ˜#×%Ó%Ü˜tÓ)Ò)ñ 1ô �t×(Ñ(¨#Ó.Ð.r    )rb   r   N)rf   ú+type[Renderer] | tuple[type[Renderer], ...]rg   ro   rp   ÚNone)re   r   rf   r•   rp   zCallable[[RendererFunc], D])rt   r�   r   r   rp   r–   )ry   r   rp   r	   )r‡   r	   ry   r   rp   r	   )re   r   rŽ   r–   rt   r�   rp   r   )re   r   rŽ   r   rt   r�   rp   ro   )re   r   rŽ   zRenderer | Nonert   r�   rp   zRendererFunc | D)rJ   rK   rL   rM   rQ   rh   rq   ru   Ústaticmethodrd   rŠ   r   r�   rR   r#   r    r   r   r   ‹   s†   ‡ Ø
ƒIðNØ@ðNØHTðNà	ôNðØðØCðà	$ôôð ó-ó ð-ô	:ð Û:ó Ø:àÛIó ØI÷/r    c                ó   ^ • SU 4S jjnU$ )Nc                ó   >• [        TU 5      $ rl   )r   )rg   rf   s    €r   rm   Ú"render_dispatch.<locals>.decoratorÃ   s   ø€ Ü" 5¨$Ó/Ð/r    )rg   ro   rp   r   r#   )rf   rm   s   ` r   Úrender_dispatchr›   À   s   ø€ ÷0ð Ðr    )r   r   rp   r   )Ú(Ú))r$   zIterable[str]r%   r   r&   r   rp   Úbool)r0   r   rp   r   )r   Nr#   )r$   r   r6   úContainer[str]r7   Úintr8   z
int | Noner9   rŸ   rp   r    )z 	)r$   r   r@   r   rp   ztuple[str, str, str])r   r   rX   r	   rp   rD   )rf   r•   rp   z-Callable[[RendererFunc], _RendererDispatcher])"Ú__doc__Ú
__future__r   rN   r   Ú	functoolsr   Ú	importlibr   Útypingr   r   Úmarko.rendererr   r	   r
   r   r   r   ry   r   ro   r   r   r   r*   r1   r<   rA   Ú	dataclassrD   r[   r   r›   r#   r    r   Ú<module>r¨      s  ðñõ #ã Û 	Ý Ý #ß *å #æßBÕBå à˜S '˜N¨CÐ/Ñ0€LÙ˜¨<Ñ8€IÙ�Ð0Ñ1€Aô?öô*9ð ØØ!#ðØ
ðàðð ðð 
ð	ð
 ðð 	õö<5ð* ×Ò˜dÑ#÷Lð Ló $ðLô÷02/ñ 2/ðjØ6ðà2õr    