B
    .ÛKcO  ã               @   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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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$eƒZ/dS )zGExperimental docutils writers for HTML5 handling Sphinx's custom nodes.é    N)ÚTYPE_CHECKINGÚIterableÚOptionalÚSetÚTupleÚcast)Únodes)ÚElementÚNodeÚText)ÚHTMLTranslator)Ú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"   ú3lib/python3.7/site-packages/sphinx/writers/html5.pyÚmultiply_length    s    r$   c                   sn  e Zd ZU dZded< eƒ Zee 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	œd0d1„Z!edd	œd2d3„Z"edd	œd4d5„Z#edd	œd6d7„Z$edd	œd8d9„Z%edd	œd:d;„Z&edd	œd<d=„Z'edd	œd>d?„Z(edd	œd@dA„Z)edd	œdBdC„Z*edd	œdDdE„Z+edd	œdFdG„Z,edd	œdHdI„Z-edd	œdJdK„Z.edd	œdLdM„Z/deeddOœdPdQ„Z0de1e dd	œdRdS„Z2edd	œdTdU„Z3edd	œdVdW„Z4ee1e5e6dXf  d	œdYdZ„Z7edd	œd[d\„Z8edd	œd]d^„Z9eedd_œd`da„Z:edd	œ‡ fdbdc„Z;edd	œddde„Z<edd	œdfdg„Z=edd	œdhdi„Z>edd	œdjdk„Z?edd	œdldm„Z@edd	œdndo„ZAedd	œ‡ fdpdq„ZBedd	œ‡ fdrds„ZCedd	œ‡ fdtdu„ZDedd	œ‡ fdvdw„ZEedd	œ‡ fdxdy„ZFedd	œdzd{„ZGed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	œdd‘„ZRedd	œd’d“„ZSedd	œd”d•„ZTedd	œd–d—„ZUedd	œ‡ fd˜d™„ZVedd	œ‡ fdšd›„ZWedd	œ‡ f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¯„Zaedd	œd°d±„Zbedd	œd²d³„Zceddd	œd´dµ„Zeedd	œd¶d·„Zfedd	œd¸d¹„Zged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	œ‡ f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…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	œdÿd „ZŠe‹e6dœdd„ƒZŒe‹e6dœdd„ƒZ‡  ZŽS (  ÚHTML5Translatorz%
    Our custom HTML translator.
    r   ÚbuilderÚsupported_inline_tagsN)Údocumentr&   r   c                sd   t ƒ  ||¡ | jj| _| jjg| _| jj| _d| _| jj	| _
d| _d| _dg| _dg| _d| _d S )Nr   Ú )ÚsuperÚ__init__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)Úselfr(   r&   )Ú	__class__r"   r#   r+   8   s    


zHTML5Translator.__init__)Únoder   c             C   s(   | j  |d ¡ | j d|d  ¡ d S )NÚdocnamez<span id="document-%s"></span>)r-   ÚappendÚbody)r7   r9   r"   r"   r#   Úvisit_start_of_fileF   s    z#HTML5Translator.visit_start_of_filec             C   s   | j  ¡  d S )N)r-   Úpop)r7   r9   r"   r"   r#   Údepart_start_of_fileK   s    z$HTML5Translator.depart_start_of_filec             C   s   | j  |  |d¡¡ d S )NZdl)r<   r;   Ústarttag)r7   r9   r"   r"   r#   Ú
visit_descU   s    zHTML5Translator.visit_descc             C   s   | j  d¡ d S )Nz</dl>

)r<   r;   )r7   r9   r"   r"   r#   Údepart_descX   s    zHTML5Translator.depart_descc             C   s&   | j  |  |d¡¡ |  jd7  _d S )NÚdté   )r<   r;   r@   r0   )r7   r9   r"   r"   r#   Úvisit_desc_signature[   s    z$HTML5Translator.visit_desc_signaturec             C   s8   |  j d8  _ | d¡s(|  |tdƒ¡ | j d¡ d S )NrD   Zis_multilinezPermalink to this definitionz</dt>
)r0   ÚgetÚadd_permalink_refr   r<   r;   )r7   r9   r"   r"   r#   Údepart_desc_signature`   s    
z%HTML5Translator.depart_desc_signaturec             C   s   d S )Nr"   )r7   r9   r"   r"   r#   Úvisit_desc_signature_linef   s    z)HTML5Translator.visit_desc_signature_linec             C   s,   |  d¡r|  |jtdƒ¡ | j d¡ d S )NZadd_permalinkzPermalink to this definitionz<br />)rF   rG   Úparentr   r<   r;   )r7   r9   r"   r"   r#   Údepart_desc_signature_linei   s    
z*HTML5Translator.depart_desc_signature_linec             C   s   | j  |  |dd¡¡ d S )NÚddr)   )r<   r;   r@   )r7   r9   r"   r"   r#   Úvisit_desc_contento   s    z"HTML5Translator.visit_desc_contentc             C   s   | j  d¡ d S )Nz</dd>)r<   r;   )r7   r9   r"   r"   r#   Údepart_desc_contentr   s    z#HTML5Translator.depart_desc_contentc             C   s   | j  |  |dd¡¡ d S )NÚspanr)   )r<   r;   r@   )r7   r9   r"   r"   r#   Úvisit_desc_inlineu   s    z!HTML5Translator.visit_desc_inlinec             C   s   | j  d¡ d S )Nz</span>)r<   r;   )r7   r9   r"   r"   r#   Údepart_desc_inlinex   s    z"HTML5Translator.depart_desc_inlinec             C   s   | j  |  |dd¡¡ d S )NrO   r)   )r<   r;   r@   )r7   r9   r"   r"   r#   Úvisit_desc_name~   s    zHTML5Translator.visit_desc_namec             C   s   | j  d¡ d S )Nz</span>)r<   r;   )r7   r9   r"   r"   r#   Údepart_desc_name   s    z HTML5Translator.depart_desc_namec             C   s   | j  |  |dd¡¡ d S )NrO   r)   )r<   r;   r@   )r7   r9   r"   r"   r#   Úvisit_desc_addname„   s    z"HTML5Translator.visit_desc_addnamec             C   s   | j  d¡ d S )Nz</span>)r<   r;   )r7   r9   r"   r"   r#   Údepart_desc_addname‡   s    z#HTML5Translator.depart_desc_addnamec             C   s   d S )Nr"   )r7   r9   r"   r"   r#   Úvisit_desc_typeŠ   s    zHTML5Translator.visit_desc_typec             C   s   d S )Nr"   )r7   r9   r"   r"   r#   Údepart_desc_type   s    z HTML5Translator.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<   r;   )r7   r9   r"   r"   r#   Úvisit_desc_returns   s    z"HTML5Translator.visit_desc_returnsc             C   s   | j  d¡ d S )Nz</span></span>)r<   r;   )r7   r9   r"   r"   r#   Údepart_desc_returns•   s    z#HTML5Translator.depart_desc_returnsc             C   s:   | j  d¡ d| _d| _tdd„ |jD ƒƒ| _|j| _d S )Nz <span class="sig-paren">(</span>rD   r   c             S   s   g | ]}t |tjƒ‘qS r"   )Ú
isinstancer   Zdesc_parameter)Ú.0Úcr"   r"   r#   ú
<listcomp>   s   z<HTML5Translator.visit_desc_parameterlist.<locals>.<listcomp>)	r<   r;   Úfirst_paramr3   ÚsumZchildrenr6   Zchild_text_separatorr2   )r7   r9   r"   r"   r#   Úvisit_desc_parameterlist˜   s    z(HTML5Translator.visit_desc_parameterlistc             C   s   | j  d¡ d S )Nz <span class="sig-paren">)</span>)r<   r;   )r7   r9   r"   r"   r#   Údepart_desc_parameterlist¡   s    z)HTML5Translator.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   rD   Únoemphz<em class="sig-param">)r^   r6   r<   r;   r2   r3   Úhasattr)r7   r9   r"   r"   r#   Úvisit_desc_parameterª   s    

z$HTML5Translator.visit_desc_parameterc             C   s.   |  d¡s| j d¡ | jr*| j | j¡ d S )Nrb   z</em>)rc   r<   r;   r6   r2   )r7   r9   r"   r"   r#   Údepart_desc_parameter´   s    
z%HTML5Translator.depart_desc_parameterc             C   s   |  j d7  _ | j d¡ d S )NrD   z<span class="optional">[</span>)r3   r<   r;   )r7   r9   r"   r"   r#   Úvisit_desc_optionalº   s    z#HTML5Translator.visit_desc_optionalc             C   s   |  j d8  _ | j d¡ d S )NrD   z<span class="optional">]</span>)r3   r<   r;   )r7   r9   r"   r"   r#   Údepart_desc_optional¾   s    z$HTML5Translator.depart_desc_optionalc             C   s   | j  | j|dddd¡ d S )NZemr)   Úproperty)ÚCLASS)r<   r;   r@   )r7   r9   r"   r"   r#   Úvisit_desc_annotationÂ   s    z%HTML5Translator.visit_desc_annotationc             C   s   | j  d¡ d S )Nz</em>)r<   r;   )r7   r9   r"   r"   r#   Údepart_desc_annotationÅ   s    z&HTML5Translator.depart_desc_annotationc             C   s    | j  | j|d|d d¡ d S )NÚdivÚtype)ri   )r<   r;   r@   )r7   r9   r"   r"   r#   Úvisit_versionmodifiedÊ   s    z%HTML5Translator.visit_versionmodifiedc             C   s   | j  d¡ d S )Nz</div>
)r<   r;   )r7   r9   r"   r"   r#   Údepart_versionmodifiedÍ   s    z&HTML5Translator.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:TZrefidz3References must have "refuri" or "refid" attribute.rD   r   z image-referenceZreftitleÚtitleÚtargetÚar)   Ú	secnumberz%sÚ.)rF   ÚsettingsÚcloak_email_addressesÚ
startswithZcloak_mailtoÚ	in_mailtoÚAssertionErrorrZ   rJ   r   ZTextElementÚlenZimager<   r;   r@   r1   ÚjoinÚmapÚstr)r7   r9   Úattsr"   r"   r#   Úvisit_referenceÑ   s.    
 
zHTML5Translator.visit_referencec             C   s   |   |¡ d S )N)rƒ   )r7   r9   r"   r"   r#   Úvisit_number_referenceí   s    z&HTML5Translator.visit_number_referencec             C   s   |   |¡ d S )N)Údepart_reference)r7   r9   r"   r"   r#   Údepart_number_referenceð   s    z'HTML5Translator.depart_number_referencec             C   s
   t j‚d S )N)r   ÚSkipNode)r7   r9   r"   r"   r#   Úvisit_commentô   s    zHTML5Translator.visit_commentr)   )r9   Únamer   c             C   s<   | j  | j|dd| d¡ |r8| dt |t| ¡¡ d S )Nrl   zadmonition )ri   r   )r<   r;   r@   Úinsertr   rt   r   )r7   r9   r‰   r"   r"   r#   Úvisit_admonitionø   s    
z HTML5Translator.visit_admonitionc             C   s   | j  d¡ d S )Nz</div>
)r<   r;   )r7   r9   r"   r"   r#   Údepart_admonitionþ   s    z!HTML5Translator.depart_admonitionc             C   s   |   |d¡ d S )NZseealso)r‹   )r7   r9   r"   r"   r#   Úvisit_seealso  s    zHTML5Translator.visit_seealsoc             C   s   |   |¡ d S )N)rŒ   )r7   r9   r"   r"   r#   Údepart_seealso  s    zHTML5Translator.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 )
Nrw   Ú
singlehtmléÿÿÿÿz%s/#%sÚidsr   z%s/rr   r)   )	rF   rZ   rJ   r   Úsectionr&   r‰   r-   Z
secnumbers)r7   r9   r:   Z
anchornamer"   r"   r#   Úget_secnumber  s    


zHTML5Translator.get_secnumberc             C   s4   |   |¡}|r0| j dd tt|ƒ¡| j  ¡ d S )Nz&<span class="section-number">%s</span>rx   )r“   r<   r;   r   r€   r   r1   )r7   r9   rw   r"   r"   r#   Úadd_secnumber  s    
zHTML5Translator.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 %srx   ú z</span>)r&   r‰   r-   Z
fignumbersrF   r<   r;   r.   Znumfig_formatr   ÚloggerÚwarningr   r€   r   )r•   r–   ÚkeyÚprefixÚmsgZnumbers)r7   r"   r#   Úappend_fignumber"  s     z7HTML5Translator.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™   )r7   r9   r   r•   rœ   r"   )r7   r#   Úadd_fignumber!  s    zHTML5Translator.add_fignumber)r9   rt   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   )r.   Úhtml_permalinksr&   Úadd_permalinksr<   r;   Úhtml_permalinks_icon)r7   r9   rt   Úformatr"   r"   r#   rG   ;  s    z!HTML5Translator.add_permalink_refc                s2   t |ƒdkr"t|d tjƒr"tj‚tƒ  |¡ d S )NrD   r   )r~   rZ   r   Útoctreer   r‡   r*   Úvisit_bullet_list)r7   r9   )r8   r"   r#   r¦   B  s    z!HTML5Translator.visit_bullet_listc             C   s   | j  |  |dd¡¡ d S )NrL   r)   )r<   r;   r@   )r7   r9   r"   r"   r#   Úvisit_definitionI  s    z HTML5Translator.visit_definitionc             C   s   | j  d¡ d S )Nz</dd>
)r<   r;   )r7   r9   r"   r"   r#   Údepart_definitionN  s    z!HTML5Translator.depart_definitionc             C   s   | j  | j|dddd¡ d S )NrO   r)   Ú
classifier)ri   )r<   r;   r@   )r7   r9   r"   r"   r#   Úvisit_classifierR  s    z HTML5Translator.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<   r;   Ú	next_noderZ   r   r©   )r7   r9   r­   r"   r"   r#   Údepart_classifierV  s    z!HTML5Translator.depart_classifierc             C   s   | j  |  |dd¡¡ d S )NrC   r)   )r<   r;   r@   )r7   r9   r"   r"   r#   Ú
visit_term_  s    zHTML5Translator.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­   rZ   r   r©   rJ   r   ZglossaryrG   r   r<   r;   )r7   r9   r­   r"   r"   r#   Údepart_termc  s    zHTML5Translator.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¥   Úpr)   ZcaptionÚheading)ri   ZROLEz<span class="caption-text">z</span></p>
)rZ   rJ   r   Zcompact_paragraphrF   r<   r;   r@   Úcontextr*   Úvisit_titler”   r    r   Útable)r7   r9   )r8   r"   r#   r´   q  s    
zHTML5Translator.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³   r.   r¡   r&   r¢   rJ   rc   r{   rG   r   r<   r;   r£   rZ   r   rµ   r*   Údepart_title)r7   r9   Z	close_tag)r8   r"   r#   r¶   }  s"    


zHTML5Translator.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ž   rl   r)   zhighlight-%s notranslate)Úsuffixri   z</div>
)Z	rawsourceÚastextr*   Úvisit_literal_blockrF   r.   Úhighlight_optionsZhtml_codeblock_linenos_styler,   Úhighlight_blockr@   r<   r;   r   r‡   )r7   r9   Úlangr¹   rº   r¼   Úhighlightedr@   )r8   r"   r#   r¿   “  s     
z#HTML5Translator.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">rO   r)   zcaption-text)ri   )rZ   rJ   r   Ú	containerrF   r<   r;   r*   Úvisit_captionr    r@   )r7   r9   )r8   r"   r#   rÆ   ª  s
    zHTML5Translator.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<   r;   rZ   rJ   r   rÅ   rF   rG   r   Zfigurer*   Údepart_caption)r7   r9   )r8   r"   r#   rÇ   ²  s    zHTML5Translator.depart_captionc             C   s   |   |¡ d S )N)r¿   )r7   r9   r"   r"   r#   Úvisit_doctest_blockÂ  s    z#HTML5Translator.visit_doctest_blockc             C   s   | j  |  |d¡d ¡ d S )NZ
blockquotez<div>)r<   r;   r@   )r7   r9   r"   r"   r#   Úvisit_block_quoteÆ  s    z!HTML5Translator.visit_block_quotec             C   s   | j  d¡ d S )Nz</div></blockquote>
)r<   r;   )r7   r9   r"   r"   r#   Údepart_block_quoteÉ  s    z"HTML5Translator.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Úclassesr)   zdocutils literal notranslate)ri   r·   ÚcoderD   T)r¼   rž   Znowrapz'docutils literal highlight highlight-%s)r½   ri   z</code>)r<   r;   r@   rF   r0   r.   rÀ   r,   rÁ   r¾   Ústripr   r‡   )r7   r9   rÂ   r¼   rÃ   r@   r"   r"   r#   Úvisit_literalÍ  s(    

zHTML5Translator.visit_literalc             C   s8   d|d kr| j  d¡ n|  jd8  _| j  d¡ d S )NrË   rÌ   z</kbd>rD   z</code>)r<   r;   r0   )r7   r9   r"   r"   r#   Údepart_literalå  s    zHTML5Translator.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~   )r[   r‰   r"   r"   r#   ú	<genexpr>ò  s    z7HTML5Translator.visit_productionlist.<locals>.<genexpr>Zstrongr)   z</strong> ::= z%s     r—   Ú
z</pre>
)r<   r;   r@   r   r   r   Ú
productionÚmaxÚljustr~   Z	walkaboutr   r‡   )r7   r9   ÚnamesZproductionlistrÓ   ÚmaxlenZlastnamer"   r"   r#   Úvisit_productionlistì  s$    


z$HTML5Translator.visit_productionlistc             C   s   d S )Nr"   )r7   r9   r"   r"   r#   Údepart_productionlist   s    z%HTML5Translator.depart_productionlistc             C   s   d S )Nr"   )r7   r9   r"   r"   r#   Úvisit_production  s    z HTML5Translator.visit_productionc             C   s   d S )Nr"   )r7   r9   r"   r"   r#   Údepart_production  s    z!HTML5Translator.depart_productionc             C   s    | j  | j|dddd ¡ d S )Nr±   Zcentered)ri   z<strong>)r<   r;   r@   )r7   r9   r"   r"   r#   Úvisit_centered	  s    zHTML5Translator.visit_centeredc             C   s   | j  d¡ d S )Nz</strong></p>)r<   r;   )r7   r9   r"   r"   r#   Údepart_centered  s    zHTML5Translator.depart_centeredc             C   s   d S )Nr"   )r7   r9   r"   r"   r#   Úvisit_compact_paragraph  s    z'HTML5Translator.visit_compact_paragraphc             C   s   d S )Nr"   )r7   r9   r"   r"   r#   Údepart_compact_paragraph  s    z(HTML5Translator.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 downloadr)   )rp   Zdownloadrq   rp   z	 externalrs   rv   z</a>Úfilenamez	 internal)r&   Zdownload_supportr³   r;   r<   r@   Ú	posixpathr   ZdlpathÚurllibÚparseÚquote)r7   r9   r‚   r"   r"   r#   Úvisit_download_reference  s     
z(HTML5Translator.visit_download_referencec             C   s   | j  | j ¡ ¡ d S )N)r<   r;   r³   r>   )r7   r9   r"   r"   r#   Údepart_download_reference*  s    z)HTML5Translator.depart_download_referencec                s   |  dd¡ tƒ  |¡S )NÚalignr¸   )Ú
setdefaultr*   Úvisit_figure)r7   r9   )r8   r"   r#   ré   .  s    zHTML5Translator.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   ÚwidthZheightz7Could not obtain image size. :scale: option is ignored.)rž   r   rD   )ÚsvgÚsvgzÚsrcZaltrç   zalign-%srp   Zimgr)   )r&   Zimagesrá   r   Zimgpathrâ   rã   rä   r   ÚosÚpathZsrcdirr˜   r™   r   r   ÚlowerÚendswithr$   rF   r<   r;   Zemptytagr*   Úvisit_image)r7   r9   ZolduriÚsizerê   r‚   )r8   r"   r#   ró   5  s@    






zHTML5Translator.visit_imagec                s$   |d   ¡  d¡rntƒ  |¡ d S )Nrê   )rì   rí   )rñ   rò   r*   Údepart_image)r7   r9   )r8   r"   r#   rõ   `  s    zHTML5Translator.depart_imagec             C   s
   t j‚d S )N)r   r‡   )r7   r9   r"   r"   r#   Úvisit_toctreef  s    zHTML5Translator.visit_toctreec             C   s
   t j‚d S )N)r   r‡   )r7   r9   r"   r"   r#   Úvisit_indexk  s    zHTML5Translator.visit_indexc             C   s
   t j‚d S )N)r   r‡   )r7   r9   r"   r"   r#   Úvisit_tabular_col_specn  s    z&HTML5Translator.visit_tabular_col_specc             C   s   d S )Nr"   )r7   r9   r"   r"   r#   Úvisit_glossaryq  s    zHTML5Translator.visit_glossaryc             C   s   d S )Nr"   )r7   r9   r"   r"   r#   Údepart_glossaryt  s    zHTML5Translator.depart_glossaryc             C   s   d S )Nr"   )r7   r9   r"   r"   r#   Ú
visit_acksw  s    zHTML5Translator.visit_acksc             C   s   d S )Nr"   )r7   r9   r"   r"   r#   Údepart_acksz  s    zHTML5Translator.depart_acksc             C   s   | j  d¡ d S )Nz<table class="hlist"><tr>)r<   r;   )r7   r9   r"   r"   r#   Úvisit_hlist}  s    zHTML5Translator.visit_hlistc             C   s   | j  d¡ d S )Nz</tr></table>
)r<   r;   )r7   r9   r"   r"   r#   Údepart_hlist€  s    zHTML5Translator.depart_hlistc             C   s   | j  d¡ d S )Nz<td>)r<   r;   )r7   r9   r"   r"   r#   Úvisit_hlistcolƒ  s    zHTML5Translator.visit_hlistcolc             C   s   | j  d¡ d S )Nz</td>)r<   r;   )r7   r9   r"   r"   r#   Údepart_hlistcol†  s    zHTML5Translator.depart_hlistcolc             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;rD   r—   )r¾   Úencoder0   Zwords_and_spacesÚfindallrÎ   r<   r;   r~   r|   ry   rz   Zcloak_email)r7   r9   ÚtextZencodedÚtokenr"   r"   r#   Ú
visit_TextŠ  s    
"
zHTML5Translator.visit_Textc             C   s   |   |d¡ d S )NZnote)r‹   )r7   r9   r"   r"   r#   Ú
visit_noteŸ  s    zHTML5Translator.visit_notec             C   s   |   |¡ d S )N)rŒ   )r7   r9   r"   r"   r#   Údepart_note¢  s    zHTML5Translator.depart_notec             C   s   |   |d¡ d S )Nr™   )r‹   )r7   r9   r"   r"   r#   Úvisit_warning¥  s    zHTML5Translator.visit_warningc             C   s   |   |¡ d S )N)rŒ   )r7   r9   r"   r"   r#   Údepart_warning¨  s    zHTML5Translator.depart_warningc             C   s   |   |d¡ d S )NZ	attention)r‹   )r7   r9   r"   r"   r#   Úvisit_attention«  s    zHTML5Translator.visit_attentionc             C   s   |   |¡ d S )N)rŒ   )r7   r9   r"   r"   r#   Údepart_attention®  s    z HTML5Translator.depart_attentionc             C   s   |   |d¡ d S )NZcaution)r‹   )r7   r9   r"   r"   r#   Úvisit_caution±  s    zHTML5Translator.visit_cautionc             C   s   |   |¡ d S )N)rŒ   )r7   r9   r"   r"   r#   Údepart_caution´  s    zHTML5Translator.depart_cautionc             C   s   |   |d¡ d S )NZdanger)r‹   )r7   r9   r"   r"   r#   Úvisit_danger·  s    zHTML5Translator.visit_dangerc             C   s   |   |¡ d S )N)rŒ   )r7   r9   r"   r"   r#   Údepart_dangerº  s    zHTML5Translator.depart_dangerc             C   s   |   |d¡ d S )NÚerror)r‹   )r7   r9   r"   r"   r#   Úvisit_error½  s    zHTML5Translator.visit_errorc             C   s   |   |¡ d S )N)rŒ   )r7   r9   r"   r"   r#   Údepart_errorÀ  s    zHTML5Translator.depart_errorc             C   s   |   |d¡ d S )NZhint)r‹   )r7   r9   r"   r"   r#   Ú
visit_hintÃ  s    zHTML5Translator.visit_hintc             C   s   |   |¡ d S )N)rŒ   )r7   r9   r"   r"   r#   Údepart_hintÆ  s    zHTML5Translator.depart_hintc             C   s   |   |d¡ d S )NZ	important)r‹   )r7   r9   r"   r"   r#   Úvisit_importantÉ  s    zHTML5Translator.visit_importantc             C   s   |   |¡ d S )N)rŒ   )r7   r9   r"   r"   r#   Údepart_importantÌ  s    z HTML5Translator.depart_importantc             C   s   |   |d¡ d S )NZtip)r‹   )r7   r9   r"   r"   r#   Ú	visit_tipÏ  s    zHTML5Translator.visit_tipc             C   s   |   |¡ d S )N)rŒ   )r7   r9   r"   r"   r#   Ú
depart_tipÒ  s    zHTML5Translator.depart_tipc             C   s
   |   |¡S )N)Zvisit_emphasis)r7   r9   r"   r"   r#   Úvisit_literal_emphasisÕ  s    z&HTML5Translator.visit_literal_emphasisc             C   s
   |   |¡S )N)Zdepart_emphasis)r7   r9   r"   r"   r#   Údepart_literal_emphasisØ  s    z'HTML5Translator.depart_literal_emphasisc             C   s
   |   |¡S )N)Zvisit_strong)r7   r9   r"   r"   r#   Úvisit_literal_strongÛ  s    z$HTML5Translator.visit_literal_strongc             C   s
   |   |¡S )N)Zdepart_strong)r7   r9   r"   r"   r#   Údepart_literal_strongÞ  s    z%HTML5Translator.depart_literal_strongc             C   s8   i }|  d¡r|d |d< | j | j|ddf|Ž¡ d S )NZexplanationrt   Zabbrr)   )rc   r<   r;   r@   )r7   r9   Zattrsr"   r"   r#   Úvisit_abbreviationá  s    
z"HTML5Translator.visit_abbreviationc             C   s   | j  d¡ d S )Nz</abbr>)r<   r;   )r7   r9   r"   r"   r#   Údepart_abbreviationç  s    z#HTML5Translator.depart_abbreviationc             C   s2   |   |¡ | jr.| jjf |jŽ|d< |  |¡ d S )Nrq   )r  r/   r¤   Z
attributesrƒ   )r7   r9   r"   r"   r#   Úvisit_manpageê  s    
zHTML5Translator.visit_manpagec             C   s   | j r|  |¡ |  |¡ d S )N)r/   r…   r  )r7   r9   r"   r"   r#   Údepart_manpageð  s    
zHTML5Translator.depart_manpagec             C   s   | j  d¡ i }dd„ | jj d¡D ƒ}| dd¡ | d| dd¡ ¡ d	|krbd
|d	  |d< | j|dfdd |¡i|—Ž}| j	 |¡ d S )Nr   c             S   s   g | ]}|  d ¡‘qS )z 	
)rÎ   )r[   Úclsr"   r"   r#   r]   û  s    z/HTML5Translator.visit_table.<locals>.<listcomp>ú,Údocutilszalign-%srç   r¸   rë   z	width: %sZstylerµ   ri   r—   )
r4   r;   ry   Ztable_styleÚsplitrŠ   rF   r@   r   r<   )r7   r9   r‚   rÌ   Útagr"   r"   r#   Úvisit_table÷  s    zHTML5Translator.visit_tablec                s   | j  ¡  tƒ  |¡ d S )N)r4   r>   r*   Údepart_table)r7   r9   )r8   r"   r#   r'    s    
zHTML5Translator.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   rD   é   r   rÌ   zrow-evenzrow-oddÚtrr)   )r4   r;   r<   r@   Úcolumn)r7   r9   r"   r"   r#   Ú	visit_row
  s    zHTML5Translator.visit_rowc                s   | j  d¡ tƒ  |¡S )Nr   )r5   r;   r*   Úvisit_field_list)r7   r9   )r8   r"   r#   r,    s    z HTML5Translator.visit_field_listc                s   | j  ¡  tƒ  |¡S )N)r5   r>   r*   Údepart_field_list)r7   r9   )r8   r"   r#   r-    s    
z!HTML5Translator.depart_field_listc             C   sF   | j d  d7  < | j d d dkr4|d  d¡ n|d  d¡ d S )Nr   rD   r(  r   rÌ   z
field-evenz	field-odd)r5   r;   )r7   r9   r"   r"   r#   Úvisit_field  s    zHTML5Translator.visit_field)r9   Úmath_envr   c             C   s*   | j j}| j jjj| \}}|| |ƒ d S )N)r&   Úmath_renderer_nameÚappÚregistryÚhtml_inline_math_renderers)r7   r9   r/  r‰   Úvisitr   r"   r"   r#   Ú
visit_math"  s    zHTML5Translator.visit_mathc             C   s.   | j j}| j jjj| \}}|r*|| |ƒ d S )N)r&   r0  r1  r2  r3  )r7   r9   r/  r‰   r   Údepartr"   r"   r#   Údepart_math'  s    zHTML5Translator.depart_mathc             C   s*   | j j}| j jjj| \}}|| |ƒ d S )N)r&   r0  r1  r2  Úhtml_block_math_renderers)r7   r9   r/  r‰   r4  r   r"   r"   r#   Úvisit_math_block-  s    z HTML5Translator.visit_math_blockc             C   s.   | j j}| j jjj| \}}|r*|| |ƒ d S )N)r&   r0  r1  r2  r8  )r7   r9   r/  r‰   r   r6  r"   r"   r#   Údepart_math_block2  s    z!HTML5Translator.depart_math_blockc             C   sL   t jdtdd x6|d dd… D ]"}| j d| ¡ |d  |¡ q"W dS )aZ  Generate hyperlink targets for tables.

        Original visit_table() generates hyperlink targets inside table tags
        (<table>) if multiple IDs are assigned to listings.
        That is invalid DOM structure.  (This is a bug of docutils <= 0.13.1)

        This exports hyperlink targets before tables to make valid DOM structure.
        z*generate_targets_for_table() is deprecatedr(  )Ú
stacklevelr‘   rD   Nz<span id="%s"></span>)ÚwarningsÚwarnr   r<   r;   Úremove)r7   r9   Úidr"   r"   r#   Úgenerate_targets_for_table8  s
    	
z*HTML5Translator.generate_targets_for_table)r   c             C   s   t jdtdd | jd S )Nz"_fieldlist_row_index is deprecatedr(  )r;  r   )r<  r=  r   r5   )r7   r"   r"   r#   Ú_fieldlist_row_indexG  s    
z$HTML5Translator._fieldlist_row_indexc             C   s   t jdtdd | jd S )Nz_table_row_index is deprecatedr(  )r;  r   )r<  r=  r   r4   )r7   r"   r"   r#   Ú_table_row_indexM  s    
z HTML5Translator._table_row_index)r)   )N)r)   )r)   )r)   )r)   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__Úsetr'   r   r   r   r(   r   r+   r	   r=   r?   rA   rB   rE   rH   rI   rK   rM   rN   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   r`   ra   rd   re   rf   rg   rj   rk   rn   ro   rƒ   r„   r†   rˆ   r‹   r   rŒ   r   rŽ   r   r   r“   r”   r    rG   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.  r5  r7  r9  r:  r@  rh   rA  rB  Ú__classcell__r"   r"   )r8   r#   r%   -   s  

		
	+	r%   )0rF  rï   rá   r   Zurllib.parserâ   r<  Útypingr   r   r   r   r   r   r#  r   Zdocutils.nodesr	   r
   r   Zdocutils.writers.html5_polyglotr   ZBaseTranslatorZ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	getLoggerrC  r˜   r   r   r$   r%   r"   r"   r"   r#   Ú<module>   s*    
