
    ft>                        d dl Z d dl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 j4                  de j6                  	      Z e j4                  d
      Z e j4                  de j6                  	      Z e j4                  de j6                  	      Z e j4                  d      Z  e j4                  d      Z!djE                  e      dz   djE                  e      z   Z# e j4                  edz         Z$ e j4                  d      Z% e j4                  d      Z& G d de      Z'd Z(d Z)y)    N)OptionalListTupleMatch   )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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dedefdZdededefdZdededefdZdededee   fdZdededefdZdededee   fdZdededee   fdZdededeeef   fdZdededefd Zdededefd!Z dededee   fd"Z!d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<axt_1>#{1,6})(?!#+)(?P<axt_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axt_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        O/var/www/cvtools/html/venv/lib/python3.12/site-packages/mistune/block_parser.pyr-   zBlockParser.__init__Z   s     	k4)+$ $T%7%7 8d001J!2$ 0 >B=O=O
59D'$400
 
s   %Bmstatereturnc                 H    |j                  ddi       |j                         S )zParse token for blank lines.typer   append_tokenendr2   r6   r7   s      r5   parse_blank_linezBlockParser.parse_blank_linep   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;   r>   s      r5   parse_thematic_breakz BlockParser.parse_thematic_breaku   s&    F$456uuw{r@   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=   )r2   r6   r7   end_poscodes        r5   parse_indent_codezBlockParser.parse_indent_code{   sq     ((*Nwwqz!$' $$R.zz$LQRuuwr@   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,}rD   rF   fenced)r:   rH   rI   markerinfoattrs)rK   findrecompilestrlenMr=   searchsrcstart
cursor_maxrM   r   rN   r<   )r2   r6   r7   spacesr[   r\   c_endcursor_startm2rP   rO   _trim_patterntokens                 r5   parse_fenced_codezBlockParser.parse_fenced_code   sm    $$wwz"1IAH yy|r!zzNS 3s6{#336II244Quuw{[[L199\"((*5DffhG99\]+D&&GdJJwS[1A'AC'GNM $$R.D%dXQWX &D$djjl3E'N5!r@   c                     t        |j                  d            }|j                  d      j                         }|rt        j	                  d|      }d|d|idd}|j                  |       |j                         dz   S )	z[Parse token for AXT heading. An AXT heading is started with 1 to 6
        symbol of ``#``.axt_1axt_2rD   headinglevelaxt)r:   textr]   rI   r   )rb   rK   rN   _AXT_HEADING_TRIMrM   r<   r=   )r2   r6   r7   rt   rv   rn   s         r5   parse_axt_headingzBlockParser.parse_axt_heading   su     AGGG$%www%%'$((T2D"DGU;KV[\5!uuw{r@   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      rs   setextrI   rt   r]   r!   r$   N)
last_tokenrK   r=   
compile_scmatchre   cursorparse_method)r2   r6   r7   r   rt   scs         r5   parse_setex_headingzBlockParser.parse_setex_heading   s     %%'
*V,;,3AE!*Jv"*Jw#*E"2Jw557Q;__.78HHUYY-$$Q.. r@   c                    |j                         }|r|S |j                  d      }t        |      }|syt        |j                  |j                         d      \  }}|y| 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r2t        |      }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)rJ   rK   r   r   re   r=   
BLANK_LINErd   rf   rg   r   _BLANK_TO_LINEr   envr   r	   )r2   r6   r7   rO   r   keyhrefhref_pos_blankmax_posr   	title_posdatas                r5   parse_ref_linkzBlockParser.parse_ref_link   sh   $ ((*N$Um(AEEG4Hh<''		8<llnG&&G+EIIxIy$$UYY	:AEEG	 	$$UYY9A557'xeii,, &D%d+e<D %W*.EIIk"3'r@   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_1rE      rD   )r   r    r   r   Nr   F)r   r!   r   r$   r%   T)rK   r   _BLOCK_QUOTE_TRIMrM   r   boolr   r=   r   _STRICT_BLOCK_QUOTEre   _BLOCK_QUOTE_LEADINGrg   rN   _LINE_BLANK_ENDrd   r   find_line_endget_textr
   )r2   r6   r7   rv   r   require_markerrO   quoteprev_blank_linebreak_scposlines               r5   extract_block_quotezBlockParser.extract_block_quote  s>    wwy!D(!$* $$R.__IJbhhtn-uuw{#))%))U\\BA
,00U;*5!4)--b%8 uuw#O ( H ,,!1!11'--eiiFGGAJE044R?E.ua8E-11"e<EEMD#$557EL ;;=*.*./E/Ee/L*M" NN599ell;"//59G ))+~~c*)$2"A ,,!1!11H $((r@   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   )r2   r6   r7   rv   rO   childrulesrn   s           r5   parse_block_quotezBlockParser.parse_block_quote`  s     00E:g!!$';;=D11A55//0ELL'**E

5% &ELLA&N5!||r@   c                     t        | ||      S )z,Parse tokens for ordered and unordered list.)r   r>   s      r5   r   zBlockParser.parse_listy  s    $5))r@   c                 &    | j                  ||      S N)parse_raw_htmlr>   s      r5   parse_block_htmlzBlockParser.parse_block_html}  s    ""1e,,r@   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#|r8t        j                  |j                  ||      rt        || j                        S y y )Nr   z<!--z-->z<?z?>z	<![CDATA[z]]>z<!>z</r}   r   )rK   rN   _parse_html_to_endr=   
startswithlowerr   _parse_html_to_newliner   r   rJ   r   _OPEN_TAG_ENDr   re   _CLOSE_TAG_END)	r2   r6   r7   r[   	close_tagopen_tagend_tagrO   	start_poss	            r5   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 NIr@   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   rg   rd   re   rf   r   add_paragraphr   r   )r2   r7   r   r   r6   rO   rv   s          r5   r   zBlockParser.parse  s#   __U#llU---		%))U\\2AggiG%~~g.##D)&''51G&--/~~g.##D)&% llU---( <<%***99U\\]+D% ++EL +r@   )NN   r   )%__name__
__module____qualname__r_   r`   rc   r   r   RAW_HTML_BLOCK_TAGS_PATTERN
BLOCK_HTMLr   r   r/   r.   r   r   ra   intr-   r   r   r?   rB   rQ   ro   rx   r   r   r   r   r   r   r   r   r   __classcell__)r4   s   @r5   r   r   $   sY   /6J		!	 	'	(+	  *T?(6 X.;gE3 #M(M 48,0"#	
'S	2
 !c+
 "	
,% 
 s 
e J 3 5   .5 . . .`5   /U /: /(3- /*@ @j @Xc] @DA)U A): A)%S/ A)F5   2*E ** * *-% -
 -x} -.B .Bj .BXc] .B`,: ,htCy.A ,4 ,r@   r   c                 4   | j                   j                  ||      }|dk(  r&| j                   | j                  d  }| j                  }n<| j	                  |      }|| _        | j                         }|| j	                  |      z  }| j                  d|d       |S )NrW   r%   r:   rH   )re   r^   r   rg   r   r   r<   )r7   
end_markerr   
marker_posrv   rO   s         r5   r   r     s    
I6JRyy'""~~j)!%%'w''	T:;Nr@   c                    |j                  | j                  | j                        }|r"|j                         }| j	                  |      }n%| j                  | j                  d  }| j
                  }| j                  d|d       |S )Nr%   r   )rd   re   r   rf   r   rg   r<   )r7   newliner6   rO   rv   s        r5   r   r     sm    uyy%,,/A'')~~g&yy'""	T:;Nr@   )*r_   typingr   r   r   r   utilr   r	   r
   r   corer   r   helpersr   r   r   r   r   r   r   r   list_parserr   r   r`   rc   rL   rw   r   r   r   r   joinr   r   r   r   r   r   r    r@   r5   <module>r      s   	 / /  %	 	 	 2BJJz6 BJJ/0 BJJvRTT2 !rzz'6 "**^,K(hhz*S0388H3EE 

?-EEF45 bjj!<= f,& f,R
r@   