
    Mh0@                        d dl Z d dlmZmZmZmZmZ ddlmZm	Z	m
Z
mZ ddlmZmZ ddlmZmZmZmZmZmZmZmZ ddlmZmZ  e j        de j        	          Z e j        d
          Z e j        de j        	          Z e j        de j        	          Z  e j        d          Z! e j        d          Z"dd#                    e          z   dz   d#                    e          z   dz   Z$ e j        edz             Z% e j        d          Z& e j        d          Z' G d dee                   Z(dede)de*de*fdZ+dedee)         de*fdZ,dS )    N)OptionalListTupleMatchPattern   )unikey
escape_url
expand_tabexpand_leading_tab)Parser
BlockState)
LINK_LABELHTML_TAGNAMEHTML_ATTRIBUTES
BLOCK_TAGSPRE_TAGSunescape_charparse_link_hrefparse_link_title)
parse_listLIST_PATTERNz^ {1,4})flagsz(\s+|^)#+\s*$z^ ?z^ *>z\n[ \t]*\n$z[ \t]*\n(|)z[ \t]*>[ \t]*(?:\n|$)z( {0,3}>[^\n]*(?:\n|$))+c                       e Zd ZeZ ej        dej                  Zde	z   dz   Z
dez   dz   Zddddd	d
dez   dz   deee
dZdZ	 	 	 d'deee                  deee                  def fdZdee         dedefdZdee         dedefdZdee         dedefdZdee         dedee         fdZdee         dedefdZdee         dedee         fdZdee         dedee         fdZdee         dedeeee         f         fd Zdee         dedefd!Z dee         dedefd"Z!dee         dedee         fd#Z"dee         dedee         fd$Z#d(ded%eee                  ddfd&Z$ xZ%S ))BlockParserz(^[ \t\v\f]*\n)+z^ {0,3}(</?z|<!--|<\?|<![A-Z]|<!\[CDATA\[)z^ {0,3}(?:(?:</?z.(?:[ \t]+|\n|$))|<!--|<\?|<![A-Z]|<!\[CDATA\[)z:^ {0,3}(?P<atx_1>#{1,6})(?!#+)(?P<atx_2>[ \t]*|[ \t]+.*?)$z#^ {0,3}(?P<setext_1>=|-){1,}[ \t]*$zF^(?P<fenced_1> {0,3})(?P<fenced_2>`{3,}|~{3,})[ \t]*(?P<fenced_3>.*?)$zC^(?: {4}| *\t)[^\n]+(?:\n+|$)((?:(?: {4}| *\t)[^\n]+(?:\n+|$))|\s)*z:^ {0,3}((?:-[ \t]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})$z^ {0,3}\[(?P<reflink_1>z)\]:z^ {0,3}>(?P<quote_1>.*?)$)
blank_lineatx_headingsetex_headingfenced_codeindent_codethematic_breakref_linkblock_quotelist
block_htmlraw_html)
r"   r#   r    r!   r$   r&   r'   r%   r)   r   N   block_quote_rules
list_rulesmax_nested_levelc                 
    t          t                                                      |t           j                  }|t           j                  }| _        | _        | _         fd j        D              _	        d S )Nc                 8    i | ]}|t          d |z             S )parse_)getattr).0nameselfs     T/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mistune/block_parser.py
<dictcomp>z(BlockParser.__init__.<locals>.<dictcomp>n   s)    ]]]$wtX_==]]]    )
superr   __init__r'   DEFAULT_RULESr+   r,   r-   SPECIFICATION_methods)r4   r+   r,   r-   	__class__s   `   r5   r9   zBlockParser.__init__\   s     	k4  ))+++$ $T%7 8 8d011J!2$ 0]]]]$J\]]]r7   mstatereturnc                 X    |                     ddi           |                                S )zParse token for blank lines.typer   append_tokenendr4   r>   r?   s      r5   parse_blank_linezBlockParser.parse_blank_linep   s(    FL1222uuwwr7   c                 ^    |                     ddi           |                                dz   S )z:Parse token for thematic break, e.g. ``<hr>`` tag in HTML.rB   r$   r   rC   rF   s      r5   parse_thematic_breakz BlockParser.parse_thematic_breaku   s.    F$45666uuww{r7   c                 4   |                                 }|r|S |                    d          }t          |          }t                              d|          }|                    d          }|                    d|dd           |                                S )z9Parse token for code block which is indented by 4 spaces.r    

block_codeindent)rB   rawstyle)append_paragraphgroupr   _INDENT_CODE_TRIMsubstriprD   rE   )r4   r>   r?   end_poscodes        r5   parse_indent_codezBlockParser.parse_indent_code{   s     ((** 	Nwwqzz!$'' $$R..zz$LQQRRRuuwwr7   c                    |                     d          }|                     d          }|                     d          }|d         }|r!|dk    r|                    |          dk    rdS t          j        d|z   d	z   t	          t          |                    z   d
z   t          j                  }|                                dz   }|                    |j	        |          }	|	r6|j	        ||	
                                         }
|	                                }n|j	        |d         }
|j        }|rW|
rUt          j        dt	          t          |                    z   dz   t          j                  }|                    d|
          }
d|
d|d}|r(t          |          }d|                                i|d<   |                    |           |S )a9  Parse token for fenced code block. A fenced code block is started with
        3 or more backtick(`) or tilde(~).

        An example of a fenced code block:

        .. code-block:: markdown

            ```python
            def markdown(text):
                return mistune.html(text)
            ```
        fenced_1fenced_2fenced_3r   `Nz^ {0,3}{z,}[ \t]*(?:\n|$)r   z^ {0,}rK   rM   fenced)rB   rO   rP   markerinfoattrs)rR   findrecompilestrlenMrE   searchsrcstart
cursor_maxrT   r   rU   rD   )r4   r>   r?   spacesrb   rc   c_endcursor_startm2rW   rV   _trim_patterntokens                 r5   parse_fenced_codezBlockParser.parse_fenced_code   s    $$$$wwz""1I 	AHH yy||r!!tz*q.3.S[[1A1AADWWY[Y]^^uuww{[[L11 	'9\BHHJJ67DffhhGG9\]]+D&G 	/d 	/JwS[[1A1A'AC'GNNM $$R..D%dXQWXX 	4 &&D$djjll3E'N5!!!r7   c                 8   t          |                    d                    }|                    d                                          }|rt                              d|          }d|d|idd}|                    |           |                                dz   S )	z[Parse token for ATX heading. An ATX heading is started with 1 to 6
        symbol of ``#``.atx_1atx_2rK   headinglevelatx)rB   textrd   rP   r   )ri   rR   rU   _ATX_HEADING_TRIMrT   rD   rE   )r4   r>   r?   r{   r}   ru   s         r5   parse_atx_headingzBlockParser.parse_atx_heading   s     AGGG$$%%www%%'' 	3$((T22D"DGU;KV[\\5!!!uuww{r7   c                 r   |                                 }|rQ|d         dk    rE|                    d          dk    rdnd}d|d<   d|d	<   d
|i|d<   |                                dz   S |                     ddg          }|                    |j        |j                  }|r|                     ||          S dS )zParse token for setex style heading. A setex heading syntax looks like:

        .. code-block:: markdown

            H1 title
            ========
        rB   	paragraphsetext_1=r      rz   setextrP   r{   rd   r$   r'   N)
last_tokenrR   rE   
compile_scmatchrl   cursorparse_method)r4   r>   r?   r   r{   scrs   s          r5   parse_setex_headingzBlockParser.parse_setex_heading   s     %%''
 	*V,;;,,33AAE!*Jv"*Jw#*E"2Jw5577Q;__.788XXei.. 	0$$R///tr7   c                 6   |                                 }|r|S |                    d          }t          |          }|sdS t          |j        |                                d          \  }}|dS |J | j                            |j        |          }|r|                                }	n|j	        }	t          |j        ||	          \  }
}|r;t                              |j        |          }|r|                                }nd}d}
|;t                              |j        |          }|r|                                }nd}d}|p|}|sdS ||j        d         vr<|J t          |          }t          |          |d}|
r|
|d<   ||j        d         |<   |S )a  Parse link references and save the link information into ``state.env``.

        Here is an example of a link reference:

        .. code-block:: markdown

            a [link][example]

            [example]: https://example.com "Optional title"

        This method will save the link reference into ``state.env`` as::

            state.env['ref_links']['example'] = {
                'url': 'https://example.com',
                'title': "Optional title",
            }
        	reflink_1NT)block	ref_links)urllabeltitle)rQ   rR   r	   r   rl   rE   
BLANK_LINErk   rm   rn   r   _BLANK_TO_LINEr   envr   r
   )r4   r>   r?   rV   r   keyhrefhref_pos_blankmax_posr   	title_posrs   m3datas                  r5   parse_ref_linkzBlockParser.parse_ref_link   s   $ ((** 	N$$Umm 	4(AEEGG4HHHh<4###''	8<< 	'llnnGG&G+EIxIIy 	%%ei;;B FFHH		 	%%ei::B 6688'x 	4ei,,,### &&D%d++e<<D & %W*.EIk"3'r7   c                    |                     d          dz   }t          |d          }t                              d|          }|                     g d          }t          |                    |                    }|                                dz   |_        d}|rt                              |j
        |j                  }|ry|                     d          }t                              d|          }t          |d          }t                              d|          }||z  }|                                |_        nd	}	|                     g d
          }
|j        |j        k     rst                              |j
        |j                  }|r|                     d          }t                              d|          }t          |d          }t                              d|          }||z  }|                                |_        |                                sd}	n't          t                              |                    }	|	rn|
                    |j
        |j                  }|r|                     ||          }|rnV|                                }|                    |          }t          |d          }||z  }||_        |j        |j        k     st'          |          |fS )z6Extract text and cursor end position of a block quote.quote_1rL      rK   )r   r#   r"   r   Nr   F)r   r$   r"   r'   r(   T)rR   r   _BLOCK_QUOTE_TRIMrT   r   boolr   rE   r   _STRICT_BLOCK_QUOTErl   _BLOCK_QUOTE_LEADINGrn   rU   _LINE_BLANK_ENDrk   r   find_line_endget_textr   )r4   r>   r?   r}   r   require_markerrV   rs   quoteprev_blank_linebreak_scr   m4poslines                  r5   extract_block_quotezBlockParser.extract_block_quote   s    wwy!!D(!$** $$R..__IIIJJbhhtnn--uuww{!% 4	#$**59elCCB (,00U;;*5!44)--b%88!vvxx#O   H ,!111(..uy%,GG HHQKKE044R??E.ua88E-11"e<<EEMD#%6688EL ;;== N*.*./E/Ee/L/L*M*M"  ^^EIu|<< "//E::G  ))++~~c**)$22"A ,!111H $((r7   c                    |                      ||          \  }}|                    |          }|                                | j        dz
  k    r*t	          | j                  }|                    d           n| j        }|                     ||           d|j        d}|r|	                    |           |S |
                    |           |j        S )zParse token for block quote. Here is an example of the syntax:

        .. code-block:: markdown

            > a block quote starts
            > with right arrows
        r   r&   )rB   children)r   child_statedepthr-   r'   r+   removeparsetokensprepend_tokenrD   r   )r4   r>   r?   r}   rV   childrulesru   s           r5   parse_block_quotezBlockParser.parse_block_quoteh  s     00E::g!!$'';;==D1A555/00ELL''''*E

5%   &ELAA 	&&&N5!!!|r7   c                 $    t          | ||          S )z,Parse tokens for ordered and unordered list.)r   rF   s      r5   r   zBlockParser.parse_list  s    $5)))r7   c                 .    |                      ||          S N)parse_raw_htmlrF   s      r5   parse_block_htmlzBlockParser.parse_block_html  s    ""1e,,,r7   c                 t   |                     d                                          }|dk    r#t          |d|                                          S |dk    r#t          |d|                                          S |dk    r#t          |d|                                          S |                    d          r#t          |d	|                                          S d }d }|                    d
          r;|dd                                          }|t          v rt          || j                  S nn|dd                                          }|t          v r+d
|z   d	z   }t          |||                                          S |t          v rt          || j                  S |
                                }|r|S |                                }|                                }|r!t                              |j        ||          s#|r6t                              |j        ||          rt          || j                  S d S )Nr   z<!--z-->z<?z?>z	<![CDATA[z]]>z<!>z</r   r   )rR   rU   _parse_html_to_endrE   
startswithlowerr   _parse_html_to_newliner   r   rQ   r   _OPEN_TAG_ENDr   rl   _CLOSE_TAG_END)	r4   r>   r?   rb   	close_tagopen_tagend_tagrV   	start_poss	            r5   r   zBlockParser.parse_raw_html  s-   !!## V%eUAEEGG<<< T>>%eT15577;;; [  %eUAEEGG<<< T"" 	;%eS!%%'':::	T"" 	Fqrr
((**IJ&&-eT_EEE ' abbz''))H8##/C/)%!%%''BBB:%%-eT_EEE ((** 	N EEGG	%%'' 	B,,UY	7KK 	B	B(..uy)WMM	B *%AAAtr7   r   c                    |                      |          }|j        |j        k     r|                    |j        |j                  }|sn|                                }||j        k    r1|                    |          }|                    |           ||_        |                     ||          }|r||_        nE|	                                }|                    |          }|                    |           ||_        |j        |j        k     |j        |j        k     r7|j        |j        d          }|                    |           |j        |_        d S d S r   )
r   r   rn   rk   rl   rm   r   add_paragraphr   r   )	r4   r?   r   r   r>   rV   r}   end_pos2end_pos3s	            r5   r   zBlockParser.parse  sN   __U##lU---		%)U\22A ggiiG%%~~g..##D)))&((E22H (' ..00~~h//##D)))'% lU---( <%***9U\^^,D%%% +ELLL +*r7   )NNr*   r   )&__name__
__module____qualname__r   	state_clsrf   rg   rj   r   r   RAW_HTML_BLOCK_TAGS_PATTERN
BLOCK_HTMLr   r   r;   r:   r   r   rh   intr9   r   rG   rI   rX   rv   r   r   r   r   r   r   r   r   r   r   __classcell__)r=   s   @r5   r   r   $   s       I/66J		!	 	'	(+	  *T?(6 X.;gE3 # M(M 26*. !	^ ^#DI.^ T#Y'^ 	^ ^ ^ ^ ^ ^(%* Z C    
eCj      5: j S    -5: -j -Xc] - - - -^5: j S    U3Z 
 xPS}    ,Cc
 C: C(3- C C C CJF)U3Z F)
 F)uSRZ[^R_M_G` F) F) F) F)P5: j S    2*E#J *z *c * * * *-%* -Z -HSM - - - -1c
 1: 1(3- 1 1 1 1f, ,: ,htCy.A ,T , , , , , , , ,r7   r   r?   
end_markerr   r@   c                 @   | j                             ||          }|dk    r| j         | j        d          }| j        }nH|                     |          }|| _        |                                 }||                     |          z  }|                     d|d           |S )Nr^   r(   rB   rO   )rl   re   r   rn   r   r   rD   )r?   r   r   
marker_posr}   rV   s         r5   r   r     s    
I66JRy("~~j))!%%''w'''	T::;;;Nr7   newlinec                    |                     | j        | j                  }|r*|                                }|                     |          }n| j        | j        d          }| j        }|                     d|d           |S )Nr(   r   )rk   rl   r   rm   r   rn   rD   )r?   r   r>   rV   r}   s        r5   r   r     s|    uy%,//A #''))~~g&&y("	T::;;;Nr7   )-rf   typingr   r   r   r   r   utilr	   r
   r   r   corer   r   helpersr   r   r   r   r   r   r   r   list_parserr   r   rg   rj   rS   r~   r   r   r   r   joinr   r   r   r   r   rh   r   r   r    r7   r5   <module>r      s   				 8 8 8 8 8 8 8 8 8 8 8 8 8 8            % $ $ $ $ $ $ $	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 2 1 1 1 1 1 1 1BJz666 BJ/00 BJvRT222 !rz'666 "*^,,K((CHHZ00036(9K9KKcQ 
?-EEFF455 bj!<== q, q, q, q, q,&$ q, q, q,hj c c c    
* 
ws| 
 
 
 
 
 
 
r7   