a
    Oc                     @   s0   d Z ddlZddlmZmZ G dd deZdS )z
Base class for renderers.
    N)block_token
span_tokenc                   @   s  e Zd ZdZedZdd Zdd Ze	ddd	Z
d
d Zdd Zedd Zedd Ze	dddZeje	dddZeje	dddZeje	dddZeje	dddZeje	dddZeje	ddd Zeje	dd!d"Z ej!e	dd#d$Z"ej#e	dd%d&Z$e%j&e	dd'd(Z'e%j(e	dd)d*Z)e%j*e	dd+d,Z+e%j,e	dd-d.Z-e%j.e	dd/d0Z/e%j0e	dd1d2Z1e%j2e	dd3d4Z3e%j4e	dd5d6Z5e%j6e	dd7d8Z7e%j8e	dd9d:Z9e%j:e	dd;d<Z;d=S )>BaseRenderera  
    Base class for renderers.

    All renderers should ...
    *   ... define all render functions specified in self.render_map;
    *   ... be a context manager (by inheriting __enter__ and __exit__);

    Custom renderers could ...
    *   ... add additional tokens into the parsing process by passing custom
        tokens to super().__init__();
    *   ... add additional render functions by appending to self.render_map;

    Usage:
        Suppose SomeRenderer inherits BaseRenderer, and fin is the input file.
        The syntax looks something like this:

            >>> from mistletoe import Document
            >>> from some_renderer import SomeRenderer
            >>> with SomeRenderer() as renderer:
            ...     rendered = renderer.render(Document(fin))

        See mistletoe.html_renderer for an implementation example.

    Naming conventions:
        *   The keys of self.render_map should exactly match the class
            name of tokens;
        *   Render function names should be of form: "render_" + the
            "snake-case" form of token's class name.

    Attributes:
        render_map (dict): maps tokens to their corresponding render functions.
        _extras (list): a list of custom tokens to be added to the
                        parsing process.
    z([A-Z][a-z]+|[A-Z]+(?![a-z]))c                 G   s   | j | j| j| j| j| j| j| j| j| j	| j	| j
| j| j| j| j| j| j| j| j| j| j| jd| _|| _|D ]B}t|tjrt}nt}|| t| | |j}|| j|j< qni | _d S )N)StrongEmphasis
InlineCodeZRawTextStrikethroughImageLinkAutoLinkEscapeSequenceHeadingZSetextHeadingQuote	ParagraphZ	CodeFence	BlockCodeListListItemTableTableRow	TableCellThematicBreak	LineBreakDocument) render_strongrender_emphasisrender_inline_coderender_raw_textrender_strikethroughrender_imagerender_linkrender_auto_linkrender_escape_sequencerender_headingrender_quoterender_paragraphrender_block_coderender_listrender_list_itemrender_tablerender_table_rowrender_table_cellrender_thematic_breakrender_line_breakrender_document
render_map_extras
issubclassr   Z	SpanTokenr   Z	add_tokengetattr_cls_to_func__name__Z	footnotes)selfextrastokenZtoken_moduleZrender_func r7   O/var/www/html/megastudio/lib/python3.9/site-packages/mistletoe/base_renderer.py__init__-   sB    
zBaseRenderer.__init__c                 C   s   | j |jj |S )z
        Grabs the class name from input token and finds its corresponding
        render function.

        Basically a janky way to do polymorphism.

        Arguments:
            token: whose __class__.__name__ is in self.render_map.
        )r.   	__class__r3   r4   r6   r7   r7   r8   renderT   s    
zBaseRenderer.render)returnc                 C   s   d t| j|jS )a  
        Recursively renders child tokens. Joins the rendered
        strings with no space in between.

        If newlines / spaces are needed between tokens, add them
        in their respective templates, or override this function
        in the renderer subclass, so that whitespace won't seem to
        appear magically for anyone reading your program.

        Arguments:
            token: a branch node who has children attribute.
         )joinmapr<   childrenr;   r7   r7   r8   render_inner`   s    zBaseRenderer.render_innerc                 C   s   | S )z>
        Make renderer classes into context managers.
        r7   )r4   r7   r7   r8   	__enter__o   s    zBaseRenderer.__enter__c                 C   s   t   t  dS )z
        Make renderer classes into context managers.

        Reset block_token._token_types and span_token._token_types.
        N)r   Zreset_tokensr   )r4   Zexception_typeZexception_val	tracebackr7   r7   r8   __exit__u   s    zBaseRenderer.__exit__c                 C   s$   d ttj| j|}d|S )N_z	render_{})r?   r@   strlower_parse_namefindallformat)clscls_namesnaker7   r7   r8   r2   ~   s    zBaseRenderer._cls_to_funcc                    s    fdd j D S )z
        Helper method; takes a module and returns a list of all token classes
        specified in module.__all__. Useful when custom tokens are defined in a
        separate module.
        c                    s   g | ]}t  |qS r7   )r1   ).0namemoduler7   r8   
<listcomp>       z4BaseRenderer._tokens_from_module.<locals>.<listcomp>)__all__rQ   r7   rQ   r8   _tokens_from_module   s    z BaseRenderer._tokens_from_modulec                 C   s   |j S )zQ
        Default render method for RawText. Simply return token.content.
        )contentr;   r7   r7   r8   r      s    zBaseRenderer.render_raw_text)r6   r=   c                 C   s
   |  |S NrB   r;   r7   r7   r8   r      s    zBaseRenderer.render_strongc                 C   s
   |  |S rX   rY   r;   r7   r7   r8   r      s    zBaseRenderer.render_emphasisc                 C   s
   |  |S rX   rY   r;   r7   r7   r8   r      s    zBaseRenderer.render_inline_codec                 C   s
   |  |S rX   rY   r;   r7   r7   r8   r      s    z!BaseRenderer.render_strikethroughc                 C   s
   |  |S rX   rY   r;   r7   r7   r8   r      s    zBaseRenderer.render_imagec                 C   s
   |  |S rX   rY   r;   r7   r7   r8   r      s    zBaseRenderer.render_linkc                 C   s
   |  |S rX   rY   r;   r7   r7   r8   r       s    zBaseRenderer.render_auto_linkc                 C   s
   |  |S rX   rY   r;   r7   r7   r8   r!      s    z#BaseRenderer.render_escape_sequencec                 C   s
   |  |S rX   rY   r;   r7   r7   r8   r,      s    zBaseRenderer.render_line_breakc                 C   s
   |  |S rX   rY   r;   r7   r7   r8   r"      s    zBaseRenderer.render_headingc                 C   s
   |  |S rX   rY   r;   r7   r7   r8   r#      s    zBaseRenderer.render_quotec                 C   s
   |  |S rX   rY   r;   r7   r7   r8   r$      s    zBaseRenderer.render_paragraphc                 C   s
   |  |S rX   rY   r;   r7   r7   r8   r%      s    zBaseRenderer.render_block_codec                 C   s
   |  |S rX   rY   r;   r7   r7   r8   r&      s    zBaseRenderer.render_listc                 C   s
   |  |S rX   rY   r;   r7   r7   r8   r'      s    zBaseRenderer.render_list_itemc                 C   s
   |  |S rX   rY   r;   r7   r7   r8   r(      s    zBaseRenderer.render_tablec                 C   s
   |  |S rX   rY   r;   r7   r7   r8   r*      s    zBaseRenderer.render_table_cellc                 C   s
   |  |S rX   rY   r;   r7   r7   r8   r)      s    zBaseRenderer.render_table_rowc                 C   s
   |  |S rX   rY   r;   r7   r7   r8   r+      s    z"BaseRenderer.render_thematic_breakc                 C   s
   |  |S rX   rY   r;   r7   r7   r8   r-      s    zBaseRenderer.render_documentN)<r3   
__module____qualname____doc__recompilerI   r9   r<   rG   rB   rC   rE   classmethodr2   staticmethodrV   r   r   r   r   r   r   r   r   r   r   r	   r   r
   r   r   r    r   r!   r   r,   r   r   r"   r   r#   r   r$   r   r%   r   r&   r   r'   r   r(   r   r*   r   r)   r   r+   r   r-   r7   r7   r7   r8   r      s@   "
'	

r   )r\   r]   Z	mistletoer   r   objectr   r7   r7   r7   r8   <module>   s   