Ë
    Ÿ2ÚiÞ“  ã                  ó>  — d Z ddlmZ ddlmZ ddlmZmZmZm	Z	 ddl
Z
ddlmc mZ 	 ddlmZ erddlmZ dPd	„Zd
Z	 dZ	 dZ	 dZ	 dZ	 dZ	 dZ	 dZ	 dZ	 dZ	 dZ	 dZ 	 dZ!	 edz   Z"	 dZ#	 e"Z$	 e#Z%	 dZ&	 dZ'	 dZ(	 dZ)	 dZ*	 dZ+	 dQd„Z, G d „ d!e	«      Z- G d"„ d#«      Z. G d$„ d%e.«      Z/ G d&„ d'e.«      Z0 G d(„ d)e/«      Z1 G d*„ d+e/«      Z2 G d,„ d-e.«      Z3 G d.„ d/e/«      Z4 G d0„ d1e3«      Z5 G d2„ d3e4«      Z6 G d4„ d5e/«      Z7 G d6„ d7e3«      Z8 G d8„ d9e4«      Z9 G d:„ d;e/«      Z: G d<„ d=e/«      Z; G d>„ d?e;«      Z< G d@„ dAe/«      Z= G dB„ dCe=«      Z> G dD„ dEe=«      Z? G dF„ dGe?«      Z@ G dH„ dIe?«      ZA G dJ„ dKeA«      ZB G dL„ dMe/«      ZC G dN„ dOe/«      ZDy# e$ r ddlZY �Œlw xY w)RaB  
In version 3.0, a new, more flexible inline processor was added, [`markdown.inlinepatterns.InlineProcessor`][].   The
original inline patterns, which inherit from [`markdown.inlinepatterns.Pattern`][] or one of its children are still
supported, though users are encouraged to migrate.

The new `InlineProcessor` provides two major enhancements to `Patterns`:

1. Inline Processors no longer need to match the entire block, so regular expressions no longer need to start with
  `r'^(.*?)'` and end with `r'(.*?)%'`. This runs faster. The returned [`Match`][re.Match] object will only contain
   what is explicitly matched in the pattern, and extension pattern groups now start with `m.group(1)`.

2.  The `handleMatch` method now takes an additional input called `data`, which is the entire block under analysis,
    not just what is matched with the specified pattern. The method now returns the element *and* the indexes relative
    to `data` that the return element is replacing (usually `m.start(0)` and `m.end(0)`).  If the boundaries are
    returned as `None`, it is assumed that the match did not take place, and nothing will be altered in `data`.

    This allows handling of more complex constructs than regular expressions can handle, e.g., matching nested
    brackets, and explicit control of the span "consumed" by the processor.

é    )Úannotationsé   )Úutil)ÚTYPE_CHECKINGÚAnyÚ
CollectionÚ
NamedTupleN)Úentities)ÚMarkdownc                ó6  — t        j                  «       }|j                  t        t        «      dd«       |j                  t        t        | «      dd«       |j                  t        t        | «      dd«       |j                  t        t        | «      dd«       |j                  t        t        | «      d	d
«       |j                  t        t        | «      dd«       |j                  t        t        | «      dd«       |j                  t!        t        | «      dd«       |j                  t#        t$        | «      dd«       |j                  t'        t(        | «      dd«       |j                  t+        t,        d«      dd«       |j                  t/        t0        | «      dd«       |j                  t/        t2        | «      dd«       |j                  t5        t6        «      dd«       |j                  t9        d«      dd «       |j                  t;        d!«      d"d#«       |S )$a  
    Build the default set of inline patterns for Markdown.

    The order in which processors and/or patterns are applied is very important - e.g. if we first replace
    `http://.../` links with `<a>` tags and _then_ try to replace inline HTML, we would end up with a mess. So, we
    apply the expressions in the following order:

    * backticks and escaped characters have to be handled before everything else so that we can preempt any markdown
      patterns by escaping them;

    * then we handle the various types of links (auto-links must be handled before inline HTML);

    * then we handle inline HTML.  At this point we will simply replace all inline HTML strings with a placeholder
      and add the actual HTML to a stash;

    * finally we apply strong, emphasis, etc.

    Úbacktické¾   Úescapeé´   Ú	referenceéª   Úlinké    Ú
image_linké–   Úimage_referenceéŒ   Úshort_referenceé‚   Úshort_image_refé}   Úautolinkéx   Úautomailén   ÚbrÚ	linebreakéd   ÚhtmléZ   ÚentityéP   Ú
not_strongéF   z\*Ú	em_strongé<   Ú_Ú
em_strong2é2   )r   ÚRegistryÚregisterÚBacktickInlineProcessorÚBACKTICK_REÚEscapeInlineProcessorÚ	ESCAPE_REÚReferenceInlineProcessorÚREFERENCE_REÚLinkInlineProcessorÚLINK_REÚImageInlineProcessorÚIMAGE_LINK_REÚImageReferenceInlineProcessorÚIMAGE_REFERENCE_REÚShortReferenceInlineProcessorÚ"ShortImageReferenceInlineProcessorÚAutolinkInlineProcessorÚAUTOLINK_REÚAutomailInlineProcessorÚAUTOMAIL_REÚSubstituteTagInlineProcessorÚLINE_BREAK_REÚHtmlInlineProcessorÚHTML_REÚ	ENTITY_REÚSimpleTextInlineProcessorÚNOT_STRONG_REÚAsteriskProcessorÚUnderscoreProcessor)ÚmdÚkwargsÚinlinePatternss      úN/var/www/html/acx/venv/lib/python3.12/site-packages/markdown/inlinepatterns.pyÚbuild_inlinepatternsrP   8   sÆ  € ô& —]‘]“_€NØ×ÑÔ3´KÓ@À*ÈcÔRØ×ÑÔ1´)¸RÓ@À(ÈCÔPØ×ÑÔ4´\À2ÓFÈÐUXÔYØ×ÑÔ/´¸Ó<¸fÀcÔJØ×ÑÔ0´ÀÓCÀ\ÐSVÔWØ×ÑÜ%Ô&8¸"Ó=Ð?PÐRUôð ×ÑÜ%¤l°BÓ7Ð9JÈCôð ×ÑÜ*Ô+=¸rÓBÐDUÐWZôð ×ÑÔ3´KÀÓDÀjÐRUÔVØ×ÑÔ3´KÀÓDÀjÐRUÔVØ×ÑÔ8¼ÈÓMÈ{Ð\_Ô`Ø×ÑÔ/´¸Ó<¸fÀbÔIØ×ÑÔ/´	¸2Ó>ÀÈ"ÔMØ×ÑÔ5´mÓDÀlÐTVÔWØ×ÑÔ-¨eÓ4°kÀ2ÔFØ×ÑÔ/°Ó5°|ÀRÔHØÐó    z(?<!\!)z;(?:(?<!\\)((?:\\{2})+)(?=`+)|(?<!\\)(`+)(.+?)(?<!`)\2(?!`))z\\(.)z(\*)([^\*]+)\1z(\*{2})(.+?)\1z%(?<!\w)(_{2})(?!_)(.+?)(?<!_)\1(?!\w)z"(?<!\w)(_)(?!_)(.+?)(?<!_)\1(?!\w)z7(?<!\w)(\_)\1(?!\1)(.+?)(?<!\w)\1(?!\1)(.+?)\1{3}(?!\w)z(\*)\1{2}(.+?)\1(.*?)\1{2}z(_)\1{2}(.+?)\1(.*?)\1{2}z(\*)\1{2}(.+?)\1{2}(.*?)\1z(_)\1{2}(.+?)\1{2}(.*?)\1z&(\*)\1(?!\1)([^*]+?)\1(?!\1)(.+?)\1{3}z\[z\!\[z%((^|(?<=\s))(\*{1,3}|_{1,3})(?=\s|$))z+<((?:[Ff]|[Hh][Tt])[Tt][Pp][Ss]?://[^<>]*)>z<([^<> !]+@[^@<> ]+)>z;(<(\/?[a-zA-Z][^<>@ ]*( [^<>]*)?|!--(?:(?!<!--|-->).)*--)>)z-(&(?:\#[0-9]+|\#x[0-9a-fA-F]+|[a-zA-Z0-9]+);)z  \nc                ó˜   — | j                  d«      r| j                  d«      s"| j                  d«      r| j                  d«      r| dd S | S )z#Remove quotes from around a string.ú"ú'r   éÿÿÿÿ)Ú
startswithÚendswith)Ústrings    rO   ÚdequoterY   ®   sE   € à	×	Ñ	˜3Ô	 F§O¡O°CÔ$8Ø×Ñ˜#Ô 6§?¡?°3Ô#7Ø�a˜ˆ|ÐàˆrQ   c                  ó0   — e Zd ZU dZded<   ded<   ded<   y)ÚEmStrongItemzEmphasis/strong pattern item.zre.Pattern[str]ÚpatternÚstrÚbuilderÚtagsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© rQ   rO   r[   r[   ·   s   … Ù'ØÓØƒLØ
„IrQ   r[   c                  óV   — e Zd ZU dZ e«       Zded<   	 d
dd„Zdd„Zdd„Z	dd„Z
dd	„Zy)ÚPatternaí  
    Base class that inline patterns subclass.

    Inline patterns are handled by means of `Pattern` subclasses, one per regular expression.
    Each pattern object uses a single regular expression and must support the following methods:
    [`getCompiledRegExp`][markdown.inlinepatterns.Pattern.getCompiledRegExp] and
    [`handleMatch`][markdown.inlinepatterns.Pattern.handleMatch].

    All the regular expressions used by `Pattern` subclasses must capture the whole block.  For this
    reason, they all start with `^(.*)` and end with `(.*)!`.  When passing a regular expression on
    class initialization, the `^(.*)` and `(.*)!` are added automatically and the regular expression
    is pre-compiled.

    It is strongly suggested that the newer style [`markdown.inlinepatterns.InlineProcessor`][] that
    use a more efficient and flexible search approach be used instead. However, the older style
    `Pattern` remains for backward compatibility with many existing third-party extensions.

    zCollection[str]ÚANCESTOR_EXCLUDESNc                óš   — || _         t        j                  d|z  t        j                  t        j                  z  «      | _        || _        y)a!  
        Create an instant of an inline pattern.

        Arguments:
            pattern: A regular expression that matches a pattern.
            md: An optional pointer to the instance of `markdown.Markdown` and is available as
                `self.md` on the class instance.


        z^(.*?)%s(.*)$N)r\   ÚreÚcompileÚDOTALLÚUNICODEÚcompiled_rerL   ©Úselfr\   rL   s      rO   Ú__init__zPattern.__init__Ü   s=   € ð ˆŒÜŸ:™:Ð&6¸Ñ&@Ü&(§i¡i´"·*±*Ñ&<ó>ˆÔð ˆ�rQ   c                ó   — | j                   S )z' Return a compiled regular expression. )rn   ©rp   s    rO   ÚgetCompiledRegExpzPattern.getCompiledRegExpí   s   € à×ÑÐrQ   c                 ó   — y)zóReturn a ElementTree element from the given match.

        Subclasses should override this method.

        Arguments:
            m: A match object containing a match of the pattern.

        Returns: An ElementTree Element object.

        Nre   ©rp   Úms     rO   ÚhandleMatchzPattern.handleMatchñ   s   € ð 	rQ   c                ó.   — | j                   j                  S )z+ Return class name, to define pattern type )Ú	__class__r`   rs   s    rO   ÚtypezPattern.typeþ   s   € à�~‰~×&Ñ&Ð&rQ   c                ó¸   ‡— 	 | j                   j                  d   j                  Šˆfd„}t        j
                  j                  ||«      S # t        $ r |cY S w xY w)ú> Return unescaped text given text with an inline placeholder. Úinlinec                ó´   •— | j                  d«      }|‰v rB‰j                  |«      }t        |t        «      r|S dj	                  |j                  «       «      S y )Nr   Ú )ÚgroupÚgetÚ
isinstancer]   ÚjoinÚitertext)rw   ÚidÚvalueÚstashs      €rO   Ú	get_stashz#Pattern.unescape.<locals>.get_stash	  sP   ø€ Ø—‘˜“ˆBØ�U‰{ØŸ	™	 "›�Ü˜e¤SÔ)Ø �Lð Ÿ7™7 5§>¡>Ó#3Ó4Ð4ð rQ   ©rL   ÚtreeprocessorsÚstashed_nodesÚKeyErrorr   ÚINLINE_PLACEHOLDER_REÚsub©rp   Útextr‰   rˆ   s      @rO   ÚunescapezPattern.unescape  sX   ø€ ð	Ø—G‘G×*Ñ*¨8Ñ4×BÑBˆEô	5ô ×)Ñ)×-Ñ-¨i¸Ó>Ð>øô ò 	ØŠKð	ús   ƒ#A ÁAÁA©N©r\   r]   rL   zMarkdown | None)Úreturnz
re.Pattern)rw   úre.Match[str]r•   zetree.Element | str)r•   r]   )r‘   r]   r•   r]   )r`   ra   rb   rc   Útuplerh   rd   rq   rt   rx   r{   r’   re   rQ   rO   rg   rg   Â   s4   … ññ& */«Ð�Ó0ðô
ó" óó'ô?rQ   rg   c                  ó"   — e Zd ZdZddd„Zdd„Zy)ÚInlineProcessorz¡
    Base class that inline processors subclass.

    This is the newer style inline processor that uses a more
    efficient and flexible search approach.

    Nc                ó¢   — || _         t        j                  |t        j                  t        j                  z  «      | _        d| _        || _        y)a"  
        Create an instant of an inline processor.

        Arguments:
            pattern: A regular expression that matches a pattern.
            md: An optional pointer to the instance of `markdown.Markdown` and is available as
                `self.md` on the class instance.

        FN)r\   rj   rk   rl   rm   rn   Ú	safe_moderL   ro   s      rO   rq   zInlineProcessor.__init__  s;   € ð ˆŒÜŸ:™: g¬r¯y©y¼2¿:¹:Ñ/EÓFˆÔð ˆŒØˆ�rQ   c                 ó   — y)a™  Return a ElementTree element from the given match and the
        start and end index of the matched text.

        If `start` and/or `end` are returned as `None`, it will be
        assumed that the processor did not find a valid region of text.

        Subclasses should override this method.

        Arguments:
            m: A re match object containing a match of the pattern.
            data: The buffer currently under analysis.

        Returns:
            el: The ElementTree element, text or None.
            start: The start of the region that has been matched or None.
            end: The end of the region that has been matched or None.

        Nre   ©rp   rw   Údatas      rO   rx   zInlineProcessor.handleMatch/  s   € ð& 	rQ   r“   r”   )rw   r–   rž   r]   r•   z9tuple[etree.Element | str | None, int | None, int | None]©r`   ra   rb   rc   rq   rx   re   rQ   rO   r™   r™     s   „ ñôô"rQ   r™   c                  ó   — e Zd ZdZdd„Zy)ÚSimpleTextPatternz2 Return a simple text of `group(2)` of a Pattern. c                ó$   — |j                  d«      S )z< Return string content of `group(2)` of a matching pattern. é   )r�   rv   s     rO   rx   zSimpleTextPattern.handleMatchG  s   € à�w‰w�q‹zÐrQ   N)rw   r–   r•   r]   ©r`   ra   rb   rc   rx   re   rQ   rO   r¡   r¡   E  s
   „ Ù<ôrQ   r¡   c                  ó   — e Zd ZdZdd„Zy)rH   z2 Return a simple text of `group(1)` of a Pattern. c                óf   — |j                  d«      |j                  d«      |j                  d«      fS )z< Return string content of `group(1)` of a matching pattern. r   r   )r�   ÚstartÚendr�   s      rO   rx   z%SimpleTextInlineProcessor.handleMatchN  s'   € à�w‰w�q‹z˜1Ÿ7™7 1›: q§u¡u¨Q£xÐ/Ð/rQ   N©rw   r–   rž   r]   r•   ztuple[str, int, int]r¤   re   rQ   rO   rH   rH   L  s
   „ Ù<ô0rQ   rH   c                  ó   — e Zd ZdZdd„Zy)r3   z Return an escaped character. c                óL  — |j                  d«      }|| j                  j                  v rYdj                  t        j
                  t        |«      t        j                  «      |j                  d«      |j                  d«      fS d|j                  d«      |j                  d«      fS )aµ  
        If the character matched by `group(1)` of a pattern is in [`ESCAPED_CHARS`][markdown.Markdown.ESCAPED_CHARS]
        then return the integer representing the character's Unicode code point (as returned by [`ord`][]) wrapped
        in [`util.STX`][markdown.util.STX] and [`util.ETX`][markdown.util.ETX].

        If the matched character is not in [`ESCAPED_CHARS`][markdown.Markdown.ESCAPED_CHARS], then return `None`.
        r   ú{}{}{}r   N)
r�   rL   ÚESCAPED_CHARSÚformatr   ÚSTXÚordÚETXr§   r¨   )rp   rw   rž   Úchars       rO   rx   z!EscapeInlineProcessor.handleMatchV  sw   € ð �w‰w�q‹zˆØ�4—7‘7×(Ñ(Ñ(Ø—?‘?¤4§8¡8¬S°«Y¼¿¹ÓAÀ1Ç7Á7È1Ã:ÈqÏuÉuÐUVËxÐWÐWà˜Ÿ™ › Q§U¡U¨1£XÐ-Ð-rQ   N)rw   r–   rž   r]   r•   ztuple[str | None, int, int]r¤   re   rQ   rO   r3   r3   S  s
   „ Ù(ô.rQ   r3   c                  ó    — e Zd ZdZdd„Zdd„Zy)ÚSimpleTagPatternz]
    Return element of type `tag` with a text attribute of `group(3)`
    of a Pattern.

    c                ó>   — t         j                  | |«       || _        y)zµ
        Create an instant of an simple tag pattern.

        Arguments:
            pattern: A regular expression that matches a pattern.
            tag: Tag of element.

        N)rg   rq   Útag©rp   r\   r¶   s      rO   rq   zSimpleTagPattern.__init__l  s   € ô 	×Ñ˜˜wÔ'ØˆŒØ0rQ   c                óp   — t        j                  | j                  «      }|j                  d«      |_        |S )z¤
        Return [`Element`][xml.etree.ElementTree.Element] of type `tag` with the string in `group(3)` of a
        matching pattern as the Element's text.
        é   )ÚetreeÚElementr¶   r�   r‘   )rp   rw   Úels      rO   rx   zSimpleTagPattern.handleMatchy  s*   € ô
 �]‰]˜4Ÿ8™8Ó$ˆØ—'‘'˜!“*ˆŒØˆ	rQ   N©r\   r]   r¶   r]   ©rw   r–   r•   úetree.ElementrŸ   re   rQ   rO   r´   r´   f  s   „ ñó
1ôrQ   r´   c                  ó    — e Zd ZdZdd„Zdd„Zy)ÚSimpleTagInlineProcessorz]
    Return element of type `tag` with a text attribute of `group(2)`
    of a Pattern.

    c                ó>   — t         j                  | |«       || _        y)z·
        Create an instant of an simple tag processor.

        Arguments:
            pattern: A regular expression that matches a pattern.
            tag: Tag of element.

        N)r™   rq   r¶   r·   s      rO   rq   z!SimpleTagInlineProcessor.__init__‰  s   € ô 	× Ñ   wÔ/ØˆŒØ0rQ   c                ó²   — t        j                  | j                  «      }|j                  d«      |_        ||j                  d«      |j                  d«      fS )z¤
        Return [`Element`][xml.etree.ElementTree.Element] of type `tag` with the string in `group(2)` of a
        matching pattern as the Element's text.
        r£   r   )rº   r»   r¶   r�   r‘   r§   r¨   ©rp   rw   rž   r¼   s       rO   rx   z$SimpleTagInlineProcessor.handleMatch–  sB   € ô
 �]‰]˜4Ÿ8™8Ó$ˆØ—'‘'˜!“*ˆŒØ�1—7‘7˜1“:˜qŸu™u Q›xÐ'Ð'rQ   Nr½   ©rw   r–   rž   r]   r•   ztuple[etree.Element, int, int]rŸ   re   rQ   rO   rÁ   rÁ   ƒ  s   „ ñó
1ô(rQ   rÁ   c                  ó   — e Zd ZdZdd„Zy)ÚSubstituteTagPatternú3 Return an element of type `tag` with no children. c                ó@   — t        j                  | j                  «      S )úH Return empty [`Element`][xml.etree.ElementTree.Element] of type `tag`. )rº   r»   r¶   rv   s     rO   rx   z SubstituteTagPattern.handleMatch¢  s   € ä�}‰}˜TŸX™XÓ&Ð&rQ   Nr¾   r¤   re   rQ   rO   rÇ   rÇ      s
   „ Ù=ô'rQ   rÇ   c                  ó   — e Zd ZdZdd„Zy)rC   rÈ   c                ó‚   — t        j                  | j                  «      |j                  d«      |j	                  d«      fS )rÊ   r   )rº   r»   r¶   r§   r¨   r�   s      rO   rx   z(SubstituteTagInlineProcessor.handleMatch©  s,   € ä�}‰}˜TŸX™XÓ&¨¯©°«
°A·E±E¸!³HÐ<Ð<rQ   NrÅ   r¤   re   rQ   rO   rC   rC   §  s
   „ Ù=ô=rQ   rC   c                  ó   — e Zd ZdZd„ Zdd„Zy)r1   zA Return a `<code>` element containing the escaped matching text. c                ó¸   — t         j                  | |«       dj                  t        j                  t        d«      t        j                  «      | _        d| _        y )Nr¬   ú\Úcode)	r™   rq   r®   r   r¯   r°   r±   ÚESCAPED_BSLASHr¶   )rp   r\   s     rO   rq   z BacktickInlineProcessor.__init__°  s=   € Ü× Ñ   wÔ/Ø&Ÿo™o¬d¯h©h¼¸D»	Ä4Ç8Á8ÓLˆÔØˆŒØ0rQ   c                óÔ  — |j                  d«      rŒt        j                  | j                  «      }t	        j
                  t	        j                  |j                  d«      j                  «       «      «      |_        ||j                  d«      |j                  d«      fS |j                  d«      j                  d| j                  «      |j                  d«      |j                  d«      fS )a€  
        If the match contains `group(3)` of a pattern, then return a `code`
        [`Element`][xml.etree.ElementTree.Element] which contains HTML escaped text (with
        [`code_escape`][markdown.util.code_escape]) as an [`AtomicString`][markdown.util.AtomicString].

        If the match does not contain `group(3)` then return the text of `group(1)` backslash escaped.

        r¹   r   r   z\\)r�   rº   r»   r¶   r   ÚAtomicStringÚcode_escapeÚstripr‘   r§   r¨   ÚreplacerÑ   rÄ   s       rO   rx   z#BacktickInlineProcessor.handleMatch¶  s©   € ð �7‰7�1Œ:Ü—‘˜tŸx™xÓ(ˆBÜ×'Ñ'¬×(8Ñ(8¸¿¹À»×9IÑ9IÓ9KÓ(LÓMˆBŒGØ�q—w‘w˜q“z 1§5¡5¨£8Ð+Ð+à—7‘7˜1“:×%Ñ% f¨d×.AÑ.AÓBÀAÇGÁGÈAÃJÐPQ×PUÑPUÐVWÓPXÐXÐXrQ   N)rw   r–   rž   r]   r•   z$tuple[etree.Element | str, int, int]rŸ   re   rQ   rO   r1   r1   ®  s   „ ÙKò1ôYrQ   r1   c                  ó   — e Zd ZdZdd„Zy)ÚDoubleTagPatternúfReturn a ElementTree element nested in tag2 nested in tag1.

    Useful for strong emphasis etc.

    c                ó(  — | j                   j                  d«      \  }}t        j                  |«      }t        j                  ||«      }|j                  d«      |_        t        |j                  «       «      dk(  r|j                  d«      |_	        |S )z¬
        Return [`Element`][xml.etree.ElementTree.Element] in following format:
        `<tag1><tag2>group(3)</tag2>group(4)</tag2>` where `group(4)` is optional.

        ú,r¹   é   é   )
r¶   Úsplitrº   r»   Ú
SubElementr�   r‘   ÚlenÚgroupsÚtail)rp   rw   Útag1Útag2Úel1Úel2s         rO   rx   zDoubleTagPattern.handleMatchÍ  so   € ð —X‘X—^‘^ CÓ(‰
ˆˆdÜ�m‰m˜DÓ!ˆÜ×Ñ˜s DÓ)ˆØ—7‘7˜1“:ˆŒÜˆq�x‰x‹z‹?˜aÒØ—w‘w˜q“zˆCŒHØˆ
rQ   Nr¾   r¤   re   rQ   rO   rØ   rØ   Ç  s   „ ñô
rQ   rØ   c                  ó   — e Zd ZdZdd„Zy)ÚDoubleTagInlineProcessorrÙ   c                ój  — | j                   j                  d«      \  }}t        j                  |«      }t        j                  ||«      }|j                  d«      |_        t        |j                  «       «      dk(  r|j                  d«      |_	        ||j                  d«      |j                  d«      fS )z¬
        Return [`Element`][xml.etree.ElementTree.Element] in following format:
        `<tag1><tag2>group(2)</tag2>group(3)</tag2>` where `group(3)` is optional.

        rÛ   r£   r¹   r   )r¶   rÞ   rº   r»   rß   r�   r‘   rà   rá   râ   r§   r¨   )rp   rw   rž   rã   rä   rå   ræ   s          rO   rx   z$DoubleTagInlineProcessor.handleMatchâ  s‡   € ð —X‘X—^‘^ CÓ(‰
ˆˆdÜ�m‰m˜DÓ!ˆÜ×Ñ˜s DÓ)ˆØ—7‘7˜1“:ˆŒÜˆq�x‰x‹z‹?˜aÒØ—w‘w˜q“zˆCŒHØ�A—G‘G˜A“J §¡ a£Ð(Ð(rQ   NrÅ   r¤   re   rQ   rO   rè   rè   Ü  s   „ ñô
)rQ   rè   c                  ó$   — e Zd ZdZdd„Zd„ Zd„ Zy)rE   z1 Store raw inline html and return a placeholder. c                óð   — | j                  | j                  |j                  d«      «      «      }| j                  j                  j                  |«      }||j                  d«      |j                  d«      fS )zL Store the text of `group(1)` of a pattern and return a placeholder string. r   r   )Úbackslash_unescaper’   r�   rL   Ú	htmlStashÚstorer§   r¨   )rp   rw   rž   ÚrawhtmlÚplace_holders        rO   rx   zHtmlInlineProcessor.handleMatchó  sZ   € à×)Ñ)¨$¯-©-¸¿¹À»
Ó*CÓDˆØ—w‘w×(Ñ(×.Ñ.¨wÓ7ˆØ˜QŸW™W Q›Z¨¯©¨q«Ð1Ð1rQ   c                ó¼   ‡ ‡— 	 ‰ j                   j                  d   j                  Šˆ ˆfd„}t        j
                  j                  ||«      S # t        $ r |cY S w xY w)r}   r~   c                ó®   •— | j                  d«      }‰j                  |«      }|�	 ‰j                  j                  |«      S y # t        $ r d|z  cY S w xY w)Nr   z\%s)r�   r‚   rL   Ú
serializerÚ	Exception)rw   r†   r‡   rp   rˆ   s      €€rO   r‰   z/HtmlInlineProcessor.unescape.<locals>.get_stash   s]   ø€ Ø—‘˜“ˆBØ—I‘I˜b“MˆEØÐ ð*ØŸ7™7×-Ñ-¨eÓ4Ð4ð !øô !ò *Ø! E™>Ò)ð*ús   §A ÁAÁArŠ   r�   s   `  @rO   r’   zHtmlInlineProcessor.unescapeù  sX   ù€ ð	Ø—G‘G×*Ñ*¨8Ñ4×BÑBˆEõ	*ô ×)Ñ)×-Ñ-¨i¸Ó>Ð>øô ò 	ØŠKð	ús   „#A ÁAÁAc                ó–   — 	 | j                   j                  d   j                  }d„ }|j	                  ||«      S # t        $ r |cY S w xY w)zG Return text with backslash escapes undone (backslashes are restored). r’   c                óH   — t        t        | j                  d«      «      «      S )Nr   )ÚchrÚintr�   )rw   s    rO   Ú	_unescapez9HtmlInlineProcessor.backslash_unescape.<locals>._unescape  s   € Ü”s˜1Ÿ7™7 1›:“Ó'Ð'rQ   )rL   r‹   ÚREr�   r�   )rp   r‘   rú   rù   s       rO   rì   z&HtmlInlineProcessor.backslash_unescape  sO   € ð	Ø—‘×'Ñ'¨
Ñ3×6Ñ6ˆBò	(ð �v‰v�i Ó&Ð&øô ò 	ØŠKð	ús   ‚#: ºAÁANr©   )r`   ra   rb   rc   rx   r’   rì   re   rQ   rO   rE   rE   ñ  s   „ Ù;ó2ò?ó$
'rQ   rE   c                  ó(  — e Zd ZdZ e ej                  eej                  ej                  z  «      dd«       e ej                  e
ej                  ej                  z  «      dd«       e ej                  eej                  ej                  z  «      dd«       e ej                  eej                  ej                  z  «      dd«       e ej                  eej                  ej                  z  «      dd«      gZ	 d	„ Zd
„ Zd„ Zdd„Zd„ Zdd„Zy)rJ   zGEmphasis processor for handling strong and em matches inside asterisks.Údoubleú	strong,emú	em,strongÚdouble2ÚsingleÚstrongÚemc                óz   — t        j                  |«      }|j                  d«      }| j                  ||d|«       |S )zReturn single tag.r£   N)rº   r»   r�   Úparse_sub_patterns)rp   rw   r¶   Úidxrå   r‘   s         rO   Úbuild_singlezAsteriskProcessor.build_single$  s6   € ä�m‰m˜CÓ ˆØ�w‰w�q‹zˆØ×Ñ  c¨4°Ô5Øˆ
rQ   c                óp  — |j                  d«      \  }}t        j                  |«      }t        j                  |«      }|j                  d«      }| j	                  ||d|«       |j                  |«       t        |j                  «       «      dk(  r%|j                  d«      }| j	                  ||||«       |S )zReturn double tag.rÛ   r£   Nr¹   )rÞ   rº   r»   r�   r  Úappendrà   rá   ©	rp   rw   r_   r  rã   rä   rå   ræ   r‘   s	            rO   Úbuild_doublezAsteriskProcessor.build_double+  s•   € ð —Z‘Z “_‰
ˆˆdÜ�m‰m˜DÓ!ˆÜ�m‰m˜DÓ!ˆØ�w‰w�q‹zˆØ×Ñ  c¨4°Ô5Ø�
‰
�3ŒÜˆq�x‰x‹z‹?˜aÒØ—7‘7˜1“:ˆDØ×#Ñ# D¨#¨s°CÔ8Øˆ
rQ   c                ó8  — |j                  d«      \  }}t        j                  |«      }t        j                  |«      }|j                  d«      }| j	                  ||d|«       |j                  d«      }|j                  |«       | j	                  ||d|«       |S )zFReturn double tags (variant 2): `<strong>text <em>text</em></strong>`.rÛ   r£   Nr¹   )rÞ   rº   r»   r�   r  r  r	  s	            rO   Úbuild_double2zAsteriskProcessor.build_double29  sƒ   € ð —Z‘Z “_‰
ˆˆdÜ�m‰m˜DÓ!ˆÜ�m‰m˜DÓ!ˆØ�w‰w�q‹zˆØ×Ñ  c¨4°Ô5Ø�w‰w�q‹zˆØ�
‰
�3ŒØ×Ñ  c¨4°Ô5Øˆ
rQ   c                ó2  — d}d}t        |«      }||k  rê| j                  j                  ||«      rÃd}t        | j                  «      D ]¡  \  }	}
|	|k  rŒ|
j
                  j                  ||«      }|sŒ+|||j                  d«       }|r|�||_        n||_        | j                  ||
j                  |
j                  |	«      }|j                  |«       |}|j                  d«      x}}d}Œ£ |s|dz  }n|dz  }||k  rŒê||d }|r|�||_        y||_        yy)a”  
        Parses sub patterns.

        `data` (`str`):
            text to evaluate.

        `parent` (`etree.Element`):
            Parent to attach text and sub elements to.

        `last` (`etree.Element`):
            Last appended child to parent. Can also be None if parent has no children.

        `idx` (`int`):
            Current pattern index that was used to evaluate the parent.

        r   FNTr   )rà   rn   ÚmatchÚ	enumerateÚPATTERNSr\   r§   râ   r‘   Úbuild_elementr^   r_   r  r¨   )rp   rž   ÚparentÚlastr  ÚoffsetÚposÚlengthÚmatchedÚindexÚitemrw   r‘   r¼   s                 rO   r  z$AsteriskProcessor.parse_sub_patternsF  s8  € ð$ ˆØˆä�T“ˆØ�FŠlà×Ñ×%Ñ% d¨CÔ0Ø�ä#,¨T¯]©]Ó#;ò '‘K�E˜4à ’|Ø ØŸ™×*Ñ*¨4°Ó5�AÚð
  $ F¨1¯7©7°1«:Ð6˜ÙØ#Ð/Ø,0 ¥	à.2 ¤Ø!×/Ñ/°°4·<±<ÀÇÁÈEÓR˜ØŸ™ bÔ)Ø!˜à'(§u¡u¨Q£xÐ/˜ Ø"&™ð+'ñ, à˜1‘H‘Cð �q‘�ðA �F‹lðF �F�Gˆ}ˆÙØÐØ �•	à"�•ð	 rQ   c                óˆ   — |dk(  r| j                  |||«      S |dk(  r| j                  |||«      S | j                  |||«      S )zElement builder.rÿ   rü   )r  r
  r  )rp   rw   r^   r_   r  s        rO   r  zAsteriskProcessor.build_element†  sS   € ð �iÒØ×%Ñ% a¨¨uÓ5Ð5Ø˜Ò Ø×$Ñ$ Q¨¨eÓ4Ð4à×$Ñ$ Q¨¨eÓ4Ð4rQ   c                óD  — d}d}d}t        | j                  «      D ]~  \  }}|j                  j                  ||j	                  d«      «      }|sŒ4|j	                  d«      }|j                  d«      }| j                  ||j                  |j                  |«      } n |||fS )zParse patterns.Nr   )	r  r  r\   r  r§   r¨   r  r^   r_   )	rp   rw   rž   r¼   r§   r¨   r  r  Úm1s	            rO   rx   zAsteriskProcessor.handleMatch�  s™   € ð ˆØˆØˆä$ T§]¡]Ó3ò 	‰KˆE�4Ø—‘×#Ñ# D¨!¯'©'°!«*Ó5ˆBÚØŸ™ ›�Ø—f‘f˜Q“i�Ø×'Ñ'¨¨D¯L©L¸$¿)¹)ÀUÓK�Ùð	ð �5˜#ˆ~ÐrQ   N)r•   ÚNone©rw   r–   rž   r]   r•   z3tuple[etree.Element | None, int | None, int | None])r`   ra   rb   rc   r[   rj   rk   ÚEM_STRONG_RErl   rm   ÚSTRONG_EM_REÚSTRONG_EM3_REÚ	STRONG_REÚEMPHASIS_REr  r  r
  r  r  r  rx   re   rQ   rO   rJ   rJ     sõ   „ ÙQñ 	�Z�R—Z‘Z ¨b¯i©i¸"¿*¹*Ñ.DÓEÀxÐQ\Ó]Ù�Z�R—Z‘Z ¨b¯i©i¸"¿*¹*Ñ.DÓEÀxÐQ\Ó]Ù�Z�R—Z‘Z ¨r¯y©y¸2¿:¹:Ñ/EÓFÈ	ÐS^Ó_Ù�Z�R—Z‘Z 	¨2¯9©9°r·z±zÑ+AÓBÀHÈhÓWÙ�Z�R—Z‘Z ¨R¯Y©Y¸¿¹Ñ-CÓDÀhÐPTÓUð€Hð Pòòòó>#ò@5ôrQ   rJ   c                  óþ  — e Zd ZdZ e ej                  eej                  ej                  z  «      dd«       e ej                  e
ej                  ej                  z  «      dd«       e ej                  eej                  ej                  z  «      dd«       e ej                  eej                  ej                  z  «      dd«       e ej                  eej                  ej                  z  «      dd«      gZy	)
rK   zIEmphasis processor for handling strong and em matches inside underscores.rü   rý   rþ   rÿ   r   r  r  N)r`   ra   rb   rc   r[   rj   rk   ÚEM_STRONG2_RErl   rm   ÚSTRONG_EM2_REÚSMART_STRONG_EM_REÚSMART_STRONG_REÚSMART_EMPHASIS_REr  re   rQ   rO   rK   rK   ¡  sÙ   „ ÙSñ 	�Z�R—Z‘Z ¨r¯y©y¸2¿:¹:Ñ/EÓFÈÐR]Ó^Ù�Z�R—Z‘Z ¨r¯y©y¸2¿:¹:Ñ/EÓFÈÐR]Ó^Ù�Z�R—Z‘ZÐ 2°B·I±IÀÇ
Á
Ñ4JÓKÈYÐXcÓdÙ�Z�R—Z‘Z °·±¸R¿Z¹ZÑ1GÓHÈ(ÐT\Ó]Ù�Z�R—Z‘ZÐ 1°2·9±9¸r¿z¹zÑ3IÓJÈHÐVZÓ[ð€Hð PrQ   rK   c                  óœ   — e Zd ZdZ ej
                  dej                  ej                  z  «      Z ej
                  d«      Z	dd„Z
d„ Zd„ Zy)	r7   z- Return a link element from the given match. z2\(\s*(?:(<[^<>]*>)\s*(?:('[^']*'|"[^"]*")\s*)?\))?z\sc                ó2  — | j                  ||j                  d«      «      \  }}}|sy| j                  ||«      \  }}}}|syt        j                  d«      }||_        |j                  d|«       |�|j                  d|«       ||j                  d«      |fS )zS Return an `a` [`Element`][xml.etree.ElementTree.Element] or `(None, None, None)`. r   ©NNNÚaÚhrefÚtitle)ÚgetTextr¨   ÚgetLinkrº   r»   r‘   Úsetr§   )	rp   rw   rž   r‘   r  Úhandledr.  r/  r¼   s	            rO   rx   zLinkInlineProcessor.handleMatch³  s’   € à#Ÿ|™|¨D°!·%±%¸³(Ó;Ñˆˆe�WáØ#à&*§l¡l°4¸Ó&?Ñ#ˆˆe�U˜GÙØ#ä�]‰]˜3ÓˆØˆŒà
�‰ˆv�tÔàÐØ�F‰F�7˜EÔ"à�1—7‘7˜1“:˜uÐ$Ð$rQ   c           	     ó¾  — d}d}d}| j                   j                  ||¬«      }|rm|j                  d«      r\|j                  d«      dd j                  «       }|j                  d«      r|j                  d«      dd }|j	                  d«      }d	}�nc|�r`d}d}|j	                  «       }	|	}d}
d}d}d}d}d}d}d}d}t        |t        |«      «      D �]  }||   }|d
k(  r|s|dz  }n~|dkD  ry|dz  }ns|dk(  r4|dk7  r||k(  s
|dk7  r||k(  rd}nW|s|dz  }nO|dkD  rJ|dz  }|dk(  r@|dz   }
n:|dv r6|sd	}|}d}|dz   }|}n&||k7  r
|s|dz   }|}n||k(  r|dz   }n|r
||k(  r|dz   }|dz  }|dk(  r^|dk\  r%||k(  r ||	|dz
   }dj                  |||dz
   «      }n2|dk\  r%||k(  r ||	|dz
   }dj                  |||dz
   «      }n||	|dz
   } n|dk7  s�Œ|}�Œ |dk7  r|dk(  r||	|
dz
   }|
}d}|dk(  }|�B| j                  j                  dt        | j                  |j                  «       «      «      «      }| j                  |«      j                  «       }||||fS )z?Parse data between `()` of `[Text]()` allowing recursive `()`. r€   NF©r  r   rU   r£   r   Tú(ú))rT   rS   ú )ÚRE_LINKr  r�   rÕ   r¨   Úrangerà   r„   ÚRE_TITLE_CLEANr�   rY   r’   )rp   rž   r  r.  r/  r3  rw   Úbracket_countÚbacktrack_countÚstart_indexÚlast_bracketÚquoteÚstart_quoteÚ
exit_quoteÚignore_matchesÚ	alt_quoteÚstart_alt_quoteÚexit_alt_quoter  r  Úcs                        rO   r1  zLinkInlineProcessor.getLinkÈ  s  € ð ˆØˆØˆà�L‰L×Ñ˜t¨ÐÓ/ˆÙ�—‘˜”à—7‘7˜1“:˜a Ð#×)Ñ)Ó+ˆDØ�w‰w�qŒzØŸ™ ›
 1 RÐ(�Ø—E‘E˜!“HˆEØŠGÚàˆMØˆOØŸ%™%›'ˆKØˆEØˆLð ˆEØˆKØˆJØ"ˆNð ˆIØ ˆOØˆNð ˆDä˜U¤C¨£IÓ.ó ;�Ø˜‘I�Ø˜’8ñ *Ø%¨Ñ*™Ø(¨1Ò,Ø'¨1Ñ,™Ø˜#’Xð $ rÒ)¨e°tªmÀÐSUÒAUÐZcÐgkÒZkØ()™Ù+Ø%¨Ñ*™Ø(¨1Ò,Ø'¨1Ñ,˜à*¨aÒ/Ø+0°1©9™Là˜*‘_á ð *.˜Ø*7˜Ø()˜Ø&+¨a¡i˜Ø !™à˜eš©IØ*/°!©)˜Ø$%™	à˜ešØ%*¨Q¡Y™
á" q¨I¢~Ø).°©˜à˜‘
�ð ! AÒ%à! Q’¨5°Dª=Ø# K°¸a±Ð@˜Ø "§¡¨¨[¸Àa¹Ð(HÓ I™Ø'¨1Ò,°¸dÒ1BØ# K°À!Ñ0CÐD˜Ø "§¡¨¨_¸^ÈaÑ=OÐ(PÓ Q™à# K°¸±	Ð:˜Ùà˜”8Ø’Dðw;ðB  Ò! o¸Ò&:Ø˜K¨°qÑ(8Ð9�Ø$�Ø !�à# qÑ(ˆGàÐØ×'Ñ'×+Ñ+¨C´¸¿¹ÀuÇ{Á{Ã}Ó9UÓ1VÓWˆEà�}‰}˜TÓ"×(Ñ(Ó*ˆà�U˜E 7Ð*Ð*rQ   c                óÚ   — d}g }t        |t        |«      «      D ]9  }||   }|dk(  r|dz  }n
|dk(  r|dz  }|dz  }|dk(  r n|j                  |«       Œ; dj                  |«      ||dk(  fS )zsParse the content between `[]` of the start of an image or link
        resolving nested square brackets.

        r   ú]ú[r   r€   )r:  rà   r  r„   )rp   rž   r  r<  r‘   r  rG  s          rO   r0  zLinkInlineProcessor.getText<  sŽ   € ð
 ˆØˆÜ˜¤ D£	Ó*ò 		ˆCØ�S‘	ˆAØ�CŠxØ Ñ"‘Ø�c’Ø Ñ"�Ø�Q‰JˆEØ Ò!ÙØ�K‰K˜�Nð		ð �w‰w�t‹}˜e ]°aÑ%7Ð7Ð7rQ   Nr  )r`   ra   rb   rc   rj   rk   rl   rm   r9  r;  rx   r1  r0  re   rQ   rO   r7   r7   ®  sL   „ Ù7Øˆb�j‰jÐRÐTV×T]ÑT]Ð`b×`jÑ`jÑTjÓk€GØ�R—Z‘Z Ó&€Nó%ò*r+óh8rQ   r7   c                  ó   — e Zd ZdZdd„Zy)r9   z. Return a `img` element from the given match. c                óf  — | j                  ||j                  d«      «      \  }}}|sy| j                  ||«      \  }}}}|syt        j                  d«      }|j                  d|«       |�|j                  d|«       |j                  d| j                  |«      «       ||j                  d«      |fS )zU Return an `img` [`Element`][xml.etree.ElementTree.Element] or `(None, None, None)`. r   r,  ÚimgÚsrcr/  Úalt)r0  r¨   r1  rº   r»   r2  r’   r§   )	rp   rw   rž   r‘   r  r3  rN  r/  r¼   s	            rO   rx   z ImageInlineProcessor.handleMatchS  s¢   € à#Ÿ|™|¨D°!·%±%¸³(Ó;Ñˆˆe�WÙØ#à%)§\¡\°$¸Ó%>Ñ"ˆˆU�E˜7ÙØ#ä�]‰]˜5Ó!ˆà
�‰ˆu�cÔàÐØ�F‰F�7˜EÔ"à
�‰ˆu�d—m‘m DÓ)Ô*Ø�1—7‘7˜1“:˜uÐ$Ð$rQ   Nr  r¤   re   rQ   rO   r9   r9   P  s
   „ Ù8ô%rQ   r9   c                  ó´   — e Zd ZdZ ej
                  dej                  «      Z ej
                  dej                  ej                  z  «      Z
dd„Zd„ Zd	d„Zy)
r5   z6 Match to a stored reference and return link element. z\s+z\s?\[([^\]]*)\]c                ó˜  — | j                  ||j                  d«      «      \  }}}|sy| j                  |||«      \  }}}|sy| j                  j	                  d|«      }|| j
                  j                  vrd|j                  d«      |fS | j
                  j                  |   \  }}	| j                  ||	|«      |j                  d«      |fS )zz
        Return [`Element`][xml.etree.ElementTree.Element] returned by `makeTag` method or `(None, None, None)`.

        r   r,  r8  N)	r0  r¨   ÚevalIdÚNEWLINE_CLEANUP_REr�   rL   Ú
referencesr§   ÚmakeTag)
rp   rw   rž   r‘   r  r3  r†   r¨   r.  r/  s
             rO   rx   z$ReferenceInlineProcessor.handleMatchn  sÃ   € ð
  $Ÿ|™|¨D°!·%±%¸³(Ó;Ñˆˆe�WÙØ#àŸ;™; t¨U°DÓ9ÑˆˆC�ÙØ#ð ×$Ñ$×(Ñ(¨¨bÓ1ˆØ�T—W‘W×'Ñ'Ñ'Ø˜Ÿ™ › SÐ(Ð(à—g‘g×(Ñ(¨Ñ,‰ˆˆeà�|‰|˜D %¨Ó.°·±¸³
¸CÐ?Ð?rQ   c                óØ   — | j                   j                  ||¬«      }|sd|dfS |j                  d«      j                  «       }|j	                  d«      }|s|j                  «       }||dfS )z\
        Evaluate the id portion of `[ref][id]`.

        If `[ref][]` use `[ref]`.
        r5  NFr   r   T)r9  r  r�   Úlowerr¨   )rp   rž   r  r‘   rw   r†   r¨   s          rO   rR  zReferenceInlineProcessor.evalId„  sj   € ð �L‰L×Ñ˜t¨ÐÓ/ˆÙØ˜ Ð%Ð%à—‘˜“×!Ñ!Ó#ˆBØ—%‘%˜“(ˆCÙØ—Z‘Z“\�Ø�3˜ˆ}ÐrQ   c                óŠ   — t        j                  d«      }|j                  d|«       |r|j                  d|«       ||_        |S )z; Return an `a` [`Element`][xml.etree.ElementTree.Element]. r-  r.  r/  )rº   r»   r2  r‘   ©rp   r.  r/  r‘   r¼   s        rO   rU  z ReferenceInlineProcessor.makeTag”  s;   € ä�]‰]˜3Óˆà
�‰ˆv�tÔÙØ�F‰F�7˜EÔ"àˆŒØˆ	rQ   Nr  ©r.  r]   r/  r]   r‘   r]   r•   r¿   )r`   ra   rb   rc   rj   rk   Ú	MULTILINErS  rl   rm   r9  rx   rR  rU  re   rQ   rO   r5   r5   h  sL   „ Ù@Ø#˜Ÿ™ F¨B¯L©LÓ9Ðàˆb�j‰jÐ+¨R¯Y©Y¸¿¹Ñ-CÓD€Gó@ò,ô 	rQ   r5   c                  ó   — e Zd ZdZd„ Zy)r=   z%Short form of reference: `[google]`. c                ó(   — |j                  «       |dfS ©zEvaluate the id of `[ref]`.  T©rW  ©rp   rž   r  r‘   s       rO   rR  z$ShortReferenceInlineProcessor.evalId¢  ó   € ð �z‰z‹|˜U DÐ(Ð(rQ   N©r`   ra   rb   rc   rR  re   rQ   rO   r=   r=      s
   „ Ù/ó)rQ   r=   c                  ó   — e Zd ZdZdd„Zy)r;   z7 Match to a stored reference and return `img` element. c                ó¾   — t        j                  d«      }|j                  d|«       |r|j                  d|«       |j                  d| j                  |«      «       |S )z= Return an `img` [`Element`][xml.etree.ElementTree.Element]. rM  rN  r/  rO  )rº   r»   r2  r’   rY  s        rO   rU  z%ImageReferenceInlineProcessor.makeTagª  sK   € ä�]‰]˜5Ó!ˆØ
�‰ˆu�dÔÙØ�F‰F�7˜EÔ"Ø
�‰ˆu�d—m‘m DÓ)Ô*Øˆ	rQ   NrZ  )r`   ra   rb   rc   rU  re   rQ   rO   r;   r;   ¨  s
   „ ÙAôrQ   r;   c                  ó   — e Zd ZdZd„ Zy)r>   z* Short form of image reference: `![ref]`. c                ó(   — |j                  «       |dfS r^  r_  r`  s       rO   rR  z)ShortImageReferenceInlineProcessor.evalId¶  ra  rQ   Nrb  re   rQ   rO   r>   r>   ´  s
   „ Ù4ó)rQ   r>   c                  ó   — e Zd ZdZdd„Zy)r?   zD Return a link Element given an auto-link (`<http://example/com>`). c                ó$  — t        j                  d«      }|j                  d| j                  |j	                  d«      «      «       t        j                  |j	                  d«      «      |_        ||j                  d«      |j                  d«      fS )zI Return an `a` [`Element`][xml.etree.ElementTree.Element] of `group(1)`. r-  r.  r   r   )
rº   r»   r2  r’   r�   r   rÓ   r‘   r§   r¨   rÄ   s       rO   rx   z#AutolinkInlineProcessor.handleMatch¾  sf   € ä�]‰]˜3ÓˆØ
�‰ˆv�t—}‘} Q§W¡W¨Q£ZÓ0Ô1Ü×#Ñ# A§G¡G¨A£JÓ/ˆŒØ�1—7‘7˜1“:˜qŸu™u Q›xÐ'Ð'rQ   NrÅ   r¤   re   rQ   rO   r?   r?   ¼  s
   „ ÙNô(rQ   r?   c                  ó   — e Zd ZdZdd„Zy)rA   zW
    Return a `mailto` link Element given an auto-mail link (`<foo@example.com>`).
    c           
     ó>  — t        j                  d«      }| j                  |j                  d«      «      }|j	                  d«      r|t        d«      d }d„ }|D �cg c]  } |t        |«      «      ‘Œ }}t        j                  dj                  |«      «      |_
        d|z   }dj                  |D �cg c]!  }t        j                  dt        |«      z  z   ‘Œ# c}«      }|j                  d|«       ||j                  d	«      |j                  d	«      fS c c}w c c}w )
za Return an [`Element`][xml.etree.ElementTree.Element] containing a `mailto` link  of `group(1)`. r-  r   zmailto:Nc                ó®   — t         j                  j                  | «      }|r dj                  t        j
                  |«      S dt        j
                  | fz  S )z=Return entity definition by code, or the code if not defined.z{}{};z%s#%d;)r
   Úcodepoint2namer‚   r®   r   ÚAMP_SUBSTITUTE)rÐ   r&   s     rO   rl  z;AutomailInlineProcessor.handleMatch.<locals>.codepoint2nameÑ  sH   € ä×,Ñ,×0Ñ0°Ó6ˆFÙØ—~‘~¤d×&9Ñ&9¸6ÓBÐBà¤4×#6Ñ#6¸Ð"=Ñ=Ð=rQ   r€   z#%d;r.  r   )rº   r»   r’   r�   rV   rà   r°   r   rÓ   r„   r‘   rm  r2  r§   r¨   )	rp   rw   rž   r¼   Úemailrl  ÚletterÚlettersÚmailtos	            rO   rx   z#AutomailInlineProcessor.handleMatchÊ  s   € ä�]‰]˜3ÓˆØ—‘˜aŸg™g a›jÓ)ˆØ×Ñ˜IÔ&Øœ#˜i›.˜/Ð*ˆEò	>ð >CÖC°6‘>¤# f£+Õ.ÐCˆÐCÜ×#Ñ# B§G¡G¨GÓ$4Ó5ˆŒà˜UÑ"ˆØ—‘Ø4:ö<Ø*0ô ×-Ñ-°Ü˜f›+ñ1&ó &ò <ó =ˆà
�‰ˆv�vÔØ�1—7‘7˜1“:˜qŸu™u Q›xÐ'Ð'ùò Dùò<s   ÁDÂ3&DNrÅ   r¤   re   rQ   rO   rA   rA   Æ  s   „ ñô(rQ   rA   )rL   r   rM   r   r•   zutil.Registry[InlineProcessor])rX   r]   r•   r]   )Erc   Ú
__future__r   r€   r   Útypingr   r   r   r	   rj   Úxml.etree.ElementTreerº   ÚElementTreer$   r
   ÚImportErrorÚhtmlentitydefsÚmarkdownr   rP   ÚNOIMGr2   r4   r#  r"  r(  r)  r'  r  r%  r   r&  r!  r8   r:   r6   r<   rI   r@   rB   rF   rG   rD   rY   r[   rg   r™   r¡   rH   r3   r´   rÁ   rÇ   rC   r1   rØ   rè   rE   rJ   rK   r7   r9   r5   r=   r;   r>   r?   rA   re   rQ   rO   ú<module>rz     sJ  ðñ(õ* #å ß =Ó =Û 	ß %Ð %ð&Ýñ Ý!ó*ð` 	€Ø \àL€Ø Mà€	Ø =à€Ø 7à€	Ø 5à:€Ø bà9Ð Ø càOÐ Ø Bà,€Ø Sà,€Ø Và,€Ø ?à,€Ø Bà9€Ø ?à
�%‰-€Ø `à€Ø Sà€Ø 5à"Ð Ø :à8€Ø 'à<€Ø =à&€Ø ;à
H€Ø $à<€	Ø Và€Ø (óô�:ô ÷P?ñ P?ôf-�gô -ô`˜ô ô0 ô 0ô.˜Oô .ô&�wô ô:(˜ô (ô:'Ð+ô 'ô=Ð#;ô =ôY˜oô Yô2Ð'ô ô*)Ð7ô )ô*$'˜/ô $'ôNF˜ô FôR
PÐ+ô 
Pô_8˜/ô _8ôD%Ð.ô %ô05Ð2ô 5ôp)Ð$<ô )ô	Ð$<ô 	ô)Ð)Fô )ô(˜oô (ô(˜oõ (øðk ò &Þ%ð&ús   ©F Æ	FÆF