B
    .Kc                 @   s.  d Z ddlZddlZddlZddlZddlZddlmZm	Z	m
Z
mZmZ ddlmZ ddlmZmZ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mZm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z& erddl'm(Z( e")e*Z+e,e-e,dddZ.G dd deZ/G dd de$eZdS )z/docutils writers handling Sphinx' custom nodes.    N)TYPE_CHECKINGIterableOptionalTuplecast)nodes)ElementNodeText)HTMLTranslator)Writer)addnodes)Builder)RemovedInSphinx60Warning)___admonitionlabels)logging)SphinxTranslator)get_image_size)StandaloneHTMLBuilder)lengthscalereturnc             C   sP   t d| }|s| S |dkr | S | \}}t|| d }dt||f S dS )z/Multiply *length* (width or height) by *scale*.z^(\d*\.?\d*)\s*(\S*)$d   z%s%sN)rematchgroupsfloatint)r   r   ZmatchedamountZunitresult r"   2lib/python3.7/site-packages/sphinx/writers/html.pymultiply_length!   s    r$   c                   s:   e Zd ZddiZddd fddZddd	d
Z  ZS )
HTMLWriterZembed_stylesheetFr   N)builderr   c                s   t    || _d S )N)super__init__r&   )selfr&   )	__class__r"   r#   r(   3   s    
zHTMLWriter.__init__)r   c             C   st   | j | j| j }tt|| _| j| | j | _x dD ]}t	| |t
||d  q<W d| jjdd  | _d S )N)Zhead_prefixZ
stylesheetheadZbody_prefixZbody_pre_docinfoZdocinfobodyZfragmentZbody_suffixmetatitleZsubtitleheaderZfooterZhtml_prologZ	html_headZ
html_titleZhtml_subtitleZ	html_body    )r&   Zcreate_translatordocumentr   r   visitor	walkaboutastextoutputsetattrgetattrjoinr-   Z
clean_meta)r)   r3   attrr"   r"   r#   	translate7   s    
zHTMLWriter.translate)__name__
__module____qualname__Zsettings_default_overridesr(   r;   __classcell__r"   r"   )r*   r#   r%   .   s   r%   c                   s  e Zd ZU dZded< ejedd fddZe	ddd	d
Z
e	ddddZe	ddddZe	ddddZe	ddddZe	ddddZe	ddddZe	ddddZe	ddddZe	ddddZe	ddddZe	dddd Ze	ddd!d"Ze	ddd#d$Ze	ddd%d&Ze	ddd'd(Ze	ddd)d*Ze	ddd+d,Ze	ddd-d.Ze	ddd/d0Ze	ddd1d2Ze	ddd3d4Ze	ddd5d6Z e	ddd7d8Z!e	ddd9d:Z"e	ddd;d<Z#e	ddd=d>Z$e	ddd?d@Z%e	dddAdBZ&e	dddCdDZ'e	dddEdFZ(e	dddGdHZ)e	dddIdJZ*e	dddKdLZ+de	e,ddNdOdPZ-de.e	 dddQdRZ/e	dddSdTZ0e	dddUdVZ1e	e.e2e3dWf  ddXdYZ4e	dddZd[Z5e	ddd\d]Z6e	e,dd^d_d`Z7e	dddadbZ8e	dd fdcddZ9e	dd fdedfZ:e	dddgdhZ;e	dddidjZ<e	dddkdlZ=e	dddmdnZ>e	dddodpZ?e	dddqdrZ@e	dd fdsdtZAe	dd fdudvZBe	dd fdwdxZCe	dd fdydzZDe	dd fd{d|ZEe	ddd}d~ZFe	ddddZGe	ddddZHe	ddddZIe	ddddZJe	ddddZKe	ddddZLe	ddddZMe	ddddZNe	ddddZOe	ddddZPeQeRd fddZSe	ddddZTe	ddddZUe	ddddZVe	ddddZWe	dd fddZXe	dd fddZYe	dd fddZZe	ddddZ[e	ddddZ\e	ddddZ]e	ddddZ^e	ddddZ_e	ddddZ`e	ddddZae	ddddZbe	ddddZce	ddddZde	ddddZee	dd fddZfegddddZhe	ddddZie	ddddZje	ddddZke	ddddĄZle	ddddƄZme	ddddȄZne	ddddʄZoe	dddd̄Zpe	dddd΄Zqe	ddddЄZre	dddd҄Zse	ddddԄZte	ddddքZue	dddd؄Zve	ddddڄZwe	dddd܄Zxe	ddddބZye	ddddZze	ddddZ{e	ddddZ|e	ddddZ}e	ddddZ~e	ddddZe	ddddZe	ddddZe	ddddZe	dd fddZe	dd fddZe	ddddZe	dd fddZe	dd fddZe	dd fddZe	ddddZe	dd fdd Zde	e,ddddZde	e,ddddZde	e,ddddZde	e,dddd	Zed
d Zedd Z  ZS (  r   z%
    Our custom HTML translator.
    r   r&   N)r2   r&   r   c                sd   t  || | jj| _| jjg| _| jj| _d| _| jj	| _
d| _d| _dg| _dg| _d| _d S )Nr   r0   )r'   r(   r&   highlighterZcurrent_docnamedocnamesconfigmanpages_urlprotect_literal_textZhtml_secnumber_suffixsecnumber_suffixparam_separatoroptional_param_level_table_row_indices_fieldlist_row_indicesrequired_params_left)r)   r2   r&   )r*   r"   r#   r(   N   s    


zHTMLTranslator.__init__)noder   c             C   s(   | j |d  | jd|d   d S )Ndocnamez<span id="document-%s"></span>)rA   appendr,   )r)   rK   r"   r"   r#   visit_start_of_file\   s    z"HTMLTranslator.visit_start_of_filec             C   s   | j   d S )N)rA   pop)r)   rK   r"   r"   r#   depart_start_of_filea   s    z#HTMLTranslator.depart_start_of_filec             C   s   | j | |d d S )NZdl)r,   rM   starttag)r)   rK   r"   r"   r#   
visit_desck   s    zHTMLTranslator.visit_descc             C   s   | j d d S )Nz</dl>

)r,   rM   )r)   rK   r"   r"   r#   depart_descn   s    zHTMLTranslator.depart_descc             C   s&   | j | |d |  jd7  _d S )Ndt   )r,   rM   rQ   rD   )r)   rK   r"   r"   r#   visit_desc_signatureq   s    z#HTMLTranslator.visit_desc_signaturec             C   s8   |  j d8  _ |ds(| |td | jd d S )NrU   Zis_multilinezPermalink to this definitionz</dt>
)rD   getadd_permalink_refr   r,   rM   )r)   rK   r"   r"   r#   depart_desc_signaturev   s    
z$HTMLTranslator.depart_desc_signaturec             C   s   d S )Nr"   )r)   rK   r"   r"   r#   visit_desc_signature_line|   s    z(HTMLTranslator.visit_desc_signature_linec             C   s,   | dr| |jtd | jd d S )NZadd_permalinkzPermalink to this definitionz<br />)rW   rX   parentr   r,   rM   )r)   rK   r"   r"   r#   depart_desc_signature_line   s    
z)HTMLTranslator.depart_desc_signature_linec             C   s   | j | |dd d S )Nddr0   )r,   rM   rQ   )r)   rK   r"   r"   r#   visit_desc_content   s    z!HTMLTranslator.visit_desc_contentc             C   s   | j d d S )Nz</dd>)r,   rM   )r)   rK   r"   r"   r#   depart_desc_content   s    z"HTMLTranslator.depart_desc_contentc             C   s   | j | |dd d S )Nspanr0   )r,   rM   rQ   )r)   rK   r"   r"   r#   visit_desc_inline   s    z HTMLTranslator.visit_desc_inlinec             C   s   | j d d S )Nz</span>)r,   rM   )r)   rK   r"   r"   r#   depart_desc_inline   s    z!HTMLTranslator.depart_desc_inlinec             C   s   | j | |dd d S )Ncoder0   )r,   rM   rQ   )r)   rK   r"   r"   r#   visit_desc_name   s    zHTMLTranslator.visit_desc_namec             C   s   | j d d S )Nz</code>)r,   rM   )r)   rK   r"   r"   r#   depart_desc_name   s    zHTMLTranslator.depart_desc_namec             C   s   | j | |dd d S )Nrc   r0   )r,   rM   rQ   )r)   rK   r"   r"   r#   visit_desc_addname   s    z!HTMLTranslator.visit_desc_addnamec             C   s   | j d d S )Nz</code>)r,   rM   )r)   rK   r"   r"   r#   depart_desc_addname   s    z"HTMLTranslator.depart_desc_addnamec             C   s   d S )Nr"   )r)   rK   r"   r"   r#   visit_desc_type   s    zHTMLTranslator.visit_desc_typec             C   s   d S )Nr"   )r)   rK   r"   r"   r#   depart_desc_type   s    zHTMLTranslator.depart_desc_typec             C   s(   | j d | j d | j d d S )Nz <span class="sig-return">z-<span class="sig-return-icon">&#x2192;</span>z# <span class="sig-return-typehint">)r,   rM   )r)   rK   r"   r"   r#   visit_desc_returns   s    z!HTMLTranslator.visit_desc_returnsc             C   s   | j d d S )Nz</span></span>)r,   rM   )r)   rK   r"   r"   r#   depart_desc_returns   s    z"HTMLTranslator.depart_desc_returnsc             C   s:   | j d d| _d| _tdd |jD | _|j| _d S )Nz <span class="sig-paren">(</span>rU   r   c             S   s   g | ]}t |tjqS r"   )
isinstancer   Zdesc_parameter).0cr"   r"   r#   
<listcomp>   s   z;HTMLTranslator.visit_desc_parameterlist.<locals>.<listcomp>)	r,   rM   first_paramrG   sumZchildrenrJ   Zchild_text_separatorrF   )r)   rK   r"   r"   r#   visit_desc_parameterlist   s    z'HTMLTranslator.visit_desc_parameterlistc             C   s   | j d d S )Nz <span class="sig-paren">)</span>)r,   rM   )r)   rK   r"   r"   r#   depart_desc_parameterlist   s    z(HTMLTranslator.depart_desc_parameterlistc             C   sT   | j rd| _ n| js"| j| j | jdkr:|  jd8  _|dsP| jd d S )Nr   rU   noemphz<em>)rp   rJ   r,   rM   rF   rG   hasattr)r)   rK   r"   r"   r#   visit_desc_parameter   s    

z#HTMLTranslator.visit_desc_parameterc             C   s.   | ds| jd | jr*| j| j d S )Nrt   z</em>)ru   r,   rM   rJ   rF   )r)   rK   r"   r"   r#   depart_desc_parameter   s    
z$HTMLTranslator.depart_desc_parameterc             C   s   |  j d7  _ | jd d S )NrU   z<span class="optional">[</span>)rG   r,   rM   )r)   rK   r"   r"   r#   visit_desc_optional   s    z"HTMLTranslator.visit_desc_optionalc             C   s   |  j d8  _ | jd d S )NrU   z<span class="optional">]</span>)rG   r,   rM   )r)   rK   r"   r"   r#   depart_desc_optional   s    z#HTMLTranslator.depart_desc_optionalc             C   s   | j | j|dddd d S )NZemr0   property)CLASS)r,   rM   rQ   )r)   rK   r"   r"   r#   visit_desc_annotation   s    z$HTMLTranslator.visit_desc_annotationc             C   s   | j d d S )Nz</em>)r,   rM   )r)   rK   r"   r"   r#   depart_desc_annotation   s    z%HTMLTranslator.depart_desc_annotationc             C   s    | j | j|d|d d d S )Ndivtype)r{   )r,   rM   rQ   )r)   rK   r"   r"   r#   visit_versionmodified   s    z$HTMLTranslator.visit_versionmodifiedc             C   s   | j d d S )Nz</div>
)r,   rM   )r)   rK   r"   r"   r#   depart_versionmodified   s    z%HTMLTranslator.depart_versionmodifiedc          	   C   s\  ddi}| dsd|kr,|d  d7  < n|d  d7  < d|kr|d pNd|d< | jjr|d d	r| |d |d< d
| _n d|kstdd|d  |d< t|jt	j
st|dkrt|d t	jst|d  d7  < d|kr|d |d< d|kr|d |d< | j| j|ddf| | drX| jd| j dtt|d   d S )NclassZ	referenceZinternalrefuriz	 internalz	 external#hrefzmailto:TZrefidz3References must have "refuri" or "refid" attribute.rU   r   z image-referenceZreftitler.   targetar0   	secnumberz%s.)rW   settingscloak_email_addresses
startswithZcloak_mailto	in_mailtoAssertionErrorrl   r[   r   ZTextElementlenZimager,   rM   rQ   rE   r9   mapstr)r)   rK   attsr"   r"   r#   visit_reference   s.    
 
zHTMLTranslator.visit_referencec             C   s   |  | d S )N)r   )r)   rK   r"   r"   r#   visit_number_reference  s    z%HTMLTranslator.visit_number_referencec             C   s   |  | d S )N)depart_reference)r)   rK   r"   r"   r#   depart_number_reference  s    z&HTMLTranslator.depart_number_referencec             C   s
   t jd S )N)r   SkipNode)r)   rK   r"   r"   r#   visit_comment
  s    zHTMLTranslator.visit_commentr0   )rK   namer   c             C   sF   | j | j|dd| d |r8|dt|t|  | | d S )Nr~   zadmonition )r{   r   )r,   rM   rQ   insertr   r.   r   Zset_first_last)r)   rK   r   r"   r"   r#   visit_admonition  s
    
zHTMLTranslator.visit_admonitionc             C   s   | j d d S )Nz</div>
)r,   rM   )r)   rK   r"   r"   r#   depart_admonition  s    z HTMLTranslator.depart_admonitionc             C   s   |  |d d S )NZseealso)r   )r)   rK   r"   r"   r#   visit_seealso  s    zHTMLTranslator.visit_seealsoc             C   s   |  | d S )N)r   )r)   rK   r"   r"   r#   depart_seealso  s    zHTMLTranslator.depart_seealso.c             C   s   | dr|d S t|jtjr| jjdkrb| jd }d||jd d f }|| jjkrd| }n"d|jd d  }|| jjkrd	}| jj |r| jj| S d S )
Nr   
singlehtmlz%s/#%sidsr   z%s/r   r0   )	rW   rl   r[   r   sectionr&   r   rA   Z
secnumbers)r)   rK   rL   Z
anchornamer"   r"   r#   get_secnumber  s    


zHTMLTranslator.get_secnumberc             C   s4   |  |}|r0| jddtt|| j   d S )Nz&<span class="section-number">%s</span>r   )r   r,   rM   r9   r   r   rE   )r)   rK   r   r"   r"   r#   add_secnumber1  s    
zHTMLTranslator.add_secnumberc                sr   t t d d fdd} jjjd |}|rnt|d dkr\td|j }tj	||d n|||d d  d S )	N)figtype	figure_idr   c                s    j jdkr d jd | f }n| }| j j|i kr jd  jj| }|d krrt	d|  }t
| n< j j| | } j|dtt| d   jd d S )	Nr   z%s/%sr   z<span class="caption-number">z#numfig_format is not defined for %sr    z</span>)r&   r   rA   Z
fignumbersrW   r,   rM   rB   Znumfig_formatr   loggerwarningr9   r   r   )r   r   keyprefixmsgZnumbers)r)   r"   r#   append_fignumber8  s     z6HTMLTranslator.add_fignumber.<locals>.append_fignumberZstdr   r   z Any IDs not assigned for %s node)location)
r   r&   envZdomainsZget_enumerable_node_typer   r   Ztagnamer   r   )r)   rK   r   r   r   r"   )r)   r#   add_fignumber7  s    zHTMLTranslator.add_fignumber)rK   r.   r   c             C   sB   |d r>| j jr>| jjr>d}| j||d d || j jf  d S )Nr   z2<a class="headerlink" href="#%s" title="%s">%s</a>r   )rB   html_permalinksr&   add_permalinksr,   rM   html_permalinks_icon)r)   rK   r.   formatr"   r"   r#   rX   Q  s    z HTMLTranslator.add_permalink_refc             C   s<   x6|d dd D ]"}| j d|  |d | qW dS )a  Generate hyperlink targets for listings.

        Original visit_bullet_list(), visit_definition_list() and visit_enumerated_list()
        generates hyperlink targets inside listing tags (<ul>, <ol> and <dl>) if multiple
        IDs are assigned to listings.  That is invalid DOM structure.
        (This is a bug of docutils <= 0.12)

        This exports hyperlink targets before listings to make valid DOM structure.
        r   rU   Nz<span id="%s"></span>)r,   rM   remove)r)   rK   idr"   r"   r#   generate_targets_for_listingW  s    
z+HTMLTranslator.generate_targets_for_listingc                s<   t |dkr"t|d tjr"tj| | t | d S )NrU   r   )	r   rl   r   toctreer   r   r   r'   visit_bullet_list)r)   rK   )r*   r"   r#   r   f  s    
z HTMLTranslator.visit_bullet_listc                s   |  | t | d S )N)r   r'   visit_enumerated_list)r)   rK   )r*   r"   r#   r   n  s    
z$HTMLTranslator.visit_enumerated_listc             C   s   | j | |dd d S )Nr]   r0   )r,   rM   rQ   )r)   rK   r"   r"   r#   visit_definitions  s    zHTMLTranslator.visit_definitionc             C   s   | j d d S )Nz</dd>
)r,   rM   )r)   rK   r"   r"   r#   depart_definitionx  s    z HTMLTranslator.depart_definitionc             C   s   | j | j|dddd d S )Nr`   r0   
classifier)r{   )r,   rM   rQ   )r)   rK   r"   r"   r#   visit_classifier|  s    zHTMLTranslator.visit_classifierc             C   s6   | j d |jddd}t|tjs2| j d d S )Nz</span>FT)descendsiblingsz</dt>)r,   rM   	next_noderl   r   r   )r)   rK   r   r"   r"   r#   depart_classifier  s    z HTMLTranslator.depart_classifierc             C   s   | j | |dd d S )NrT   r0   )r,   rM   rQ   )r)   rK   r"   r"   r#   
visit_term  s    zHTMLTranslator.visit_termc             C   sN   |j ddd}t|tjrn.t|jjjtjr>| |td | j	
d d S )NFT)r   r   zPermalink to this termz</dt>)r   rl   r   r   r[   r   ZglossaryrX   r   r,   rM   )r)   rK   r   r"   r"   r#   depart_term  s    zHTMLTranslator.depart_termc          	      s   t |jtjrP|jdrP| j| j|ddddd | jd | jd nt	 
| | | | |j t |jtjr| jd d S )	Nr   pr0   Zcaptionheading)r{   ZROLEz<span class="caption-text">z</span></p>
)rl   r[   r   Zcompact_paragraphrW   r,   rM   rQ   contextr'   visit_titler   r   r   table)r)   rK   )r*   r"   r#   r     s    
zHTMLTranslator.visit_titlec                s   | j d }| jjr| jjr|jdr|jd r|drN| |jt	d q|dr| j
d|jd d  dt	d| jjf   qt|jtjr| j
d	 | |jt	d
 nt|jtjr| j
d	 t | d S )Nr   r   z</hzPermalink to this headingz</a></hz%</a><a class="headerlink" href="#%s" r   ztitle="%s">%sz</span>zPermalink to this table)r   rB   r   r&   r   r[   ru   r   rX   r   r,   rM   r   rl   r   r   r'   depart_title)r)   rK   Z	close_tag)r*   r"   r#   r     s"    


zHTMLTranslator.depart_titlec                s   |j | krt |S |dd}|dd}|di }|dd|d< | jj|i }|rr| jjrr| jj}| jj	|j |f|||d|}| j
|dd	d
| d}| j|| d  tjd S )NlanguagedefaultlinenosFhighlight_argsforce)optsr   r   r~   r0   zhighlight-%s notranslate)suffixr{   z</div>
)Z	rawsourcer5   r'   visit_literal_blockrW   rB   highlight_optionsZhtml_codeblock_linenos_styler@   highlight_blockrQ   r,   rM   r   r   )r)   rK   langr   r   r   highlightedrQ   )r*   r"   r#   r     s     
z"HTMLTranslator.visit_literal_blockc                s^   t |jtjr(|jdr(| jd nt | | 	|j | j| j
|dddd d S )Nliteral_blockz <div class="code-block-caption">r`   r0   zcaption-text)r{   )rl   r[   r   	containerrW   r,   rM   r'   visit_captionr   rQ   )r)   rK   )r*   r"   r#   r     s
    zHTMLTranslator.visit_captionc                s   | j d t|jtjr:|jdr:| |jtd nBt|jtj	r\| |jtd n |jdr|| |jjtd t|jtjr|jdr| j d nt
 | d S )Nz</span>r   zPermalink to this codezPermalink to this imager   zPermalink to this toctreez</div>
)r,   rM   rl   r[   r   r   rW   rX   r   Zfigurer'   depart_caption)r)   rK   )r*   r"   r#   r     s    zHTMLTranslator.depart_captionc             C   s   |  | d S )N)r   )r)   rK   r"   r"   r#   visit_doctest_block  s    z"HTMLTranslator.visit_doctest_blockc             C   s   | j | |dd  d S )NZ
blockquotez<div>)r,   rM   rQ   )r)   rK   r"   r"   r#   visit_block_quote  s    z HTMLTranslator.visit_block_quotec             C   s   | j d d S )Nz</div></blockquote>
)r,   rM   )r)   rK   r"   r"   r#   depart_block_quote  s    z!HTMLTranslator.depart_block_quotec             C   s   d|d kr*| j | j|dddd d S |dd }d|d ksF|sr| j | j|dddd |  jd7  _d S | jj|i }| jj|	 |||d	d
}| j|ddd| d}| j ||
  d  tjd S )Nkbdclassesr0   zdocutils literal notranslate)r{   r   rc   rU   T)r   r   Znowrapz'docutils literal highlight highlight-%s)r   r{   z</code>)r,   rM   rQ   rW   rD   rB   r   r@   r   r5   stripr   r   )r)   rK   r   r   r   rQ   r"   r"   r#   visit_literal  s(    

zHTMLTranslator.visit_literalc             C   s8   d|d kr| j d n|  jd8  _| j d d S )Nr   r   z</kbd>rU   z</code>)r,   rM   rD   )r)   rK   r"   r"   r#   depart_literal  s    zHTMLTranslator.depart_literalc             C   s   | j | |d g }tttj |}x|D ]}||d  q.W tdd |D }d }x|D ]x}|d r|d |}| j | |dd | j |d  n |d k	r| j dd	t	|   |
|  | j d
 q`W | j d tjd S )NZpreZ	tokennamec             s   s   | ]}t |V  qd S )N)r   )rm   r   r"   r"   r#   	<genexpr>  s    z6HTMLTranslator.visit_productionlist.<locals>.<genexpr>Zstrongr0   z</strong> ::= z%s     r   
z</pre>
)r,   rM   rQ   r   r   r   
productionmaxljustr   r4   r   r   )r)   rK   namesZproductionlistr   maxlenZlastnamer"   r"   r#   visit_productionlist  s$    


z#HTMLTranslator.visit_productionlistc             C   s   d S )Nr"   )r)   rK   r"   r"   r#   depart_productionlist*  s    z$HTMLTranslator.depart_productionlistc             C   s   d S )Nr"   )r)   rK   r"   r"   r#   visit_production-  s    zHTMLTranslator.visit_productionc             C   s   d S )Nr"   )r)   rK   r"   r"   r#   depart_production0  s    z HTMLTranslator.depart_productionc             C   s    | j | j|dddd  d S )Nr   Zcentered)r{   z<strong>)r,   rM   rQ   )r)   rK   r"   r"   r#   visit_centered3  s    zHTMLTranslator.visit_centeredc             C   s   | j d d S )Nz</strong></p>)r,   rM   )r)   rK   r"   r"   r#   depart_centered7  s    zHTMLTranslator.depart_centeredc                s0   t |jtjrdS t |jtjr$dS t |S )z:Determine if the <p> tags around paragraph can be omitted.F)rl   r[   r   Zdesc_contentZversionmodifiedr'   should_be_compact_paragraph)r)   rK   )r*   r"   r#   r   ;  s
    z*HTMLTranslator.should_be_compact_paragraphc             C   s   d S )Nr"   )r)   rK   r"   r"   r#   visit_compact_paragraphE  s    z&HTMLTranslator.visit_compact_paragraphc             C   s   d S )Nr"   )r)   rK   r"   r"   r#   depart_compact_paragraphH  s    z'HTMLTranslator.depart_compact_paragraphc             C   s   ddd}| j js | jd nd|krl|d  d7  < |d |d< | j| j|ddf| | jd	 nld
|kr|d  d7  < t| j jt	j
|d
 |d< | j| j|ddf| | jd	 n| jd d S )Nzreference downloadr0   )r   Zdownloadr   r   z	 externalr   r   z</a>filenamez	 internal)r&   Zdownload_supportr   rM   r,   rQ   	posixpathr9   Zdlpathurllibparsequote)r)   rK   r   r"   r"   r#   visit_download_referenceK  s     
z'HTMLTranslator.visit_download_referencec             C   s   | j | j  d S )N)r,   rM   r   rO   )r)   rK   r"   r"   r#   depart_download_reference_  s    z(HTMLTranslator.depart_download_referencec                s   | dd t |S )Nalignr   )
setdefaultr'   visit_figure)r)   rK   )r*   r"   r#   r   c  s    zHTMLTranslator.visit_figurec                s  |d }|| j jkr8t| j jtj| j j| |d< d|krd|krPd|kstt	j
| j j|}|d krtjtd|d n0d|krt|d |d< d|krt|d |d< |d }| d	rd
|i}d|kr|d |d< d|kr|d |d< d|krDd|kr$t|d |d |d< d|krDt|d |d |d< |d||d< d|krnd|d  |d< | j| j|ddf| d S t | d S )Nurir   widthZheightz7Could not obtain image size. :scale: option is ignored.)r   r   rU   )svgsvgzsrcZaltr   zalign-%sr   Zimgr0   )r&   Zimagesr   r9   Zimgpathr   r   r   r   ospathZsrcdirr   r   r   r   lowerendswithr$   rW   r,   rM   Zemptytagr'   visit_image)r)   rK   Zoldurisizer   r   )r*   r"   r#   r  j  s@    






zHTMLTranslator.visit_imagec                s$   |d   drnt | d S )Nr   )r   r   )r  r  r'   depart_image)r)   rK   )r*   r"   r#   r    s    zHTMLTranslator.depart_imagec             C   s
   t jd S )N)r   r   )r)   rK   r"   r"   r#   visit_toctree  s    zHTMLTranslator.visit_toctreec             C   s
   t jd S )N)r   r   )r)   rK   r"   r"   r#   visit_index  s    zHTMLTranslator.visit_indexc             C   s
   t jd S )N)r   r   )r)   rK   r"   r"   r#   visit_tabular_col_spec  s    z%HTMLTranslator.visit_tabular_col_specc             C   s   d S )Nr"   )r)   rK   r"   r"   r#   visit_glossary  s    zHTMLTranslator.visit_glossaryc             C   s   d S )Nr"   )r)   rK   r"   r"   r#   depart_glossary  s    zHTMLTranslator.depart_glossaryc             C   s   d S )Nr"   )r)   rK   r"   r"   r#   
visit_acks  s    zHTMLTranslator.visit_acksc             C   s   d S )Nr"   )r)   rK   r"   r"   r#   depart_acks  s    zHTMLTranslator.depart_acksc             C   s   | j d d S )Nz<table class="hlist"><tr>)r,   rM   )r)   rK   r"   r"   r#   visit_hlist  s    zHTMLTranslator.visit_hlistc             C   s   | j d d S )Nz</tr></table>
)r,   rM   )r)   rK   r"   r"   r#   depart_hlist  s    zHTMLTranslator.depart_hlistc             C   s   | j d d S )Nz<td>)r,   rM   )r)   rK   r"   r"   r#   visit_hlistcol  s    zHTMLTranslator.visit_hlistcolc             C   s   | j d d S )Nz</td>)r,   rM   )r)   rK   r"   r"   r#   depart_hlistcol  s    zHTMLTranslator.depart_hlistcolc                s(   t  | | jd dd| jd< d S )Nz&nbsp;z&#160;)r'   visit_option_groupr   replace)r)   rK   )r*   r"   r#   r    s    z!HTMLTranslator.visit_option_groupc             C   s   |  }| |}| jr|x| j|D ]P}| rD| jd|  q&|dkrZ| j| q&| jdt|d  d  q&W n$| j	r| j
jr| |}| j| d S )Nz<span class="pre">%s</span>z 
z&#160;rU   r   )r5   encoderD   Zwords_and_spacesfindallr   r,   rM   r   r   r   r   Zcloak_email)r)   rK   textZencodedtokenr"   r"   r#   
visit_Text  s    
"
zHTMLTranslator.visit_Textc             C   s   |  |d d S )NZnote)r   )r)   rK   r"   r"   r#   
visit_note  s    zHTMLTranslator.visit_notec             C   s   |  | d S )N)r   )r)   rK   r"   r"   r#   depart_note  s    zHTMLTranslator.depart_notec             C   s   |  |d d S )Nr   )r   )r)   rK   r"   r"   r#   visit_warning  s    zHTMLTranslator.visit_warningc             C   s   |  | d S )N)r   )r)   rK   r"   r"   r#   depart_warning  s    zHTMLTranslator.depart_warningc             C   s   |  |d d S )NZ	attention)r   )r)   rK   r"   r"   r#   visit_attention  s    zHTMLTranslator.visit_attentionc             C   s   |  | d S )N)r   )r)   rK   r"   r"   r#   depart_attention  s    zHTMLTranslator.depart_attentionc             C   s   |  |d d S )NZcaution)r   )r)   rK   r"   r"   r#   visit_caution  s    zHTMLTranslator.visit_cautionc             C   s   |  | d S )N)r   )r)   rK   r"   r"   r#   depart_caution  s    zHTMLTranslator.depart_cautionc             C   s   |  |d d S )NZdanger)r   )r)   rK   r"   r"   r#   visit_danger  s    zHTMLTranslator.visit_dangerc             C   s   |  | d S )N)r   )r)   rK   r"   r"   r#   depart_danger  s    zHTMLTranslator.depart_dangerc             C   s   |  |d d S )Nerror)r   )r)   rK   r"   r"   r#   visit_error  s    zHTMLTranslator.visit_errorc             C   s   |  | d S )N)r   )r)   rK   r"   r"   r#   depart_error  s    zHTMLTranslator.depart_errorc             C   s   |  |d d S )NZhint)r   )r)   rK   r"   r"   r#   
visit_hint  s    zHTMLTranslator.visit_hintc             C   s   |  | d S )N)r   )r)   rK   r"   r"   r#   depart_hint  s    zHTMLTranslator.depart_hintc             C   s   |  |d d S )NZ	important)r   )r)   rK   r"   r"   r#   visit_important  s    zHTMLTranslator.visit_importantc             C   s   |  | d S )N)r   )r)   rK   r"   r"   r#   depart_important  s    zHTMLTranslator.depart_importantc             C   s   |  |d d S )NZtip)r   )r)   rK   r"   r"   r#   	visit_tip  s    zHTMLTranslator.visit_tipc             C   s   |  | d S )N)r   )r)   rK   r"   r"   r#   
depart_tip  s    zHTMLTranslator.depart_tipc             C   s
   |  |S )N)Zvisit_emphasis)r)   rK   r"   r"   r#   visit_literal_emphasis  s    z%HTMLTranslator.visit_literal_emphasisc             C   s
   |  |S )N)Zdepart_emphasis)r)   rK   r"   r"   r#   depart_literal_emphasis  s    z&HTMLTranslator.depart_literal_emphasisc             C   s
   |  |S )N)Zvisit_strong)r)   rK   r"   r"   r#   visit_literal_strong  s    z#HTMLTranslator.visit_literal_strongc             C   s
   |  |S )N)Zdepart_strong)r)   rK   r"   r"   r#   depart_literal_strong  s    z$HTMLTranslator.depart_literal_strongc             C   s8   i }| dr|d |d< | j| j|ddf| d S )NZexplanationr.   Zabbrr0   )ru   r,   rM   rQ   )r)   rK   Zattrsr"   r"   r#   visit_abbreviation  s    
z!HTMLTranslator.visit_abbreviationc             C   s   | j d d S )Nz</abbr>)r,   rM   )r)   rK   r"   r"   r#   depart_abbreviation   s    z"HTMLTranslator.depart_abbreviationc             C   s2   |  | | jr.| jjf |j|d< | | d S )Nr   )r/  rC   r   Z
attributesr   )r)   rK   r"   r"   r#   visit_manpage#  s    
zHTMLTranslator.visit_manpagec             C   s   | j r| | | | d S )N)rC   r   r0  )r)   rK   r"   r"   r#   depart_manpage)  s    
zHTMLTranslator.depart_manpagec                s$   | j d |dd t |S )Nr   r   r   )rH   rM   r   r'   visit_table)r)   rK   )r*   r"   r#   r7  0  s    zHTMLTranslator.visit_tablec                s   | j   t | d S )N)rH   rO   r'   depart_table)r)   rK   )r*   r"   r#   r8  8  s    
zHTMLTranslator.depart_tablec             C   sb   | j d  d7  < | j d d dkr4|d d n|d d | j| |dd	 d|_d S )
Nr   rU   r1   r   r   zrow-evenzrow-oddtrr0   )rH   rM   r,   rQ   column)r)   rK   r"   r"   r#   	visit_row<  s    zHTMLTranslator.visit_rowc                s(   t  | | jd dkr$d| jd< d S )Nr   z&nbsp;z&#160;)r'   visit_entryr,   )r)   rK   )r*   r"   r#   r<  E  s    zHTMLTranslator.visit_entryc                s   | j d t |S )Nr   )rI   rM   r'   visit_field_list)r)   rK   )r*   r"   r#   r=  J  s    zHTMLTranslator.visit_field_listc                s   | j   t |S )N)rI   rO   r'   depart_field_list)r)   rK   )r*   r"   r#   r>  N  s    
z HTMLTranslator.depart_field_listc             C   s`   | j d  d7  < | j d d dkr4|d d n|d d | j| j|dd	d
d d S )Nr   rU   r1   r   r   z
field-evenz	field-oddr9  r0   Zfield)r{   )rI   rM   r,   rQ   )r)   rK   r"   r"   r#   visit_fieldR  s
    zHTMLTranslator.visit_fieldc                s@   t | j}t | |t | jkr<| jd dd| jd< d S )Nr   z&nbsp;z&#160;)r   r   r'   visit_field_namer  )r)   rK   Zcontext_count)r*   r"   r#   r@  Z  s    
zHTMLTranslator.visit_field_name)rK   math_envr   c             C   s*   | j j}| j jjj| \}}|| | d S )N)r&   math_renderer_nameappregistryhtml_inline_math_renderers)r)   rK   rA  r   visitr   r"   r"   r#   
visit_math`  s    zHTMLTranslator.visit_mathc             C   s.   | j j}| j jjj| \}}|r*|| | d S )N)r&   rB  rC  rD  rE  )r)   rK   rA  r   r   departr"   r"   r#   depart_mathe  s    zHTMLTranslator.depart_mathc             C   s*   | j j}| j jjj| \}}|| | d S )N)r&   rB  rC  rD  html_block_math_renderers)r)   rK   rA  r   rF  r   r"   r"   r#   visit_math_blockk  s    zHTMLTranslator.visit_math_blockc             C   s.   | j j}| j jjj| \}}|r*|| | d S )N)r&   rB  rC  rD  rJ  )r)   rK   rA  r   r   rH  r"   r"   r#   depart_math_blockp  s    z HTMLTranslator.depart_math_blockc             C   s   t jdtdd | jd S )Nz"_fieldlist_row_index is deprecatedr1   )
stacklevelr   )warningswarnr   rI   )r)   r"   r"   r#   _fieldlist_row_indexv  s    
z#HTMLTranslator._fieldlist_row_indexc             C   s   t jdtdd | jd S )Nz_table_row_index is deprecatedr1   )rM  r   )rN  rO  r   rH   )r)   r"   r"   r#   _table_row_index|  s    
zHTMLTranslator._table_row_index)r0   )N)r0   )r0   )r0   )r0   )r<   r=   r>   __doc____annotations__r   r2   r   r(   r   rN   rP   rR   rS   rV   rY   rZ   r\   r^   r_   ra   rb   rd   re   rf   rg   rh   ri   rj   rk   rr   rs   rv   rw   rx   ry   r|   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rX   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	   boolr   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/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r;  r<  r=  r>  r?  r@  rG  rI  rK  rL  rz   rP  rQ  r?   r"   r"   )r*   r#   r   G   s  

		
	
+	r   )0rR  r  r   r   Zurllib.parser   rN  typingr   r   r   r   r   Zdocutilsr   Zdocutils.nodesr   r	   r
   Zdocutils.writers.html4css1r   ZBaseTranslatorr   Zsphinxr   Zsphinx.buildersr   Zsphinx.deprecationr   Zsphinx.localer   r   r   Zsphinx.utilr   Zsphinx.util.docutilsr   Zsphinx.util.imagesr   Zsphinx.builders.htmlr   Z	getLoggerr<   r   r   r   r$   r%   r"   r"   r"   r#   <module>   s.   
