
    XhO@                        d dl Z d dlmZmZmZmZmZ d dl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 j8                  de j:                  	      Z e j8                  d
      Z e j8                  de j:                  	      Z  e j8                  de j:                  	      Z! e j8                  d      Z" e j8                  d      Z#ddjI                  e      z   dz   djI                  e      z   dz   Z% e j8                  edz         Z& e j8                  d      Z' e j8                  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-y)    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                        }|| _        || _        || _        | j                  D ci c]  }|t        | d|z          c}| _
        y c c}w )Nparse_)superr   __init__r'   DEFAULT_RULESr*   r+   r,   SPECIFICATIONgetattr_methods)selfr*   r+   r,   name	__class__s        H/var/www/html/myenv/lib/python3.12/site-packages/mistune/block_parser.pyr0   zBlockParser.__init__]   s     	k4)+$ $T%7%7 8d001J!2$ 0JNJ\J\]$wtX_==]]s   %Bmstatereturnc                 H    |j                  ddi       |j                         S )zParse token for blank lines.typer   append_tokenendr5   r9   r:   s      r8   parse_blank_linezBlockParser.parse_blank_lineq   s     FL12uuw    c                 N    |j                  ddi       |j                         dz   S )z:Parse token for thematic break, e.g. ``<hr>`` tag in HTML.r=   r$   r   r>   rA   s      r8   parse_thematic_breakz BlockParser.parse_thematic_breakv   s&    F$456uuw{rC   c                     |j                         }|r|S |j                  d      }t        |      }t        j	                  d|      }|j                  d      }|j                  d|dd       |j                         S )z9Parse token for code block which is indented by 4 spaces.r    

block_codeindent)r=   rawstyle)append_paragraphgroupr   _INDENT_CODE_TRIMsubstripr?   r@   )r5   r9   r:   end_poscodes        r8   parse_indent_codezBlockParser.parse_indent_code|   sq     ((*Nwwqz!$' $$R.zz$LQRuuwrC   c                 >   |j                  d      }|j                  d      }|j                  d      }|d   }|r|dk(  r|j                  |      dk7  ryt        j                  d|z   d	z   t	        t        |            z   d
z   t        j                        }|j                         dz   }|j                  |j                  |      }	|	r.|j                  ||	j                          }
|	j                         }n|j                  |d }
|j                  }|rP|
rNt        j                  dt	        t        |            z   dz   t        j                        }|j                  d|
      }
d|
d|d}|r t        |      }d|j                         i|d<   |j                  |       |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,}rG   rI   fenced)r=   rK   rL   markerinfoattrs)rN   findrecompilestrlenMr@   searchsrcstart
cursor_maxrP   r   rQ   r?   )r5   r9   r:   spacesr^   r_   c_endcursor_startm2rS   rR   _trim_patterntokens                 r8   parse_fenced_codezBlockParser.parse_fenced_code   sl    $$wwz"1IAH yy|r!zz*q.3.S[1AADWWY[Y]Y]^uuw{[[L199\BHHJ7DffhG99\]+D&&GdJJwS[1A'AC'GNM $$R.D%dXQWX &D$djjl3E'N5!rC   c                    t        |j                  d            }|j                  d      j                  t        j                        }|rt
        j                  d|      }d|d|idd}|j                  |       |j                         dz   S )	z[Parse token for ATX heading. An ATX heading is started with 1 to 6
        symbol of ``#``.atx_1atx_2rG   headinglevelatx)r=   textr`   rL   r   )	re   rN   rQ   string
whitespace_ATX_HEADING_TRIMrP   r?   r@   )r5   r9   r:   rw   ry   rq   s         r8   parse_atx_headingzBlockParser.parse_atx_heading   s}     AGGG$%www%%f&7&78$((T2D"DGU;KV[\5!uuw{rC   c                 J   |j                         }|rD|d   dk(  r<|j                  d      dk(  rdnd}d|d<   d|d	<   d
|i|d<   |j                         dz   S | j                  ddg      }|j	                  |j
                  |j                        }|r| j                  ||      S y)zParse token for setex style heading. A setex heading syntax looks like:

        .. code-block:: markdown

            H1 title
            ========
        r=   	paragraphsetext_1=r      rv   setextrL   rw   r`   r$   r'   N)
last_tokenrN   r@   
compile_scmatchrh   cursorparse_method)r5   r9   r:   r   rw   scro   s          r8   parse_setex_headingzBlockParser.parse_setex_heading   s     %%'
*V,;,3AE!*Jv"*Jw#*E"2Jw557Q;__.78XXeii.$$R//rC   c                    |j                         }|r|S |j                  d      }t        |      }|syt        |j                  |j                         d      \  }}|y|J | j                  j                  |j                  |      }|r|j                         }	n|j                  }	t        |j                  ||	      \  }
}|r7t        j                  |j                  |      }|r|j                         }nd}d}
|7t        j                  |j                  |      }|r|j                         }nd}d}|xs |}|sy||j                  d   vr6|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)rM   rN   r	   r   rh   r@   
BLANK_LINErg   ri   rj   r   _BLANK_TO_LINEr   envr   r
   )r5   r9   r:   rR   r   keyhrefhref_pos_blankmax_posr   	title_posro   m3datas                  r8   parse_ref_linkzBlockParser.parse_ref_link   s   $ ((*N$Um(AEEG4Hh<###''		8<llnG&&G+EIIxIy%%eii;BFFH	 	%%eii:B668'xeii,,### &D%d+e<D %W*.EIIk"3'rC   c                 F   |j                  d      dz   }t        |d      }t        j                  d|      }| j	                  g d      }t        |j                  |            }|j                         dz   |_        d}|rt        j                  |j                  |j                        }|r|j                  d      }t        j                  d|      }t        |d      }t        j                  d|      }||z  }|j                         |_        nd	}	| j	                  g d
      }
|j                  |j                  k  rUt        j                  |j                  |j                        }|r|j                  d      }t        j                  d|      }t        |d      }t        j                  d|      }||z  }|j                         |_        |j                         sd}	nt        t        j                  |            }	|	rn|
j                  |j                  |j                        }|r| j!                  ||      }|rnT|j#                         }|j%                  |      }t        |d      }||z  }||_        |j                  |j                  k  rUt'        |      |fS )z6Extract text and cursor end position of a block quote.quote_1rH      rG   )r   r#   r"   r   Nr   F)r   r$   r"   r'   r(   T)rN   r   _BLOCK_QUOTE_TRIMrP   r   boolr   r@   r   _STRICT_BLOCK_QUOTErh   _BLOCK_QUOTE_LEADINGrj   rQ   _LINE_BLANK_ENDrg   r   find_line_endget_textr   )r5   r9   r:   ry   r   require_markerrR   ro   quoteprev_blank_linebreak_scr   m4poslines                  r8   extract_block_quotezBlockParser.extract_block_quote!  s>    wwy!D(!$* $$R.__IJbhhtn-uuw{!%$**599ellCB,00U;*5!4)--b%8!vvx#OH ,,!1!11(..uyy%,,GHHQKE044R?E.ua8E-11"e<EEMD#%668EL ;;=*.*./E/Ee/L*M" ^^EIIu||<"//E:G ))+~~c*)$2"A ,,!1!11H $((rC   c                    | j                  ||      \  }}|j                  |      }|j                         | j                  dz
  k\  r't	        | j
                        }|j                  d       n| j
                  }| j                  ||       d|j                  d}|r|j                  |       |S |j                  |       |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&   )r=   children)r   child_statedepthr,   r'   r*   removeparsetokensprepend_tokenr?   r   )r5   r9   r:   ry   rR   childrulesrq   s           r8   parse_block_quotezBlockParser.parse_block_quotei  s     00E:g!!$';;=D11A55//0ELL'**E

5% &ELLA&N5!||rC   c                     t        | ||      S )z,Parse tokens for ordered and unordered list.)r   rA   s      r8   r   zBlockParser.parse_list  s    $5))rC   c                 &    | j                  ||      S N)parse_raw_htmlrA   s      r8   parse_block_htmlzBlockParser.parse_block_html  s    ""1e,,rC   c                    |j                  d      j                         }|dk(  rt        |d|j                               S |dk(  rt        |d|j                               S |dk(  rt        |d|j                               S |j	                  d      rt        |d	|j                               S d }d }|j	                  d
      r1|dd  j                         }|t        v rrt        || j                        S |dd  j                         }|t        v r#d
|z   d	z   }t        |||j                               S |t        v rt        || j                        S |j                         }|r|S |j                         }|j                         }|r!t        j                  |j                  ||      s#|r7t        j                  |j                  ||      rt        || j                        S y )Nr   z<!--z-->z<?z?>z	<![CDATA[z]]>z<!>z</r   r   )rN   rQ   _parse_html_to_endr@   
startswithlowerr   _parse_html_to_newliner   r   rM   r   _OPEN_TAG_ENDr   rh   _CLOSE_TAG_END)	r5   r9   r:   r^   	close_tagopen_tagend_tagrR   	start_poss	            r8   r   zBlockParser.parse_raw_html  s   !!# V%eUAEEG<< T>%eT1557;; [ %eUAEEG<< T"%eS!%%'::	T"qr
((*IJ&-eT__EEabz'')H8#/C/)%!%%'BB:%-eT__EE ((*N EEG	%%',,UYY	7K...uyy)WM)%AArC   r   c                    | j                  |      }|j                  |j                  k  r|j                  |j                  |j                        }|sn|j                         }||j                  kD  r)|j                  |      }|j                  |       ||_        | j                  ||      }|r||_        n9|j                         }|j                  |      }|j                  |       ||_        |j                  |j                  k  r|j                  |j                  k  r<|j                  |j                  d  }|j                  |       |j                  |_        y y r   )
r   r   rj   rg   rh   ri   r   add_paragraphr   r   )	r5   r:   r   r   r9   rR   ry   end_pos2end_pos3s	            r8   r   zBlockParser.parse  s#   __U#llU---		%))U\\2AggiG%~~g.##D)&((E2H' ..0~~h/##D)'% llU---( <<%***99U\\^,D% ++EL +rC   )NN   r   )&__name__
__module____qualname__r   	state_clsrb   rc   rf   r   r   RAW_HTML_BLOCK_TAGS_PATTERN
BLOCK_HTMLr   r   r2   r1   r   r   rd   intr0   r   rB   rE   rT   rr   r}   r   r   r   r   r   r   r   r   r   __classcell__)r7   s   @r8   r   r   %   s   I/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JF)U3Z F)
 F)uSRZ[^R_M_G` F)P5: j S 2*E#J *z *c *-%* -Z -HSM -1c
 1: 1(3- 1f,: ,htCy.A ,T ,rC   r   r:   
end_markerr   r;   c                 4   | j                   j                  ||      }|dk(  r&| j                   | j                  d  }| j                  }n<| j	                  |      }|| _        | j                         }|| j	                  |      z  }| j                  d|d       |S )NrZ   r(   r=   rK   )rh   ra   r   rj   r   r   r?   )r:   r   r   
marker_posry   rR   s         r8   r   r     s    
I6JRyy(""~~j)!%%'w''	T:;NrC   newlinec                    |j                  | j                  | j                        }|r"|j                         }| j	                  |      }n%| j                  | j                  d  }| j
                  }| j                  d|d       |S )Nr(   r   )rg   rh   r   ri   r   rj   r?   )r:   r   r9   rR   ry   s        r8   r   r     sm    uyy%,,/A'')~~g&yy(""	T:;NrC   ).rb   typingr   r   r   r   r   rz   utilr	   r
   r   r   corer   r   helpersr   r   r   r   r   r   r   r   list_parserr   r   rc   rf   rO   r|   r   r   r   r   joinr   r   r   r   r   rd   r   r   r    rC   r8   <module>r      sc   	 8 8   %	 	 	 2BJJz6 BJJ/0 BJJvRTT2 !rzz'6 "**^,K(CHHZ0036(9KKcQ 

?-EEF45 bjj!<= q,&$ q,hj c c c 
* 
ws| 
 
rC   