
    gi                        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e          Z G d d          Z e            ZddZddZ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.2.1c                      e Zd ZddZdS )	SetupDonereturnstrc                    dS )Nz4Unable to register more extensions after setup done. )selfs    f/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/marko/__init__.py__str__zSetupDone.__str__   s    EE    N)r   r   )__name__
__module____qualname__r   r   r   r   r   r      s.        F F F F F Fr   r   c                  R    e Zd ZdZeedfddZddZddZddZ	ddZ
ddZ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                   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"   s       r   __init__zMarkdown.__init__2   s     &&)) 	DBCCC"*,(H-- 	HFGGG&,.24  	"DHj!!!!	" 	"r   str | MarkoExtensionc                   | j         rt                      |D ]m}t          |t                    rt	          |          }|j        | j        z   | _        |j        | j        z   | _        | j	        
                    |j                   nd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"   	extensions      r   r.   zMarkdown.useG   s      	++# 	< 	<I)S)) 6*955	"+"9D<O"OD$-$=@U$UD! ''	(:;;;;	< 	<r   c           
        | j         rdS t          t           t          dt	          | j                  | j        fz   i                                 | _        | j        D ]}| j        	                    |           t          t           t          dt	          | j                  | j        fz   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   es     r   _setup_extensionszMarkdown._setup_extensions\   s     	FRDE$"566$:K9MMrRRTT
 
 % 	' 	'AK##A&&&&Dd+,,0C/EE   
 
  r   textr   c                R    |                      |                     |                    S )z Parse and render the given text.)renderparser   r@   s     r   convertzMarkdown.convertp   s     {{4::d++,,,r   c                ,    |                      |          S )N)rE   rD   s     r   __call__zMarkdown.__call__t   s    ||D!!!r   r   c                ^    |                                   | j                            |          S )zmCall ``self.parser.parse(text)``.

        Override this to preprocess text or handle parsed result.
        )r?   r   rC   rD   s     r   rC   zMarkdown.parsew   s,    
 	   {  &&&r   parsedc                    |                                   | j        5 }|                    |          cddd           S # 1 swxY w Y   dS )z]Call ``self.renderer.render(text)``.

        Override this to handle parsed result.
        N)r?   r    rB   )r   rI   rs      r   rB   zMarkdown.render   s    
 	   ] 	$a88F##	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   >AA)r   r   r    r!   r"   r#   r   r$   )r"   r0   r   r$   )r   r$   r@   r   r   r   r@   r   r   r   rI   r   r   r   )r   r   r   __doc__r   r
   r/   r.   r?   rE   rG   rC   rB   r   r   r   r   r   "   s         "  &#/<@	" " " " "*< < < <*       (- - - -" " " "' ' ' '$ $ $ $ $ $r   r   r@   r   r   c                6    t                               |           S )zkParse and render the given text.

    :param text: text to convert.
    :returns: The rendered result.
    )	_markdownrE   r@   s    r   rE   rE      s     T"""r   r   c                6    t                               |           S )zqParse the text to a structured data object.

    :param text: text to parse.
    :returns: the parsed object
    )rQ   rC   rR   s    r   rC   rC      s     ??4   r   rI   c                6    t                               |           S )zoRender the parsed object to text.

    :param parsed: the parsed object
    :returns: the rendered result.
    )rQ   rB   )rI   s    r   rB   rB      s     F###r   )	r   r   rE   rC   rB   r	   r   r   r
   NrL   rM   rN   )rO   
__future__r   typingr   r   r   helpersr   r	   html_rendererr
   r   r   r    r   blockr   r   __version__	Exceptionr   r   rQ   rE   rC   rB   __all__r   r   r   <module>r]      s  
 
 # " " " " " 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 ' ' ' ' ' '             $######F F F F F	 F F F
d$ d$ d$ d$ d$ d$ d$ d$P HJJ	# # # #! ! ! !$ $ $ $
 
 
r   