o
    ¼>h:–  ã                   @  sŽ  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  mZ ddlmZ er5ddlmZ dZd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	 dZ	 ed Z 	 dZ!	 e Z"	 e!Z#	 d Z$	 d!Z%	 d"Z&	 d#Z'	 d$Z(	 d%Z)	 d[d(d)„Z*G d*d+„ d+e	ƒZ+G d,d-„ d-ƒZ,G d.d/„ d/e,ƒZ-G d0d1„ d1e,ƒZ.G d2d3„ d3e-ƒZ/G d4d5„ d5e-ƒZ0G d6d7„ d7e,ƒZ1G d8d9„ d9e-ƒZ2G d:d;„ d;e1ƒZ3G d<d=„ d=e2ƒZ4G d>d?„ d?e-ƒZ5G d@dA„ dAe1ƒZ6G dBdC„ dCe2ƒZ7G dDdE„ dEe-ƒZ8G dFdG„ dGe-ƒZ9G dHdI„ dIe9ƒZ:G dJdK„ dKe-ƒZ;G dLdM„ dMe;ƒZ<G dNdO„ dOe;ƒZ=G dPdQ„ dQe=ƒZ>G dRdS„ dSe=ƒZ?G dTdU„ dUe?ƒZ@G dVdW„ dWe-ƒZAG dXdY„ dYe-ƒZBdS )\aB  
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)ÚMarkdownÚmdr
   Úkwargsr   Úreturnúutil.Registry[InlineProcessor]c                 K  sD  t  ¡ }| ttƒdd¡ | tt| ƒdd¡ | tt| ƒdd¡ | t	t
| ƒdd¡ | tt| ƒd	d
¡ | tt| ƒdd¡ | tt| ƒdd¡ | tt| ƒdd¡ | tt| ƒdd¡ | tt| ƒdd¡ | ttdƒdd¡ | tt| ƒdd¡ | tt| ƒdd¡ | ttƒdd¡ | tdƒdd ¡ | 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)r   r   ÚinlinePatterns© rO   úw/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/markdown/inlinepatterns.pyÚbuild_inlinepatterns5   s0   ÿÿÿrQ   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][^<>@ ]*( [^<>]*)?|!--(?:(?!<!--|-->).)*--|[?](?:(?!<[?]|[?]>).)*[?]|!\[CDATA\[(?:(?!<!\[CDATA\[|\]\]>).)*\]\])>)z-(&(?:\#[0-9]+|\#x[0-9a-fA-F]+|[a-zA-Z0-9]+);)z  \nÚstringÚstrc                 C  s8   |   d¡r
|  d¡s|   d¡r|  d¡r| dd… S | S )z#Remove quotes from around a string.ú"ú'r   éÿÿÿÿ)Ú
startswithÚendswith)rR   rO   rO   rP   Údequote±   s   ÿÿrY   c                   @  s*   e Zd ZU dZded< ded< ded< dS )ÚEmStrongItemzEmphasis/strong pattern item.úre.Pattern[str]ÚpatternrS   ÚbuilderÚtagsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__rO   rO   rO   rP   rZ   º   s
   
 rZ   c                   @  sf   e Zd ZU dZeƒ Zded< 	 ded< ded< dddd„Zddd„Zddd„Z	ddd„Z
d dd„ZdS )!Ú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_EXCLUDESr[   Úcompiled_reúMarkdown | Noner   Nr\   rS   c                 C  s*   || _ t d| tjtjB ¡| _|| _dS )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ÚUNICODErf   r   ©Úselfr\   r   rO   rO   rP   Ú__init__â   s
   

ÿ
zPattern.__init__r   ú
re.Patternc                 C  s   | j S )z' Return a compiled regular expression. )rf   ©rm   rO   rO   rP   ÚgetCompiledRegExpó   s   zPattern.getCompiledRegExpÚmúre.Match[str]úetree.Element | strc                 C  ó   dS )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.

        NrO   ©rm   rr   rO   rO   rP   ÚhandleMatch÷   s   zPattern.handleMatchc                 C  s   | j jS )z+ Return class name, to define pattern type )Ú	__class__r_   rp   rO   rO   rP   Útype  s   zPattern.typeÚtextc                   sD   z	| j jd j‰ W n ty   | Y S w ‡ fdd„}tj ||¡S )ú> Return unescaped text given text with an inline placeholder. Úinlinec                   s<   |   d¡}|ˆ v rˆ  |¡}t|tƒr|S d | ¡ ¡S d S )Nr   Ú )ÚgroupÚgetÚ
isinstancerS   ÚjoinÚitertext©rr   ÚidÚvalue©ÚstashrO   rP   Ú	get_stash  s   


úz#Pattern.unescape.<locals>.get_stash©r   ÚtreeprocessorsÚstashed_nodesÚKeyErrorr   ÚINLINE_PLACEHOLDER_REÚsub©rm   rz   rˆ   rO   r†   rP   Úunescape  s   ÿ	zPattern.unescape©N©r\   rS   r   rg   )r   ro   )rr   rs   r   rt   )r   rS   ©rz   rS   r   rS   )r_   r`   ra   rb   Útuplere   rc   rn   rq   rw   ry   r   rO   rO   rO   rP   rd   Å   s   
 


rd   c                   @  s&   e Zd ZdZdddd„Zddd„ZdS )ÚInlineProcessorz¡
    Base class that inline processors subclass.

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

    Nr\   rS   r   rg   c                 C  s,   || _ t |tjtjB ¡| _d| _|| _dS )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\   rh   ri   rj   rk   rf   Ú	safe_moder   rl   rO   rO   rP   rn   $  s   

zInlineProcessor.__init__rr   rs   Údatar   ú9tuple[etree.Element | str | None, int | None, int | None]c                 C  ru   )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.

        NrO   ©rm   rr   r—   rO   rO   rP   rw   5  s   zInlineProcessor.handleMatchr‘   r’   )rr   rs   r—   rS   r   r˜   ©r_   r`   ra   rb   rn   rw   rO   rO   rO   rP   r•     s    r•   c                   @  ó   e Zd ZdZd	dd„ZdS )
ÚSimpleTextPatternz2 Return a simple text of `group(2)` of a Pattern. rr   rs   r   rS   c                 C  s
   |  d¡S )z< Return string content of `group(2)` of a matching pattern. é   )r~   rv   rO   rO   rP   rw   M  s   
zSimpleTextPattern.handleMatchN©rr   rs   r   rS   ©r_   r`   ra   rb   rw   rO   rO   rO   rP   rœ   K  ó    rœ   c                   @  ó   e Zd ZdZddd	„Zd
S )rJ   z2 Return a simple text of `group(1)` of a Pattern. rr   rs   r—   rS   r   útuple[str, int, int]c                 C  s   |  d¡| d¡| d¡fS )z< Return string content of `group(1)` of a matching pattern. r   r   )r~   ÚstartÚendr™   rO   rO   rP   rw   T  s   z%SimpleTextInlineProcessor.handleMatchN©rr   rs   r—   rS   r   r¢   rŸ   rO   rO   rO   rP   rJ   R  r    rJ   c                   @  r¡   )r5   z Return an escaped character. rr   rs   r—   rS   r   útuple[str | None, int, int]c                 C  sT   |  d¡}|| jjv rd tjt|ƒtj¡| d¡| 	d¡fS d| d¡| 	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~   r   ÚESCAPED_CHARSÚformatr   ÚSTXÚordÚETXr£   r¤   )rm   rr   r—   ÚcharrO   rO   rP   rw   \  s   
	(z!EscapeInlineProcessor.handleMatchN)rr   rs   r—   rS   r   r¦   rŸ   rO   rO   rO   rP   r5   Y  ó    r5   c                   @  s$   e Zd ZdZddd„Zddd„ZdS )ÚSimpleTagPatternz]
    Return element of type `tag` with a text attribute of `group(3)`
    of a Pattern.

    r\   rS   Útagc                 C  ó   t  | |¡ || _dS )zµ
        Create an instant of an simple tag pattern.

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

        N)rd   rn   r°   ©rm   r\   r°   rO   rO   rP   rn   r  ó   	zSimpleTagPattern.__init__rr   rs   r   úetree.Elementc                 C  s   t  | 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~   rz   )rm   rr   ÚelrO   rO   rP   rw     s   zSimpleTagPattern.handleMatchN©r\   rS   r°   rS   ©rr   rs   r   r´   rš   rO   rO   rO   rP   r¯   l  ó    
r¯   c                   @  s$   e Zd ZdZddd„Zddd„ZdS )ÚSimpleTagInlineProcessorz]
    Return element of type `tag` with a text attribute of `group(2)`
    of a Pattern.

    r\   rS   r°   c                 C  r±   )z·
        Create an instant of an simple tag processor.

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

        N)r•   rn   r°   r²   rO   rO   rP   rn     r³   z!SimpleTagInlineProcessor.__init__rr   rs   r—   r   útuple[etree.Element, int, int]c                 C  s.   t  | j¡}| d¡|_|| d¡| 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~   rz   r£   r¤   ©rm   rr   r—   r¸   rO   rO   rP   rw   œ  s   z$SimpleTagInlineProcessor.handleMatchNr¹   ©rr   rs   r—   rS   r   r½   rš   rO   rO   rO   rP   r¼   ‰  r»   r¼   c                   @  r›   )
ÚSubstituteTagPatternú3 Return an element of type `tag` with no children. rr   rs   r   r´   c                 C  s   t  | j¡S )úH Return empty [`Element`][xml.etree.ElementTree.Element] of type `tag`. )r¶   r·   r°   rv   rO   rO   rP   rw   ¨  s   z SubstituteTagPattern.handleMatchNrº   rŸ   rO   rO   rO   rP   rÀ   ¦  r    rÀ   c                   @  r¡   )rE   rÁ   rr   rs   r—   rS   r   r½   c                 C  s   t  | j¡| d¡| d¡fS )rÂ   r   )r¶   r·   r°   r£   r¤   r™   rO   rO   rP   rw   ¯  s   z(SubstituteTagInlineProcessor.handleMatchNr¿   rŸ   rO   rO   rO   rP   rE   ­  r    rE   c                   @  s$   e Zd ZdZddd„Zddd„ZdS )r3   zA Return a `<code>` element containing the escaped matching text. r\   rS   c                 C  s.   t  | |¡ d tjtdƒtj¡| _d| _d S )Nr§   ú\Úcode)	r•   rn   r©   r   rª   r«   r¬   ÚESCAPED_BSLASHr°   )rm   r\   rO   rO   rP   rn   ¶  s   z BacktickInlineProcessor.__init__rr   rs   r—   r   ú$tuple[etree.Element | str, int, int]c                 C  sn   |  d¡r$t | j¡}t t |  d¡ ¡ ¡¡|_|| 	d¡| 
d¡fS |  d¡ d| j¡| 	d¡| 
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Ústriprz   r£   r¤   ÚreplacerÅ   r¾   rO   rO   rP   rw   ¼  s
   
	&z#BacktickInlineProcessor.handleMatchN)r\   rS   )rr   rs   r—   rS   r   rÆ   rš   rO   rO   rO   rP   r3   ´  s    
r3   c                   @  r›   )
ÚDoubleTagPatternúfReturn a ElementTree element nested in tag2 nested in tag1.

    Useful for strong emphasis etc.

    rr   rs   r   r´   c                 C  sR   | j  d¡\}}t |¡}t ||¡}| d¡|_t| ¡ ƒdkr'| 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~   rz   ÚlenÚgroupsÚtail)rm   rr   Útag1Útag2Úel1Úel2rO   rO   rP   rw   Ó  s   
zDoubleTagPattern.handleMatchNrº   rŸ   rO   rO   rO   rP   rË   Í  ó    rË   c                   @  r¡   )ÚDoubleTagInlineProcessorrÌ   rr   rs   r—   rS   r   r½   c                 C  sd   | j  d¡\}}t |¡}t ||¡}| d¡|_t| ¡ ƒdkr'| d¡|_	|| 
d¡| 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~   rz   rÒ   rÓ   rÔ   r£   r¤   )rm   rr   r—   rÕ   rÖ   r×   rØ   rO   rO   rP   rw   è  s   
z$DoubleTagInlineProcessor.handleMatchNr¿   rŸ   rO   rO   rO   rP   rÚ   â  rÙ   rÚ   c                   @  s.   e Zd ZdZddd	„Zddd„Zddd„ZdS )rG   z1 Store raw inline html and return a placeholder. rr   rs   r—   rS   r   r¢   c                 C  s:   |   |  | d¡¡¡}| jj |¡}|| d¡| d¡fS )zL Store the text of `group(1)` of a pattern and return a placeholder string. r   r   )Úbackslash_unescaper   r~   r   Ú	htmlStashÚstorer£   r¤   )rm   rr   r—   ÚrawhtmlÚplace_holderrO   rO   rP   rw   ù  s   zHtmlInlineProcessor.handleMatchrz   c                   sH   z	ˆ j jd j‰W n ty   | Y S w d	‡ ‡fdd„}tj ||¡S )
r{   r|   rr   rs   r   rS   c                   sJ   |   d¡}ˆ |¡}|d ur#zˆ j |¡W S  ty"   d|  Y S w d S )Nr   z\%s)r~   r   r   Ú
serializerÚ	Exceptionrƒ   ©rm   r‡   rO   rP   rˆ     s   

ÿýz/HtmlInlineProcessor.unescape.<locals>.get_stashNrž   r‰   r   rO   râ   rP   r   ÿ  s   ÿ	zHtmlInlineProcessor.unescapec                 C  s@   z	| j jd j}W n ty   | Y S w d	dd„}| ||¡S )
zG Return text with backslash escapes undone (backslashes are restored). r   rr   rs   r   rS   c                 S  s   t t|  d¡ƒƒS )Nr   )ÚchrÚintr~   )rr   rO   rO   rP   Ú	_unescape  s   z9HtmlInlineProcessor.backslash_unescape.<locals>._unescapeNrž   )r   rŠ   ÚRErŒ   rŽ   )rm   rz   ræ   rå   rO   rO   rP   rÛ     s   ÿ
z&HtmlInlineProcessor.backslash_unescapeNr¥   r“   )r_   r`   ra   rb   rw   r   rÛ   rO   rO   rO   rP   rG   ÷  s
    

rG   c                
   @  sÔ   e Zd ZdZee eejej	B ¡ddƒee e
ejej	B ¡ddƒee eejej	B ¡ddƒee eejej	B ¡ddƒee eejej	B ¡ddƒgZ	 d'dd„Zd(dd„Zd(dd„Zd)dd„Zd*d!d"„Zd+d$d%„Zd&S ),rL   zGEmphasis processor for handling strong and em matches inside asterisks.Údoubleú	strong,emú	em,strongÚdouble2ÚsingleÚstrongÚemrr   rs   r°   rS   Úidxrä   r   r´   c                 C  s(   t  |¡}| d¡}|  ||d|¡ |S )zReturn single tag.r   N)r¶   r·   r~   Úparse_sub_patterns)rm   rr   r°   rî   r×   rz   rO   rO   rP   Úbuild_single*  s   

zAsteriskProcessor.build_singler^   c           	      C  st   |  d¡\}}t |¡}t |¡}| d¡}|  ||d|¡ | |¡ t| ¡ ƒdkr8| d¡}|  ||||¡ |S )zReturn double tag.rÍ   r   Nrµ   )rÐ   r¶   r·   r~   rï   ÚappendrÒ   rÓ   ©	rm   rr   r^   rî   rÕ   rÖ   r×   rØ   rz   rO   rO   rP   Úbuild_double1  s   




zAsteriskProcessor.build_doublec           	      C  sd   |  d¡\}}t |¡}t |¡}| d¡}|  ||d|¡ | d¡}| |¡ |  ||d|¡ |S )zFReturn double tags (variant 2): `<strong>text <em>text</em></strong>`.rÍ   r   Nrµ   )rÐ   r¶   r·   r~   rï   rñ   rò   rO   rO   rP   Úbuild_double2?  s   




zAsteriskProcessor.build_double2r—   ÚparentÚlastúetree.Element | NoneÚNonec                 C  s  d}d}t |ƒ}||k rl| j ||¡rdd}t| jƒD ]B\}	}
|	|kr#q|
j ||¡}|r\||| d¡… }|rB|dur?||_n||_|  	||
j
|
j|	¡}| |¡ |}| d¡ }}d}q|sc|d7 }n|d7 }||k s||d… }|r‚|dur}||_dS ||_dS dS )a/  
        Parses sub patterns.

        `data`: text to evaluate.

        `parent`: Parent to attach text and sub elements to.

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

        `idx`: Current pattern index that was used to evaluate the parent.
        r   FNTr   )rÒ   rf   ÚmatchÚ	enumerateÚPATTERNSr\   r£   rÔ   rz   Úbuild_elementr]   r^   rñ   r¤   )rm   r—   rõ   rö   rî   ÚoffsetÚposÚlengthÚmatchedÚindexÚitemrr   rz   r¸   rO   rO   rP   rï   L  sB   
€€à#

üz$AsteriskProcessor.parse_sub_patternsr]   r  c                 C  s:   |dkr|   |||¡S |dkr|  |||¡S |  |||¡S )zElement builder.rê   rç   )rô   ró   rð   )rm   rr   r]   r^   r  rO   rO   rP   rü   ‰  s
   zAsteriskProcessor.build_elementú3tuple[etree.Element | None, int | None, int | None]c           	      C  sn   d}d}d}t | jƒD ]&\}}|j || d¡¡}|r1| d¡}| d¡}|  ||j|j|¡} nq|||fS )zParse patterns.Nr   )	rú   rû   r\   rù   r£   r¤   rü   r]   r^   )	rm   rr   r—   r¸   r£   r¤   r  r  Úm1rO   rO   rP   rw   “  s   

ü
zAsteriskProcessor.handleMatchN)rr   rs   r°   rS   rî   rä   r   r´   )rr   rs   r^   rS   rî   rä   r   r´   )
r—   rS   rõ   r´   rö   r÷   rî   rä   r   rø   )
rr   rs   r]   rS   r^   rS   r  rä   r   r´   ©rr   rs   r—   rS   r   r  )r_   r`   ra   rb   rZ   rh   ri   ÚEM_STRONG_RErj   rk   ÚSTRONG_EM_REÚSTRONG_EM3_REÚ	STRONG_REÚEMPHASIS_RErû   rð   ró   rô   rï   rü   rw   rO   rO   rO   rP   rL     s    û




=
rL   c                
   @  s–   e Zd ZdZee eejej	B ¡ddƒee e
ejej	B ¡ddƒee eejej	B ¡ddƒee eejej	B ¡ddƒee eejej	B ¡ddƒgZd	S )
rM   zIEmphasis processor for handling strong and em matches inside underscores.rç   rè   ré   rê   rë   rì   rí   N)r_   r`   ra   rb   rZ   rh   ri   ÚEM_STRONG2_RErj   rk   ÚSTRONG_EM2_REÚSMART_STRONG_EM_REÚSMART_STRONG_REÚSMART_EMPHASIS_RErû   rO   rO   rO   rP   rM   ¤  s    ûrM   c                   @  sL   e Zd ZdZe dejejB ¡Ze d¡Z	dd
d„Z
ddd„Zddd„ZdS )r9   z- Return a link element from the given match. z2\(\s*(?:(<[^<>]*>)\s*(?:('[^']*'|"[^"]*")\s*)?\))?z\srr   rs   r—   rS   r   r  c           	      C  s|   |   || d¡¡\}}}|sdS |  ||¡\}}}}|sdS t d¡}||_| d|¡ |dur6| d|¡ || d¡|fS )zS Return an `a` [`Element`][xml.etree.ElementTree.Element] or `(None, None, None)`. r   ©NNNÚaÚhrefNÚtitle)ÚgetTextr¤   ÚgetLinkr¶   r·   rz   Úsetr£   )	rm   rr   r—   rz   r  Úhandledr  r  r¸   rO   rO   rP   rw   ¶  s   
zLinkInlineProcessor.handleMatchr  rä   ú!tuple[str, str | None, int, bool]c                 C  sÐ  d}d}d}| j j||d}|r7| d¡r7| d¡dd…  ¡ }| d¡r.| d¡dd… }| d¡}d	}n|rHd}d}| ¡ }	|	}d}
d}d}d}d}d}d}d}d}t|t|ƒƒD ]Ð}|| }|d
krw|sn|d7 }nk|dkrv|d8 }nb|dkr¦|dkrƒ||ks‹|dkrŽ||krŽd}nK|s•|d8 }nD|dkr¥|d8 }|dkr¥|d }
n3|dv rÙ|s¹d	}|}d}|d }|}n ||krÆ|sÆ|d }|}n||krÏ|d }n
|rÙ||krÙ|d }|d7 }|dkr&|dkrþ||krþ||	|d … }d |||d … ¡}n&|dkr||kr||	|d … }d |||d … ¡}n||	|d … } n|dkr-|}q]|dkrD|dkrD||	|
d … }|
}d}|dk}|dur[| j 	dt
|  | ¡ ¡ƒ¡}|  |¡ ¡ }||||fS )z?Parse data between `()` of `[Text]()` allowing recursive `()`. r}   NF©rþ   r   rV   r   r   Tú(ú))rU   rT   ú )ÚRE_LINKrù   r~   rÉ   r¤   ÚrangerÒ   r   ÚRE_TITLE_CLEANrŽ   rY   r   )rm   r—   r  r  r  r  rr   Úbracket_countÚbacktrack_countÚstart_indexÚlast_bracketÚquoteÚstart_quoteÚ
exit_quoteÚignore_matchesÚ	alt_quoteÚstart_alt_quoteÚexit_alt_quoterö   rþ   ÚcrO   rO   rP   r  Ë  sœ   


€ 
€


€
zLinkInlineProcessor.getLinkútuple[str, int, bool]c                 C  sx   d}g }t |t|ƒƒD ]&}|| }|dkr|d8 }n|dkr"|d7 }|d7 }|dkr, n| |¡ qd |¡||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   )rm   r—   r  r   rz   rþ   r+  rO   rO   rP   r  ?  s   
zLinkInlineProcessor.getTextNr  )r—   rS   r  rä   r   r  )r—   rS   r  rä   r   r,  )r_   r`   ra   rb   rh   ri   rj   rk   r  r  rw   r  r  rO   rO   rO   rP   r9   ±  s    


tr9   c                   @  r¡   )r;   z. Return a `img` element from the given match. rr   rs   r—   rS   r   r  c           	      C  sˆ   |   || d¡¡\}}}|sdS |  ||¡\}}}}|sdS t d¡}| d|¡ |dur3| d|¡ | d|  |¡¡ || d¡|fS )zU Return an `img` [`Element`][xml.etree.ElementTree.Element] or `(None, None, None)`. r   r  ÚimgÚsrcNr  Úalt)r  r¤   r  r¶   r·   r  r   r£   )	rm   rr   r—   rz   r  r  r0  r  r¸   rO   rO   rP   rw   V  s   
z ImageInlineProcessor.handleMatchNr  rŸ   rO   rO   rO   rP   r;   S  r®   r;   c                   @  sP   e Zd ZdZe dej¡Ze dejej	B ¡Z
dd
d„Zddd„Zddd„ZdS )r7   z6 Match to a stored reference and return link element. z\s+z\s?\[([^\]]*)\]rr   rs   r—   rS   r   r  c           
      C  s   |   || d¡¡\}}}|sdS |  |||¡\}}}|sdS | j d|¡}|| jjvr3d| d¡|fS | jj| \}}	|  ||	|¡| d¡|fS )zz
        Return [`Element`][xml.etree.ElementTree.Element] returned by `makeTag` method or `(None, None, None)`.

        r   r  r  N)	r  r¤   ÚevalIdÚNEWLINE_CLEANUP_RErŽ   r   Ú
referencesr£   ÚmakeTag)
rm   rr   r—   rz   r  r  r„   r¤   r  r  rO   rO   rP   rw   q  s   z$ReferenceInlineProcessor.handleMatchr  rä   rz   útuple[str | None, int, bool]c                 C  sL   | j j||d}|sd|dfS | d¡ ¡ }| d¡}|s!| ¡ }||dfS )z\
        Evaluate the id portion of `[ref][id]`.

        If `[ref][]` use `[ref]`.
        r  NFr   r   T)r  rù   r~   Úlowerr¤   )rm   r—   r  rz   rr   r„   r¤   rO   rO   rP   r2  ‡  s   


zReferenceInlineProcessor.evalIdr  r  r´   c                 C  s0   t  d¡}| d|¡ |r| d|¡ ||_|S )z; Return an `a` [`Element`][xml.etree.ElementTree.Element]. r  r  r  )r¶   r·   r  rz   ©rm   r  r  rz   r¸   rO   rO   rP   r5  —  s   
z ReferenceInlineProcessor.makeTagNr  )r—   rS   r  rä   rz   rS   r   r6  ©r  rS   r  rS   rz   rS   r   r´   )r_   r`   ra   rb   rh   ri   Ú	MULTILINEr3  rj   rk   r  rw   r2  r5  rO   rO   rO   rP   r7   k  s    

r7   c                   @  ó   e Zd ZdZdd	d
„ZdS )r?   z%Short form of reference: `[google]`. r—   rS   r  rä   rz   r   r,  c                 C  ó   |  ¡ |dfS ©zEvaluate the id of `[ref]`.  T©r7  ©rm   r—   r  rz   rO   rO   rP   r2  ¥  ó   z$ShortReferenceInlineProcessor.evalIdN©r—   rS   r  rä   rz   rS   r   r,  ©r_   r`   ra   rb   r2  rO   rO   rO   rP   r?   £  r    r?   c                   @  r¡   )r=   z7 Match to a stored reference and return `img` element. r  rS   r  rz   r   r´   c                 C  s<   t  d¡}| d|¡ |r| d|¡ | d|  |¡¡ |S )z= Return an `img` [`Element`][xml.etree.ElementTree.Element]. r/  r0  r  r1  )r¶   r·   r  r   r8  rO   rO   rP   r5  ­  s   
z%ImageReferenceInlineProcessor.makeTagNr9  )r_   r`   ra   rb   r5  rO   rO   rO   rP   r=   «  r    r=   c                   @  r;  )r@   z* Short form of image reference: `![ref]`. r—   rS   r  rä   rz   r   r,  c                 C  r<  r=  r>  r?  rO   rO   rP   r2  ¹  r@  z)ShortImageReferenceInlineProcessor.evalIdNrA  rB  rO   rO   rO   rP   r@   ·  r    r@   c                   @  r¡   )rA   zD Return a link Element given an auto-link (`<http://example/com>`). rr   rs   r—   rS   r   r½   c                 C  sJ   t  d¡}| d|  | d¡¡¡ t | d¡¡|_|| d¡| 	d¡fS )zI Return an `a` [`Element`][xml.etree.ElementTree.Element] of `group(1)`. r  r  r   r   )
r¶   r·   r  r   r~   r   rÇ   rz   r£   r¤   r¾   rO   rO   rP   rw   Á  s   
z#AutolinkInlineProcessor.handleMatchNr¿   rŸ   rO   rO   rO   rP   rA   ¿  r    rA   c                   @  r¡   )rC   zW
    Return a `mailto` link Element given an auto-mail link (`<foo@example.com>`).
    rr   rs   r—   rS   r   r½   c                   s    t  d¡}|  | d¡¡}| d¡r|tdƒd… }dd	d
„‰ ‡ fdd„|D ƒ}t d |¡¡|_	d| }d dd„ |D ƒ¡}| 
d|¡ || d¡| d¡fS )za Return an [`Element`][xml.etree.ElementTree.Element] containing a `mailto` link  of `group(1)`. r  r   zmailto:NrÄ   rä   r   rS   c                 S  s,   t j | ¡}|rd tj|¡S dtj| f 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(   rO   rO   rP   rC  Ô  s   z;AutomailInlineProcessor.handleMatch.<locals>.codepoint2namec                   s   g | ]}ˆ t |ƒƒ‘qS rO   )r«   ©Ú.0Úletter©rC  rO   rP   Ú
<listcomp>Ü  s    z7AutomailInlineProcessor.handleMatch.<locals>.<listcomp>r}   c                 S  s   g | ]}t jd t|ƒ  ‘qS )z#%d;)r   rD  r«   rE  rO   rO   rP   rI  à  s
    ÿ
ÿr  r   )rÄ   rä   r   rS   )r¶   r·   r   r~   rW   rÒ   r   rÇ   r   rz   r  r£   r¤   )rm   rr   r—   r¸   ÚemailÚlettersÚmailtorO   rH  rP   rw   Í  s   



ÿz#AutomailInlineProcessor.handleMatchNr¿   rŸ   rO   rO   rO   rP   rC   É  s    rC   )r   r
   r   r   r   r   )rR   rS   r   rS   )Crb   Ú
__future__r   r}   r   Útypingr   r   r   r   rh   Úxml.etree.ElementTreer¶   ÚElementTreer&   r	   Úmarkdownr
   rQ   ÚNOIMGr4   r6   r
  r	  r  r  r  r  r  r  r  r  r:   r<   r8   r>   rK   rB   rD   rH   rI   rF   rY   rZ   rd   r•   rœ   rJ   r5   r¯   r¼   rÀ   rE   r3   rË   rÚ   rG   rL   rM   r9   r;   r7   r?   r=   r@   rA   rC   rO   rO   rO   rP   Ú<module>   s¨   
0ÿ
	V0'  #8
