o
    MEgv                     @   sb  d dl mZmZ d dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ dZeded	ejed
ededededejedej d ej d ejgZededejededededg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Zed Zd!d" Zd#d$ Zd%d& Zd'd( Z d)d* Z!d+d, Z"G d-d. d.e#Z$G d/d0 d0e$Z%G d1d2 d2e$Z&G d3d4 d4e$Z'G d5d6 d6e$Z(G d7d8 d8e$Z)G d9d: d:e$Z*G d;d< d<e$Z+G d=d> d>e$Z,G d?d@ d@e$Z-G dAdB dBe#Z.G dCdD dDe#Z/edEZ0e1dFdG e$2 D e/_3dS )H    )absolute_importunicode_literalsN)common)unescape_string)InlineParser)Node   .z ^<(?:script|pre|style)(?:\s|>|$)z^<!--z^<[?]z^<![A-Z]z^<!\[CDATA\[at  ^<[/]?(?:address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|title|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul)(?:\s|[/]?[>]|$)z^(?:|z)\s*$z<\/(?:script|pre|style)>z-->z\?>>z\]\]>z<^(?:(?:\*[ \t]*){3,}|(?:_[ \t]*){3,}|(?:-[ \t]*){3,})[ \t]*$z^[#`~*+_=<>0-9-]z[^ \t\f\v\r\n]z^[*+-]z^(\d{1,9})([.)])z^#{1,6}(?:[ \t]+|$)z^`{3,}(?!.*`)|^~{3,}z^(?:`{3,}|~{3,})(?= *$)z^(?:=+|-+)[ \t]*$z
\r\n|\n|\rc                 C   s   t t| du S )z6Returns True if string contains only space characters.N)research
reNonSpaces r   k/var/www/eduai.edurigo.com/doc_train/edurigo_ai/Puru/venv/lib/python3.10/site-packages/commonmark/blocks.pyis_blank4   s   r   c                 C   s   | dv S )N) 	r   r   r   r   r   is_space_or_tab9   s   r   c                 C   s   |t | k r
| | S d S N)len)lnposr   r   r   peek=   s   r   c                 C   s@   | r| j rdS | js| jdv rd| _| j} nd| _	 dS | sdS )z` Returns true if block ends with a blank line,
    descending if needed into lists and sublists.T)listitemF)last_line_blanklast_line_checkedt
last_child)blockr   r   r   ends_with_blank_lineD   s   
r#   c                 C   s
  | j | jd }dddddd| jd}| jdkrdS tt|}tt|}|r5d|d< | d |d< n'|rZ|jd	ksC|d
dkrZ|}d|d< t	|d
|d< |d|d< ndS t
| j | jt|  }|du sw|dksw|dkswdS |jd	krtt| j | jt|  d sdS |   | t| d | j}| j}	 | d
d t
| j | j}| j| dk rt|rnnqt
| j | jdu }	| j| }
|
dks|
d
k s|	rt| d
 |d< || _|| _tt
| j | jr| d
d |S t| |
 |d< |S )zs Parse a list marker and return data on the marker (type,
    start, delimiter, bullet character, padding) or None.NT)typetightbullet_charstart	delimiterpaddingmarker_offsetr   bulletr$   r   r&   	paragraph   1orderedr'      r(   r   r      r)   )current_linenext_nonspaceindentr   r   reBulletListMarkerreOrderedListMarkergroupr    intr   r   r   advance_next_nonspaceadvance_offsetcolumnoffsetr   )parser	containerrestdatamm2nextcspaces_start_colspaces_start_offset
blank_itemspaces_after_markerr   r   r   parse_list_markerU   sv   
	

rH   c                 C   s<   |  d| dko|  d| dko|  d| dkS )z
    Returns True if the two list items are of the same type,
    with the same delimiter and bullet character.  This is used
    in agglomerating list items into lists.
    r$   r(   r&   )get)	list_data	item_datar   r   r   lists_match   s
   rL   c                   @   s8   e Zd ZdZedddZedddZedd ZdS )	BlockNc                 C      d S r   r   r=   r>   r   r   r   	continue_      zBlock.continue_c                 C   rN   r   r   r=   r"   r   r   r   finalize   rQ   zBlock.finalizec                 C   rN   r   r   r    r   r   r   can_contain   rQ   zBlock.can_containNN__name__
__module____qualname__accepts_linesstaticmethodrP   rS   rU   r   r   r   r   rM          rM   c                   @   8   e Zd ZdZed	ddZed	ddZedd ZdS )
DocumentFNc                 C      dS Nr   r   rO   r   r   r   rP      rQ   zDocument.continue_c                 C   rN   r   r   rR   r   r   r   rS      rQ   zDocument.finalizec                 C      | dkS Nr   r   rT   r   r   r   rU         zDocument.can_containrV   rW   r   r   r   r   r_      r]   r_   c                   @   r^   )
ListFNc                 C   r`   ra   r   rO   r   r   r   rP      rQ   zList.continue_c                 C   sl   |j }|r4t|r|jrd|jd< d S |j }|r-t|r(|js"|jr(d|jd< n|j}|s|j}|sd S d S )NFr%   )first_childr#   nxtrJ   )r=   r"   r   subitemr   r   r   rS      s$   

zList.finalizec                 C   s   | dkS rc   r   rT   r   r   r   rU      rd   zList.can_containrV   rW   r   r   r   r   re      s    re   c                   @   r^   )

BlockQuoteFNc                 C   sT   | j }| js(t|| jdkr(|   | dd tt|| jr&| dd dS dS )Nr   r-   FTr   )r2   indentedr   r3   r9   r:   r   r<   )r=   r>   r   r   r   r   rP      s   zBlockQuote.continue_c                 C   rN   r   r   rR   r   r   r   rS      rQ   zBlockQuote.finalizec                 C   rb   rc   r   rT   r   r   r   rU      rd   zBlockQuote.can_containrV   rW   r   r   r   r   ri      s    ri   c                   @   r^   )
ItemFNc                 C   s^   | j r|jd u r
dS |   dS | j|jd |jd  kr-| |jd |jd  d dS dS )Nr-   r*   r)   Tr   )blankrf   r9   r4   rJ   r:   rO   r   r   r   rP      s    
zItem.continue_c                 C   rN   r   r   rR   r   r   r   rS     rQ   zItem.finalizec                 C   rb   rc   r   rT   r   r   r   rU     rd   zItem.can_containrV   rW   r   r   r   r   rk      s    rk   c                   @   r^   )
HeadingFNc                 C   r`   Nr-   r   rO   r   r   r   rP        zHeading.continue_c                 C   rN   r   r   rR   r   r   r   rS   !  rQ   zHeading.finalizec                 C   r`   NFr   rT   r   r   r   rU   %  rQ   zHeading.can_containrV   rW   r   r   r   r   rm         rm   c                   @   r^   )
ThematicBreakFNc                 C   r`   rn   r   rO   r   r   r   rP   -  ro   zThematicBreak.continue_c                 C   rN   r   r   rR   r   r   r   rS   2  rQ   zThematicBreak.finalizec                 C   r`   rp   r   rT   r   r   r   rU   6  rQ   zThematicBreak.can_containrV   rW   r   r   r   r   rr   *  rq   rr   c                   @   r^   )
	CodeBlockTNc                 C   s   | j }| j}|jrd|dko(t|| jd ko(|| j |jko(tt|| jd  }|r=t|	 |j
kr=| || j dS |j}|dkrbtt|| jrb| dd |d8 }|dkrbtt|| jsLdS |tkrp| td dS | jry|   dS dS )N   r-   r0   r   T)r2   r4   	is_fencedr   r3   
fence_charr   r   reClosingCodeFencer7   fence_lengthrS   line_numberfence_offsetr   r   r<   r:   CODE_INDENTrl   r9   )r=   r>   r   r4   matchir   r   r   rP   >  s4   zCodeBlock.continue_c                 C   sd   |j r$|j}|d}|d| }||d d  }t| |_||_n	tdd|j|_d |_d S )N
r   r-   (\n *)+$)	ru   string_contentindexr   stripinfoliteralr   sub)r=   r"   contentnewline_pos
first_liner?   r   r   r   rS   [  s   

zCodeBlock.finalizec                 C   r`   rp   r   rT   r   r   r   rU   k  rQ   zCodeBlock.can_containrV   rW   r   r   r   r   rs   ;  s    rs   c                   @   r^   )
	HtmlBlockTNc                 C   s"   | j r|jdks|jdkrdS dS )N      r-   r   )rl   html_block_typerO   r   r   r   rP   s  s   
zHtmlBlock.continue_c                 C   s   t dd|j|_d |_d S )Nr    )r   r   r   r   rR   r   r   r   rS   {  s   
zHtmlBlock.finalizec                 C   r`   rp   r   rT   r   r   r   rU     rQ   zHtmlBlock.can_containrV   rW   r   r   r   r   r   p  s    r   c                   @   r^   )
	ParagraphTNc                 C   s   | j rdS dS )Nr-   r   )rl   rO   r   r   r   rP     s   zParagraph.continue_c                 C   sr   d}t |jddkr(| j|j| j}|sn|j|d  |_d}t |jddks
|r5t|jr7|  d S d S d S )NFr   [T)r   r   inline_parserparseReferencerefmapr   unlink)r=   r"   has_reference_defsr   r   r   r   rS     s   zParagraph.finalizec                 C   r`   rp   r   rT   r   r   r   rU     rQ   zParagraph.can_containrV   rW   r   r   r   r   r     s    r   c                   @   s   e Zd ZdZg dZedddZedddZeddd	Zedd
dZ	edddZ
edddZedddZedddZdS )BlockStartszBlock start functions.

    Return values:
    0 = no match
    1 = matched container, keep going
    2 = matched leaf, no more block starts
    )block_quoteatx_headingfenced_code_block
html_blocksetext_headingthematic_break	list_itemindented_code_blockNc                 C   sh   | j s2t| j| jdkr2|   | dd tt| j| jr%| dd |   | 	d| j dS dS )Nr   r-   FTr   r   )
rj   r   r2   r3   r9   r:   r   r<   close_unmatched_blocks	add_childrO   r   r   r   r     s   zBlockStarts.block_quotec                 C   s   | j sTtt| j| jd  }|rT|   | t|	 d | 
  | d| j}t|	  |_tddtdd| j| jd  |_| t| j| j d dS dS )NFheadingz[ \t]+#+[ \t]*$r   z^[ \t]*#+[ \t]*$r0   r   )rj   r   r   reATXHeadingMarkerr2   r3   r9   r:   r   r7   r   r   r   levelr   r<   r   )r=   r>   rA   r   r   r   r     s,   zBlockStarts.atx_headingc                 C   s   | j s?tt| j| jd  }|r?t| }|   | 	d| j}d|_
||_| d |_| j|_|   | |d dS dS )N
code_blockTr   Fr0   )rj   r   r   reCodeFencer2   r3   r   r7   r   r   ru   rx   rv   r4   rz   r9   r:   )r=   r>   rA   rx   r   r   r   r     s&   zBlockStarts.fenced_code_blockc                 C   s   | j s>t| j| jdkr>| j| jd  }tddD ]$}tt| |r=|dk s,|jdkr=| 	  | 
d| j}||_ dS qdS )	N<r-      r   r,   r   r0   r   )rj   r   r2   r3   ranger   r   reHtmlBlockOpenr    r   r   r<   r   )r=   r>   r   
block_typebr   r   r   r     s   zBlockStarts.html_blockc                 C   s   | j st|jdkrttt| j| jd  }|rt|   t|j	ddkr>| j
|j	| j}|s.n|j	|d  |_	t|j	ddks"|j	rrtd|j}| d dkrQdnd|_|j	|_	|| |  || _| t| j| j d dS dS dS )	Nr,   r   r   r   =r-   r0   F)rj   r    r   r   reSetextHeadingLiner2   r3   r   r   r   r   r   r   r   	sourceposr7   r   insert_afterr   tipr:   r   r<   )r=   r>   rA   r   r   r   r   r   r     s8   
zBlockStarts.setext_headingc                 C   sT   | j s(tt| j| jd  r(|   | d| j | t	| j| j
 d dS dS )Nr   Fr0   r   )rj   r   r   reThematicBreakr2   r3   r   r   r:   r   r<   rO   r   r   r   r     s   
zBlockStarts.thematic_breakc                 C   sn   | j r|jdkr5t| |}|r5|   | jjdkst|j|s)| d| j}||_| d| j}||_dS dS )Nr   r   r-   r   )	rj   r    rH   r   r   rL   rJ   r   r3   )r=   r>   r@   r   r   r   r   *  s   

zBlockStarts.list_itemc                 C   sB   | j r| jjdkr| js| td |   | d| j dS dS )Nr,   Tr   r0   r   )	rj   r   r    rl   r:   r{   r   r   r<   rO   r   r   r   r   >  s   zBlockStarts.indented_code_blockr   )rX   rY   rZ   __doc__METHODSr\   r   r   r   r   r   r   r   r   r   r   r   r   r     s&    
r   c                   @   sh   e 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dS )Parserc                 C   s   t dddgddgg| _t | _| j| _| j| _d| _d| _d| _d| _	d| _
d| _d| _d| _d| _d| _d| _| j| _i | _d| _t|| _|| _d S )Ndocumentr-   r   r   FT)r   docr   block_startsr   oldtipr2   ry   r<   r;   r3   next_nonspace_columnr4   rj   rl   partially_consumed_tab
all_closedlast_matched_containerr   last_line_lengthr   r   options)selfr   r   r   r   __init__M  s(   

zParser.__init__c                 C   sZ   | j r|  jd7  _d| jd  }| j jd| 7  _| j j| j| jd d 7  _dS )z Add a line to the block at the tip.  We assume the tip
        can accept lines -- that check should be done before calling this.r-   r   r   Nr~   )r   r<   r;   r   r   r2   )r   chars_to_tabr   r   r   add_linec  s
   $zParser.add_linec                 C   sx   | j | jj |s| | j| jd  | j | jj |r
|d }t|| j|gddgg}d|_| j| || _|S )z Add block of type tag as a child of the tip.  If the tip can't
        accept children, close and finalize it and try its parent,
        and so on til we find a block that can accept children.r-   r   r   )	blocksr   r    rU   rS   ry   r   r   append_child)r   tagr<   column_number	new_blockr   r   r   r   n  s   zParser.add_childc                 C   sN   | j s%| j| jkr | jj}| | j| jd  || _| j| jks	d| _ dS dS )z(Finalize and close any unmatched blocks.r-   TN)r   r   r   parentrS   ry   )r   r   r   r   r   r   |  s   
zParser.close_unmatched_blocksc                 C   s   | j }| j}| j}z|| }W n ty   d}Y nw |dkrT|dkr,|d7 }|d7 }n|dkr=|d7 }|d|d  7 }nnz|| }W n tyO   d}Y nw |dks|dkp_|dkp_|dk| _|| _|| _| j| j | _| jtk| _	d S )Nr   r   r-   r   r   r~   )
r2   r<   r;   
IndexErrorrl   r3   r   r4   r{   rj   )r   r2   r}   colscr   r   r   find_next_nonspace  s6   
zParser.find_next_nonspacec                 C   s   | j | _| j| _d| _d S rp   )r3   r<   r   r;   r   )r   r   r   r   r9     s   
zParser.advance_next_nonspacec                 C   s6  | j }z|| j }W n ty   d }Y nw |dkr|d ur|dkrcd| jd  }|rM||k| _t||}|  j|7  _|  j| jrDdnd7  _||8 }n+d| _|  j|7  _|  jd7  _|d8 }nd| _|  jd7  _|  jd7  _|d8 }z|| j }W n ty   d }Y nw |dkr|d usd S d S d S d S )Nr   r   r   r-   F)r2   r<   r   r;   r   min)r   countcolumnsr2   r   r   chars_to_advancer   r   r   r:     s:   



 zParser.advance_offsetc                 C   s  d}| j }| j| _d| _d| _d| _d| _|  jd7  _t	d|dur+t
dd|}|| _	 |j}|r7|js8n2|}|   | j|j | |}|dkrMn|dkrTd}n|d	kr_t|| _dS td
|si|j}nq/|| jk| _|| _|jdko~| j|j j}| j}t|j}|s|   | jst	t|| jd s|   n6d}	|	|k rt||j|	 | |}
|
dkr| j}n|
d	kr| j}d}n|	d7 }	|	|k s|	|kr|   n|r| js| js| jjdkr|    n| !  | jr|jrd|j_"|j}| jo|dkp|dko|j#p|dko|j$ o|j%d d | jk }|}|r-||_"|j}|s$| j| jra|    |dkr`|j&dkr`|j&dkr`t	t'|j& | j| jd r`| (|| j n| jt|k r|| js|| )d| j}|   |    t|| _dS )zAnalyze a line of text and update the document appropriately.

        We parse markdown text by calling this on each line of input,
        then finalizing the document.
        Tr   Fr-   z\u0000Nz\0u   �r0   z4continue_ returned illegal value, must be 0, 1, or 2r,   r   r   r   r   r1   )*r   r   r   r<   r;   rl   r   ry   r   r   r   r2   r!   is_openr   r   r    rP   r   r   
ValueErrorr   r   r   r[   r   r   rj   reMaybeSpecialr3   r9   getattrr   r   r   ru   rf   r   r   reHtmlBlockCloserS   r   )r   r   all_matchedr>   r!   rvmatched_leafstarts
starts_lenr}   resr    r   contr   r   r   incorporate_line  s   







zParser.incorporate_linec                 C   s:   |j }d|_|| jg|jd< | j|j | | || _dS )a3   Finalize a block.  Close it and do any necessary postprocessing,
        e.g. creating string_content from strings, setting the 'tight'
        or 'loose' status of a list, and parsing the beginnings
        of paragraphs for reference definitions.  Reset the tip to the
        parent of the closed block.Fr-   N)r   r   r   r   r   r    rS   r   )r   r"   ry   abover   r   r   rS   S  s
   
zParser.finalizec                 C   sv   |  }| j| j_| j| j_| }|dur9|d }|j}|d s/|dks)|dkr/| j| | }|dusdS dS )z
        Walk through a block & children recursively, parsing string content
        into inline content where appropriate.
        Nnodeenteringr,   r   )walkerr   r   r   rg   r    parse)r   r"   r   eventr   r    r   r   r   process_inlinesa  s   

zParser.process_inlinesc                 C   s   t dddgddgg| _| j| _i | _d| _d| _d| _d| _| j| _d| _	t
t|}t|}t|dkr@|d dkr@|d8 }t|D ]	}| ||  qD| jr[| | j| | jsQ| | j | jS )z; The main parsing function.  Returns a parsed document AST.r   r-   r   r   r~   )r   r   r   r   ry   r   r<   r;   r   r2   r   splitreLineEndingr   r   r   rS   r   )r   my_inputlineslengthr}   r   r   r   r   q  s(   zParser.parseN)rX   rY   rZ   r   r   r   r   r   r9   r:   r   rS   r   r   r   r   r   r   r   L  s    	 r   z#(.)([A-Z](?:[a-z]+|(?<=[a-z0-9].)))c                 c   s&    | ]}t d |j |fV  qdS )z\1_\2N)CAMEL_REr   rX   lower).0clsr   r   r   	<genexpr>  s
    
r   )4
__future__r   r   r   
commonmarkr   commonmark.commonr   commonmark.inlinesr   commonmark.noder   r{   compile
IGNORECASEOPENTAGCLOSETAGr   r   r   r   r   r5   r6   r   r   rw   r   r   r   r   r   r#   rH   rL   objectrM   r_   re   ri   rk   rm   rr   rs   r   r   r   r   r   dict__subclasses__r   r   r   r   r   <module>   s    	








E5 ,  
?