o
    bm                    @   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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 ddlmZ ddlmZmZmZmZmZ G d	d
 d
ejZG dd dejZG dd dejZdS )z,common definitions for Docutils HTML writers    N)url2pathname)frontend	languagesnodesutilswriters) length_or_percentage_or_unitless)PIL)
writer_aux)unichar2texpick_math_environment	math2htmllatex2mathmltex2mathml_externc                   @   s  e Zd ZdZ	 ddddgddifdd	gd
dejdfddgddejdfddgdejdfddgddejdfddgdddfdd gd! d"d#d$fd%d&gd'd(gd(d)d*d+fd,d-gg d.d/d)d$fd0d1gd2dejdfd3d4gd5ddfd6d7gd2dejdfd8d9gd:ddfd;d<gd=d>ifd?d@gd=dAifdBdCgdDdejdfdEdFgdGddfdHdIgdejdJfffZdKdLiZ	dMZ
dNZdOZdPdQ ZdRdS ZdTdU ZdVdW ZdXdY ZdS )ZWriter)htmlZxhtmlzHTML Writer OptionsNzFSpecify the template file (UTF-8 encoded). (default: writer dependent)z
--templatemetavarz<file>zhComma separated list of stylesheet URLs. Overrides previous --stylesheet and --stylesheet-path settings.z--stylesheetz<URL[,URL,...]>stylesheet_path)r   	overrides	validatorzComma separated list of stylesheet paths. Relative paths are expanded if a matching file is found in the --stylesheet-dirs. With --link-stylesheet, the path is rewritten relative to the output HTML file. (default: writer dependent)z--stylesheet-pathz<file[,file,...]>
stylesheetzComma-separated list of directories where stylesheets are found. Used by --stylesheet-path when expanding relative path arguments. (default: writer dependent)z--stylesheet-dirsz<dir[,dir,...]>)r   r   zvEmbed the stylesheet(s) in the output HTML file.  The stylesheet files must be accessible during processing. (default)z--embed-stylesheet   
store_true)defaultactionr   z3Link to the stylesheet(s) in the output HTML file. z--link-stylesheetembed_stylesheetstore_false)destr   z}Specify the initial header level. Does not affect document title & subtitle (see --no-doc-title).(default: writer dependent).z--initial-header-levelz1 2 3 4 5 62z<level>)choicesr   r   zYFormat for footnote references: one of "superscript" or "brackets". (default: "brackets")z--footnote-referencesZsuperscriptZbracketsz<format>Ztrim_footnote_reference_space)r   r   r   r   zyFormat for block quote attributions: one of "dash" (em-dash prefix), "parentheses"/"parens", or "none". (default: "dash")z--attributiondashZparenthesesparensnoner!   zgRemove extra vertical whitespace between items of "simple" bullet lists and enumerated lists. (default)z--compact-listsTz3Disable compact simple bullet and enumerated lists.z--no-compact-listscompact_listszORemove extra vertical whitespace between items of simple field lists. (default)z--compact-field-listsz#Disable compact simple field lists.z--no-compact-field-listscompact_field_listszAdded to standard table classes. Defined styles: borderless, booktabs, align-left, align-center, align-right, colwidths-auto, colwidths-grid.z--table-styler    zmMath output format (one of "MathML", "HTML", "MathJax", or "LaTeX") and option(s). (default: "HTML math.css")z--math-outputzHTML math.csszPrepend an XML declaration. z--xml-declarationFzOmit the XML declaration.z--no-xml-declarationxml_declarationzyObfuscate email addresses to confuse harvesters while still keeping email links usable with standards-compliant browsers.z--cloak-email-addresses)r   r   Zoutput_encoding_error_handlerxmlcharrefreplacezhtml base writer)r   zhtml writers)head_prefixheadr   body_prefixbody_pre_docinfodocinfobodybody_suffixtitlesubtitleheaderfootermetafragmenthtml_prolog	html_head
html_titlehtml_subtitle	html_bodyc                 C   s   t j| tjg S N)r   r   get_transformsr
   ZAdmonitionsself r?   ?usr/lib/python3.10/site-packages/docutils/writers/_html_base.pyr<         zWriter.get_transformsc                 C   sJ   |  | j | _}| j| | jD ]}t| |t|| q|  | _d S r;   )	Ztranslator_classdocumentvisitorZ	walkaboutvisitor_attributessetattrgetattrapply_templateoutput)r>   rC   attrr?   r?   r@   	translate   s
   
zWriter.translatec                 C   sL   t | jjjddd}| }W d    n1 sw   Y  |  }|| S )Nrutf-8)encoding)openrB   settingstemplatereadinterpolation_dict)r>   Ztemplate_filerP   subsr?   r?   r@   rG      s   
zWriter.apply_templatec                 C   sJ   i }| j j}| jD ]}dt| |d||< q	|j|d< tj|d< |S )Nr&   
rM   version)	rB   rO   rD   joinrF   rstripoutput_encodingdocutils__version__)r>   rS   rO   rI   r?   r?   r@   rR      s   


zWriter.interpolation_dictc                 C   s2   t j|  | jD ]}dt| || j|< q	d S Nr&   )r   r   assemble_partsrD   rV   rF   parts)r>   partr?   r?   r@   r\      s   
zWriter.assemble_parts)__name__
__module____qualname__Z	supportedr   Zvalidate_comma_separated_listZvalidate_booleansplitZsettings_specZsettings_defaultsZconfig_sectionZconfig_section_dependenciesrD   r<   rJ   rG   rR   r\   r?   r?   r?   r@   r   $   s    
]	r   c                
   @   s  e Zd ZdZdZdZeZdZdZdZ	dZ
dZ	 d	Zd
ZedZedZdZeddeddeddeddeddiZ	 dd Zdd Zdd Zdd Zd d! Zed"fd#d$Zdd&d'Zdd*d+Zdd,d-Zdd/d0Zd1d2 Zd3d4 Z d5d6 Z!d7d8 Z"d9d: Z#d;d< Z$d=d> Z%d?d@ Z&dAdB Z'ddCdDZ(dEdFdFdGdHZ)dIdJ Z*dKdL Z+dMdN Z,dOdP Z-dQdR Z.dSdT Z/dUdV Z0dWdX Z1dYdZ Z2d[d\ Z3d]d^ Z4d_d` Z5dadb Z6dcdd Z7dedf Z8dgdh Z9didj Z:dkdl Z;dmdn Z<dodp Z=dqdr Z>dsdt Z?eduj@fdvdwZAdxdy ZBdzd{ ZCd|d} ZDd~d ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdddZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zedd ZfddĄ ZgddƄ ZhddȄ Ziddʄ Zjdd̄ Zkdd΄ ZlddЄ Zmdd҄ ZnddԄ Zoddք Zpdd؄ Zqddڄ Zrdd܄ Zsddބ Ztdd Zudd Zvdd Zwdd Zxdd Zydd Zzdd Z{dd Z|dd Z}dd Z~dd Zdd Zdd Zdd Zdd Zdd Zdd  Zdd Zdd Zdd Zdd Zd	d
dddZd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/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Zd=d> Zd?d@ ZdAdB ZdCdD ZdEdF ZdGdH ZdIdJ ZdKdL ZdMdN ZdOdP ZdQdR ZdSdT ZdUdV ZdWdX ZdYdZ Zd[d\ Zd]d^ Zd_d` Zdadb Zdcdd Zdedf Zdgdh Zdidj Zdkdl Zdmdn Zdodp Zdqdr Zdsdt Zdudv Zdwdx Zdydz 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 Zd%S (  HTMLTranslatorai  
    Generic Docutils to HTML translator.

    See the `html4css1` and `html5_polyglot` writers for full featured
    HTML writers.

    .. IMPORTANT::
      The `visit_*` and `depart_*` methods use a
      heterogeneous stack, `self.context`.
      When subclassing, make sure to be consistent in its use!

      Examples for robust coding:

      a) Override both `visit_*` and `depart_*` methods, don't call the
         parent functions.

      b) Extend both and unconditionally call the parent functions::

           def visit_example(self, node):
               if foo:
                   self.body.append('<div class="foo">')
               html4css1.HTMLTranslator.visit_example(self, node)

           def depart_example(self, node):
               html4css1.HTMLTranslator.depart_example(self, node)
               if foo:
                   self.body.append('</div>')

      c) Extend both, calling the parent functions under the same
         conditions::

           def visit_example(self, node):
               if foo:
                   self.body.append('<div class="foo">
')
               else: # call the parent method
                   _html_base.HTMLTranslator.visit_example(self, node)

           def depart_example(self, node):
               if foo:
                   self.body.append('</div>
')
               else: # call the parent method
                   _html_base.HTMLTranslator.depart_example(self, node)

      d) Extend one method (call the parent), but don't otherwise use the
         `self.context` stack::

           def depart_example(self, node):
               _html_base.HTMLTranslator.depart_example(self, node)
               if foo:
                   # implementation-specific code
                   # that does not use `self.context`
                   self.body.append('</div>
')

      This way, changes in stack use will not bite you.
    z%<?xml version="1.0" encoding="%s" ?>
z<!DOCTYPE html>
zW<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="%(lang)s" lang="%(lang)s">
<head>
z<meta charset="%s" />
zR<meta name="generator" content="Docutils %s: https://docutils.sourceforge.io/" />
z2<script type="text/javascript" src="%s"></script>
z-file:/usr/share/javascript/mathjax/MathJax.jsz4<link rel="stylesheet" href="%s" type="text/css" />
z%<style type="text/css">

%s
</style>
z[^ \n]+| +|\nz.+\W\W.+|[-?].+lang&z&amp;<z&lt;"z&quot;>z&gt;@&#64;c                    s  t j | |j  _}|j}t||j _ j	t
j g _g  _g  _|jr: j j|j   j j  jd d   _ fddt|D  _dg _g  _g  _g  _g  _dg _d _t|j _t|dd  _ t|dd du rt!j"d	t#d
d  j d u rd _ t|dd du rt!j"dt#d
d  j d u rd _ |j$%  _$ j$dd   _& j$d '  _$g  _(	 g  _)d _*d _+d _,d _-d _.g  _/g  _0g  _1g  _2 j3g _4g  _5g  _6g  _7d _8d _9d _:g  _;d S )Nc                    s   g | ]}  |qS r?   )stylesheet_call).0pathr=   r?   r@   
<listcomp>&  s    z+HTMLTranslator.__init__.<locals>.<listcomp>z</head>
<body>
z</body>
</html>
r   image_loadingZembed_imagesTzeThe configuration setting "embed_images" will be removed in Docutils 2.0. Use "image_loading: embed".   )
stacklevelembedFzdThe configuration setting "embed_images" will be removed in Docutils 2.0. Use "image_loading: link".linkr   )<r   NodeVisitor__init__rO   language_coder   Zget_languagereporterlanguage	generatorrY   rZ   r4   r)   r6   r'   appendrX   r*   r   Zget_stylesheet_listr   r+   r,   r-   r.   r5   r/   section_levelintinitial_header_levelrF   ro   warningswarnFutureWarningmath_outputrb   math_output_optionslowercontextcolspecs	compact_pcompact_simpleZcompact_field_listZ
in_docinfo
in_sidebarr0   r1   r2   r3   content_typer7   r8   r9   r:   in_document_title	in_mailtoZauthor_in_authorsmath_header)r>   rB   rO   Zlcoder?   r=   r@   ru     sx   





zHTMLTranslator.__init__c                 C   s6   d | j| j | j | j | j | j | j | j S r[   )	rV   r)   r*   r   r+   r,   r-   r.   r/   r=   r?   r?   r@   astext`  s   zHTMLTranslator.astextc                 C   s   t |}|| jS )z-Encode special characters in `text` & return.)strrJ   special_characters)r>   textr?   r?   r@   encodef  s   zHTMLTranslator.encodec                 C   s   | ddS )z*Try to hide a mailto: URL from harvesters.ri   %40replace)r>   urir?   r?   r@   cloak_mailton  s   zHTMLTranslator.cloak_mailtoc                 C   s   | dd}| ddS )z;Try to hide the link text of a email link from harversters.rj   z<span>&#64;</span>.z<span>&#46;</span>r   )r>   addrr?   r?   r@   cloak_emailu  s   zHTMLTranslator.cloak_emailz[
	]c                 C   s<   |  |d|}| jr| jjr|dd}|dd}|S )z6Cleanse, HTML encode, and return attribute value text. r   z&#37;&#52;&#48;r   z&#46;)r   subr   rO   cloak_email_addressesr   )r>   r   
whitespaceencodedr?   r?   r@   attval|  s
   zHTMLTranslator.attvalNc              
   C   s   |du r
t | jj}| jjrIztjj|dd }W n" ty< } zd| }| j	j
| d| W  Y d}~S d}~ww | jj| | j| S |rSt| jj|}| j| | S )z8Return code to reference or embed stylesheet file `path`NrL   )source_pathrM   zCannot embed stylesheet: z<--- %s --->
)boolrO   r   r   rY   ioZ	FileInputrQ   OSErrorrB   rw   errorrecord_dependenciesaddembedded_stylesheetr   Zrelative_pathZ_destinationstylesheet_linkr   )r>   rm   adjust_pathcontenterrmsgr?   r?   r@   rk     s(   

zHTMLTranslator.stylesheet_callrT   Fc              
      s  |  }g }i }| D ]
\}}	|	||  < q|dg }
g }|dg |dd  D ]}|dr>||dd  q-| rK||
vrK|
| q-|rU|d || j< d t	|t
jrf fd	d
|
D }
|
rod|
|d< d|vsuJ |dg }||dg  |r|d |d< |dd D ]}|st	|t
jt
jt
jfr|d|  q|d| 7 }qt| }|g}|D ]8\}}	|	dusJ t	|	trdd
 |	D }|d|  | d|f  q|d|  | t|	f  q|rd}nd}d|dd||f  | S )z
        Construct and return a start tag given a node (id & class attributes
        are extracted), tag name, and optional attributes.
        classesclassr&   z	language-	   Nr   )colwidths-autocolwidths-givencolwidths-gridc                    s   g | ]}| vr|qS r?   r?   )rl   clsZinternalr?   r@   rn     s    z+HTMLTranslator.starttag.<locals>.<listcomp>r   ididsr   z<span id="%s"></span>c                 S   s   g | ]}t |qS r?   )r   )rl   vr?   r?   r@   rn     s    z%s="%s"z /z<%s%s>)r   itemspopgetrb   
startswithrz   striplang_attribute
isinstancer   tablerV   extendZ
Sequentialr-   sortedlistr   r   )r>   nodetagnamesuffixempty
attributesprefixattsnamevaluer   r   r   r   r   Zattlistr]   valuesZinfixr?   r   r@   starttag  s`    




 zHTMLTranslator.starttagc                 K   s   | j |||fddi|S )z1Construct and return an XML-compatible empty tag.r   T)r   )r>   r   r   r   r   r?   r?   r@   emptytag     zHTMLTranslator.emptytagr   c                 C   sB   dd |D }z|| }W n
 t y   Y dS w |d | dS )z
        Set class `class_` on the visible child no. index of `node`.
        Do nothing if node has fewer children than `index`.
        c                 S      g | ]
}t |tjs|qS r?   r   r   Z	Invisible)rl   nr?   r?   r@   rn     s    z5HTMLTranslator.set_class_on_child.<locals>.<listcomp>Nr   )
IndexErrorrz   )r>   r   class_indexchildrenchildr?   r?   r@   set_class_on_child  s   z!HTMLTranslator.set_class_on_childc                 C   s:   |  }| |}| jr| jjr| |}| j| d S r;   )r   r   r   rO   r   r   r.   rz   )r>   r   r   r   r?   r?   r@   
visit_Text  s
   

zHTMLTranslator.visit_Textc                 C      d S r;   r?   r>   r   r?   r?   r@   depart_Text     zHTMLTranslator.depart_Textc                 C      | j | |dd d S )NZabbrr&   r.   rz   r   r   r?   r?   r@   visit_abbreviation  r   z!HTMLTranslator.visit_abbreviationc                 C      | j d d S )Nz</abbr>r.   rz   r   r?   r?   r@   depart_abbreviation     z"HTMLTranslator.depart_abbreviationc                 C   r   )NZacronymr&   r   r   r?   r?   r@   visit_acronym  r   zHTMLTranslator.visit_acronymc                 C   r   )Nz
</acronym>r   r   r?   r?   r@   depart_acronym  r   zHTMLTranslator.depart_acronymc                 C   s.   | j |ddd | j| j|dddd d S )NaddressFr4   prer&   r   CLASS)visit_docinfo_itemr.   rz   r   r   r?   r?   r@   visit_address  s   zHTMLTranslator.visit_addressc                 C   s   | j d |   d S N
</pre>
)r.   rz   depart_docinfo_itemr   r?   r?   r@   depart_address
  s   zHTMLTranslator.depart_addressc                 C   s   | j | j|ddgd d S )NasideZ
admonitionr   r   r   r?   r?   r@   visit_admonition     zHTMLTranslator.visit_admonitionc                 C   r   N	</aside>
r   r   r?   r?   r@   depart_admonition  r   z HTMLTranslator.depart_admonition)u   —r&   )())r&   r&   r    c                 C   s<   | j | jj \}}| j| | j| j|d|dd d S )Npattributionr   )attribution_formatsrO   r   r   rz   r.   r   )r>   r   r   r   r?   r?   r@   visit_attribution  s
   z HTMLTranslator.visit_attributionc                 C   s   | j | j d  d S N</p>
r.   rz   r   r   r   r?   r?   r@   depart_attribution     z!HTMLTranslator.depart_attributionc                 C   s*   t |jtjs| |d | jd d S )Nauthorz<p>)r   parentr   authorsr   r.   rz   r   r?   r?   r@   visit_author"  s   zHTMLTranslator.visit_authorc                 C   s6   | j d t|jtjr| j d d S |   d S )N</p>rT   )r.   rz   r   r  r   r  r   r   r?   r?   r@   depart_author'  s   zHTMLTranslator.depart_authorc                 C      |  |d d S )Nr  r   r   r?   r?   r@   visit_authors.  r   zHTMLTranslator.visit_authorsc                 C      |    d S r;   r   r   r?   r?   r@   depart_authors1     zHTMLTranslator.depart_authorsc                 C      | j | |d d S )NZ
blockquoter   r   r?   r?   r@   visit_block_quote4     z HTMLTranslator.visit_block_quotec                 C   r   )Nz</blockquote>
r   r   r?   r?   r@   depart_block_quote7  r   z!HTMLTranslator.depart_block_quotec                 C   s2   t | j}z|| W dS  tjy   Y dS w )z7Check for a simple list that can be rendered compactly.FT)SimpleListCheckerrB   walkr   	NodeFound)r>   r   rC   r?   r?   r@   check_simple_list:  s   
z HTMLTranslator.check_simple_listc                 C   sx   d|d v rdS d|d v rdS t |tjtjfr| jjsdS t |tjtjfr.| jjs.dS d|j	d v r7dS | 
|S )Ncompactr   TrN   Fcontents)r   r   
field_listZdefinition_listrO   r%   enumerated_listbullet_listr$   r  r  r   r?   r?   r@   is_compactableK  s   
zHTMLTranslator.is_compactablec                 C   sb   i }| j }| j| j | jf d | _| || _ | j r!|s!d|d< | j| j|dfi | d S )Nsimpler   Zul)r   r   rz   r   r  r.   r   )r>   r   r   Zold_compact_simpler?   r?   r@   visit_bullet_list^  s   
 z HTMLTranslator.visit_bullet_listc                 C   s"   | j  \| _| _| jd d S )Nz</ul>
)r   r   r   r   r.   rz   r   r?   r?   r@   depart_bullet_listh  s   z!HTMLTranslator.depart_bullet_listc                 C      | j | j|dddd d S )Nr   r&   captionr   r   r   r?   r?   r@   visit_captionl  r   zHTMLTranslator.visit_captionc                 C   r   r   r   r   r?   r?   r@   depart_captiono  r   zHTMLTranslator.depart_captionc                 C   s@   t | t|s| jd | j| j|d|jgdd d S )Nz(<div role="list" class="citation-list">
divzdoc-biblioentryr   role)r   previous_siblingtyper.   rz   r   r   r   r?   r?   r@   visit_citations  s
   zHTMLTranslator.visit_citationc                 C   8   | j d t|jdddt|s| j d d S d S )N</div>
FTZdescendZsiblingsr.   rz   r   	next_noder+  r   r?   r?   r@   depart_citation|     zHTMLTranslator.depart_citationc              
   C   sZ   d}d|v r||d 7 }nd|v r|| j j|d  7 }| j| j|dd|dgdd d S )	N#refidrefnamea[zcitation-referencezdoc-biblioref)r   hrefr   r)  )rB   Znameidsr.   rz   r   )r>   r   r9  r?   r?   r@   visit_citation_reference  s   z'HTMLTranslator.visit_citation_referencec                 C   r   )Nz]</a>r   r   r?   r?   r@   depart_citation_reference  r   z(HTMLTranslator.depart_citation_referencec                 C   r#  )Nspanr&   
classifierr   r   r   r?   r?   r@   visit_classifier  r   zHTMLTranslator.visit_classifierc                 C   r   N</span>r   r   r?   r?   r@   depart_classifier  r   z HTMLTranslator.depart_classifierc                 C   s&   | j | |jj|jd d S )Nstub)r   rz   r  stubsr   r   r   r?   r?   r@   visit_colspec  s   zHTMLTranslator.visit_colspecc              	   C   s   t |jdddtjrd S d|jjd v s#d| jjvr%d|jjd vr%d S | j| 	|d t
d	d
 | jD }| jD ]}|d | }| j| j|dd|dd q<| jd d S )NFTr/  r   r   r   r   Zcolgroupc                 s   s    | ]}|d  V  qdS )colwidthNr?   )rl   r   r?   r?   r@   	<genexpr>  s    z0HTMLTranslator.depart_colspec.<locals>.<genexpr>rE  colzwidth: z.1%)stylez</colgroup>
)r   r1  r   Zcolspecr  rO   table_styler.   rz   r   sumr   r   )r>   r   Ztotal_widthrE  r?   r?   r@   depart_colspec  s    


zHTMLTranslator.depart_colspecz-(?=-)c                 C   s    | j d|d|   tj)z%Escape double-dashes in comment text.z<!-- %s -->
z- )r.   rz   r   r   SkipNode)r>   r   r   r?   r?   r@   visit_comment  s   zHTMLTranslator.visit_commentc                 C      | j | j|ddd d S )Nr'  Zcompoundr   r   r   r?   r?   r@   visit_compound     zHTMLTranslator.visit_compoundc                 C   r   Nr.  r   r   r?   r?   r@   depart_compound  r   zHTMLTranslator.depart_compoundc                 C   rN  )Nr'  zdocutils containerr   r   r   r?   r?   r@   visit_container  s   zHTMLTranslator.visit_containerc                 C   r   rQ  r   r   r?   r?   r@   depart_container  r   zHTMLTranslator.depart_containerc                 C      | j |ddd d S )NcontactFr   r  r   r?   r?   r@   visit_contact  rA   zHTMLTranslator.visit_contactc                 C   r  r;   r  r   r?   r?   r@   depart_contact  r  zHTMLTranslator.depart_contactc                 C   r  )N	copyrightr  r   r?   r?   r@   visit_copyright  r   zHTMLTranslator.visit_copyrightc                 C   r  r;   r  r   r?   r?   r@   depart_copyright  r  zHTMLTranslator.depart_copyrightc                 C   r  )Ndater  r   r?   r?   r@   
visit_date  r   zHTMLTranslator.visit_datec                 C   r  r;   r  r   r?   r?   r@   depart_date  r  zHTMLTranslator.depart_datec                 C   r   r;   r?   r   r?   r?   r@   visit_decoration  r   zHTMLTranslator.visit_decorationc                 C   r   r;   r?   r   r?   r?   r@   depart_decoration  r   z HTMLTranslator.depart_decorationc                 C   sF   d|j j d v r| jd d S | jd | j| |dd d S )Ndetailsr   z</summary>
z</dt>
ddr&   r  r.   rz   r   r   r?   r?   r@   visit_definition  s   zHTMLTranslator.visit_definitionc                 C   s$   d|j j d vr| jd d S d S )Nra  r   </dd>
r  r.   rz   r   r?   r?   r@   depart_definition  s   z HTMLTranslator.depart_definitionc                 C   s@   d|d vr|  |rdgng }| j| j|d|d d S d S )Nra  r   r   dlr   )r  r.   rz   r   r>   r   r   r?   r?   r@   visit_definition_list  s   z$HTMLTranslator.visit_definition_listc                 C   s    d|d vr| j d d S d S )Nra  r   </dl>
r   r   r?   r?   r@   depart_definition_list  s   z%HTMLTranslator.depart_definition_listc                 C   sL   d|j d v r$i }d|j d v rd|d< | j| j|dfi | d S d S )Nra  r   rN   rc  r>   r   r   r?   r?   r@   visit_definition_list_item  s    z)HTMLTranslator.visit_definition_list_itemc                 C   s"   d|j d v r| jd d S d S )Nra  r   z</details>
rf  r   r?   r?   r@   depart_definition_list_item  s   z*HTMLTranslator.depart_definition_list_itemc                 C   r   )Nrb  r&   r   r   r?   r?   r@   visit_description  r  z HTMLTranslator.visit_descriptionc                 C   r   Nre  r   r   r?   r?   r@   depart_description  r   z!HTMLTranslator.depart_descriptionc                 C   sH   | j t| j dg}| |r|d | j| j|d|d d S )Nr-   r   rh  r   )r   rz   lenr.   r  r   ri  r?   r?   r@   visit_docinfo  s
   

zHTMLTranslator.visit_docinfoc                 C   s0   | j d | j }| j |d  | _g | _ d S Nrk  )r.   rz   r   r   r-   )r>   r   startr?   r?   r@   depart_docinfo  s   

zHTMLTranslator.depart_docinfoTc                 C   s^   |rd||  | f }| | | jd|| jj| f  | j| j|dd|d d S )Nz <meta name="%s" content="%s" />
z3<dt class="%s">%s<span class="colon">:</span></dt>
rb  r&   r   )r   r   add_metar.   rz   rx   labelsr   )r>   r   r   r4   Zmeta_tagr?   r?   r@   r     s   
z!HTMLTranslator.visit_docinfo_itemc                 C   r   rq  r   r=   r?   r?   r@   r     r   z"HTMLTranslator.depart_docinfo_itemc                 C   s"   | j | j|ddg dd d S )Nr   r&   )codepythonZdoctest)r   r   r   r   r?   r?   r@   visit_doctest_block  s   z"HTMLTranslator.visit_doctest_blockc                 C   r   r   r   r   r?   r?   r@   depart_doctest_block"  r   z#HTMLTranslator.depart_doctest_blockc                 C   s:   | ddptj|d pd}| jd| |  d S )Nr0   r&   sourcezdocutils document without titlez<title>%s</title>
)r   osrm   basenamer*   rz   r   )r>   r   r0   r?   r?   r@   visit_document%  s   zHTMLTranslator.visit_documentc                 C   sD  | j | j| jd| jji g | j| j | j	d| j
| jj  | j	d| j
| jj  dd| jv r=| jd | jrT| jdkrM| j| j n| j| j | j| jdd   | j| j|dd	d
 | j	dd | j| j | j| jdd  | j | j | j | jd d   | jrJ dt| j d S )Nrd   r   zname="dcterms.r&   z<<link rel="schema.dcterms"href="http://purl.org/dc/terms/"/>mathjaxr   r'  rB   r   r.  zlen(context) = %s)r)   r   doctypehead_prefix_templaterO   rv   r6   rz   r4   insertr   rX   r*   rV   r   r   r   r7   r+   r   r/   r5   r.   r:   r,   r-   r   rs  r   r?   r?   r@   depart_document*  s4   


zHTMLTranslator.depart_documentc                 C   r   )NZemr&   r   r   r?   r?   r@   visit_emphasisC  r  zHTMLTranslator.visit_emphasisc                 C   r   )Nz</em>r   r   r?   r?   r@   depart_emphasisF  r   zHTMLTranslator.depart_emphasisc                 C   s   dg i}t |jjtjr|d d |jjjj|jj r$|d d |d r+d}nd}|j jd7  _d|v rA|d d |d< d	|v rW|d	 d |d
< |j j|d	 7  _| j| j||dfi | | j	d|
   d S )Nr   r*   rB  thtdr   ZmorerowsZrowspanZmorecolsZcolspanr&   </%s>
)r   r  r   theadrz   rC  columnr.   r   r   r   )r>   r   r   r   r?   r?   r@   visit_entryI  s    zHTMLTranslator.visit_entryc                 C      | j | j  d S r;   r  r   r?   r?   r@   depart_entry]     zHTMLTranslator.depart_entryc                 C   sn   dg i}d|v r|d |d< d|v r|d  |d  | |r'|d  d | j | j|dfi | d S )Nr   rv  Zenumtyper   Zol)rz   r  r.   r   rm  r?   r?   r@   visit_enumerated_list`  s   
 z$HTMLTranslator.visit_enumerated_listc                 C   r   )Nz</ol>
r   r   r?   r?   r@   depart_enumerated_listj  r   z%HTMLTranslator.depart_enumerated_listc              	   C   s   i }| dg }t|D ],\}}|dr8zt|dd  d}W n
 ty*   Y  nw d| |d< ||  nq|d | |rH|d | j| j	|d	fi | d S )
Nr   zfield-indent-   pxz--field-indent: %s;rH  z
field-listr   rh  )

setdefault	enumerater   r   
ValueErrorr   rz   r  r.   r   )r>   r   r   r   ir   Zindent_lengthr?   r?   r@   visit_field_listm  s&   


	

 zHTMLTranslator.visit_field_listc                 C   r   ru  r   r   r?   r?   r@   depart_field_list  r   z HTMLTranslator.depart_field_listc                 C   r   r;   r?   r   r?   r?   r@   visit_field  r   zHTMLTranslator.visit_fieldc                 C   r   r;   r?   r   r?   r?   r@   depart_field  r   zHTMLTranslator.depart_fieldc                 C   s$   | j | j|dd|jd d d S )Ndtr&   r   r   )r.   rz   r   r  r   r?   r?   r@   visit_field_name  s   zHTMLTranslator.visit_field_namec                 C   r   )Nz"<span class="colon">:</span></dt>
r   r   r?   r?   r@   depart_field_name  r   z HTMLTranslator.depart_field_namec                 C   s:   | j | j|dd|jd d |js| j d d S d S )Nrb  r&   r   r   z<p></p>)r.   rz   r   r  r   r   r?   r?   r@   visit_field_body  s   zHTMLTranslator.visit_field_bodyc                 C   r   rq  r   r   r?   r?   r@   depart_field_body  r   z HTMLTranslator.depart_field_bodyc                 C   sd   ddi}| drd|d  |d< | dr"|d  d|d  7  < | j| j|dfi | d S )	Nr   Zfigurewidthz	width: %srH  alignz align-r'  )r   r.   rz   r   rm  r?   r?   r@   visit_figure  s   

 zHTMLTranslator.visit_figurec                 C   r   rQ  r   r   r?   r?   r@   depart_figure  r   zHTMLTranslator.depart_figurec                 C      | j t| j d S r;   r   rz   rs  r.   r   r?   r?   r@   visit_footer  r  zHTMLTranslator.visit_footerc                 C   sf   | j  }| j|ddddg}|| j|d   |d | j| || jd d< | j|d = d S )Nr'  r3   r   z<hr class="footer" />
z
</div>
r   )r   r   r   r   r.   rz   r3   r/   )r>   r   rv  r3   r?   r?   r@   depart_footer  s   

zHTMLTranslator.depart_footerc                 C   sR   | j j}t| t|s| jd| d | j| j|d|j|gdd d S )Nz<aside class="footnote-list z">
r   Znoter(  )	rO   footnote_referencesr   r*  r+  r.   rz   r   r   )r>   r   Zlabel_styler?   r?   r@   visit_footnote  s   zHTMLTranslator.visit_footnotec                 C   r-  )Nr   FTr/  r0  r   r?   r?   r@   depart_footnote  r3  zHTMLTranslator.depart_footnotec              
   C   sF   d|d  }d| j jg}| j| j|dd|d|d | jd d S )	Nr4  r5  zfootnote-referencer7  r&   zdoc-noteref)r   r   r)  r9  !<span class="fn-bracket">[</span>)rO   r  r.   rz   r   )r>   r   r9  r   r?   r?   r@   visit_footnote_reference  s   z'HTMLTranslator.visit_footnote_referencec                 C   s   | j d | j d d S )Nz!<span class="fn-bracket">]</span></a>r   r   r?   r?   r@   depart_footnote_reference     z(HTMLTranslator.depart_footnote_referencec                 C   s:   d|d v r|  d}| jd| |  tjd S )Nsectnumr       z <span class="sectnum">%s </span>)r   rW   r.   rz   r   r   rL  )r>   r   r  r?   r?   r@   visit_generated  s   zHTMLTranslator.visit_generatedc                 C   r   r;   r?   r   r?   r?   r@   depart_generated  r   zHTMLTranslator.depart_generatedc                 C   r  r;   r  r   r?   r?   r@   visit_header  r  zHTMLTranslator.visit_headerc                 C   sb   | j  }| j|dddg}|| j|d   |d | j| | j| | j|d = d S )Nr'  r2   r   z
<hr class="header"/>
</div>
)r   r   r   r   r.   rz   r+   r2   )r>   r   rv  r2   r?   r?   r@   depart_header  s   

zHTMLTranslator.depart_headerc              
   C   s`  i }|d }t |d }d|v r|d |d< d|v r!|d |d< d|v rtrd|vs/d|vr| jjrt|}ztj|}|j}W d    n1 sLw   Y  W n t	t
fy]   Y n%w | jj|dd d|vrud|d  |d< d|vrd|d	  |d< ~d
D ]*}||v rtd|| }	|	sJ dt|	d	t|d d  |	df ||< qg }
d
D ]$}||v rtd|| r||  d7  < |
d||| f  ||= q|
rd|
|d< t|jtjst|jtjrt|jjtjsd}nd}d|v r	d|d  |d< | jdkrfztt|d}| }W d    n	1 s'w   Y  W n t	yL } z| jjd||jf  W Y d }~n(d }~ww | jj|dd t |! }d||f }n
| jdkrpd|d< |dkr||d < | j"|d!dfd"|i||#d#| d$ | }n|#d#|d |d#< | j$|d%|fd&|i|}| j%| d S )'Nr   r   r  heightZscale\/z%dpxr   )r  r  z([0-9.]+)(\S*)$z%s%sd      z	^[0-9.]+$r  z%s: %s;r   rH  r&   rT   r  align-%sr   rr   rbzCannot embed image %r: %szdata:%s;base64,%sZlazyZloadingzapplication/x-shockwave-flashr+  objectdataZaltz	</object>imgsrc)&	mimetypesZ
guess_typer	   rO   Zfile_insertion_enabledr   ZImagerN   sizer   UnicodeEncodeErrorr   r   r   rematchfloatgrouprz   rV   r   r  r   TextElement	referencero   rQ   rB   rw   r   strerrorbase64	b64encodedecoder   r   r   r.   )r>   r   r   r   ZmimetypeZ	imagepathr  ZimgsizeZatt_namer  rH  r   Z	imagefileZ	imagedatar   Zdata64tagr?   r?   r@   visit_image  s   







zHTMLTranslator.visit_imagec                 C   r   r;   r?   r   r?   r?   r@   depart_image8  r   zHTMLTranslator.depart_imagec                 C   r   )Nr<  r&   r   r   r?   r?   r@   visit_inline;  r  zHTMLTranslator.visit_inlinec                 C   r   r?  r   r   r?   r?   r@   depart_inline>  r   zHTMLTranslator.depart_inlinec                 C   sZ   | j d | j d | jjr)|jdg }t|dkr+| j d|d   d S d S d S )Nz<span class="label">r  backrefsr   z"<a role="doc-backlink" href="#%s">r   )r.   rz   rO   footnote_backlinksr  r   rs  )r>   r   r  r?   r?   r@   visit_labelB  s   
zHTMLTranslator.visit_labelc                 C   s|   g }| j jr|jd|}t|dkr| jd | jd t|dkr<dd t|dD }| jdd|  d S d S )	Nr  r   r  z)<span class="fn-bracket">]</span></span>
c                 S   s   g | ]
\}}d ||f qS )z(<a role="doc-backlink" href="#%s">%s</a>r?   )rl   r  refr?   r?   r@   rn   T  s    z/HTMLTranslator.depart_label.<locals>.<listcomp>z#<span class="backrefs">(%s)</span>
,)	rO   r  r  r   rs  r.   rz   r  rV   )r>   r   r  	backlinksr?   r?   r@   depart_labelL  s   
zHTMLTranslator.depart_labelc                 C   rN  )Nr'  Zlegendr   r   r   r?   r?   r@   visit_legendY  rP  zHTMLTranslator.visit_legendc                 C   r   rQ  r   r   r?   r?   r@   depart_legend\  r   zHTMLTranslator.depart_legendc                 C   s6   | j | j|dddd t|s| j d d S d S )Nr'  r&   liner   z<br />)r.   rz   r   rs  r   r?   r?   r@   
visit_line_  s   zHTMLTranslator.visit_linec                 C   r   rQ  r   r   r?   r?   r@   depart_lined  r   zHTMLTranslator.depart_linec                 C   rN  )Nr'  z
line-blockr   r   r   r?   r?   r@   visit_line_blockg  rP  zHTMLTranslator.visit_line_blockc                 C   r   rQ  r   r   r?   r?   r@   depart_line_blockj  r   z HTMLTranslator.depart_line_blockc                 C   r   )NZlir&   r   r   r?   r?   r@   visit_list_itemm  r  zHTMLTranslator.visit_list_itemc                 C   r   )Nz</li>
r   r   r?   r?   r@   depart_list_itemp  r   zHTMLTranslator.depart_list_itemc                 C   s   |d }d|v r| |d | j| |dd d S | j| j|dddd | }t|jtj	s;|
dd}| j|D ]!}| rY| j|rY| jd	| |  qA| j| | qA| jd
 tj)Nr   rz  r&   r<  zdocutils literalr   rT   r   z<span class="pre">%s</span>r@  )r   r   r.   rz   r   r   r   r  r   Zliteral_blockr   words_and_spacesfindallr   in_word_wrap_pointsearchr   rL  )r>   r   r   r   tokenr?   r?   r@   visit_literalt  s&   zHTMLTranslator.visit_literalc                 C   r   )N</code>r   r   r?   r?   r@   depart_literal  s   zHTMLTranslator.depart_literalc                 C   s:   | j | j|dddd d|d v r| j d d S d S )Nr   r&   literal-blockr   rz  r   z<code>r   r   r?   r?   r@   visit_literal_block  s   z"HTMLTranslator.visit_literal_blockc                 C   s(   d|d v r| j d | j d d S )Nrz  r   r  z</pre>
r   r   r?   r?   r@   depart_literal_block  s   z#HTMLTranslator.depart_literal_block)r'  r<  Zformula)r   ttmath)r'  r&   r&   )r'  r<  r  r   latexmathmlr  r&   c              
      s   j  jvr jjd j  d d _  j j  |dk } j j  d }ddddd	}| j  |dk } j d
krH jrF jd dkrHd }| tj	}|riz	||||f }W n t
yh   || }Y nw  j dv rs |} j dkr jsz jd  _W n ty    jjd Y nw d jvr  jd7  _ j j g _n j dkrЈ jrĈ jsć fdd jd dD  _|dktj_t|}n j d
krd jv r j _ j _d j }zA|dkrt| jj}n2|dkrt| jj}n$|dkrtj||  jjd}n|s$tj || d}n jjd W nc t!y8   t!d t"y }	 zK jjj|	|d}
 #|
  j$% &|d  j$%d|	j'  j$%d   j$% j&|d!d"d#  j$% |  j$%d$  (|
 t)j*d }	~	ww |r j$% j&||d%t+| |d&  j$%| |r j$%d% |r j$%d'|  |rǈ j$%d% t)j*)(Nzmath-output format "z'" not supported falling back to "latex"r  r&   r  )z$%s$\begin{%s}
%s
\end{%s})NN)z\(%s\)r  r  r  r   	blahtexml)r  r  r  z@No MathJax URL specified, using local fallback (see config.html)?z?config=TeX-AMS_CHTMLr   c                    s&   g | ]} j t| jjd dqS )T)r   )rk   r   Zfind_file_in_dirsrO   Zstylesheet_dirs)rl   sr=   r?   r@   rn     s    
z-HTMLTranslator.visit_math.<locals>.<listcomp>r  zXHTML 1r   latexmlttm)inlinerw   )r  z3option "%s" not supported with math-output "MathML"zis "latexmlmath" in your PATH?)Z	base_noder   r  r   r  r   r   rT   r   </%s>),r   	math_tagsrB   rw   r   r   r   rJ   r   Zuni2tex_table	TypeErrorr   r   mathjax_urlr   warningmathjax_scriptrb   r   ZDocumentParametersZdisplaymoder  doctype_mathmlZcontent_type_mathmlr   rV   r   r   r  r  r  r   Z
tex2mathmlr   SyntaxErrorvisit_system_messager.   rz   r   argsdepart_system_messager   rL  r   )r>   r   math_envr  ZclsargZwrapperswrapperZ	math_code	converterr   Zerr_noder?   r=   r@   
visit_math  s   











zHTMLTranslator.visit_mathc                 C   r   r;   r?   r   r?   r?   r@   depart_math  r   zHTMLTranslator.depart_mathc                 C   s   t | }| j||d d S )N)r	  )r   r   r  )r>   r   r	  r?   r?   r@   visit_math_block  s   zHTMLTranslator.visit_math_blockc                 C   r   r;   r?   r   r?   r?   r@   depart_math_block  r   z HTMLTranslator.depart_math_blockc                 C   s&   | j |dfi | }| | d S )Nr4   )r   Znon_default_attributesrx  )r>   r   r4   r?   r?   r@   
visit_meta  s   zHTMLTranslator.visit_metac                 C   r   r;   r?   r   r?   r?   r@   depart_meta!  r   zHTMLTranslator.depart_metac                 C   s   | j | | j| d S r;   )r4   rz   r*   )r>   r  r?   r?   r@   rx  $  r  zHTMLTranslator.add_metac                 C   r#  )Nr<  r&   optionr   r   r   r?   r?   r@   visit_option(  r   zHTMLTranslator.visit_optionc                 C   s6   | j d t|jdddtjr| j d d S d S )Nr@  FTr/  , )r.   rz   r   r1  r   r  r   r?   r?   r@   depart_option+  s   zHTMLTranslator.depart_optionc                 C   s.   | j |dd | j | |dd d S )N	delimiterr   varr&   )r.   rz   r   r   r   r?   r?   r@   visit_option_argument1  s   z$HTMLTranslator.visit_option_argumentc                 C   r   )Nz</var>r   r   r?   r?   r@   depart_option_argument5  r   z%HTMLTranslator.depart_option_argumentc                 C   s&   | j | |dd | j d d S )Nr  r&   z<kbd>r   r   r?   r?   r@   visit_option_group8  s   z!HTMLTranslator.visit_option_groupc                 C   r   )Nz</kbd></dt>
r   r   r?   r?   r@   depart_option_group<  r   z"HTMLTranslator.depart_option_groupc                 C   rN  )Nrh  zoption-listr   r   r   r?   r?   r@   visit_option_list?  s   z HTMLTranslator.visit_option_listc                 C   r   ru  r   r   r?   r?   r@   depart_option_listC  r   z!HTMLTranslator.depart_option_listc                 C   r   r;   r?   r   r?   r?   r@   visit_option_list_itemF  r   z%HTMLTranslator.visit_option_list_itemc                 C   r   r;   r?   r   r?   r?   r@   depart_option_list_itemI  r   z&HTMLTranslator.depart_option_list_itemc                 C   r   r;   r?   r   r?   r?   r@   visit_option_stringL  r   z"HTMLTranslator.visit_option_stringc                 C   r   r;   r?   r   r?   r?   r@   depart_option_stringO  r   z#HTMLTranslator.depart_option_stringc                 C   r  )NZorganizationr  r   r?   r?   r@   visit_organizationR  r   z!HTMLTranslator.visit_organizationc                 C   r  r;   r  r   r?   r?   r@   depart_organizationU  r  z"HTMLTranslator.depart_organizationc                 C   r   )Nr   r&   r   r   r?   r?   r@   visit_paragraphg  r  zHTMLTranslator.visit_paragraphc                 C   sB   | j d t|jtjtjfrt|jdks| j d d S d S )Nr	  r   rT   )r.   rz   r   r  r   Z	list_itementryrs  r   r?   r?   r@   depart_paragraphj  s
   zHTMLTranslator.depart_paragraphc                 C   sV   | dr| jd|d   | jd n| jd | j| j|dddd d S )Nr5  z<a href="#%s">r  r&   r<  Zproblematicr   )hasattrr.   rz   r   r   r   r?   r?   r@   visit_problematicp  s
   
z HTMLTranslator.visit_problematicc                 C   s"   | j d | j | j  d S r?  r  r   r?   r?   r@   depart_problematicx  s   z!HTMLTranslator.depart_problematicc                 C   sz   d| dd v r:t|jtjrd}nd}|d r&| j| j||dd | j|	  |d r:| jd|  tj
)	Nr   formatr&   r<  r'  r   )r   r  )r   rb   r   r  r   r  r.   rz   r   r   rL  )r>   r   r   r?   r?   r@   	visit_raw|  s   zHTMLTranslator.visit_rawc                 C   s  ddi}d|v r.|d |d< | j jr%|d dr%| |d |d< d| _|d  d7  < nd|v s6J d	d
|d  |d< |d  d7  < t|dkr\t|d tjr\|d  d7  < t|j	tj
s{t|dkrqt|d tjssJ |d  d7  < | j| j|ddfi | d S )Nr   r  refurir9  zmailto:Tz	 externalr5  z3References must have "refuri" or "refid" attribute.r4  z	 internalr   r   z image-referencer7  r&   )rO   r   r   r   r   rs  r   r   imager  r  r.   rz   r   rm  r?   r?   r@   visit_reference  s(   
 "zHTMLTranslator.visit_referencec                 C   s0   | j d t|jtjs| j d d| _d S )Nr  rT   F)r.   rz   r   r  r   r  r   r   r?   r?   r@   depart_reference  s   
zHTMLTranslator.depart_referencec                 C   rU  )NrevisionFr   r  r   r?   r?   r@   visit_revision  rA   zHTMLTranslator.visit_revisionc                 C   r  r;   r  r   r?   r?   r@   depart_revision  r  zHTMLTranslator.depart_revisionc                 C   s    | j | |dd d|_d S )Ntrr&   r   )r.   rz   r   r  r   r?   r?   r@   	visit_row  s   
zHTMLTranslator.visit_rowc                 C   r   )Nz</tr>
r   r   r?   r?   r@   
depart_row  r   zHTMLTranslator.depart_rowc                 C   r#  )Nr   r&   Zrubricr   r   r   r?   r?   r@   visit_rubric  r   zHTMLTranslator.visit_rubricc                 C   r   r   r   r   r?   r?   r@   depart_rubric  r   zHTMLTranslator.depart_rubricc                 C   s*   |  j d7  _ | j| j|ddd d S )Nr   r'  sectionr   )r{   r.   rz   r   r   r?   r?   r@   visit_section  s   zHTMLTranslator.visit_sectionc                 C   s   |  j d8  _ | jd d S )Nr   r.  )r{   r.   rz   r   r?   r?   r@   depart_section  s   zHTMLTranslator.depart_sectionc                 C   s"   | j | j|ddd d| _d S )Nr'  sidebarr   T)r.   rz   r   r   r   r?   r?   r@   visit_sidebar  s   
zHTMLTranslator.visit_sidebarc                 C   s   | j d d| _d S )Nr.  F)r.   rz   r   r   r?   r?   r@   depart_sidebar  s   
zHTMLTranslator.depart_sidebarc                 C   rU  )NstatusFr   r  r   r?   r?   r@   visit_status  rA   zHTMLTranslator.visit_statusc                 C   r  r;   r  r   r?   r?   r@   depart_status  r  zHTMLTranslator.depart_statusc                 C   r   )NZstrongr&   r   r   r?   r?   r@   visit_strong  r  zHTMLTranslator.visit_strongc                 C   r   )Nz	</strong>r   r   r?   r?   r@   depart_strong  r   zHTMLTranslator.depart_strongc                 C   r   )Nr   r&   r   r   r?   r?   r@   visit_subscript  r  zHTMLTranslator.visit_subscriptc                 C   r   )Nz</sub>r   r   r?   r?   r@   depart_subscript  r   zHTMLTranslator.depart_subscriptc                 C      t j)zInternal only.r   rL  r   r?   r?   r@   visit_substitution_definition     z,HTMLTranslator.visit_substitution_definitionc                 C   s   |  | d S r;   )unimplemented_visitr   r?   r?   r@   visit_substitution_reference  s   z+HTMLTranslator.visit_substitution_referencec                 C   sn   t |jtjrdg}nt |jtjrdg}t| jd | _n
t |jtjr(dg}| j	| j
|dd|d d S )Nzsidebar-subtitler1   r   zsection-subtitler   r&   r   )r   r  r   r;  rB   rs  r.   r   r8  rz   r   ri  r?   r?   r@   visit_subtitle  s   zHTMLTranslator.visit_subtitlec                 C   sb   | j d t|jtjr/| j | jd | _d| _| j	| j  | j
	| j  | j d d = d S d S )Nr  r  r   )r.   rz   r   r  r   rB   r   r1   r,   r   r9   r   r?   r?   r@   depart_subtitle  s   zHTMLTranslator.depart_subtitlec                 C   r   )Nsupr&   r   r   r?   r?   r@   visit_superscript  r  z HTMLTranslator.visit_superscriptc                 C   r   )Nz</sup>r   r   r?   r?   r@   depart_superscript  r   z!HTMLTranslator.depart_superscriptc              	   C   s   | j | j|ddd | j d d}t|d rH|d }t|dkr+d|d	  }nd}g }|D ]}|d
||f  |d7 }q1dd| }|drTd|d  }nd}| j d|d |d | |d ||f  d S )Nr   zsystem-messager   z <p class="system-message-title">r&   r  r   z%; <em><a href="#%s">backlink</a></em>r   z<a href="#%s">%s</a>z; <em>backlinks: %s</em>r  r  z	, line %szISystem Message: %s/%s (<span class="docutils literal">%s</span>%s)%s</p>
r+  levelr~  )r.   rz   r   rs  rV   r'  r   )r>   r   Zbackref_textr  r  r  Zbackrefr  r?   r?   r@   r    s2   


z#HTMLTranslator.visit_system_messagec                 C   r   r   r   r   r?   r?   r@   r    r   z$HTMLTranslator.depart_system_messagec                 C   sr   d| j jdd i}d|v r|d d|d   d|v r'd|d  |d< | j|d	fi |}| j| d S )
Nr   r  r   r  r  r  z
width: %s;rH  r   )rO   rI  r   rb   rz   r   r.   )r>   r   r   r  r?   r?   r@   visit_table  s   zHTMLTranslator.visit_tablec                 C   r   )Nz	</table>
r   r   r?   r?   r@   depart_table'  r   zHTMLTranslator.depart_tablec                 C   sR   d|vr!d|vr!d|vr!| j | j|dddd | jd d S | jd d S )	Nr,  r5  r6  r<  r&   targetr   r@  )r.   rz   r   r   r   r?   r?   r@   visit_target*  s   zHTMLTranslator.visit_targetc                 C   r  r;   r  r   r?   r?   r@   depart_target3  r  zHTMLTranslator.depart_targetc                 C   r  )NZtbodyr   r   r?   r?   r@   visit_tbody7  r  zHTMLTranslator.visit_tbodyc                 C   r   )Nz	</tbody>
r   r   r?   r?   r@   depart_tbody:  r   zHTMLTranslator.depart_tbodyc              	   C   sV   d|j j d v r| j| |dd d S | j| j|dd|j d |j d d d S )Nra  r   summaryr&   r  r   )r   r   rc  r   r?   r?   r@   
visit_term=  s   zHTMLTranslator.visit_termc                 C   r   r;   r?   r   r?   r?   r@   depart_termF  s   zHTMLTranslator.depart_termc                 C   s   g | _ g |_d S r;   )r   rC  r   r?   r?   r@   visit_tgroupK  s   
zHTMLTranslator.visit_tgroupc                 C   r   r;   r?   r   r?   r?   r@   depart_tgroupO  r   zHTMLTranslator.depart_tgroupc                 C   r  )Nr  r   r   r?   r?   r@   visit_theadR  r  zHTMLTranslator.visit_theadc                 C   r   )Nz	</thead>
r   r   r?   r?   r@   depart_theadU  r   zHTMLTranslator.depart_theadc                 C   s   i }| j | j d }dt|d }|dkr||d< | j||dfi |}|drRi }d|d< d	|d
< d|d  |d< || jt ddfi |7 }d| }||fS d| }||fS )Nr   zh%i   z
aria-levelr&   r5  ztoc-backrefr   zdoc-backlinkr)  r4  r9  r7  z
</a></%s>
r  )r{   r}   minr   r'  r   r  )r>   r   r   Zh_levelr   	start_tag	close_tagr?   r?   r@   section_title_tagsX  s    
z!HTMLTranslator.section_title_tagsc                 C   s"  d}t |jtjr| j| j|dddd nrt |jtjr,| j| j|dddd n]t |jtjrA| j| j|dddd nHt |jtj	rV| j| |dd d	}n3t |jtj
rs| j| j|d
ddd d}t| j| _nt |jtjs|J | |\}}| j| | j| d S )Nr  r   r&   ztopic-titler   zsidebar-titlezadmonition-titler$  z</caption>
Zh1r0   z</h1>
)r   r  r   topicr.   rz   r   r;  Z
Admonitionr   rB   rs  r   r8  rc  r   )r>   r   rb  ra  r?   r?   r@   visit_titlek  s4   zHTMLTranslator.visit_titlec                 C   s`   | j | j  | jr.| j | jd | _d| _| j| j  | j| j  | j d d = d S d S )Nr  r   )	r.   rz   r   r   r   r0   r,   r   r8   r   r?   r?   r@   depart_title  s   zHTMLTranslator.depart_titlec                 C   r   )NZciter&   r   r   r?   r?   r@   visit_title_reference  r  z$HTMLTranslator.visit_title_referencec                 C   r   )Nz</cite>r   r   r?   r?   r@   depart_title_reference  r   z%HTMLTranslator.depart_title_referencec                 C   rN  )Nr'  rd  r   r   r   r?   r?   r@   visit_topic  rP  zHTMLTranslator.visit_topicc                 C   r   rQ  r   r   r?   r?   r@   depart_topic  r   zHTMLTranslator.depart_topicc                 C   rN  )NhrrY   r   )r.   rz   r   r   r?   r?   r@   visit_transition  rP  zHTMLTranslator.visit_transitionc                 C   r   r;   r?   r   r?   r?   r@   depart_transition  r   z HTMLTranslator.depart_transitionc                 C   rU  )NrU   Fr   r  r   r?   r?   r@   visit_version  rA   zHTMLTranslator.visit_versionc                 C   r  r;   r  r   r?   r?   r@   depart_version  r  zHTMLTranslator.depart_versionc                 C   s   t d|jj )Nz$visiting unimplemented node type: %s)NotImplementedError	__class__r_   r   r?   r?   r@   rI    s   z"HTMLTranslator.unimplemented_visitr;   )rT   F)rT   )r   )T)r&   )r_   r`   ra   __doc__r'   r  r  r  r   ry   r  r  r   r   r  compiler  r  r   ordr   ru   r   r   r   r   r   rk   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,  r2  r:  r;  r>  rA  rD  rK  r   rM  rO  rR  rS  rT  rW  rX  rZ  r[  r]  r^  r_  r`  rd  rg  rj  rl  rn  ro  rp  rr  rt  rw  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  rx  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r&  r(  r)  r+  r.  r/  r1  r2  r4  r5  r6  r7  r9  r:  r<  r=  r?  r@  rA  rB  rC  rD  rG  rJ  rK  rL  rN  rO  r  r  rQ  rR  rT  rU  rV  rW  rY  rZ  r[  r\  r]  r^  rc  re  rf  rg  rh  ri  rj  rl  rm  rn  ro  rI  r?   r?   r?   r@   rc      s   8

I

B
	




		Q

j
					rc   c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 ZeZeZ	eZ
eZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZeZ eZ!eZ"d
S )r  a  
    Raise `nodes.NodeFound` if non-simple list item is encountered.

    Here "simple" means a list item containing nothing other than a single
    paragraph, a simple list, or a paragraph followed by a simple list.

    This version also checks for simple field lists and docinfo.
    c                 C   rE  r;   )r   r  r   r?   r?   r@   default_visit  s   zSimpleListChecker.default_visitc                 C   sr   dd |j D }|r.t|d tjr.t|d tjs*t|d tjs*t|d tjr.|  t|dkr6d S tj	)Nc                 S   r   r?   r   )rl   r   r?   r?   r@   rn     s    

z5SimpleListChecker.visit_list_item.<locals>.<listcomp>r   r  r   )
r   r   r   Z	paragraphr  r  r  r   rs  r  )r>   r   r   r?   r?   r@   r    s   z!SimpleListChecker.visit_list_itemc                 C   r   r;   r?   r   r?   r?   r@   	pass_node  r   zSimpleListChecker.pass_nodec                 C   rE  r;   rF  r   r?   r?   r@   ignore_node  rH  zSimpleListChecker.ignore_nodeN)#r_   r`   ra   rr  ru  r  rv  rw  r   r$  r!  r  rt  r  r  r   rW  rZ  r]  r"  r?  rn  rj  rn  rY  r>  rd  r  r  r  r  rM  rG  rT  Zvisit_pendingr?   r?   r?   r@   r    sB    	r  ) rr  r  r  r  os.pathr  Zurllib.requestr   r~   rY   r   r   r   r   r   Zdocutils.parsers.rst.directivesr   Z&docutils.parsers.rst.directives.imagesr	   Zdocutils.transformsr
   Zdocutils.utils.mathr   r   r   r   r   r   rt   rc   ZGenericNodeVisitorr  r?   r?   r?   r@   <module>   s<                