B
    ÿ‹dˆˆ  ã               @   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rìd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ÚamountÚunitÚresult© r#   ú`/work/yifan.wang/ringdown/master-ringdown-env/lib/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_prefixÚ
stylesheetÚheadZbody_prefixZbody_pre_docinfoZdocinfoÚbodyÚfragmentZbody_suffixÚmetaÚtitleÚsubtitleÚheaderÚfooterZhtml_prologZ	html_headZ
html_titleZhtml_subtitleZ	html_bodyÚ é   )r'   Zcreate_translatorÚdocumentr   r   ÚvisitorÚ	walkaboutÚastextÚoutputÚsetattrÚgetattrÚjoinr0   Z
clean_meta)r*   r8   Ú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œdƒd„„ZIe	ddœd…d†„ZJe	ddœd‡dˆ„ZKe	ddœd‰dŠ„ZLe	ddœd‹dŒ„ZMe	ddœddŽ„ZNe	ddœdd„ZOe	ddœd‘d’„ZPeQeRdœ‡ fd“d”„ZSe	ddœd•d–„ZTe	ddœd—d˜„ZUe	ddœd™dš„ZVe	ddœd›dœ„ZWe	ddœ‡ fddž„ZXe	ddœ‡ fdŸd „ZYe	ddœ‡ fd¡d¢„ZZe	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°„Zae	ddœd±d²„Zbe	ddœd³d´„Zce	ddœdµd¶„Zde	ddœd·d¸„Zee	ddœ‡ fd¹dº„Zfegddœd»d¼„Zhe	ddœd½d¾„Zie	ddœd¿dÀ„Zje	ddœdÁdÂ„Zke	ddœdÃdÄ„Zle	ddœdÅdÆ„Zme	ddœdÇdÈ„Zne	ddœdÉdÊ„Zoe	ddœdËdÌ„Zpe	ddœdÍdÎ„Zqe	ddœdÏdÐ„Zre	ddœdÑdÒ„Zse	ddœdÓdÔ„Zte	ddœdÕdÖ„Zue	ddœd×dØ„Zve	ddœdÙdÚ„Zwe	ddœdÛdÜ„Zxe	ddœdÝdÞ„Zye	ddœdßdà„Zze	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î„Ze	ddœdïdð„Z‚e	ddœ‡ fdñdò„Zƒe	ddœ‡ fdódô„Z„e	ddœdõdö„Z…e	ddœ‡ fd÷dø„Z†e	ddœ‡ fdùdú„Z‡e	ddœ‡ fdûdü„Zˆe	ddœdýdþ„Z‰e	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	„ZŽed
d„ ƒZedd„ ƒZ‘‡  Z’S (  r   z%
    Our custom HTML translator.
    r   r'   N)r7   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   r5   )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*   r7   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>)rF   Úappendr.   )r*   rP   r#   r#   r$   Úvisit_start_of_file\   s    z"HTMLTranslator.visit_start_of_filec             C   s   | j  ¡  d S )N)rF   Úpop)r*   rP   r#   r#   r$   Údepart_start_of_filea   s    z#HTMLTranslator.depart_start_of_filec             C   s   | j  |  |d¡¡ d S )NÚdl)r.   rR   Ústarttag)r*   rP   r#   r#   r$   Ú
visit_desck   s    zHTMLTranslator.visit_descc             C   s   | j  d¡ d S )Nz</dl>

)r.   rR   )r*   rP   r#   r#   r$   Údepart_descn   s    zHTMLTranslator.depart_descc             C   s&   | j  |  |d¡¡ |  jd7  _d S )NÚdté   )r.   rR   rW   rI   )r*   rP   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 )Nr[   Zis_multilinezPermalink to this definitionz</dt>
)rI   ÚgetÚadd_permalink_refr   r.   rR   )r*   rP   r#   r#   r$   Údepart_desc_signaturev   s    
z$HTMLTranslator.depart_desc_signaturec             C   s   d S )Nr#   )r*   rP   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 />)r]   r^   Úparentr   r.   rR   )r*   rP   r#   r#   r$   Údepart_desc_signature_line   s    
z)HTMLTranslator.depart_desc_signature_linec             C   s   | j  |  |dd¡¡ d S )NÚddr5   )r.   rR   rW   )r*   rP   r#   r#   r$   Úvisit_desc_content…   s    z!HTMLTranslator.visit_desc_contentc             C   s   | j  d¡ d S )Nz</dd>)r.   rR   )r*   rP   r#   r#   r$   Údepart_desc_contentˆ   s    z"HTMLTranslator.depart_desc_contentc             C   s   | j  |  |dd¡¡ d S )NÚspanr5   )r.   rR   rW   )r*   rP   r#   r#   r$   Úvisit_desc_inline‹   s    z HTMLTranslator.visit_desc_inlinec             C   s   | j  d¡ d S )Nz</span>)r.   rR   )r*   rP   r#   r#   r$   Údepart_desc_inlineŽ   s    z!HTMLTranslator.depart_desc_inlinec             C   s   | j  |  |dd¡¡ d S )NÚcoder5   )r.   rR   rW   )r*   rP   r#   r#   r$   Úvisit_desc_name”   s    zHTMLTranslator.visit_desc_namec             C   s   | j  d¡ d S )Nz</code>)r.   rR   )r*   rP   r#   r#   r$   Údepart_desc_name—   s    zHTMLTranslator.depart_desc_namec             C   s   | j  |  |dd¡¡ d S )Nri   r5   )r.   rR   rW   )r*   rP   r#   r#   r$   Úvisit_desc_addnameš   s    z!HTMLTranslator.visit_desc_addnamec             C   s   | j  d¡ d S )Nz</code>)r.   rR   )r*   rP   r#   r#   r$   Údepart_desc_addname   s    z"HTMLTranslator.depart_desc_addnamec             C   s   d S )Nr#   )r*   rP   r#   r#   r$   Úvisit_desc_type    s    zHTMLTranslator.visit_desc_typec             C   s   d S )Nr#   )r*   rP   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.   rR   )r*   rP   r#   r#   r$   Úvisit_desc_returns¦   s    z!HTMLTranslator.visit_desc_returnsc             C   s   | j  d¡ d S )Nz</span></span>)r.   rR   )r*   rP   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>r[   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.   rR   Úfirst_paramrL   ÚsumÚchildrenrO   Zchild_text_separatorrK   )r*   rP   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.   rR   )r*   rP   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>)rv   rO   r.   rR   rK   rL   Úhasattr)r*   rP   r#   r#   r$   Úvisit_desc_parameterÀ   s    

z#HTMLTranslator.visit_desc_parameterc             C   s.   |  d¡s| j d¡ | jr*| j | j¡ d S )Nr{   z</em>)r|   r.   rR   rO   rK   )r*   rP   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>)rL   r.   rR   )r*   rP   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>)rL   r.   rR   )r*   rP   r#   r#   r$   Údepart_desc_optionalÔ   s    z#HTMLTranslator.depart_desc_optionalc             C   s   | j  | j|dddd¡ d S )NZemr5   Úproperty)ÚCLASS)r.   rR   rW   )r*   rP   r#   r#   r$   Úvisit_desc_annotationØ   s    z$HTMLTranslator.visit_desc_annotationc             C   s   | j  d¡ d S )Nz</em>)r.   rR   )r*   rP   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.   rR   rW   )r*   rP   r#   r#   r$   Úvisit_versionmodifiedà   s    z$HTMLTranslator.visit_versionmodifiedc             C   s   | j  d¡ d S )Nz</div>
)r.   rR   )r*   rP   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ÚclassÚ	referenceZinternalÚrefuriz	 internalz	 externalú#Úhrefzmailto:TZrefidz3References must have "refuri" or "refid" attribute.r[   r   z image-referenceZreftitler1   ÚtargetÚar5   Ú	secnumberz%sÚ.)r]   ÚsettingsÚcloak_email_addressesÚ
startswithZcloak_mailtoÚ	in_mailtoÚAssertionErrorrr   ra   r   ZTextElementÚlenÚimager.   rR   rW   rJ   r>   ÚmapÚstr)r*   rP   Úattsr#   r#   r$   Úvisit_referenceç   s.    
 
zHTMLTranslator.visit_referencec             C   s   |   |¡ d S )N)rœ   )r*   rP   r#   r#   r$   Úvisit_number_reference  s    z%HTMLTranslator.visit_number_referencec             C   s   |   |¡ d S )N)Údepart_reference)r*   rP   r#   r#   r$   Údepart_number_reference  s    z&HTMLTranslator.depart_number_referencec             C   s
   t j‚d S )N)r   ÚSkipNode)r*   rP   r#   r#   r$   Úvisit_comment
  s    zHTMLTranslator.visit_commentr5   )rP   Únamer   c             C   sF   | j  | j|dd| d¡ |r8| dt |t| ¡¡ |  |¡ d S )Nr…   zadmonition )r‚   r   )r.   rR   rW   Úinsertr   r1   r   Zset_first_last)r*   rP   r¢   r#   r#   r$   Úvisit_admonition  s
    
zHTMLTranslator.visit_admonitionc             C   s   | j  d¡ d S )Nz</div>
)r.   rR   )r*   rP   r#   r#   r$   Údepart_admonition  s    z HTMLTranslator.depart_admonitionc             C   s   |   |d¡ d S )NZseealso)r¤   )r*   rP   r#   r#   r$   Úvisit_seealso  s    zHTMLTranslator.visit_seealsoc             C   s   |   |¡ d S )N)r¥   )r*   rP   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r„d| }n"d|jd d  }|| jjkr„d	}| jj  |¡rž| jj| S d S )
Nr   Ú
singlehtmléÿÿÿÿz%s/#%sÚidsr   z%s/rŒ   r5   )	r]   rr   ra   r   Úsectionr'   r¢   rF   Z
secnumbers)r*   rP   rQ   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.   rR   r>   r™   rš   rJ   )r*   rP   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¢   rF   Z
fignumbersr]   r.   rR   rG   Znumfig_formatr   ÚloggerÚwarningr>   r™   rš   )r®   r¯   ÚkeyÚprefixÚmsgÚ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'   ÚenvÚdomainsZget_enumerable_node_typer—   r   Útagnamer±   r²   )r*   rP   r·   r®   rµ   r#   )r*   r$   Úadd_fignumber7  s    zHTMLTranslator.add_fignumber)rP   r1   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   )rG   Úhtml_permalinksr'   Úadd_permalinksr.   rR   Úhtml_permalinks_icon)r*   rP   r1   Úformatr#   r#   r$   r^   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ª   r[   Nz<span id="%s"></span>)r.   rR   Úremove)r*   rP   Ú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 )Nr[   r   )	r—   rr   r   Útoctreer   r    rÃ   r(   Úvisit_bullet_list)r*   rP   )r+   r#   r$   rÅ   f  s    
z HTMLTranslator.visit_bullet_listc                s   |   |¡ tƒ  |¡ d S )N)rÃ   r(   Úvisit_enumerated_list)r*   rP   )r+   r#   r$   rÆ   n  s    
z$HTMLTranslator.visit_enumerated_listc             C   s   | j  |  |dd¡¡ d S )Nrc   r5   )r.   rR   rW   )r*   rP   r#   r#   r$   Úvisit_definitions  s    zHTMLTranslator.visit_definitionc             C   s   | j  d¡ d S )Nz</dd>
)r.   rR   )r*   rP   r#   r#   r$   Údepart_definitionx  s    z HTMLTranslator.depart_definitionc             C   s   | j  | j|dddd¡ d S )Nrf   r5   Ú
classifier)r‚   )r.   rR   rW   )r*   rP   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.   rR   Ú	next_noderr   r   rÉ   )r*   rP   rÍ   r#   r#   r$   Údepart_classifier€  s    z HTMLTranslator.depart_classifierc             C   s   | j  |  |dd¡¡ d S )NrZ   r5   )r.   rR   rW   )r*   rP   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Í   rr   r   rÉ   ra   r   Zglossaryr^   r   r.   rR   )r*   rP   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Ä   Úpr5   ÚcaptionÚheading)r‚   ZROLEz<span class="caption-text">z</span></p>
)rr   ra   r   Zcompact_paragraphr]   r.   rR   rW   Úcontextr(   Úvisit_titler­   r¼   r   Útable)r*   rP   )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  ¡ qÐt|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Ô   rG   r½   r'   r¾   ra   r|   r”   r^   r   r.   rR   r¿   rr   r   rÖ   r(   Údepart_title)r*   rP   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…   r5   zhighlight-%s notranslate)Úsuffixr‚   z</div>
)Z	rawsourcer:   r(   Úvisit_literal_blockr]   rG   Úhighlight_optionsZhtml_codeblock_linenos_stylerE   Úhighlight_blockrW   r.   rR   r   r    )r*   rP   ÚlangrÚ   rÛ   rÝ   ÚhighlightedrW   )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">rf   r5   zcaption-text)r‚   )rr   ra   r   Ú	containerr]   r.   rR   r(   Úvisit_captionr¼   rW   )r*   rP   )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.   rR   rr   ra   r   rå   r]   r^   r   Zfigurer(   Údepart_caption)r*   rP   )r+   r#   r$   rç   Ü  s    zHTMLTranslator.depart_captionc             C   s   |   |¡ d S )N)rß   )r*   rP   r#   r#   r$   Úvisit_doctest_blockì  s    z"HTMLTranslator.visit_doctest_blockc             C   s   | j  |  |d¡d ¡ d S )NZ
blockquotez<div>)r.   rR   rW   )r*   rP   r#   r#   r$   Úvisit_block_quoteð  s    z HTMLTranslator.visit_block_quotec             C   s   | j  d¡ d S )Nz</div></blockquote>
)r.   rR   )r*   rP   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Úclassesr5   zdocutils literal notranslate)r‚   rØ   ri   r[   T)rÝ   r¸   Znowrapz'docutils literal highlight highlight-%s)rÞ   r‚   z</code>)r.   rR   rW   r]   rI   rG   rà   rE   rá   r:   Ústripr   r    )r*   rP   râ   rÝ   rã   rW   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.   rR   rI   )r*   rP   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 )NÚpreZ	tokennamec             s   s   | ]}t |ƒV  qd S )N)r—   )rs   r¢   r#   r#   r$   ú	<genexpr>  s    z6HTMLTranslator.visit_productionlist.<locals>.<genexpr>Ústrongr5   z</strong> ::= z%s     r°   Ú
z</pre>
)r.   rR   rW   r   r   r   Ú
productionÚmaxÚljustr—   r9   r   r    )r*   rP   ÚnamesZproductionlistrô   ÚmaxlenÚlastnamer#   r#   r$   Úvisit_productionlist  s$    


z#HTMLTranslator.visit_productionlistc             C   s   d S )Nr#   )r*   rP   r#   r#   r$   Údepart_productionlist*  s    z$HTMLTranslator.depart_productionlistc             C   s   d S )Nr#   )r*   rP   r#   r#   r$   Úvisit_production-  s    zHTMLTranslator.visit_productionc             C   s   d S )Nr#   )r*   rP   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.   rR   rW   )r*   rP   r#   r#   r$   Úvisit_centered3  s    zHTMLTranslator.visit_centeredc             C   s   | j  d¡ d S )Nz</strong></p>)r.   rR   )r*   rP   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)rr   ra   r   Zdesc_contentZversionmodifiedr(   Úshould_be_compact_paragraph)r*   rP   )r+   r#   r$   r   ;  s
    z*HTMLTranslator.should_be_compact_paragraphc             C   s   d S )Nr#   )r*   rP   r#   r#   r$   Úvisit_compact_paragraphE  s    z&HTMLTranslator.visit_compact_paragraphc             C   s   d S )Nr#   )r*   rP   r#   r#   r$   Údepart_compact_paragraphH  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	¡ 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 downloadr5   )r‰   Údownloadr‹   r‰   z	 externalr   r   z</a>Úfilenamez	 internal)r'   Zdownload_supportrÔ   rR   r.   rW   Ú	posixpathr>   ZdlpathÚurllibÚparseÚquote)r*   rP   r›   r#   r#   r$   Úvisit_download_referenceK  s     
z'HTMLTranslator.visit_download_referencec             C   s   | j  | j ¡ ¡ d S )N)r.   rR   rÔ   rT   )r*   rP   r#   r#   r$   Údepart_download_reference_  s    z(HTMLTranslator.depart_download_referencec                s   |  dd¡ tƒ  |¡S )NÚalignrÙ   )Ú
setdefaultr(   Úvisit_figure)r*   rP   )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r²d|krPd|ks²tt	j
 | j j|¡ƒ}|d kr‚tjtdƒ|d n0d|kršt|d ƒ|d< d|kr²t|d ƒ|d< |d }| ¡  d	¡rŒd
|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   ÚwidthÚheightz7Could not obtain image size. :scale: option is ignored.)r¸   r   r[   )ÚsvgÚsvgzÚsrcZaltr  zalign-%sr‰   Zimgr5   )r'   Zimagesr  r>   Zimgpathr  r  r  r   ÚosÚpathÚsrcdirr±   r²   r   rš   ÚlowerÚendswithr%   r]   r.   rR   Zemptytagr(   Úvisit_image)r*   rP   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*   rP   )r+   r#   r$   r  •  s    zHTMLTranslator.depart_imagec             C   s
   t j‚d S )N)r   r    )r*   rP   r#   r#   r$   Úvisit_toctree›  s    zHTMLTranslator.visit_toctreec             C   s
   t j‚d S )N)r   r    )r*   rP   r#   r#   r$   Úvisit_index   s    zHTMLTranslator.visit_indexc             C   s
   t j‚d S )N)r   r    )r*   rP   r#   r#   r$   Úvisit_tabular_col_spec£  s    z%HTMLTranslator.visit_tabular_col_specc             C   s   d S )Nr#   )r*   rP   r#   r#   r$   Úvisit_glossary¦  s    zHTMLTranslator.visit_glossaryc             C   s   d S )Nr#   )r*   rP   r#   r#   r$   Údepart_glossary©  s    zHTMLTranslator.depart_glossaryc             C   s   d S )Nr#   )r*   rP   r#   r#   r$   Ú
visit_acks¬  s    zHTMLTranslator.visit_acksc             C   s   d S )Nr#   )r*   rP   r#   r#   r$   Údepart_acks¯  s    zHTMLTranslator.depart_acksc             C   s   | j  d¡ d S )Nz<table class="hlist"><tr>)r.   rR   )r*   rP   r#   r#   r$   Úvisit_hlist²  s    zHTMLTranslator.visit_hlistc             C   s   | j  d¡ d S )Nz</tr></table>
)r.   rR   )r*   rP   r#   r#   r$   Údepart_hlistµ  s    zHTMLTranslator.depart_hlistc             C   s   | j  d¡ d S )Nz<td>)r.   rR   )r*   rP   r#   r#   r$   Úvisit_hlistcol¸  s    zHTMLTranslator.visit_hlistcolc             C   s   | j  d¡ d S )Nz</td>)r.   rR   )r*   rP   r#   r#   r$   Údepart_hlistcol»  s    zHTMLTranslator.depart_hlistcolc                s(   t ƒ  |¡ | jd  dd¡| jd< d S )Néþÿÿÿz&nbsp;z&#160;)r(   Úvisit_option_grouprÔ   Úreplace)r*   rP   )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:   ÚencoderI   Zwords_and_spacesÚfindallrí   r.   rR   r—   r•   r’   r“   Zcloak_email)r*   rP   ÚtextÚencodedÚtokenr#   r#   r$   Ú
visit_TextÃ  s    
"
zHTMLTranslator.visit_Textc             C   s   |   |d¡ d S )NZnote)r¤   )r*   rP   r#   r#   r$   Ú
visit_noteØ  s    zHTMLTranslator.visit_notec             C   s   |   |¡ d S )N)r¥   )r*   rP   r#   r#   r$   Údepart_noteÛ  s    zHTMLTranslator.depart_notec             C   s   |   |d¡ d S )Nr²   )r¤   )r*   rP   r#   r#   r$   Úvisit_warningÞ  s    zHTMLTranslator.visit_warningc             C   s   |   |¡ d S )N)r¥   )r*   rP   r#   r#   r$   Údepart_warningá  s    zHTMLTranslator.depart_warningc             C   s   |   |d¡ d S )NZ	attention)r¤   )r*   rP   r#   r#   r$   Úvisit_attentionä  s    zHTMLTranslator.visit_attentionc             C   s   |   |¡ d S )N)r¥   )r*   rP   r#   r#   r$   Údepart_attentionç  s    zHTMLTranslator.depart_attentionc             C   s   |   |d¡ d S )NZcaution)r¤   )r*   rP   r#   r#   r$   Úvisit_cautionê  s    zHTMLTranslator.visit_cautionc             C   s   |   |¡ d S )N)r¥   )r*   rP   r#   r#   r$   Údepart_cautioní  s    zHTMLTranslator.depart_cautionc             C   s   |   |d¡ d S )NZdanger)r¤   )r*   rP   r#   r#   r$   Úvisit_dangerð  s    zHTMLTranslator.visit_dangerc             C   s   |   |¡ d S )N)r¥   )r*   rP   r#   r#   r$   Údepart_dangeró  s    zHTMLTranslator.depart_dangerc             C   s   |   |d¡ d S )NÚerror)r¤   )r*   rP   r#   r#   r$   Úvisit_errorö  s    zHTMLTranslator.visit_errorc             C   s   |   |¡ d S )N)r¥   )r*   rP   r#   r#   r$   Údepart_errorù  s    zHTMLTranslator.depart_errorc             C   s   |   |d¡ d S )NÚhint)r¤   )r*   rP   r#   r#   r$   Ú
visit_hintü  s    zHTMLTranslator.visit_hintc             C   s   |   |¡ d S )N)r¥   )r*   rP   r#   r#   r$   Údepart_hintÿ  s    zHTMLTranslator.depart_hintc             C   s   |   |d¡ d S )NZ	important)r¤   )r*   rP   r#   r#   r$   Úvisit_important  s    zHTMLTranslator.visit_importantc             C   s   |   |¡ d S )N)r¥   )r*   rP   r#   r#   r$   Údepart_important  s    zHTMLTranslator.depart_importantc             C   s   |   |d¡ d S )NZtip)r¤   )r*   rP   r#   r#   r$   Ú	visit_tip  s    zHTMLTranslator.visit_tipc             C   s   |   |¡ d S )N)r¥   )r*   rP   r#   r#   r$   Ú
depart_tip  s    zHTMLTranslator.depart_tipc             C   s
   |   |¡S )N)Zvisit_emphasis)r*   rP   r#   r#   r$   Úvisit_literal_emphasis  s    z%HTMLTranslator.visit_literal_emphasisc             C   s
   |   |¡S )N)Zdepart_emphasis)r*   rP   r#   r#   r$   Údepart_literal_emphasis  s    z&HTMLTranslator.depart_literal_emphasisc             C   s
   |   |¡S )N)Zvisit_strong)r*   rP   r#   r#   r$   Úvisit_literal_strong  s    z#HTMLTranslator.visit_literal_strongc             C   s
   |   |¡S )N)Zdepart_strong)r*   rP   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explanationr1   Zabbrr5   )r|   r.   rR   rW   )r*   rP   Úattrsr#   r#   r$   Úvisit_abbreviation  s    
z!HTMLTranslator.visit_abbreviationc             C   s   | j  d¡ d S )Nz</abbr>)r.   rR   )r*   rP   r#   r#   r$   Údepart_abbreviation   s    z"HTMLTranslator.depart_abbreviationc             C   s2   |   |¡ | jr.| jjf |jŽ|d< |  |¡ d S )Nr‹   )rD  rH   rÀ   Ú
attributesrœ   )r*   rP   r#   r#   r$   Úvisit_manpage#  s    
zHTMLTranslator.visit_manpagec             C   s   | j r|  |¡ |  |¡ d S )N)rH   rž   rE  )r*   rP   r#   r#   r$   Údepart_manpage)  s    
zHTMLTranslator.depart_manpagec                s$   | j  d¡ | dd¡ tƒ  |¡S )Nr   r  rÙ   )rM   rR   r  r(   Úvisit_table)r*   rP   )r+   r#   r$   rN  0  s    zHTMLTranslator.visit_tablec                s   | j  ¡  tƒ  |¡ d S )N)rM   rT   r(   Údepart_table)r*   rP   )r+   r#   r$   rO  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©   r[   r6   r   rì   zrow-evenzrow-oddÚtrr5   )rM   rR   r.   rW   Úcolumn)r*   rP   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*   rP   )r+   r#   r$   rS  E  s    zHTMLTranslator.visit_entryc                s   | j  d¡ tƒ  |¡S )Nr   )rN   rR   r(   Úvisit_field_list)r*   rP   )r+   r#   r$   rT  J  s    zHTMLTranslator.visit_field_listc                s   | j  ¡  tƒ  |¡S )N)rN   rT   r(   Údepart_field_list)r*   rP   )r+   r#   r$   rU  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©   r[   r6   r   rì   z
field-evenz	field-oddrP  r5   Úfield)r‚   )rN   rR   r.   rW   )r*   rP   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*   rP   Zcontext_count)r+   r#   r$   rX  Z  s    
zHTMLTranslator.visit_field_name)rP   Ú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*   rP   rY  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'   rZ  r[  r\  r]  )r*   rP   rY  r¢   r   Údepartr#   r#   r$   Údepart_mathe  s    zHTMLTranslator.depart_mathc             C   s*   | j j}| j jjj| \}}|| |ƒ d S )N)r'   rZ  r[  r\  Úhtml_block_math_renderers)r*   rP   rY  r¢   r^  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'   rZ  r[  r\  rb  )r*   rP   rY  r¢   r   r`  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 deprecatedr6   )Ú
stacklevelr©   )ÚwarningsÚwarnr   rN   )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 deprecatedr6   )re  r©   )rf  rg  r   rM   )r*   r#   r#   r$   Ú_table_row_index|  s    
zHTMLTranslator._table_row_index)r5   )N)r5   )r5   )r5   )r5   )“rA   rB   rC   Ú__doc__Ú__annotations__r   r7   r   r)   r   rS   rU   rX   rY   r\   r_   r`   rb   rd   re   rg   rh   rj   rk   rl   rm   rn   ro   rp   rq   ry   rz   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	   Úboolr   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  r9  r;  r<  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rI  rJ  rL  rM  rN  rO  rR  rS  rT  rU  rW  rX  r_  ra  rc  rd  r   rh  ri  rD   r#   r#   )r+   r$   r   G   s  

		
	
+	r   )0rj  r  r  r   Úurllib.parser  rf  Ú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   Ú	getLoggerrA   r±   rš   r   r%   r&   r#   r#   r#   r$   Ú<module>   s.   
