B
    öÀ„\š†  ã               @   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 ddlm	Z	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 e e¡ZG dd„ de	ƒZG dd„ deƒZ
dS )zØ
    sphinx.writers.html
    ~~~~~~~~~~~~~~~~~~~

    docutils writers handling Sphinx' custom nodes.

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
é    N)Únodes)ÚWriterÚHTMLTranslator)Ústring_types)Úaddnodes)ÚRemovedInSphinx30Warning)ÚadmonitionlabelsÚ_Ú__)Úlogging)Úget_image_sizec               @   sR   e Zd Ze ej¡Zx(ed D ]Zded krded d< qW dd„ Zdd	„ Z	d
S )Ú
HTMLWriteré   z--embed-stylesheeté   r   Údefaultc             C   s   t  | ¡ || _d S )N)r   Ú__init__Úbuilder)Úselfr   © r   ú2lib/python3.7/site-packages/sphinx/writers/html.pyr   0   s    
zHTMLWriter.__init__c             C   sj   | j  | j | j¡ | _}| j |¡ | ¡ | _x dD ]}t| |t||d ƒƒ q4W d 	|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   )r   Zcreate_translatorZdocumentÚvisitorÚ	walkaboutÚastextÚoutputÚsetattrÚgetattrÚjoinr   Z
clean_meta)r   r   Úattrr   r   r   Ú	translate5   s    


zHTMLWriter.translateN)
Ú__name__Ú
__module__Ú__qualname__ÚcopyÚdeepcopyr   Zsettings_specZ_settingr   r$   r   r   r   r   r   (   s   r   c               @   sâ  e Zd Z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d$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Z d<d=„ Z!d>d?„ Z"d@dA„ Z#dBdC„ Z$dòdEdF„Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOdP„ Z*dQdR„ Z+dSdT„ Z,dUdV„ Z-dWdX„ Z.dYdZ„ Z/d[d\„ Z0d]d^„ Z1d_d`„ Z2dadb„ Z3dcdd„ Z4dedf„ Z5dgdh„ Z6didj„ Z7dkdl„ Z8dmdn„ Z9dodp„ Z:dqdr„ Z;dsdt„ Z<dudv„ Z=dwdx„ Z>dydz„ Z?d{d|„ Z@d}d~„ ZAdd€„ ZBdd‚„ ZCdƒd„„ ZDd…d†„ ZEd‡dˆ„ ZFd‰dŠ„ ZGd‹dŒ„ ZHddŽ„ ZIdd„ ZJd‘d’„ ZKd“d”„ ZLd•d–„ ZMd—d˜„ ZNd™dš„ ZOd›dœ„ ZPddž„ ZQdŸd „ ZRd¡d¢„ ZSd£d¤„ ZTd¥d¦„ ZUd§d¨„ ZVd©dª„ ZWd«d¬„ ZXd­d®„ ZYd¯d°„ ZZd±d²„ Z[d³d´„ Z\dµd¶„ Z]d·d¸„ Z^d¹dº„ Z_d»d¼„ Z`d½d¾„ Zad¿dÀ„ ZbdÁdÂ„ ZcdÃdÄ„ ZddÅdÆ„ ZedÇdÈ„ ZfdÉdÊ„ ZgdËdÌ„ ZhdÍdÎ„ ZidÏdÐ„ ZjdÑdÒ„ ZkdÓdÔ„ ZldÕdÖ„ Zmd×dØ„ ZndÙdÚ„ ZodÛdÜ„ ZpdÝdÞ„ Zqdódßdà„Zrdôdádâ„Zsdõdãdä„Ztdödådæ„Zudçdè„ Zvewdédê„ ƒZxewdëdì„ ƒZyewdídî„ ƒZzewdïdð„ ƒZ{dñS )÷r   z%
    Our custom HTML translator.
    c             O   sš   t j| f|ž|Ž |j| _|| _|jg| _|jj| _d| _|jj	| _
t| j
tƒs`| j
rZdp\d| _
|  | j
¡| _
|jj| _d| _d| _d| _d| _d| _d S )Nr   õ   Â¶r   )ÚBaseTranslatorr   Úhighlighterr   Úcurrent_docnameÚdocnamesÚconfigÚmanpages_urlÚprotect_literal_textZhtml_add_permalinksÚpermalink_textÚ
isinstancer   ÚencodeZhtml_secnumber_suffixÚsecnumber_suffixÚparam_separatorÚoptional_param_levelÚ_table_row_indexÚ_fieldlist_row_indexÚrequired_params_left)r   r   ÚargsÚkwdsr   r   r   r   J   s     



zHTMLTranslator.__init__c             C   s(   | j  |d ¡ | j d|d  ¡ d S )NÚdocnamez<span id="document-%s"></span>)r.   Úappendr   )r   Únoder   r   r   Úvisit_start_of_file^   s    z"HTMLTranslator.visit_start_of_filec             C   s   | j  ¡  d S )N)r.   Úpop)r   r?   r   r   r   Údepart_start_of_filed   s    z#HTMLTranslator.depart_start_of_filec             C   s    | j  | j|d|d d¡ d S )NZdlÚobjtype)ÚCLASS)r   r>   Ústarttag)r   r?   r   r   r   Ú
visit_desch   s    zHTMLTranslator.visit_descc             C   s   | j  d¡ d S )Nz</dl>

)r   r>   )r   r?   r   r   r   Údepart_descl   s    zHTMLTranslator.depart_descc             C   sN   | j  |  |d¡¡ |jd dkrJ|d rJ|d rJ| j  d|d d  ¡ d S )NZdtrC   ZdescribeÚidsÚfirstz<!--[%s]-->r   )r   r>   rE   Úparent)r   r?   r   r   r   Úvisit_desc_signaturep   s    z#HTMLTranslator.visit_desc_signaturec             C   s*   |  d¡s|  |tdƒ¡ | j d¡ d S )NZis_multilinezPermalink to this definitionz</dt>
)ÚgetÚadd_permalink_refr	   r   r>   )r   r?   r   r   r   Údepart_desc_signaturey   s    
z$HTMLTranslator.depart_desc_signaturec             C   s   d S )Nr   )r   r?   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 />)rL   rM   rJ   r	   r   r>   )r   r?   r   r   r   Údepart_desc_signature_lineƒ   s    
z)HTMLTranslator.depart_desc_signature_linec             C   s   | j  | j|dddd¡ d S )NÚcoder   Zdescclassname)rD   )r   r>   rE   )r   r?   r   r   r   Úvisit_desc_addnameŠ   s    z!HTMLTranslator.visit_desc_addnamec             C   s   | j  d¡ d S )Nz</code>)r   r>   )r   r?   r   r   r   Údepart_desc_addnameŽ   s    z"HTMLTranslator.depart_desc_addnamec             C   s   d S )Nr   )r   r?   r   r   r   Úvisit_desc_type’   s    zHTMLTranslator.visit_desc_typec             C   s   d S )Nr   )r   r?   r   r   r   Údepart_desc_type–   s    zHTMLTranslator.depart_desc_typec             C   s   | j  d¡ d S )Nz
 &#x2192; )r   r>   )r   r?   r   r   r   Úvisit_desc_returnsš   s    z!HTMLTranslator.visit_desc_returnsc             C   s   d S )Nr   )r   r?   r   r   r   Údepart_desc_returnsž   s    z"HTMLTranslator.depart_desc_returnsc             C   s   | j  | j|dddd¡ d S )NrQ   r   Zdescname)rD   )r   r>   rE   )r   r?   r   r   r   Úvisit_desc_name¢   s    zHTMLTranslator.visit_desc_namec             C   s   | j  d¡ d S )Nz</code>)r   r>   )r   r?   r   r   r   Údepart_desc_name¦   s    zHTMLTranslator.depart_desc_namec             C   s:   | j  d¡ d| _d| _tdd„ |jD ƒƒ| _|j| _d S )Nz <span class="sig-paren">(</span>r   r   c             S   s   g | ]}t |tjƒ‘qS r   )r3   r   Zdesc_parameter)Ú.0Úcr   r   r   ú
<listcomp>°   s   z;HTMLTranslator.visit_desc_parameterlist.<locals>.<listcomp>)	r   r>   Úfirst_paramr7   ÚsumZchildrenr:   Zchild_text_separatorr6   )r   r?   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   r>   )r   r?   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   r   Únoemphz<em>)r]   r:   r   r>   r6   r7   Úhasattr)r   r?   r   r   r   Úvisit_desc_parameter¾   s    

z#HTMLTranslator.visit_desc_parameterc             C   s.   |  d¡s| j d¡ | jr*| j | j¡ d S )Nra   z</em>)rb   r   r>   r:   r6   )r   r?   r   r   r   Údepart_desc_parameterÉ   s    
z$HTMLTranslator.depart_desc_parameterc             C   s   |  j d7  _ | j d¡ d S )Nr   z<span class="optional">[</span>)r7   r   r>   )r   r?   r   r   r   Úvisit_desc_optionalÐ   s    z"HTMLTranslator.visit_desc_optionalc             C   s   |  j d8  _ | j d¡ d S )Nr   z<span class="optional">]</span>)r7   r   r>   )r   r?   r   r   r   Údepart_desc_optionalÕ   s    z#HTMLTranslator.depart_desc_optionalc             C   s   | j  | j|dddd¡ d S )NZemr   Úproperty)rD   )r   r>   rE   )r   r?   r   r   r   Úvisit_desc_annotationÚ   s    z$HTMLTranslator.visit_desc_annotationc             C   s   | j  d¡ d S )Nz</em>)r   r>   )r   r?   r   r   r   Údepart_desc_annotationÞ   s    z%HTMLTranslator.depart_desc_annotationc             C   s   | j  |  |dd¡¡ d S )NZddr   )r   r>   rE   )r   r?   r   r   r   Úvisit_desc_contentâ   s    z!HTMLTranslator.visit_desc_contentc             C   s   | j  d¡ d S )Nz</dd>)r   r>   )r   r?   r   r   r   Údepart_desc_contentæ   s    z"HTMLTranslator.depart_desc_contentc             C   s    | j  | j|d|d d¡ d S )NÚdivÚtype)rD   )r   r>   rE   )r   r?   r   r   r   Úvisit_versionmodifiedê   s    z$HTMLTranslator.visit_versionmodifiedc             C   s   | j  d¡ d S )Nz</div>
)r   r>   )r   r?   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s”tdƒ‚d|d  |d< t|jt	j
ƒsât|ƒd
krÎt|d t	jƒsÒt‚|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:r   Zrefidz3References must have "refuri" or "refid" attribute.r   z image-referenceZreftitler   ÚtargetÚar   Ú	secnumberz%sÚ.)rL   ÚsettingsÚcloak_email_addressesÚ
startswithZcloak_mailtoÚ	in_mailtoÚAssertionErrorr3   rJ   r   ZTextElementÚlenÚimager   r>   rE   r5   r"   ÚmapÚstr)r   r?   Úattsr   r   r   Úvisit_referenceó   s0    
 
zHTMLTranslator.visit_referencec             C   s   |   |¡ d S )N)r‚   )r   r?   r   r   r   Úvisit_number_reference  s    z%HTMLTranslator.visit_number_referencec             C   s   |   |¡ d S )N)Údepart_reference)r   r?   r   r   r   Údepart_number_reference  s    z&HTMLTranslator.depart_number_referencec             C   s
   t j‚d S )N)r   ÚSkipNode)r   r?   r   r   r   Úvisit_comment  s    zHTMLTranslator.visit_commentr   c             C   sF   | j  | j|dd| d¡ |r8| dt |t| ¡¡ |  |¡ d S )Nrl   zadmonition )rD   r   )r   r>   rE   Úinsertr   r   r   Zset_first_last)r   r?   Únamer   r   r   Úvisit_admonition  s
    
zHTMLTranslator.visit_admonitionc             C   s   |   |d¡ d S )NZseealso)rŠ   )r   r?   r   r   r   Úvisit_seealso'  s    zHTMLTranslator.visit_seealsoc             C   s   |   |¡ d S )N)Údepart_admonition)r   r?   r   r   r   Údepart_seealso+  s    zHTMLTranslator.depart_seealsoc             C   sÜ   |  d¡r.| j d tt|d ƒ¡| j ¡ nªt|jt	j
ƒrØ| jjdkr~| jd }d||jd d f }|| jjkr d| }n"d	|jd d  }|| jjkr d
}| jj  |¡rØ| jj| }| j d tt|ƒ¡| j ¡ d S )Nrv   rw   Ú
singlehtmléÿÿÿÿz%s/#%srH   r   z%s/rr   r   )rL   r   r>   r"   r   r€   r5   r3   rJ   r   Zsectionr   r‰   r.   Z
secnumbers)r   r?   r=   Z
anchornameÚnumbersr   r   r   Úadd_secnumber/  s     


zHTMLTranslator.add_secnumberc                sh   ‡ fdd„}ˆ j jjd  |¡}|rdt|d ƒdkrRtdƒ|j }tj||d n|||d d ƒ d S )Nc                s´   ˆ j jdkr dˆ jd | f }n| }|ˆ j j |i ¡kr°ˆ j d¡ ˆ j jj | ¡}|d krtt	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 %srw   ú z</span>)r   r‰   r.   Z
fignumbersrL   r   r>   r/   Znumfig_formatr
   ÚloggerÚwarningr"   r   r€   )ÚfigtypeZ	figure_idÚkeyÚprefixÚmsgr   )r   r   r   Úappend_fignumberE  s     z6HTMLTranslator.add_fignumber.<locals>.append_fignumberZstdrH   r   z Any IDs not assigned for %s node)Úlocation)	r   ÚenvZdomainsZget_enumerable_node_typer}   r
   Útagnamer“   r”   )r   r?   r™   r•   r˜   r   )r   r   Úadd_fignumberC  s    zHTMLTranslator.add_fignumberc             C   s>   |d r:| j r:| jjr:d}| j ||d d || j f ¡ d S )NrH   z2<a class="headerlink" href="#%s" title="%s">%s</a>r   )r2   r   Úadd_permalinksr   r>   )r   r?   r   Úformatr   r   r   rM   _  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.
        rH   r   Nz<span id="%s"></span>)r   r>   Úremove)r   r?   Úidr   r   r   Úgenerate_targets_for_listinge  s    z+HTMLTranslator.generate_targets_for_listingc             C   s:   t |ƒdkr |d jdkr tj‚|  |¡ t | |¡ d S )Nr   r   Útoctree)r}   rœ   r   r†   r¢   r+   Úvisit_bullet_list)r   r?   r   r   r   r¤   u  s    
z HTMLTranslator.visit_bullet_listc             C   s   |   |¡ t | |¡ d S )N)r¢   r+   Úvisit_enumerated_list)r   r?   r   r   r   r¥   ~  s    
z$HTMLTranslator.visit_enumerated_listc             C   s@   t  | |¡ |  |¡ |  |j¡ t|jtjƒr<| j 	d¡ d S )Nz<span class="caption-text">)
r+   Úvisit_titler‘   r   rJ   r3   r   Útabler   r>   )r   r?   r   r   r   r¦   „  s
    
zHTMLTranslator.visit_titlec             C   sÜ   | j d }| jr²| jjr²|j d¡r²|jd r²| d¡rL|  |jtdƒ¡ qÌ| d¡r„| j	 
d|jd d  dtdƒ| jf  ¡ qÌt|jtjƒrÌ| j	 
d	¡ |  |jtd
ƒ¡ nt|jtjƒrÌ| j	 
d	¡ t | |¡ d S )Nr   rH   z</hzPermalink to this headlinez</a></hz%</a><a class="headerlink" href="#%s" r   ztitle="%s">%sz</span>zPermalink to this table)Úcontextr2   r   rž   rJ   rb   rz   rM   r	   r   r>   r3   r   r§   r+   Údepart_title)r   r?   Z	close_tagr   r   r   r©   Œ  s"    


zHTMLTranslator.depart_titlec             C   sÊ   |j | ¡ krt | |¡S | dd¡}| dd¡}| di ¡}| dd¡|d< || jjjkrh| jjj}ni }| j	j
|j |f||| jj|jfdœ|—Ž}| j|d	d
d| d}| j || d ¡ tj‚d S )NZlanguager   ÚlinenosFÚhighlight_argsZforce_highlightingZforce)Úoptsrª   rš   rl   r   zhighlight-%s notranslate)ÚsuffixrD   z</div>
)Z	rawsourcer   r+   Úvisit_literal_blockrL   r   r/   Úhighlight_languageÚhighlight_optionsr,   Zhighlight_blockr-   ÚlinerE   r   r>   r   r†   )r   r?   Zlangrª   r«   r¬   ZhighlightedrE   r   r   r   r®   £  s     
z"HTMLTranslator.visit_literal_blockc             C   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">Úspanr   zcaption-text)rD   )r3   rJ   r   Ú	containerrL   r   r>   r+   Úvisit_captionr   rE   )r   r?   r   r   r   rµ   ¼  s
    zHTMLTranslator.visit_captionc             C   sÒ   | j  d¡ t|jtjƒr:|j d¡r:|  |jtdƒ¡ n`t|jtj	ƒrz|j 
tj¡}|rb|d pf|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 coder   zPermalink to this imager£   zPermalink to this toctreez</div>
)r   r>   r3   rJ   r   r´   rL   rM   r	   ZfigureZtraverser~   r+   Údepart_caption)r   r?   Zimage_nodesZtarget_noder   r   r   r¶   Å  s    zHTMLTranslator.depart_captionc             C   s   |   |¡ d S )N)r®   )r   r?   r   r   r   Úvisit_doctest_blockØ  s    z"HTMLTranslator.visit_doctest_blockc             C   s   | j  |  |d¡d ¡ d S )NZ
blockquotez<div>)r   r>   rE   )r   r?   r   r   r   Úvisit_block_quoteÝ  s    z HTMLTranslator.visit_block_quotec             C   s   | j  d¡ d S )Nz</div></blockquote>
)r   r>   )r   r?   r   r   r   Údepart_block_quoteá  s    z!HTMLTranslator.depart_block_quotec             C   sT   d|d kr(| j  | j|dddd¡ n(| j  | j|dddd¡ |  jd7  _d S )NÚkbdÚclassesr   zdocutils literal notranslate)rD   rQ   r   )r   r>   rE   r1   )r   r?   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>r   z</code>)r   r>   r1   )r   r?   r   r   r   Údepart_literalð  s    zHTMLTranslator.depart_literalc             C   sâ   | j  |  |d¡¡ g }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
¡ qPW | j  d¡ tj‚d S )NZpreZ	tokennamec             s   s   | ]}t |ƒV  qd S )N)r}   )rZ   r‰   r   r   r   ú	<genexpr>þ  s    z6HTMLTranslator.visit_productionlist.<locals>.<genexpr>Zstrongr   z</strong> ::= z%s     r’   Ú
z</pre>
)	r   r>   rE   ÚmaxÚljustr}   r   r   r†   )r   r?   ÚnamesZ
productionÚmaxlenZlastnamer   r   r   Úvisit_productionlistø  s"    


z#HTMLTranslator.visit_productionlistc             C   s   d S )Nr   )r   r?   r   r   r   Údepart_productionlist  s    z$HTMLTranslator.depart_productionlistc             C   s   d S )Nr   )r   r?   r   r   r   Úvisit_production  s    zHTMLTranslator.visit_productionc             C   s   d S )Nr   )r   r?   r   r   r   Údepart_production  s    z HTMLTranslator.depart_productionc             C   s    | j  | j|dddd ¡ d S )NÚpZcentered)rD   z<strong>)r   r>   rE   )r   r?   r   r   r   Úvisit_centered  s    zHTMLTranslator.visit_centeredc             C   s   | j  d¡ d S )Nz</strong></p>)r   r>   )r   r?   r   r   r   Údepart_centered  s    zHTMLTranslator.depart_centeredc             C   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)r3   rJ   r   Zdesc_contentZversionmodifiedr+   Úshould_be_compact_paragraph)r   r?   r   r   r   rË   "  s
    z*HTMLTranslator.should_be_compact_paragraphc             C   s   d S )Nr   )r   r?   r   r   r   Úvisit_compact_paragraph-  s    z&HTMLTranslator.visit_compact_paragraphc             C   s   d S )Nr   )r   r?   r   r   r   Údepart_compact_paragraph1  s    z'HTMLTranslator.depart_compact_paragraphc             C   sÔ   dddœ}| j js | j d¡ n°d|krl|d  d7  < |d |d< | j | j|ddf|Ž¡ | j d	¡ ndd
|krÄ|d  d7  < t | j j|d
 ¡|d< | j | j|ddf|Ž¡ | j d	¡ n| j d¡ d S )Nzreference downloadr   )rp   Zdownloadrq   rp   z	 externalrs   ru   z</a>Úfilenamez	 internal)	r   Zdownload_supportr¨   r>   r   rE   Ú	posixpathr"   Zdlpath)r   r?   r   r   r   r   Úvisit_download_reference5  s    z'HTMLTranslator.visit_download_referencec             C   s   | j  | j ¡ ¡ d S )N)r   r>   r¨   rA   )r   r?   r   r   r   Údepart_download_referenceI  s    z(HTMLTranslator.depart_download_referencec             C   sv  |d }|| j jkr0t | j j| j j| ¡|d< |d }| ¡  d¡râd|i}d|krb|d |d< d|krv|d |d< | d|¡|d< d|kr¸| j 	d|d |d f ¡ | j
 	d	¡ n| j
 	d
¡ | j 	| j|dd
f|Ž¡ d S d|krfd|krþd|ksfttj | j j|¡ƒ}|d kr2tjtdƒ|d n4d|krLt|d ƒ|d< d|krft|d ƒ|d< t | |¡ d S )NÚuri)ÚsvgÚsvgzÚsrcÚwidthZheightZaltZalignz!<div align="%s" class="align-%s">z</div>
r   ZimgZscalez7Could not obtain image size. :scale: option is ignored.)rš   r   r   )r   ZimagesrÏ   r"   ZimgpathÚlowerÚendswithrL   r   r>   r¨   Zemptytagr   ÚosÚpathZsrcdirr“   r”   r
   r€   r+   Úvisit_image)r   r?   ZoldurirÒ   r   Úsizer   r   r   rÛ   N  s<    






zHTMLTranslator.visit_imagec             C   s6   |d   ¡  d¡r&| j | j ¡ ¡ nt | |¡ d S )NrÒ   )rÓ   rÔ   )r×   rØ   r   r>   r¨   rA   r+   Údepart_image)r   r?   r   r   r   rÝ   x  s    zHTMLTranslator.depart_imagec             C   s
   t j‚d S )N)r   r†   )r   r?   r   r   r   Úvisit_toctree  s    zHTMLTranslator.visit_toctreec             C   s
   t j‚d S )N)r   r†   )r   r?   r   r   r   Úvisit_index…  s    zHTMLTranslator.visit_indexc             C   s
   t j‚d S )N)r   r†   )r   r?   r   r   r   Úvisit_tabular_col_spec‰  s    z%HTMLTranslator.visit_tabular_col_specc             C   s   d S )Nr   )r   r?   r   r   r   Úvisit_glossary  s    zHTMLTranslator.visit_glossaryc             C   s   d S )Nr   )r   r?   r   r   r   Údepart_glossary‘  s    zHTMLTranslator.depart_glossaryc             C   s   d S )Nr   )r   r?   r   r   r   Ú
visit_acks•  s    zHTMLTranslator.visit_acksc             C   s   d S )Nr   )r   r?   r   r   r   Údepart_acks™  s    zHTMLTranslator.depart_acksc             C   s   | j  d¡ d S )Nz<table class="hlist"><tr>)r   r>   )r   r?   r   r   r   Úvisit_hlist  s    zHTMLTranslator.visit_hlistc             C   s   | j  d¡ d S )Nz</tr></table>
)r   r>   )r   r?   r   r   r   Údepart_hlist¡  s    zHTMLTranslator.depart_hlistc             C   s   | j  d¡ d S )Nz<td>)r   r>   )r   r?   r   r   r   Úvisit_hlistcol¥  s    zHTMLTranslator.visit_hlistcolc             C   s   | j  d¡ d S )Nz</td>)r   r>   )r   r?   r   r   r   Údepart_hlistcol©  s    zHTMLTranslator.depart_hlistcolc             C   s(   t  | |¡ | jd  dd¡| jd< d S )Néþÿÿÿz&nbsp;z&#160;)r+   Úvisit_option_groupr¨   Úreplace)r   r?   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;r   r’   )r   r4   r1   Zwords_and_spacesÚfindallÚstripr   r>   r}   r{   rx   ry   Zcloak_email)r   r?   ÚtextZencodedÚtokenr   r   r   Ú
visit_Text³  s    
"
zHTMLTranslator.visit_Textc             C   s   |   |d¡ d S )NZnote)rŠ   )r   r?   r   r   r   Ú
visit_noteÉ  s    zHTMLTranslator.visit_notec             C   s   |   |¡ d S )N)rŒ   )r   r?   r   r   r   Údepart_noteÍ  s    zHTMLTranslator.depart_notec             C   s   |   |d¡ d S )Nr”   )rŠ   )r   r?   r   r   r   Úvisit_warningÑ  s    zHTMLTranslator.visit_warningc             C   s   |   |¡ d S )N)rŒ   )r   r?   r   r   r   Údepart_warningÕ  s    zHTMLTranslator.depart_warningc             C   s   |   |d¡ d S )NZ	attention)rŠ   )r   r?   r   r   r   Úvisit_attentionÙ  s    zHTMLTranslator.visit_attentionc             C   s   |   |¡ d S )N)rŒ   )r   r?   r   r   r   Údepart_attentionÝ  s    zHTMLTranslator.depart_attentionc             C   s   |   |d¡ d S )NZcaution)rŠ   )r   r?   r   r   r   Úvisit_cautioná  s    zHTMLTranslator.visit_cautionc             C   s   |   |¡ d S )N)rŒ   )r   r?   r   r   r   Údepart_cautionå  s    zHTMLTranslator.depart_cautionc             C   s   |   |d¡ d S )NZdanger)rŠ   )r   r?   r   r   r   Úvisit_dangeré  s    zHTMLTranslator.visit_dangerc             C   s   |   |¡ d S )N)rŒ   )r   r?   r   r   r   Údepart_dangerí  s    zHTMLTranslator.depart_dangerc             C   s   |   |d¡ d S )NÚerror)rŠ   )r   r?   r   r   r   Úvisit_errorñ  s    zHTMLTranslator.visit_errorc             C   s   |   |¡ d S )N)rŒ   )r   r?   r   r   r   Údepart_errorõ  s    zHTMLTranslator.depart_errorc             C   s   |   |d¡ d S )NZhint)rŠ   )r   r?   r   r   r   Ú
visit_hintù  s    zHTMLTranslator.visit_hintc             C   s   |   |¡ d S )N)rŒ   )r   r?   r   r   r   Údepart_hintý  s    zHTMLTranslator.depart_hintc             C   s   |   |d¡ d S )NZ	important)rŠ   )r   r?   r   r   r   Úvisit_important  s    zHTMLTranslator.visit_importantc             C   s   |   |¡ d S )N)rŒ   )r   r?   r   r   r   Údepart_important  s    zHTMLTranslator.depart_importantc             C   s   |   |d¡ d S )NZtip)rŠ   )r   r?   r   r   r   Ú	visit_tip	  s    zHTMLTranslator.visit_tipc             C   s   |   |¡ d S )N)rŒ   )r   r?   r   r   r   Ú
depart_tip  s    zHTMLTranslator.depart_tipc             C   s
   |   |¡S )N)Zvisit_emphasis)r   r?   r   r   r   Úvisit_literal_emphasis  s    z%HTMLTranslator.visit_literal_emphasisc             C   s
   |   |¡S )N)Zdepart_emphasis)r   r?   r   r   r   Údepart_literal_emphasis  s    z&HTMLTranslator.depart_literal_emphasisc             C   s
   |   |¡S )N)Zvisit_strong)r   r?   r   r   r   Úvisit_literal_strong  s    z#HTMLTranslator.visit_literal_strongc             C   s
   |   |¡S )N)Zdepart_strong)r   r?   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abbrr   )rb   r   r>   rE   )r   r?   Zattrsr   r   r   Úvisit_abbreviation!  s    
z!HTMLTranslator.visit_abbreviationc             C   s   | j  d¡ d S )Nz</abbr>)r   r>   )r   r?   r   r   r   Údepart_abbreviation(  s    z"HTMLTranslator.depart_abbreviationc             C   s2   |   |¡ | jr.| jjf |jŽ|d< |  |¡ d S )Nrq   )r  r0   rŸ   Z
attributesr‚   )r   r?   r   r   r   Úvisit_manpage,  s    
zHTMLTranslator.visit_manpagec             C   s   | j r|  |¡ |  |¡ d S )N)r0   r„   r  )r   r?   r   r   r   Údepart_manpage3  s    
zHTMLTranslator.depart_manpagec             C   s   d| _ t | |¡S )Nr   )r8   r+   Úvisit_table)r   r?   r   r   r   r  ;  s    zHTMLTranslator.visit_tablec             C   sZ   |  j d7  _ | j d dkr,|d  d¡ n|d  d¡ | j |  |dd¡¡ d|_d S )	Nr   r   r   r»   zrow-evenzrow-oddÚtrr   )r8   r>   r   rE   Úcolumn)r   r?   r   r   r   Ú	visit_row@  s    zHTMLTranslator.visit_rowc             C   s(   t  | |¡ | jd dkr$d| jd< d S )Nr   z&nbsp;z&#160;)r+   Úvisit_entryr   )r   r?   r   r   r   r  J  s    zHTMLTranslator.visit_entryc             C   s   d| _ t | |¡S )Nr   )r9   r+   Úvisit_field_list)r   r?   r   r   r   r  P  s    zHTMLTranslator.visit_field_listc             C   sX   |  j d7  _ | j d dkr,|d  d¡ n|d  d¡ | j | j|ddd	d
¡ d S )Nr   r   r   r»   z
field-evenz	field-oddr  r   Zfield)rD   )r9   r>   r   rE   )r   r?   r   r   r   Úvisit_fieldU  s
    zHTMLTranslator.visit_fieldc             C   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   r?   Zcontext_countr   r   r   r  ^  s    
zHTMLTranslator.visit_field_namec             C   s*   | j j}| j jjj| \}}|| |ƒ d S )N)r   Úmath_renderer_nameÚappÚregistryÚhtml_inline_math_renderers)r   r?   Úmath_envr‰   Úvisitr	   r   r   r   Ú
visit_mathe  s    zHTMLTranslator.visit_mathc             C   s.   | j j}| j jjj| \}}|r*|| |ƒ d S )N)r   r  r  r  r  )r   r?   r  r‰   r	   Údepartr   r   r   Údepart_mathk  s    zHTMLTranslator.depart_mathc             C   s*   | j j}| j jjj| \}}|| |ƒ d S )N)r   r  r  r  Úhtml_block_math_renderers)r   r?   r  r‰   r  r	   r   r   r   Úvisit_math_blockr  s    zHTMLTranslator.visit_math_blockc             C   s.   | j j}| j jjj| \}}|r*|| |ƒ d S )N)r   r  r  r  r  )r   r?   r  r‰   r	   r  r   r   r   Údepart_math_blockx  s    z HTMLTranslator.depart_math_blockc             C   s   t d|jj ƒ‚d S )NzUnknown node: )ÚNotImplementedErrorÚ	__class__r%   )r   r?   r   r   r   Úunknown_visit  s    zHTMLTranslator.unknown_visitc             C   s   t jdtdd | jjjS )Nz+HTMLTranslator.highlightlang is deprecated.r   )Ú
stacklevel)ÚwarningsÚwarnr   r   r/   r¯   )r   r   r   r   Úhighlightlang…  s    
zHTMLTranslator.highlightlangc             C   s   t  dt¡ | jjjS )Nz0HTMLTranslator.highlightlang_base is deprecated.)r$  r%  r   r   r/   r¯   )r   r   r   r   Úhighlightlang_baseŒ  s    z!HTMLTranslator.highlightlang_basec             C   s   t jdtdd | jjjS )Nz+HTMLTranslator.highlightopts is deprecated.r   )r#  )r$  r%  r   r   r/   r°   )r   r   r   r   Úhighlightopts“  s    
zHTMLTranslator.highlightoptsc             C   s   t jdtdd tjS )Nz6HTMLTranslator.highlightlinenothreshold is deprecated.r   )r#  )r$  r%  r   ÚsysÚmaxsize)r   r   r   r   Úhighlightlinenothresholdš  s    
z'HTMLTranslator.highlightlinenothresholdN)r   )r   )r   )r   )r   )|r%   r&   r'   Ú__doc__r   r@   rB   rF   rG   rK   rN   rO   rP   rR   rS   rT   rU   rV   rW   rX   rY   r_   r`   rc   rd   re   rf   rh   ri   rj   rk   rn   ro   r‚   rƒ   r…   r‡   rŠ   r‹   r   r‘   r   rM   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ô   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"  rg   r&  r'  r(  r+  r   r   r   r   r   E   sð   	


		
*
	



r   )r,  r(   rÙ   rÏ   r)  r$  Zdocutilsr   Zdocutils.writers.html4css1r   r   r+   Zsixr   Zsphinxr   Zsphinx.deprecationr   Zsphinx.localer   r	   r
   Zsphinx.utilr   Zsphinx.util.imagesr   Z	getLoggerr%   r“   r   r   r   r   r   Ú<module>
   s    
