a
    Oc!                     @   s|   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ dd	lmZ G d
d deZdS )z
HTML renderer for mistletoe.
    N)chain)quote)block_token)
span_token)	HTMLBlock)HTMLSpan)BaseRendererc                       s  e Zd ZdZ fddZ f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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,d>ej-ed	d-d.Z.d?ej/ed	d/d0Z0eej1ed	d1d2Z2eej3ed	d3d4Z4eej5ed	d5d6Z6ej7ed	d7d8Z8eeed9d:d;Z9eeed9d<d=Z:  Z;S )@HTMLRendererzU
    HTML renderer class.

    See mistletoe.base_renderer module for more info.
    c                    s:   dg| _ t jtttf|  tj| _t	
d}|t_dS )zd
        Args:
            extras (list): allows subclasses to add even more custom tokens.
        Fz4&(#[0-9]+;|#[xX][0-9a-fA-F]+;|[^\t\n\f <&#;]{1,32};)N)_suppress_ptag_stacksuper__init__r   r   r   html_charref_stdlib_charrefrecompile)selfextrasr   	__class__ O/var/www/html/megastudio/lib/python3.9/site-packages/mistletoe/html_renderer.pyr      s
    
zHTMLRenderer.__init__c                    s   t  j|  | jt_d S N)r   __exit__r   r   r   )r   argsr   r   r   r   %   s    zHTMLRenderer.__exit__)returnc                    s4   t |dr( fdd|jD }d|S t|jS )Nchildrenc                    s   g | ]}  |qS r   )render_to_plain.0childr   r   r   
<listcomp>+       z0HTMLRenderer.render_to_plain.<locals>.<listcomp> )hasattrr   joinr   escapecontentr   tokeninnerr   r!   r   r   )   s    

zHTMLRenderer.render_to_plain)r*   r   c                 C   s   d}| | |S )Nz<strong>{}</strong>formatrender_innerr   r*   templater   r   r   render_strong/   s    zHTMLRenderer.render_strongc                 C   s   d}| | |S )Nz<em>{}</em>r,   r/   r   r   r   render_emphasis3   s    zHTMLRenderer.render_emphasisc                 C   s    d}t |jd j}||S )Nz<code>{}</code>r   )r   r'   r   r(   r-   r   r*   r0   r+   r   r   r   render_inline_code7   s    zHTMLRenderer.render_inline_codec                 C   s   d}| | |S )Nz<del>{}</del>r,   r/   r   r   r   render_strikethrough<   s    z!HTMLRenderer.render_strikethroughc                 C   s8   d}|j rdt|j }nd}||j| ||S )Nz<img src="{}" alt="{}"{} /> title="{}"r$   )titler-   r   r'   srcr   )r   r*   r0   r7   r   r   r   render_image@   s
    zHTMLRenderer.render_imagec                 C   sH   d}|  |j}|jr*dt|j}nd}| |}|j|||dS )Nz%<a href="{target}"{title}>{inner}</a>r6   r$   )targetr7   r+   )
escape_urlr:   r7   r-   r   r'   r.   )r   r*   r0   r:   r7   r+   r   r   r   render_linkH   s    
zHTMLRenderer.render_linkc                 C   s<   d}|j rd|j}n| |j}| |}|j||dS )Nz<a href="{target}">{inner}</a>z	mailto:{})r:   r+   )mailtor-   r:   r;   r.   )r   r*   r0   r:   r+   r   r   r   render_auto_linkR   s    
zHTMLRenderer.render_auto_linkc                 C   s
   |  |S r   )r.   r   r*   r   r   r   render_escape_sequence[   s    z#HTMLRenderer.render_escape_sequencec                 C   s   t |jS r   )r   r'   r(   r?   r   r   r   render_raw_text^   s    zHTMLRenderer.render_raw_textc                 C   s   | j S r   r(   r*   r   r   r   render_html_spana   s    zHTMLRenderer.render_html_spanc                 C   s   d}|  |}|j|j|dS )Nz<h{level}>{inner}</h{level}>)levelr+   )r.   r-   rE   r3   r   r   r   render_headinge   s    
zHTMLRenderer.render_headingc                    sJ   dg} j d | fdd|jD   j   |d d|S )Nz<blockquote>Fc                    s   g | ]}  |qS r   renderr   r!   r   r   r"   m   r#   z-HTMLRenderer.render_quote.<locals>.<listcomp>z</blockquote>
)r
   appendextendr   popr&   )r   r*   elementsr   r!   r   render_quotej   s    

zHTMLRenderer.render_quotec                 C   s*   | j d rd| |S d| |S )Nz{}z	<p>{}</p>)r
   r-   r.   r?   r   r   r   render_paragraphr   s    
zHTMLRenderer.render_paragraphc                 C   sH   d}|j r$ddt|j }nd}t|jd j}|j||dS )Nz%<pre><code{attr}>{inner}</code></pre>z class="{}"zlanguage-{}r$   r   )attrr+   )languager-   r   r'   r   r(   )r   r*   r0   rQ   r+   r   r   r   render_block_codew   s    zHTMLRenderer.render_block_codec                    sz   d}|j d ur.d}|j dkr(d|j nd}nd}d} j|j  d fdd	|jD } j  |j|||d
S )Nz<{tag}{attr}>
{inner}
</{tag}>ol   z start="{}"r$   ZulrI   c                    s   g | ]}  |qS r   rG   r   r!   r   r   r"      r#   z,HTMLRenderer.render_list.<locals>.<listcomp>tagrQ   r+   )startr-   r
   rJ   looser&   r   rL   )r   r*   r0   rW   rQ   r+   r   r!   r   render_list   s    

zHTMLRenderer.render_listc                    s   t |jdkrdS d fdd|jD }d} jd rv|jd jjdkrX|d	d  }|jd jjdkrv|d d }d
||S )Nr   z	<li></li>rI   c                    s   g | ]}  |qS r   rG   r   r!   r   r   r"      r#   z1HTMLRenderer.render_list_item.<locals>.<listcomp>z
{}
rO   	ParagraphrU   z<li>{}</li>)lenr   r&   r
   r   __name__r-   )r   r*   r+   Zinner_templater   r!   r   render_list_item   s    
zHTMLRenderer.render_list_itemc           	      C   s^   d}t |dr0d}| j|jdd}|j|d}nd}d}| |}|j|d}|j|| dS )	Nz<table>
{inner}</table>headerz<thead>
{inner}</thead>
T)	is_headerr+   r$   z<tbody>
{inner}</tbody>
)r%   render_table_rowr_   r-   r.   )	r   r*   r0   Zhead_templateZ
head_innerZhead_renderedZbody_templateZ
body_innerZbody_renderedr   r   r   render_table   s    

zHTMLRenderer.render_tableFc                    s,   d}d  fdd|jD }|j|dS )Nz<tr>
{inner}</tr>
r$   c                    s   g | ]} | qS r   )render_table_cellr   r`   r   r   r   r"      s   z1HTMLRenderer.render_table_row.<locals>.<listcomp>ra   )r&   r   r-   )r   r*   r`   r0   r+   r   re   r   rb      s
    zHTMLRenderer.render_table_rowc                 C   sb   d}|rdnd}|j d u r d}n|j dkr0d}n|j dkr>d}d	|}| |}|j|||d
S )Nz<{tag}{attr}>{inner}</{tag}>
thtdleftr   centerrU   rightz align="{}"rV   )alignr-   r.   )r   r*   Z	in_headerr0   rW   rk   rQ   r+   r   r   r   rd      s    




zHTMLRenderer.render_table_cellc                 C   s   dS )Nz<hr />r   rC   r   r   r   render_thematic_break   s    z"HTMLRenderer.render_thematic_breakc                 C   s   | j r
dS dS )NrI   z<br />
)ZsoftrC   r   r   r   render_line_break   s    zHTMLRenderer.render_line_breakc                 C   s   | j S r   rB   rC   r   r   r   render_html_block   s    zHTMLRenderer.render_html_blockc                    s:    j |j  d fdd|jD }|r6d|S dS )NrI   c                    s   g | ]}  |qS r   rG   r   r!   r   r   r"      r#   z0HTMLRenderer.render_document.<locals>.<listcomp>z{}
r$   )Z	footnotesupdater&   r   r-   r)   r   r!   r   render_document   s    zHTMLRenderer.render_document)rawr   c                 C   s
   t | S )zG
        This method is deprecated. Use `html.escape` instead.
        )r   r'   rq   r   r   r   escape_html   s    zHTMLRenderer.escape_htmlc                 C   s   t t| ddS )zO
        Escape urls to prevent code injection craziness. (Hopefully.)
        z/#:()*?=%@+,&;)safe)r   r'   r   rr   r   r   r   r;      s    zHTMLRenderer.escape_url)F)F)<r]   
__module____qualname____doc__r   r   strr   r   Strongr1   ZEmphasisr2   Z
InlineCoder4   ZStrikethroughr5   ZImager9   Linkr<   ZAutoLinkr>   ZEscapeSequencer@   ZRawTextrA   staticmethodr   rD   r   HeadingrF   ZQuoterN   r[   rP   Z	BlockCoderS   ListrZ   ZListItemr^   Tablerc   ZTableRowrb   Z	TableCellrd   ZThematicBreakrl   Z	LineBreakrm   r   rn   ZDocumentrp   rs   r;   __classcell__r   r   r   r   r	      sF   
		r	   )rw   r   r   	itertoolsr   urllib.parser   Z	mistletoer   r   Zmistletoe.block_tokenr   Zmistletoe.span_tokenr   Zmistletoe.base_rendererr   r	   r   r   r   r   <module>   s   