U
    祡c                     @   sp   d dl mZ d dlZd dlmZ d dlmZ d dlmZ e	dej
Ze	dej
Zdd	 ZG d
d deZdS )    )unicode_literalsN)str
escape_xml)Rendererz"^javascript:|vbscript:|file:|data:z"^data:image\/(?:png|gif|jpeg|webp)c                 C   s   t t| ot t|  S N)researchreUnsafeProtocolreSafeDataProtocol)url r   :/tmp/pip-unpacked-wheel-4s07asnf/commonmark/render/html.pypotentially_unsafe   s    r   c                   @   s   e Zd Zi fddZdd Zd2ddZd3dd	Zd4d
dZd5ddZdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 ZdS )6HtmlRendererc                 C   s(   | dpd|d< d| _d| _|| _d S )N	softbreak
r   )getdisable_tagslast_outoptions)selfr   r   r   r   __init__   s    zHtmlRenderer.__init__c                 C   s   t |S r   r   )r   textr   r   r   escape    s    zHtmlRenderer.escapeNc                 C   s   | j dkrdS |  jd| 7  _|r`t|dkr`|D ]*}|  jd|d  d |d  d 7  _q4|rr|  jd7  _|  jd	7  _d	| _dS )
z'Helper function to produce an HTML tag.r   N< z="   "z />)r   buflenr   )r   nameattrsZselfclosingattribr   r   r   tag#   s    
(zHtmlRenderer.tagc                 C   s   |  |j d S r   )outliteralr   nodeenteringr   r   r   r   5   s    zHtmlRenderer.textc                 C   s   |  | jd  d S )Nr   )litr   r(   r   r   r   r   8   s    zHtmlRenderer.softbreakc                 C   s   |  dg d |   d S )NbrT)r%   crr(   r   r   r   	linebreak;   s    zHtmlRenderer.linebreakc                 C   sr   |  |}|rd| jdr$t|js:|d| |jg |jrV|d| |jg | d| n
| d d S )Nsafehreftitleaz/a)	r#   r   r   r   destinationappendr   r1   r%   r   r)   r*   r#   r   r   r   link?   s    
zHtmlRenderer.linkc                 C   s   |rZ| j dkrJ| jdr0t|jr0| d n| d| |j d  |  j d7  _ n>|  j d8  _ | j dkr|jr| d| |j  | d d S )	Nr   r/   z<img src="" alt="z
<img src="z" alt="r   z	" title="z" />)r   r   r   r   r3   r+   r   r1   r(   r   r   r   imageM   s"    


zHtmlRenderer.imagec                 C   s   |  |rdnd d S )Nemz/emr%   r(   r   r   r   emph_   s    zHtmlRenderer.emphc                 C   s   |  |rdnd d S )Nstrongz/strongr9   r(   r   r   r   r;   b   s    zHtmlRenderer.strongc                 C   sb   |j j }| |}|d k	r2|jdkr2|jd r2d S |rL|   | d| n| d |   d S )NlistZtightpz/p)parentr#   t	list_datar-   r%   )r   r)   r*   Zgrandparentr#   r   r   r   	paragraphe   s    


zHtmlRenderer.paragraphc                 C   sL   dt |j }| |}|r2|   | || n| d|  |   d S )Nh/)r   levelr#   r-   r%   )r   r)   r*   tagnamer#   r   r   r   headings   s    
zHtmlRenderer.headingc                 C   s$   |  d | |j |  d d S )Ncode/code)r%   r&   r'   r(   r   r   r   rG   }   s    
zHtmlRenderer.codec                 C   s   |j r|j  ng }| |}t|dkrVt|d dkrV|dd| |d  g |   | d | d| | |j	 | d | d |   d S )Nr   classz	language-prerG   rH   z/pre)
infosplitr#   r!   r4   r   r-   r%   r&   r'   )r   r)   r*   Z
info_wordsr#   r   r   r   
code_block   s    



zHtmlRenderer.code_blockc                 C   s,   |  |}|   | d|d |   d S )NhrTr#   r-   r%   r5   r   r   r   thematic_break   s    
zHtmlRenderer.thematic_breakc                 C   sJ   |  |}|r,|   | d| |   n|   | d |   d S )N
blockquotez/blockquoterO   r5   r   r   r   block_quote   s    


zHtmlRenderer.block_quotec                 C   s   |j d dkrdnd}| |}|rn|j d }|d k	rP|dkrP|dt|g |   | || |   n|   | d|  |   d S )NtypeZbulletulolstartr   rC   )r@   r#   r4   r   r-   r%   )r   r)   r*   rE   r#   rV   r   r   r   r<      s    


zHtmlRenderer.listc                 C   s2   |  |}|r| d| n| d |   d S )Nliz/li)r#   r%   r-   r5   r   r   r   item   s
    

zHtmlRenderer.itemc                 C   s(   | j dr| d n| |j d S Nr/   z<!-- raw HTML omitted -->)r   r   r+   r'   r(   r   r   r   html_inline   s    zHtmlRenderer.html_inlinec                 C   s8   |    | jdr | d n| |j |    d S rY   )r-   r   r   r+   r'   r(   r   r   r   
html_block   s
    zHtmlRenderer.html_blockc                 C   s2   |r|j r| |j  n|s.|jr.| |j d S r   )on_enterr+   on_exitr(   r   r   r   custom_inline   s    

zHtmlRenderer.custom_inlinec                 C   sB   |    |r |jr | |j n|s6|jr6| |j |    d S r   )r-   r\   r+   r]   r(   r   r   r   custom_block   s    

zHtmlRenderer.custom_blockc                 C   s   |  | | d S r   )r+   r   )r   sr   r   r   r&      s    zHtmlRenderer.outc                 C   st   g }| j drp|j}|rp|dt|d d d t|d d  d t|d d  d t|d d  g |S )N	sourceposzdata-sourceposr   :r   -)r   r   ra   r4   r   )r   r)   Zattposr   r   r   r#      s     zHtmlRenderer.attrs)NN)N)NN)NN)__name__
__module____qualname__r   r   r%   r   r   r.   r6   r7   r:   r;   rA   rF   rG   rM   rP   rR   r<   rX   rZ   r[   r^   r_   r&   r#   r   r   r   r   r      s0   






r   )
__future__r   r   builtinsr   Zcommonmark.commonr   Zcommonmark.render.rendererr   compile
IGNORECASEr
   r   r   r   r   r   r   r   <module>   s     