o
    >Di                     @  s   d Z ddlmZ ddlmZmZmZ ddlmZm	Z	 ddl
mZ ddlmZ ddlmZ er:dd	lmZ dd
lmZ dZG dd deZG dd dZe ZdddZdddZdddZg dZdS ) a  
  _    _     _     ___   _  _    ___
 | \  / |   /_\   | _ \ | |/ /  / _ \
 | |\/| |  / _ \  |   / | ' <  | (_) |
 |_|  |_| /_/ \_\ |_|_\ |_|\_\  \___/

 A markdown parser with high extensibility.

 Licensed under MIT.
 Created by Frost Ming<mianghong@gmail.com>
    )annotations)TYPE_CHECKINGIterablecast   )MarkoExtensionload_extension)HTMLRenderer)Parser)Renderer)Document)ElementTypez2.1.4c                   @  s   e Zd ZdddZdS )	SetupDonereturnstrc                 C  s   dS )Nz4Unable to register more extensions after setup done. )selfr   r   G/var/www/Datamplify/venv/lib/python3.10/site-packages/marko/__init__.py__str__   s   zSetupDone.__str__N)r   r   )__name__
__module____qualname__r   r   r   r   r   r      s    r   c                   @  s^   e Zd ZdZeedfdddZdddZd ddZd!ddZ	d!ddZ
d"ddZd#ddZdS )$Markdowna  The main class to convert markdown documents.

    Attributes:
        * parser: an instance of :class:`marko.parser.Parser`
        * renderer: an instance of :class:`marko.renderer.Renderer`

    :param parser: a subclass of :class:`marko.parser.Parser`.
    :param renderer: a subclass of :class:`marko.renderer.Renderer`.
    :param extensions: a list of extensions to register on the object.
        See document of :meth:`Markdown.use()`.

    .. note::
        This class is not thread-safe. Create a new instance for each thread.
    Nparsertype[Parser]renderertype[Renderer]
extensions%Iterable[str | MarkoExtension] | Noner   Nonec                 C  s^   t |ts	td|| _g | _t |tstd|| _g | _g | _d| _	|r-| j
|  d S d S )Nz$parser must be a subclass of Parser.z(renderer must be a subclass of Renderer.F)
issubclassr
   	TypeError_base_parser_parser_mixinsr   _base_renderer_renderer_mixins_extra_elements_setup_doneuse)r   r   r   r   r   r   r   __init__2   s   

zMarkdown.__init__str | MarkoExtensionc                 G  sV   | j rt |D ] }t|trt|}|j| j | _|j| j | _| j	
|j qdS )a  Register extensions to Markdown object.
        An extension should be either an object providing ``elements``, `parser_mixins``
        , ``renderer_mixins`` or all attributes, or a string representing the
        corresponding extension in ``marko.ext`` module.

        :param \*extensions: string or :class:`marko.helpers.MarkoExtension` object.

        .. note:: Marko uses a mixin based extension system, the order of extensions
            matters: An extension preceding in order will have higher priorty.
        N)r'   r   
isinstancer   r   parser_mixinsr#   renderer_mixinsr%   r&   extendelements)r   r   	extensionr   r   r   r(   G   s   
zMarkdown.usec                 C  st   | j rdS tttdt| j| jf i  | _| jD ]}| j	| qtt
tdt| j| jf i  | _d| _ dS )z)Install all extensions and set things up.N_Parser	_RendererT)r'   r   r
   typetupler#   r"   r   r&   add_elementr   r%   r$   r   )r   er   r   r   _setup_extensions\   s"   

zMarkdown._setup_extensionstextr   c                 C  s   |  | |S )z Parse and render the given text.)renderparser   r8   r   r   r   convertp   s   zMarkdown.convertc                 C  s
   |  |S )N)r<   r;   r   r   r   __call__t   s   
zMarkdown.__call__r   c                 C  s   |    | j|S )zmCall ``self.parser.parse(text)``.

        Override this to preprocess text or handle parsed result.
        )r7   r   r:   r;   r   r   r   r:   w   s   zMarkdown.parseparsedc                 C  s<   |    | j}||W  d   S 1 sw   Y  dS )z]Call ``self.renderer.render(text)``.

        Override this to handle parsed result.
        N)r7   r   r9   )r   r>   rr   r   r   r9      s   $zMarkdown.render)r   r   r   r   r   r   r   r   )r   r*   r   r   )r   r   r8   r   r   r   r8   r   r   r   r>   r   r   r   )r   r   r   __doc__r
   r	   r)   r(   r7   r<   r=   r:   r9   r   r   r   r   r   "   s    




r   r8   r   r   c                 C  
   t | S )zkParse and render the given text.

    :param text: text to convert.
    :returns: The rendered result.
    )	_markdownr<   r8   r   r   r   r<         
r<   r   c                 C  rD   )zqParse the text to a structured data object.

    :param text: text to parse.
    :returns: the parsed object
    )rE   r:   rF   r   r   r   r:      rG   r:   r>   c                 C  rD   )zoRender the parsed object to text.

    :param parsed: the parsed object
    :returns: the rendered result.
    )rE   r9   )r>   r   r   r   r9      rG   r9   )	r   r   r<   r:   r9   r   r
   r   r	   Nr@   rA   rB   )rC   
__future__r   typingr   r   r   helpersr   r   html_rendererr	   r   r
   r   r   blockr   r   __version__	Exceptionr   r   rE   r<   r:   r9   __all__r   r   r   r   <module>   s$    h

	
		