
    f                     H    d dl mZ ddlmZ ddlmZ ddlmZ  G d d      Zy)	    )Optional   )
BlockState)BlockParser)InlineParserc                   z    e Zd ZdZ	 	 	 	 ddee   dee   fdZd Zde	fdZ
d	 Zdd
edee	   fdZddZd
efdZy)Markdowna  Markdown instance to convert markdown text into HTML or other formats.
    Here is an example with the HTMLRenderer::

        from mistune import HTMLRenderer

        md = Markdown(renderer=HTMLRenderer(escape=False))
        md('hello **world**')

    :param renderer: a renderer to convert parsed tokens
    :param block: block level syntax parser
    :param inline: inline level syntax parser
    :param plugins: mistune plugins to use
    Nblockinlinec                     |
t               }|
t               }|| _        || _        || _        g | _        g | _        g | _        |r|D ]
  } ||         y y N)r   r   rendererr
   r   before_parse_hooksbefore_render_hooksafter_render_hooks)selfr   r
   r   pluginsplugins         K/var/www/cvtools/html/venv/lib/python3.12/site-packages/mistune/markdown.py__init__zMarkdown.__init__   sg     =ME>!^F "'
$*"$#% "$! t     c                      ||        y r    )r   r   s     r   usezMarkdown.use*   s	    tr   statec                     | j                  |j                  |      }| j                  r| j                  ||      S t        |      S r   )_iter_rendertokensr   list)r   r   datas      r   render_statezMarkdown.render_state-   s:      u5====u--Dzr   c              #      K   |D ]q  }d|v r$| j                  |d   |      }t        |      |d<   nCd|v r?|j                  d      }| j                  |j	                  d      |j
                        |d<   | s y w)Nchildrentextz 
	)r   r   popr   stripenv)r   r   r   tokr#   r$   s         r   r   zMarkdown._iter_render3   s|      		CS ,,S_eD"&x.J3wwv #'++djj.Euyy"QJI		s   A8A:sc                    || j                   j                         }|j                  dd      }|j                  dd      }|j                  d      s|dz  }|j	                  |       | j
                  D ]  } || |        | j                   j                  |       | j                  D ]  } || |        | j                  |      }| j                  D ]  } || ||      } ||fS )zParse and convert the given markdown string. If renderer is None,
        the returned **result** will be parsed markdown tokens.

        :param s: markdown string
        :param state: instance of BlockState
        :returns: result, state
        z

)
r
   	state_clsreplaceendswithprocessr   parser   r!   r   )r   r)   r   hookresults        r   r1   zMarkdown.parse?   s     =JJ((*E IIfd#IIdD!zz$IAa++ 	Du	 	

,, 	Du	 ""5)++ 	/D$.F	/u}r   c                     || j                   j                         }||j                  d<   t        |d      5 }|j	                         }d d d        j                  |      }| j                  ||      S # 1 sw Y   ,xY w)N__file__rb)r
   r-   r'   openreaddecoder1   )r   filepathencodingr   fr)   s         r   r8   zMarkdown.read`   st    =JJ((*E (		*(D! 	QA	 HHXzz!U##		 	s   A44A=c                 2    |d}| j                  |      d   S )Nr+   r   )r1   )r   r)   s     r   __call__zMarkdown.__call__k   s    9Azz!}Qr   )NNNNr   )zutf-8N)__name__
__module____qualname____doc__r   r   r   r   r   r   r!   r   strr1   r8   r>   r   r   r   r	   r	      st     !%.204 -!,/** 
s 8J#7 B	$ #  r   r	   N)	typingr   corer   block_parserr   inline_parserr   r	   r   r   r   <module>rH      s      % 'g  g r   