a
    %gh	y  ã                   @   sÖ  d dl mZmZmZ d dlZd dlZd dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ ejdkrŽejdkr|d dlZejZq d	d
lmZ eZnd dlmZ ejZdej Ze d¡Ze de d d d e d d d e d ¡Ze d¡Ze dej ¡Ze dej ej¡Ze d¡Ze d¡Z e d¡Z!e d¡Z"e d¡Z#e dej¡Z$e d¡Z%e d¡Z&e d¡Z'e d ¡Z(e d!¡Z)e d"¡Z*e d#¡Z+e d$¡Z,e d%ej-¡Z.d&d'„ Z/d(d)„ Z0G d*d+„ d+e1ƒZ2dS ),é    )Úabsolute_importÚunicode_literalsÚdivisionN)Úcommon)Únormalize_uriÚunescape_string)ÚNode)Únormalize_reference)é   r   )r
   é   é   )Ú	_unescape)Úentitytransz\\a  [!"#$%&\'()*+,\-./:;<=>?@\[\]\\^_`{|}~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E42\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDF3C-\uDF3E]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]z^(?:"(z|[^"\x00])*"ú|z'(z|[^'\x00])*'z\((z|[^()\x00])*\))z^(?:<(?:[^<>\n\\\x00]|\\.)*>)ú^z`+z^`+z\.\.\.z--+zˆ^<([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>z/^<[A-Za-z][A-Za-z0-9.+-]{1,31}:[^<>\x00-\x20]*>z^ *(?:\n *)?z^^[ \t\n\x0b\x0c\x0d]z[ \t\n\x0b\x0c\x0d]+z^\sz *$z^ *z^ *(?:\n|$)z^\[(?:[^\\\[\]]|\\.){0,1000}\]z^[^\n`\[\]\\!<&*_\'"]+c                 C   s   t dd ƒ}| |_|S )NÚtext)r   Úliteral)ÚsÚnode© r   úb/mounts/lovelace/software/anaconda3/envs/metaDMG/lib/python3.9/site-packages/commonmark/inlines.pyr   V   s    
r   c                 C   sŽ   d}d}t | ƒd dkr&t | ƒd }nXt | ƒd dkrDt | ƒd }n:t | ƒd dkrjd}t | ƒd d }nd}t | ƒd d }d| d|  S )Nr   r
   é   r   r   u   â€”u   â€“)Úlen)ÚcharsZen_countZem_countr   r   r   Úsmart_dashes\   s    r   c                   @   sô   e Zd ZdZi fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zedd„ ƒZdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ ZeZ d8S )9ÚInlineParserz»INLINE PARSER

    These are methods of an InlineParser class, defined below.
    An InlineParser keeps track of a subject (a string to be
    parsed) and a position in that subject.
    c                 C   s"   d| _ d | _d| _i | _|| _d S )NÚ r   )ÚsubjectÚbracketsÚposÚrefmapÚoptions)Úselfr!   r   r   r   Ú__init__y   s
    zInlineParser.__init__c                 C   sB   t  || j| jd… ¡}|du r$dS |  j| ¡ 7  _| ¡ S dS )z
        If regexString matches at current position in the subject, advance
        position in subject and return the match; otherwise return None.
        N)ÚreÚsearchr   r   ÚendÚgroup)r"   ZregexStringÚmatchr   r   r   r(   €   s
    zInlineParser.matchc                 C   s$   | j t| jƒk r| j| j  S dS dS )zh Returns the character at the current subject position, or None if
        there are no more characters.N)r   r   r   ©r"   r   r   r   ÚpeekŒ   s    zInlineParser.peekc                 C   s   |   t¡ dS )zL Parse zero or more space characters, including at
        most one newline.T)r(   ÚreSpnlr)   r   r   r   Úspnl”   s    
zInlineParser.spnlc                 C   sÒ   |   t¡}|du rdS | j}|   t¡}|durº||kr®tddƒ}| j|| jt|ƒ …  dd¡}| d¡rš|d |d   kr†dkršn n|dd… |_	n||_	| 
|¡ d	S |   t¡}q&|| _| 
t|ƒ¡ d	S )
z Attempt to parse backticks, adding either a backtick code span or a
        literal sequence of backticks to the 'inlines' list.NFÚcodeÚ
ú r   éÿÿÿÿr   T)r(   ÚreTicksHerer   ÚreTicksr   r   r   ÚreplaceÚlstripr   Úappend_childr   )r"   ÚblockZticksZafter_open_ticksÚmatchedr   Úcontentsr   r   r   ÚparseBackticksž   s(    


ÿ*
zInlineParser.parseBackticksc                 C   sª   | j }|  jd7  _z|| j }W n ty8   d}Y n0 |  ¡ dkrj|  jd7  _tddƒ}| |¡ n<|r˜t t|¡r˜| t	|ƒ¡ |  jd7  _n| t	dƒ¡ dS )a  
        Parse a backslash-escaped special character, adding either the
        escaped character, a hard line break (if the backslash is followed
        by a newline), or a literal backslash to the block's children.
        Assumes current character is a backslash.
        r   Nr.   Ú	linebreakú\T)
r   r   Ú
IndexErrorr*   r   r5   r$   r%   ÚreEscapabler   )r"   r6   ZsubjZsubjcharr   r   r   r   ÚparseBackslash·   s    

zInlineParser.parseBackslashc                 C   s¨   |   t¡}|rT|dd… }tddƒ}td| ƒ|_d|_| t|ƒ¡ | |¡ dS |   t¡}|r¤|dd… }tddƒ}t|ƒ|_d|_| t|ƒ¡ | |¡ dS dS )	z?Attempt to parse an autolink (URL or email in pointy brackets).r   r0   ÚlinkNzmailto:r   TF)	r(   ÚreEmailAutolinkr   r   ÚdestinationÚtitler5   r   Ú
reAutolink)r"   r6   ÚmÚdestr   r   r   r   ÚparseAutolinkÒ   s&    






zInlineParser.parseAutolinkc                 C   s:   |   tj¡}|du rdS tddƒ}||_| |¡ dS dS )z Attempt to parse a raw HTML tag.NFZhtml_inlineT)r(   r   Z	reHtmlTagr   r   r5   )r"   r6   rD   r   r   r   r   ÚparseHtmlTagí   s    

zInlineParser.parseHtmlTagc                 C   sh  d}| j }|dks|dkr2|d7 }|  j d7  _ n$|  ¡ |krV|d7 }|  j d7  _ q2|dkrbdS |dkrndn| j|d  }|  ¡ }|du rd}t t|¡p¢|dk}t t|¡}t t|¡pÂ|dk}t t|¡}	| oâ| pâ|pâ|	}
| oö|	 pö|pö|}|dkr(|
o| p|	}|o$|
 p$|}n.|dks<|dkrN|
oF| }|}n|
}|}|| _ |||d	œS )
a  
        Scan a sequence of characters == c, and return information about
        the number of delimiters and whether they are positioned such that
        they can open and/or close emphasis or strong emphasis.  A utility
        function for strong/emph parsing.
        r   ú'ú"r   Nr.   õ   Â Ú_)Ú	numdelimsÚcan_openÚ	can_close)r   r*   r   r$   r%   ÚreUnicodeWhitespaceCharÚrePunctuation)r"   ÚcrL   ÚstartposZc_beforeZc_afterZafter_is_whitespaceZafter_is_punctuationZbefore_is_whitespaceZbefore_is_punctuationZleft_flankingZright_flankingrM   rN   r   r   r   Ú
scanDelimsø   sj    ÿÿþÿýÿý

ÿ
ÿýzInlineParser.scanDelimsc              
   C   s¶   |   |¡}|sdS | d¡}| j}|  j|7  _|dkr>d}n|dkrLd}n| j|| j… }t|ƒ}| |¡ ||||| jd| d¡| d	¡d
œ| _| jd dur²| j| jd d< dS )z2Handle a delimiter marker for emphasis or a quote.FrL   rH   õ   â€™rI   õ   â€œNrM   rN   )ÚccrL   Ú
origdelimsr   ÚpreviousÚnextrM   rN   rX   rY   T)rS   Úgetr   r   r   r5   Ú
delimiters)r"   rV   r6   ÚresrL   rR   r8   r   r   r   r   ÚhandleDelim7  s2    


ø
zInlineParser.handleDelimc                 C   sR   |  d¡d ur |  d¡|d d< |  d¡d u r<|  d¡| _n|  d¡|d d< d S )NrX   rY   )rZ   r[   )r"   Údelimr   r   r   ÚremoveDelimiterX  s
    zInlineParser.removeDelimiterc                 C   s"   |   d¡|kr|| d< | |d< d S )NrY   rX   )rZ   )ÚbottomÚtopr   r   r   ÚremoveDelimitersBetweena  s    z$InlineParser.removeDelimitersBetweenc                 C   s  ||||dœ}d}d}| j }|d ur>| d¡|kr>| d¡}q|d urð| d¡s^| d¡}q>| d¡}d}| d¡}|d urü||krü||| krü| d¡s¦| d¡oÌ|d	 d
 dkoÌ|d	 |d	  d
 dk}| d¡|krð| d¡rð|sðd}qü| d¡}qv|}	|dks|dkrn|s(| d¡}qÈ|d dkrH|d dkrHdnd}| d¡}
| d¡}|d  |8  < |d  |8  < |
jd t|
jƒ| … |
_|jd t|jƒ| … |_|dkrÊtdd ƒ}n
tdd ƒ}|
j}|r
||kr
|j}| ¡  | |¡ |}qÚ|
 |¡ |  	||¡ |d dkr@|
 ¡  |  
|¡ |d dkrÈ| ¡  |d }|  
|¡ |}nZ|dkrœd|d _|r’d|d _|d }n,|dkrÈd|d _|rÀd|d _|d }|s>|s>|	d ||< |	d s>|  
|	¡ q>| j d ur| j |kr|  
| j ¡ qðd S )N)rK   Ú*rH   rI   Fr   rX   rN   rY   rV   rM   rW   r
   Trc   rK   rL   r   r   r   ÚemphÚstrongrH   rT   u   â€˜rI   u   â€rU   )r[   rZ   r   r   r   ÚnxtÚunlinkr5   Zinsert_afterrb   r_   )r"   Zstack_bottomZopeners_bottomZ	odd_matchZ
use_delimsZcloserÚopenerZopener_foundZcloserccZ
old_closerZ
opener_inlZ
closer_inlrd   Útmprf   Z	tempstackr   r   r   ÚprocessEmphasisg  s¾    ü




ÿ
ÿþÿÿÿýÿþ
ÿ
þþ

ÿÿ












zInlineParser.processEmphasisc                 C   s*   |   t¡}|du rdS t|dd… ƒS dS )zn
        Attempt to parse link title (sans quotes), returning the string
        or None if no match.
        Nr   r0   )r(   ÚreLinkTitler   )r"   rB   r   r   r   ÚparseLinkTitleÞ  s    
zInlineParser.parseLinkTitlec                 C   sT  |   t¡}|du r<|  ¡ dkr$dS | j}d}|  ¡ }|du rBq|dkr–t t| j| jd | jd … ¡r–|  jd7  _|  ¡ dur”|  jd7  _q.|dkr¶|  jd7  _|d7 }q.|dkrä|dk rÌqn|  jd7  _|d8 }q.t t|¡röqq.|  jd7  _q.| j|kr |dkr dS | j|| j… }t	t
|ƒƒS t	t
|dd	… ƒƒS dS )
zf
        Attempt to parse link destination, returning the string or
        None if no match.
        Nú<r   r;   r   r   ú(ú)r0   )r(   ÚreLinkDestinationBracesr*   r   r$   r%   r=   r   ÚreWhitespaceCharr   r   )r"   r\   ÚsaveposZ
openparensrQ   r   r   r   ÚparseLinkDestinationê  s>    

ÿ

z!InlineParser.parseLinkDestinationc                 C   s.   |   t¡}|du st|ƒdkr"dS t|ƒS dS )z_
        Attempt to parse a link label, returning number of
        characters parsed.
        Nié  r   )r(   ÚreLinkLabelr   )r"   rD   r   r   r   ÚparseLinkLabel  s    
zInlineParser.parseLinkLabelc                 C   s8   | j }|  j d7  _ tdƒ}| |¡ |  ||d¡ dS )zf
        Add open bracket to delimiter stack and add a text node to
        block's children.
        r   ú[FT)r   r   r5   Ú
addBracket©r"   r6   rR   r   r   r   r   ÚparseOpenBracket!  s    
zInlineParser.parseOpenBracketc                 C   sf   | j }|  j d7  _ |  ¡ dkrT|  j d7  _ tdƒ}| |¡ |  ||d d¡ n| tdƒ¡ dS )z¥
        If next character is [, and ! delimiter to delimiter stack and
        add a text node to block's children. Otherwise just add a text
        node.
        r   rv   z![Tú!)r   r*   r   r5   rw   rx   r   r   r   Ú	parseBang0  s    
zInlineParser.parseBangc                 C   sx  d}d}|  j d7  _ | j }| j}|du r<| tdƒ¡ dS | d¡s`| tdƒ¡ |  ¡  dS | d¡}| j }|  ¡ dkrø|  j d7  _ |  ¡  |  ¡ }|durò|  ¡ ròt	 
t| j| j d  ¡rÊ|  ¡ }|  ¡ rø|  ¡ d	krø|  j d7  _ d}n|| _ |sŠ| j }	|  ¡ }
|
d
kr*| j|	|	|
 … }n | d¡sJ| j| d¡|… }|
dkrZ|| _ |rŠ| j t|ƒ¡}|rŠ|d }|d }d}|rTt|rœdnddƒ}||_|p²d|_| d¡j}|rè|j}| ¡  | |¡ |}qÂ| |¡ |  | d¡¡ |  ¡  | d¡ ¡  |sP| j}|durP| d¡sBd|d< | d¡}q$dS |  ¡  || _ | tdƒ¡ dS dS )zþ
        Try to match close bracket against an opening in the delimiter
        stack. Add either a link or image, or a plain [ character,
        to block's children. If there is a matching delimiter,
        remove it from the delimiter stack.
        NFr   ú]TÚactiveÚimagern   ro   r   Zbracket_afterÚindexr   rA   rB   r?   r   r   ÚpreviousDelimiterrX   )r   r   r5   r   rZ   ÚremoveBracketr*   r,   rs   r$   r%   rq   r   rl   ru   r    r	   r   rA   rB   rf   rg   rj   )r"   r6   rB   r7   rR   rh   Zis_imagerr   rE   ZbeforelabelÚnZreflabelr?   r   ri   rf   r   r   r   ÚparseCloseBracketE  s‚    






zInlineParser.parseCloseBracketc                 C   s0   | j d urd| j d< || j | j||ddœ| _ d S )NTZbracketAfter)r   rX   r€   r   r~   r}   )r   r[   )r"   r   r   r~   r   r   r   rw   ³  s    

úzInlineParser.addBracketc                 C   s   | j  d¡| _ d S )NrX   )r   rZ   r)   r   r   r   r   À  s    zInlineParser.removeBracketc                 C   s,   |   t¡}|r$| tt|ƒƒ¡ dS dS dS )zAttempt to parse an entity.TFN)r(   ÚreEntityHerer5   r   ÚHTMLunescape)r"   r6   rD   r   r   r   ÚparseEntityÃ  s
    
zInlineParser.parseEntityc                 C   sd   |   t¡}|r\| j d¡rJt td|¡}t tdd„ |¡}| t	|ƒ¡ n| t	|ƒ¡ dS dS dS )zŠ
        Parse a run of ordinary characters, or a single character with
        a special meaning in markdown, as a plain string.
        Úsmartu   â€¦c                 S   s   t |  ¡ ƒS )N)r   r'   )Úxr   r   r   Ú<lambda>Õ  ó    z*InlineParser.parseString.<locals>.<lambda>TFN)
r(   ÚreMainr!   rZ   r$   ÚsubÚ
reEllipsesÚreDashr5   r   )r"   r6   rD   r   r   r   r   ÚparseStringÌ  s    
zInlineParser.parseStringc                 C   s¢   |  j d7  _ |j}|r„|jdkr„|jd dkr„t|jƒdkoJ|jd dk}t td|j¡|_|rntdd	ƒ}n
td
d	ƒ}| 	|¡ n| 	td
d	ƒ¡ |  
t¡ dS )z„
        Parse a newline.  If it was preceded by two spaces, return a hard
        line break; otherwise a soft line break.
        r   r   r0   r/   r   éþÿÿÿr   r:   NZ	softbreakT)r   Z
last_childÚtr   r   r$   rŒ   ÚreFinalSpacer   r5   r(   ÚreInitialSpace)r"   r6   Zlastcr:   r   r   r   r   ÚparseNewlineÝ  s    

zInlineParser.parseNewlinec                 C   sF  || _ d| _| j}|  ¡ }|dks*|dkr.dS | j d|… }|  ¡ dkrX|  jd7  _n
|| _dS |  ¡  |  ¡ }|du r„|| _dS | j}|  ¡  d}| j|kr¨|  ¡ }|du rºd}|| _d}	|  t¡du rö|dkrÚd}	n|dk || _|  t¡du}	|	s|| _dS t	|ƒ}
|
dkr"|| _dS | 
|
¡s<||d	œ||
< | j| S )
z4Attempt to parse a link reference, modifying refmap.r   r   Nú:r   r   TF)rA   rB   )r   r   ru   r*   r,   rs   rl   r(   ÚreSpaceAtEndOfLiner	   rZ   )r"   r   r    rR   Zmatch_charsZrawlabelrE   ZbeforetitlerB   Zat_line_endZ	normlabelr   r   r   ÚparseReferenceô  sV    

þ
zInlineParser.parseReferencec                 C   s<  d}|   ¡ }|du rdS |dkr,|  |¡}nê|dkr@|  |¡}nÖ|dkrT|  |¡}nÂ|dksd|dkrr|  ||¡}n¤|dks‚|d	krœ| j d
¡o˜|  ||¡}nz|dkr°|  |¡}nf|dkrÄ|  |¡}nR|dkrØ|  	|¡}n>|dkrö|  
|¡pò|  |¡}n |dkr|  |¡}n
|  |¡}|s8|  jd7  _| t|ƒ¡ dS )zÊ
        Parse the next inline element in subject, advancing subject
        position.

        On success, add the result to block's children and return True.
        On failure, return False.
        FNr.   r;   ú`rc   rK   rH   rI   r‡   rv   rz   r|   rm   ú&r   T)r*   r”   r>   r9   r]   r!   rZ   ry   r{   rƒ   rF   rG   r†   r   r   r5   r   )r"   r6   r\   rQ   r   r   r   ÚparseInline:  s:    

zInlineParser.parseInlinec                 C   s>   |j  ¡ | _d| _d| _d| _|  |¡r*qd|_ |  d¡ dS )zq
        Parse string content in block into inline children,
        using refmap to resolve references.
        r   N)Zstring_contentÚstripr   r   r[   r   rš   rj   )r"   r6   r   r   r   ÚparseInlinesc  s    
zInlineParser.parseInlinesN)!Ú__name__Ú
__module__Ú__qualname__Ú__doc__r#   r(   r*   r,   r9   r>   rF   rG   rS   r]   r_   Ústaticmethodrb   rj   rl   rs   ru   ry   r{   rƒ   rw   r   r†   r   r”   r—   rš   rœ   Úparser   r   r   r   r   q   s<   
?!	
w*n	F)r   )3Ú
__future__r   r   r   r$   ÚsysZ
commonmarkr   Zcommonmark.commonr   r   Zcommonmark.noder   Zcommonmark.normalize_referencer	   Úversion_infoÚhtmlÚunescaper…   r   r   Z	ESCAPABLEZESCAPED_CHARÚcompilerP   rk   rp   r=   ZENTITYÚ
IGNORECASEr„   r2   r1   r   rŽ   r@   rC   r+   rq   ZreWhitespacerO   r’   r“   r–   rt   Ú	MULTILINEr‹   r   r   Úobjectr   r   r   r   r   Ú<module>   s~   


ÿ
ÿþþþýüüüÿ




ÿþ







