o
    i*                    @  s  d Z ddlmZ 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	Z	ddl
m  mZ ddlm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!m"Z" dZ#e#roddl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.    )annotationsreStructuredTextN)Path)frontend	languagesnodesutilswriters) length_or_percentage_or_unitless)PIL)
writer_aux)latex2mathml	math2htmltex2mathml_externunichar2texwrap_math_code	MathErrorF)	Transformc                      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ddejdfd2d3gd4ddfd5d6gddejdfd7d8gd9ddfd:d;gd<d=d>fd?d@gdAdBejdCfdDdEgdFdejdfdGdHgdIddfdJdKgdejdLfffZ	dMdNiZ
dOZdPZdQZdRZda fdUdVZdbdXdYZdcd[d\Zd]d^ Zdb fd_d`Z  ZS )dWriter)html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-stylesheetT
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-referencessuperscriptbracketsz<format>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dashparenthesesparensnoner(   zgRemove extra vertical whitespace between items of "simple" bullet lists and enumerated lists. (default)z--compact-listsz3Disable 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_listszClass value(s) assigned to all tables. Defined styles: borderless, booktabs, align-left, align-center, align-right, colwidths-auto, colwidths-grid.z--table-stylez<style> )r   r   zfMath output format (one of "MathML", "HTML", "MathJax", or "LaTeX") and option(s). (default: "MathML")z--math-outputz<format [option(s)]>MathML)r   r   r   z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   output_encoding_error_handlerxmlcharrefreplace)templatez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_bodyreturnlist[type[Transform]]c                   s   t   tjg S N)superget_transformsr   Admonitionsself	__class__ a/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/docutils/writers/_html_base.pyrJ      s   zWriter.get_transformsNonec                 C  sJ   |  | j | _}| j| | jD ]}t| |t|| q|  | _d S rH   )	translator_classdocumentvisitor	walkaboutvisitor_attributessetattrgetattrapply_templateoutput)rM   rU   attrrP   rP   rQ   	translate   s
   
zWriter.translatestrc                 C  s&   t | jjj}|jdd}||   S )Nutf-8encoding)r   rT   settingsr3   	read_textinterpolation_dict)rM   template_pathr3   rP   rP   rQ   rZ      s   zWriter.apply_templatec                 C  sJ   i }| j j}| jD ]}dt| |d||< q	|j|d< tj|d< |S )Nr.   
ra   version)	rT   rb   rW   joinrY   rstripoutput_encodingdocutils__version__)rM   subsrb   r\   rP   rP   rQ   rd      s   


zWriter.interpolation_dictc                   s0   t    | jD ]}dt| || j|< qd S Nr.   )rI   assemble_partsrW   rh   rY   parts)rM   partrN   rP   rQ   ro      s   

zWriter.assemble_parts)rF   rG   rF   rR   )rF   r^   )__name__
__module____qualname__	supportedr   validate_comma_separated_listvalidate_booleansplitvalidate_math_outputsettings_specsettings_defaultsrelative_path_settingsconfig_sectionconfig_section_dependenciesrW   rJ   r]   rZ   rd   ro   __classcell__rP   rP   rN   rQ   r   -   s    
]

	r   c                
      sj  e Zd ZdZdZdZdZdej dZ	dd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Z	 d fddZd d! Zed"fd#d$Zd%d& Zd'd( Zd)d* Zdd.d/Zdd1d2Zdd8d9Zdd;d<Z dd?d@Z!ddAdBZ"ddCdDZ#dƐddFdGZ$ddHdIZ%ddJdKZ&ddLdMZ'ddNdOZ(ddPdQZ)ddRdSZ*ddTdUZ+ddVdWZ,ddXdYZ-dÐddZd[Z.d\d]d]d^d_Z/dd`daZ0ddbdcZ1ddddeZ2ddfdgZ3ddhdiZ4ddjdkZ5ddldmZ6ddndoZ7ddqdrZ8dsdt Z9ddudvZ:ddwdxZ;ddydzZ<dd{d|Z=dd}d~Z>dddZ?dddZ@dddZAdddZBdddZCdddZDdddZEedjFfddZGdddZHdddZIdddZJdddZKdddZLdddZMdddZNdddZOdddZPdddZQdddZRdddZSdddZTdddZUdddZVdddZWdddZXdddZYdddZZdddZ[dddZ\dddZ]dȐdddZ^dddZ_dddZ`dddĄZadddƄZbdddȄZcdddʄZdddd̄Zeddd΄ZfdddЄZgddd҄ZhdddԄZidddքZjddd؄ZkdddڄZlddd܄ZmdddބZndddZodddZpdddZqdddZrdddZsdddZtdddZudddZvdddZwdddZxdddZydd ZzdddZ{dddZ|dddZ}dddZ~ddd ZdddZdddZdddZdddZdd	d
ZdddZdddZdddZdddZdddZdddZdddZdd ZdddZdddZddd Zd!dd"gfd#d$d%gfd!dd%gfd&dg fd!d$d%d'gfd(Zd)d* Zdd+d,Zdd-d.Zdd/d0Zdd1d2Zdd3d4Zdd5d6Zdd7d8Zdd9d:Zdd;d<Zdd=d>Zdd?d@ZddAdBZddCdDZddEdFZddGdHZddIdJZddKdLZddMdNZddOdPZddQdRZddSdTZddUdVZddWdXZdYdZ Zdd[d\Zdd]d^Zdd_d`ZddadbZddcddZddedfZddgdhZddidjZddkdlZddmdnZddodpZddqdrZddsdtZddudvZddwdxZddydzZdd{d|Zdd}d~Zdd ZdddZdddZdddZdddZdddZdddZdddZÐdddZĐdddZŐdddZƐdddZǐdddZȐdddZɐdddZʐdddZːdddZ̐dddZ͐dddZΐdddZϐdd ZАdddZѐdddZҐdddZӐdddZԐdddZՐdddZ֐dddZאdddZؐdddZِdddZڐdd Zۇ  ZS (  HTMLTranslatoram  
    Generic Docutils to HTML translator.

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

    .. 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<!DOCTYPE html>
zW<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="%(lang)s" lang="%(lang)s">
<head>
z<meta charset="%s" />
z)<meta name="generator" content="Docutils z': https://docutils.sourceforge.io/" />
divrT   )tagnameCLASSz2<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;)z	video/mp4z
video/webmz	video/oggrF   rR   c                   s  t  |  j}t|j|j _t|j	 _	d}t
|dd d ur3|jr'd}tjd| dtdd t
|d| _t jjtrJt jj j_ jj\ _ _g  _d	g _g  _d
g _g  _g  _g  _g  _g  _g  _g  _  j!g _"g  _#g  _$g  _% j&g _' fddt()|D  _*g  _+g  _,|j-r j.t(-|j/  j#.t(-d |j/r|j/0 dkrƈ j'1d j!|j/  g  _2	 d _3g  _4d _5d _6d _7d _8d _9d _:d _;d _<g  _=g  _>d S )Nlinkembed_imagesembedz`The configuration setting "embed_images"
  will be removed in Docutils 2.0. Use "image_loading: z".   )
stacklevelimage_loadingz</head>
<body>
z</body>
</html>
c                   s   g | ]}  |qS rP   )stylesheet_call).0pathrL   rP   rQ   
<listcomp>P  s    z+HTMLTranslator.__init__.<locals>.<listcomp>z%sunicoder   TF)?rI   __init__rb   r   get_languagelanguage_codereporterlanguageintinitial_header_levelrY   r   warningswarnFutureWarningr   
isinstancemath_outputr^   r   rz   math_optionsr9   r6   r7   r:   r8   r>   r@   r5   r4   r=   rE   content_typerB   rA   rD   rC   	generatorr?   r   get_stylesheet_listr   r;   r<   r0   appendrj   lowerinsertcontextsection_levelcolspecs	compact_pcompact_simplecompact_field_list
in_docinfo
in_sidebarin_document_title	in_mailtoauthor_in_authorsmath_headermessages)rM   rT   rb   _image_loading_defaultrN   rL   rQ   r   $  s   



zHTMLTranslator.__init__c                 C  s6   d | j| j | j | j | j | j | j | j S rn   )	rh   r4   r5   r   r6   r7   r8   r9   r:   rL   rP   rP   rQ   astextv  s   zHTMLTranslator.astextz[
	]c                 C  s<   |  |d|}| jr| jjr|dd}|dd}|S )z6Cleanse, HTML encode, and return attribute value text. %40z&#37;&#52;&#48;.z&#46;)encodesubr   rb   cloak_email_addressesreplace)rM   text
whitespaceencodedrP   rP   rQ   attval|  s
   zHTMLTranslator.attvalc                 C  s   | dd}| ddS )z;Try to hide the link text of a email link from harversters.r   z<span>&#64;</span>r   z<span>&#46;</span>r   )rM   addrrP   rP   rQ   cloak_email  s   zHTMLTranslator.cloak_emailc                 C  s   | ddS )z*Try to hide a mailto: URL from harvesters.r   r   r   )rM   urirP   rP   rQ   cloak_mailto  s   zHTMLTranslator.cloak_mailtoc                 C  s   t |}|| jS )z-Encode special characters in `text` & return.)r^   r]   special_characters)rM   r   rP   rP   rQ   r     s   zHTMLTranslator.encodenodenodes.imagedict[str, str]c                 C  s   d}i }|D ]}||v rt || ||< qd|v r;t|dk r;| |}|r;t||D ]\}}||vr:|df||< q,|ddd }i }g }	| D ]"\}\}}
||9 }|
rf|	| d|d|
 d qKt| ||< qK|	rwd		|	|d
< |S )a  Determine the image size from node arguments or the image file.

        Return as dictionary of <img> attributes,
        e.g., ``{height': '32', 'style': 'width: 4 em;'}``.

        Auxiliary method called from `self.visit_image()`.
        Provisional.
        widthheightscale   r.   d   : g;r   style)
r   parse_measurelenread_size_with_PILzipgetitemsr   roundrh   )rM   r   
dimensionsmeasures	dimensionimgsizevaluescaling_factor	size_attsdeclarationsunitrP   rP   rQ   
image_size  s0   	
zHTMLTranslator.image_sizetuple[int, int] | Nonec           	   
   C  s  g }|d }t s|d t|d | jv r|d | jjs%|d |skz | |}t j	|}|j
}W d    n1 sAw   Y  W n tttfyc } z|t| W Y d }~nd }~ww | jj| |rdd| dg|}| j| jjjd	||d
 d S |S )Nr   z Requires Python Imaging Library.r   zPIL cannot read video images.z Reading external files disabled.zCannot scale image!zCould not get size from "z":z
  	base_node)r   r   	mimetypes
guess_type
videotypesrb   file_insertion_enableduri2pathImageopensize
ValueErrorOSErrorUnicodeEncodeErrorr^   record_dependenciesaddr   rT   r   warningrh   )	rM   r   reading_problemsr   	imagepathimgr   errmsgrP   rP   rQ   r     s>   





z!HTMLTranslator.read_size_with_PILcoder^   nodes.Elementattsdictc              
   C  s  ddd}|  D ]
\}}t|| q	zt|}W n* tjyE } z| j| jjj	d|d  d| |d |W  Y d }~S d }~ww d|v ri }	|
dd	d
}
|d d
}|
| D ]}| sgq`|d\}}}| |	| < q`|dddd |	  D  dD ]}||v r||||  qd|v s|d r|
dd	 }||d |
dg  7 }|dd| d|v r|d|d u rtd}|d |_|d| tj|ddS )Nzhttp://www.w3.org/2000/svgzhttp://www.w3.org/1999/xlink)r.   xlinkzCannot parse SVG image "r   ":
  r   r   r.   r   :r   c                 s  s$    | ]\}}| d | dV  qdS )r   r   NrP   )r   kvrP   rP   rQ   	<genexpr>  s    z-HTMLTranslator.prepare_svg.<locals>.<genexpr>r   classesclassaltr;   r   r   r`   )r   ETregister_namespace
fromstring
ParseErrorr   r   rT   r   errorr   ry   strip	partitionsetrh   findElementr   r   tostring)rM   r   r   r   svg_nskeyr   svgr   declaration_dictsvg_declarationsnode_declarationsdeclaration_r   r  	svg_titlerP   rP   rQ   prepare_svg  sP   


zHTMLTranslator.prepare_svgNc              
   C  s   |du r
t | jj}| jjrGz
t|jdd}W n" ty: } zd| }| jj	| d| W  Y d}~S d}~ww | jj
| | j| S |rQt| jj|}| j| | S )z8Return code to reference or embed stylesheet file `path`Nr_   r`   zCannot embed stylesheet: z<--- %s --->
)boolrb   r   r   r   rc   r   rT   r   r  r   r   embedded_stylesheetr   relative_pathoutput_pathstylesheet_linkr   )rM   r   adjust_pathcontentr   r   rP   rP   rQ   r     s    

zHTMLTranslator.stylesheet_callrf   Fc              
     s  |  }g }i }| D ]
\}}	|	||  < q|dg }
g }|dg |dd  D ]}|dr=||d q-| rJ||
vrJ|
| q-|rT|d || j	< d t
|tjre fdd|
D }
|
rnd	|
|d< d
|vstJ |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	| | d| S )z
        Construct and return a start tag given a node (id & class attributes
        are extracted), tag name, and optional attributes.
        r  r	  r.   z	language-r   )colwidths-autocolwidths-givencolwidths-gridc                   s   g | ]}| vr|qS rP   rP   )r   clsinternalrP   rQ   r   7  s    z+HTMLTranslator.starttag.<locals>.<listcomp>r   idids   Nz<span id="%s"></span>c                 S  s   g | ]}t |qS rP   )r^   )r   r  rP   rP   rQ   r   U  s    z%s="%s"z /r   r   )r   r   popr   ry   
startswithr   removeprefixr  lang_attributer   r   tablerh   extend
Sequentialr8   sortedlistr   r^   )rM   r   r   suffixempty
attributesprefixr   namer   r  r   r*  r.  r-  attlistrp   valuesinfixrP   r+  rQ   starttag  s`    




$zHTMLTranslator.starttagc                 K  s   | j |||fddi|S )z1Construct and return an XML-compatible empty tag.r:  T)rA  )rM   r   r   r9  r;  rP   rP   rQ   emptytaga     zHTMLTranslator.emptytagc                 C  sR   t |jtjtjfrd S | jr'| jd}| jj|d kr"|	|  | jsd S d S )Nr   level)
r   parentr   system_messageentryr   r0  rb   report_levelrV   )rM   r   messagerP   rP   rQ   report_messagese  s   
zHTMLTranslator.report_messagesr   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 rP   r   r   	Invisible)r   nrP   rP   rQ   r   r  s    z5HTMLTranslator.set_class_on_child.<locals>.<listcomp>Nr  )
IndexErrorr   )rM   r   class_indexchildrenchildrP   rP   rQ   set_class_on_childm  s   z!HTMLTranslator.set_class_on_childc                 C  s:   |  }| |}| jr| jjr| |}| j| d S rH   )r   r   r   rb   r   r   r9   r   )rM   r   r   r   rP   rP   rQ   
visit_Texty  s
   

zHTMLTranslator.visit_Textc                 C     d S rH   rP   rM   r   rP   rP   rQ   depart_Text     zHTMLTranslator.depart_Textc                 C     | j | |dd d S )Nabbrr.   r9   r   rA  rW  rP   rP   rQ   visit_abbreviation  rC  z!HTMLTranslator.visit_abbreviationc                 C     | j d d S )Nz</abbr>r9   r   rW  rP   rP   rQ   depart_abbreviation     z"HTMLTranslator.depart_abbreviationc                 C  rZ  )Nacronymr.   r\  rW  rP   rP   rQ   visit_acronym  rC  zHTMLTranslator.visit_acronymc                 C  r^  )Nz
</acronym>r_  rW  rP   rP   rQ   depart_acronym  ra  zHTMLTranslator.depart_acronymc                 C  s.   | j |ddd | j| j|dddd d S )NaddressFr?   prer.   r9  r   )visit_docinfo_itemr9   r   rA  rW  rP   rP   rQ   visit_address  s   zHTMLTranslator.visit_addressc                 C  s   | j d |   d S Nz
</pre>
)r9   r   depart_docinfo_itemrW  rP   rP   rQ   depart_address  s   zHTMLTranslator.depart_addressc                 C  s   | j | j|ddgd d S )Naside
admonitionr  r\  rW  rP   rP   rQ   visit_admonition     zHTMLTranslator.visit_admonitionc                 C  r^  N	</aside>
r_  rW  rP   rP   rQ   depart_admonition  ra  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_formatsrb   ry  r   r   r9   rA  )rM   r   r<  r9  rP   rP   rQ   visit_attribution  s
   z HTMLTranslator.visit_attributionc                 C  s   | j | j d  d S N</p>
r9   r   r   r0  rW  rP   rP   rQ   depart_attribution     z!HTMLTranslator.depart_attributionc                 C  s*   t |jtjs| |d | jd d S )Nauthorz<p>)r   rE  r   authorsri  r9   r   rW  rP   rP   rQ   visit_author  s   zHTMLTranslator.visit_authorc                 C  s6   | j d t|jtjr| j d d S |   d S )N</p>rf   )r9   r   r   rE  r   r  rl  rW  rP   rP   rQ   depart_author  s   zHTMLTranslator.depart_authorc                 C     |  |d d S )Nr  ri  rW  rP   rP   rQ   visit_authors  ra  zHTMLTranslator.visit_authorsc                 C     |    d S rH   rl  rW  rP   rP   rQ   depart_authors     zHTMLTranslator.depart_authorsc                 C     | j | |d d S )N
blockquoter\  rW  rP   rP   rQ   visit_block_quote     z HTMLTranslator.visit_block_quotec                 C  r^  )Nz</blockquote>
r_  rW  rP   rP   rQ   depart_block_quote  ra  z!HTMLTranslator.depart_block_quoter   c                 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)SimpleListCheckerrT   walkr   	NodeFound)rM   r   rU   rP   rP   rQ   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  Tr   Fcontents)r   r   
field_listdefinition_listrb   r-   enumerated_listbullet_listr,   rE  r  rW  rP   rP   rQ   is_compactable  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	  ul)r   r   r   r   r  r9   rA  )rM   r   r   old_compact_simplerP   rP   rQ   visit_bullet_list  s   
 z HTMLTranslator.visit_bullet_listc                 C  s"   | j  \| _| _| jd d S )Nz</ul>
)r   r0  r   r   r9   r   rW  rP   rP   rQ   depart_bullet_list  s   z!HTMLTranslator.depart_bullet_listc                 C     | j | j|dddd d S )Nrx  r.   captionrz  r\  rW  rP   rP   rQ   visit_caption  rr  zHTMLTranslator.visit_captionc                 C  r^  r}  r_  rW  rP   rP   rQ   depart_caption  ra  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">
r   zdoc-biblioentryr  role)r   previous_siblingtyper9   r   rA  r   rW  rP   rP   rQ   visit_citation  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descendsiblingsr9   r   r   	next_noder  rW  rP   rP   rQ   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)r9  hrefr  r  )rT   nameidsr9   r   rA  )rM   r   r  rP   rP   rQ   visit_citation_reference  s   z'HTMLTranslator.visit_citation_referencec                 C  r^  )Nz]</a>r_  rW  rP   rP   rQ   depart_citation_reference  ra  z(HTMLTranslator.depart_citation_referencec                 C  r  )Nspanr.   
classifierrz  r\  rW  rP   rP   rQ   visit_classifier  rr  zHTMLTranslator.visit_classifierc                 C     | j d | | d S N</span>)r9   r   depart_termrW  rP   rP   rQ   depart_classifier!     z HTMLTranslator.depart_classifierc                 C  s&   | j | |jj|jd d S )Nstub)r   r   rE  stubsr;  r   rW  rP   rP   rQ   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 ]}| | }| j| j|dd|dd q<| jd d S )NFTr  r'  r  r)  r(  colgroupc                 s  s    | ]}|  V  qd S rH   )	propwidth)r   r   rP   rP   rQ   r  4  s    z0HTMLTranslator.depart_colspec.<locals>.<genexpr>colwidth: z.1%)r   z</colgroup>
)r   r  r   colspecrE  rb   table_styler9   r   rA  sumr   r  rB  )rM   r   total_widthcolwidthrP   rP   rQ   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- )r9   r   r   r   SkipNode)rM   r   r   rP   rP   rQ   visit_comment;  s   zHTMLTranslator.visit_commentc                 C     | j | j|ddd d S )Nr   compoundrz  r\  rW  rP   rP   rQ   visit_compoundB     zHTMLTranslator.visit_compoundc                 C  r^  Nr  r_  rW  rP   rP   rQ   depart_compoundE  ra  zHTMLTranslator.depart_compoundc                 C  r  )Nr   zdocutils containerrz  r\  rW  rP   rP   rQ   visit_containerH  s   zHTMLTranslator.visit_containerc                 C  r^  r  r_  rW  rP   rP   rQ   depart_containerL  ra  zHTMLTranslator.depart_containerc                 C     | j |ddd d S )NcontactFrf  r  rW  rP   rP   rQ   visit_contactO     zHTMLTranslator.visit_contactc                 C  r  rH   r  rW  rP   rP   rQ   depart_contactR  r  zHTMLTranslator.depart_contactc                 C  r  )N	copyrightr  rW  rP   rP   rQ   visit_copyrightU  ra  zHTMLTranslator.visit_copyrightc                 C  r  rH   r  rW  rP   rP   rQ   depart_copyrightX  r  zHTMLTranslator.depart_copyrightc                 C  r  )Ndater  rW  rP   rP   rQ   
visit_date[  ra  zHTMLTranslator.visit_datec                 C  r  rH   r  rW  rP   rP   rQ   depart_date^  r  zHTMLTranslator.depart_datec                 C  rV  rH   rP   rW  rP   rP   rQ   visit_decorationa  rY  zHTMLTranslator.visit_decorationc                 C  rV  rH   rP   rW  rP   rP   rQ   depart_decorationd  rY  z HTMLTranslator.depart_decorationc                 C  s.   d|j j d vr| j| |dd d S d S )Ndetailsr  ddr.   rE  r9   r   rA  rW  rP   rP   rQ   visit_definitiong  s   zHTMLTranslator.visit_definitionc                 C  s$   d|j j d vr| jd d S d S )Nr  r  </dd>
rE  r9   r   rW  rP   rP   rQ   depart_definitionk  s   z HTMLTranslator.depart_definitionc                 C  sT   d|d v r| j | |d d S | |rdgng }| j | j|d|d d S )Nr  r  r   r  dlrp  )r9   r   rA  r  rM   r   r  rP   rP   rQ   visit_definition_listo  s   z$HTMLTranslator.visit_definition_listc                 C  s,   d|d v r| j d d S | j d d S )Nr  r  r  </dl>
r_  rW  rP   rP   rQ   depart_definition_listv  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 )Nr  r  r   r  rM   r   r   rP   rP   rQ   visit_definition_list_item}  s    z)HTMLTranslator.visit_definition_list_itemc                 C  s"   d|j d v r| jd d S d S )Nr  r  z</details>
r  rW  rP   rP   rQ   depart_definition_list_item  s   z*HTMLTranslator.depart_definition_list_itemc                 C  rZ  )Nr  r.   r\  rW  rP   rP   rQ   visit_description  r  z HTMLTranslator.visit_descriptionc                 C  r^  Nr  r_  rW  rP   rP   rQ   depart_description  ra  z!HTMLTranslator.depart_descriptionc                 C  sH   | j t| j dg}| |r|d | j| j|d|d d S )Nr8   r  r  rp  )r   r   r   r9   r  rA  r  rP   rP   rQ   visit_docinfo  s
   

zHTMLTranslator.visit_docinfoc                 C  s0   | j d | j }| j |d  | _g | _ d S Nr  )r9   r   r   r0  r8   )rM   r   startrP   rP   rQ   depart_docinfo  s   

zHTMLTranslator.depart_docinfoTc              	   C  sh   |r| j d| d| |  d | jd| d| jj|  d | j| j|dd|d	 d S )
Nz<meta name="z" content="z" />
z<dt class="">"<span class="colon">:</span></dt>
r  r.   rz  )r?   r   r   r   r9   r   labelsrA  )rM   r   r=  r?   rP   rP   rQ   ri    s   
"z!HTMLTranslator.visit_docinfo_itemc                 C  r^  r  r_  rL   rP   rP   rQ   rl    ra  z"HTMLTranslator.depart_docinfo_itemc                 C  s"   | j | j|ddg dd d S )Nrg  r.   )r   pythondoctestr9  r  r\  rW  rP   rP   rQ   visit_doctest_block  s   z"HTMLTranslator.visit_doctest_blockc                 C  r^  rk  r_  rW  rP   rP   rQ   depart_doctest_block  ra  z#HTMLTranslator.depart_doctest_blockc                 C  sB   | dptj| dpdpd}| jd| | d d S )Nr;   sourcer.   zuntitled Docutils documentz<title>z	</title>
)r   osr   basenamer5   r   r   )rM   r   r;   rP   rP   rQ   visit_document  s   
zHTMLTranslator.visit_documentc                 C  sf  | j | j| jd| jji g | j| j | jd d  | j	 | _	dd
| jv r0| j	d | jrG| jdkr@| j	| j n| j| j | jjr_| jj dkr_| j| j	dd   n| j| j	 | j| j|fi | j | jdd	| jd
  d | j| j | j| jdd  | j | j | j | jd d   | jrJ dt| j d S )Nr   zname="dcterms.r.   z=<link rel="schema.dcterms" href="http://purl.org/dc/terms/"/>mathjaxr   r/  r   </r   z>
zlen(context) = )r4   r5  doctypehead_prefix_templaterb   r   rA   r   r?   r5   rh   r   r   r   rj   r   rB   r6   rA  documenttag_argsr:   r   r@   r9   rE   r7   r8   r   r   rW  rP   rP   rQ   depart_document  s8   


zHTMLTranslator.depart_documentc                 C  rZ  )Nemr.   r\  rW  rP   rP   rQ   visit_emphasis  r  zHTMLTranslator.visit_emphasisc                 C  r^  )Nz</em>r_  rW  rP   rP   rQ   depart_emphasis  ra  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  r5   r  thtdr/  morerowsrowspanmorecolscolspanr.   </%s>
)r   rE  r   theadr   r  columnr9   rA  r   r   )rM   r   r   r   rP   rP   rQ   visit_entry  s    zHTMLTranslator.visit_entryc                 C     | j | j  d S rH   r  rW  rP   rP   rQ   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  r  enumtyper  ol)r   r  r9   rA  r  rP   rP   rQ   visit_enumerated_list  s   
 z$HTMLTranslator.visit_enumerated_listc                 C  r^  )Nz</ol>
r_  rW  rP   rP   rQ   depart_enumerated_list  ra  z%HTMLTranslator.depart_enumerated_listc              	   C  s   i }| dg }t|D ]+\}}|dr7z
t|dd}W n
 ty)   Y  nw d| |d< ||  nq|d | |rG|d | j	| j
|dfi | d S )	Nr  zfield-indent-pxz--field-indent: %s;r   z
field-listr  r  )
setdefault	enumerater1  r
   r2  r   r0  r   r  r9   rA  )rM   r   r   r  ir*  indent_lengthrP   rP   rQ   visit_field_list  s&   



	

 zHTMLTranslator.visit_field_listc                 C  r^  r  r_  rW  rP   rP   rQ   depart_field_list  ra  z HTMLTranslator.depart_field_listc                 C  s,   |D ]}t |tjr|d |d  qd S )Nr.  )r   r   
field_namer5  )rM   r   rS  rP   rP   rQ   visit_field  s
   zHTMLTranslator.visit_fieldc                 C  rV  rH   rP   rW  rP   rP   rQ   depart_field  rY  zHTMLTranslator.depart_fieldc                 C  s$   | j | j|dd|jd d d S )Ndtr.   r  rp  )r9   r   rA  rE  rW  rP   rP   rQ   visit_field_name  s   zHTMLTranslator.visit_field_namec                 C  r^  )Nr  r_  rW  rP   rP   rQ   depart_field_name  ra  z HTMLTranslator.depart_field_namec                 C  s:   | j | j|dd|jd d |js| j d d S d S )Nr  r.   r  rp  z<p></p>)r9   r   rA  rE  rR  rW  rP   rP   rQ   visit_field_body   s   zHTMLTranslator.visit_field_bodyc                 C  r^  r  r_  rW  rP   rP   rQ   depart_field_body'  ra  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	  figurer   z	width: %sr   alignz align-r   )r   r9   r   rA  r  rP   rP   rQ   visit_figure*  s   

 zHTMLTranslator.visit_figurec                 C  r^  r  r_  rW  rP   rP   rQ   depart_figure2  ra  zHTMLTranslator.depart_figurec                 C     | j t| j d S rH   r   r   r   r9   rW  rP   rP   rQ   visit_footer5  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   r>   rz  z<hr class="footer" />
z
</div>
r   )r   r0  rA  r5  r9   r   r>   r:   )rM   r   r  r>   rP   rP   rQ   depart_footer8  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">
rn  zdoc-footnoter  )	rb   footnote_referencesr   r  r  r9   r   rA  r   )rM   r   label_stylerP   rP   rQ   visit_footnoteB  s   zHTMLTranslator.visit_footnotec                 C  r  )Nrt  FTr  r  rW  rP   rP   rQ   depart_footnoteM  r  zHTMLTranslator.depart_footnotec              
   C  sD   d|d  }| j jg}| j| j|dd|d|d | jd d S )Nr  r  r  r.   zdoc-noteref)r9  r  r  r  !<span class="fn-bracket">[</span>)rb   r?  r9   r   rA  )rM   r   r  r  rP   rP   rQ   visit_footnote_referenceS  s   
z'HTMLTranslator.visit_footnote_referencec                 C  s   | j d | j d d S )Nz!<span class="fn-bracket">]</span></a>r_  rW  rP   rP   rQ   depart_footnote_referenceZ  s   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   ri   r9   r   r   r   r  )rM   r   rG  rP   rP   rQ   visit_generated_  s   zHTMLTranslator.visit_generatedc                 C  rV  rH   rP   rW  rP   rP   rQ   depart_generatedh  rY  zHTMLTranslator.depart_generatedc                 C  r;  rH   r<  rW  rP   rP   rQ   visit_headerk  r#  zHTMLTranslator.visit_headerc                 C  sb   | j  }| j|dddg}|| j|d   |d | j| | j| | j|d = d S )Nr   r=   rz  z
<hr class="header"/>
</div>
)r   r0  rA  r5  r9   r   r6   r=   )rM   r   r  r=   rP   rP   rQ   depart_headern  s   

zHTMLTranslator.depart_headerc              
   C  s  |d }| d|}t|d }d}| |}d|v r&d|d  g|d< || jv r-dn| j}| d	|}|d
kr?d
|d	< ni|dkrz| |}|dkrVt|jdd}	nt|	 }	W n( t
ttfy }
 z| j| jjjd| d|
 |d W Y d }
~
n'd }
~
ww | jj| |dkr| |	||}nt|	 }d| d| }t|jtjrt|jtjrt|jjtjsd}nd}|| jv r||d< d|d v r|d d d|d< | j|d|fd|i|d|d  d| d|  d|  }n7|dkr||d< | j|ddfd |i|| d!|  }n|r#||7 }n||d< | j |d"|fd|i|}| j!| |rD| "| d S d S )#Nr   r
  r   r.   r8  zalign-r  r   loadinglazyr   zimage/svg+xmlr_   r`   zCannot embed image "r  r   zdata:z;base64,rf   r;   controlsvideosrcz	<a href="r  rE  z</video>zapplication/x-shockwave-flashr  objectdataz	</object>r   )#r   r   r   r   r   r   r   r   rc   
read_bytesr   r   UnicodeErrorr   r   rT   r   r  rb   r   r   r  base64	b64encodedecoder   rE  r   TextElement	referenceremoverA  rB  r9   rJ  )rM   r   r   r
  mimetypeelementr   rM  r   	imagedatar   data64r9  rP   rP   rQ   visit_imagew  sv   





zHTMLTranslator.visit_imagec                 C  rV  rH   rP   rW  rP   rP   rQ   depart_image  rY  zHTMLTranslator.depart_imagec                 C  rZ  )Nr  r.   r\  rW  rP   rP   rQ   visit_inline  r  zHTMLTranslator.visit_inlinec                 C  r^  r  r_  rW  rP   rP   rQ   depart_inline  ra  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">rC  backrefsr/  z"<a role="doc-backlink" href="#%s">r   )r9   r   rb   footnote_backlinksrE  r   r   )rM   r   rd  rP   rP   rQ   visit_label  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 )	Nrd  r/  rE  z)<span class="fn-bracket">]</span></span>
c                 S  s   g | ]
\}}d ||f qS )z(<a role="doc-backlink" href="#%s">%s</a>rP   )r   r+  refrP   rP   rQ   r     s    z/HTMLTranslator.depart_label.<locals>.<listcomp>z#<span class="backrefs">(%s)</span>
,)	rb   re  rE  r   r   r9   r   r*  rh   )rM   r   rd  	backlinksrP   rP   rQ   depart_label  s   
zHTMLTranslator.depart_labelc                 C  r  )Nr   legendrz  r\  rW  rP   rP   rQ   visit_legend  r  zHTMLTranslator.visit_legendc                 C  r^  r  r_  rW  rP   rP   rQ   depart_legend  ra  zHTMLTranslator.depart_legendc                 C  s6   | j | j|dddd t|s| j d d S d S )Nr   r.   linerh  z<br />)r9   r   rA  r   rW  rP   rP   rQ   
visit_line  s   zHTMLTranslator.visit_linec                 C  r^  r  r_  rW  rP   rP   rQ   depart_line  ra  zHTMLTranslator.depart_linec                 C  r  )Nr   z
line-blockrz  r\  rW  rP   rP   rQ   visit_line_block  r  zHTMLTranslator.visit_line_blockc                 C  r^  r  r_  rW  rP   rP   rQ   depart_line_block  ra  z HTMLTranslator.depart_line_blockc                 C  rZ  )Nlir.   r\  rW  rP   rP   rQ   visit_list_item  r  zHTMLTranslator.visit_list_itemc                 C  r^  )Nz</li>
r_  rW  rP   rP   rQ   depart_list_item  ra  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  r   r.   r  zdocutils literalrz  rf   r   z<span class="pre">%s</span>r  )r0  rQ  r9   r   rA  r   r   rE  r   literal_blockr   words_and_spacesfindallr  in_word_wrap_pointsearchr   r  )rM   r   r  r   tokenrP   rP   rQ   visit_literal  s&   zHTMLTranslator.visit_literalc                 C  r^  )N</code>r_  rW  rP   rP   rQ   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 )Nrg  r.   zliteral-blockrz  r   r  z<code>r\  rW  rP   rP   rQ   visit_literal_block  s   z"HTMLTranslator.visit_literal_blockc                 C  s(   d|d v r| j d | j d d S )Nr   r  r}  z</pre>
r_  rW  rP   rP   rQ   depart_literal_block  s   z#HTMLTranslator.depart_literal_blockr  formulattrg  mathr.   problematic)r   latexr  mathmlr  c           
   
     sN  t |tj} j}| tj}|dkr8 jr) j	s) fdd j
dD  _	|tj_t||}t|}n|dkrB |}n|dkr j	sn jrQ j _n	 jjjd|d d	 jvrf  jd
7  _ j j g _	|rvt||}nd| d} |}ni|dkrd jv r j _ jrtt j}ntj}z|||d}W nF ttfy } z8t|dg } j jjj|g|R d|i  | } j j!dkrd}nd}t |tr| _W Y d }~nd }~ww  j"| | }|rdnd}	|r j# j$|||	 j"| d d  j#%||	g |r$ j#d| d|	  tj&)Nr   c                   s&   g | ]} j t| jjd dqS )T)r%  )r   r   find_file_in_dirsrb   stylesheet_dirs)r   srL   rP   rQ   r   1  s    z-HTMLTranslator.visit_math.<locals>.<listcomp>rh  r  r  zANo MathJax URL specified, using local fallback (see config.html).r   ?z?config=TeX-AMS_CHTMLz\(z\)r  zXHTML 1)as_blockr  r   r   r  rf   r.   r  r  r   )'r   r   
math_blockr   r   r]   r   uni2tex_tabler   r   ry   r   DocumentParametersdisplaymoder   r   mathjax_urlrT   r   r   mathjax_scriptr  content_type_mathmlr   rY   r   r   
tex2mathmlr   r   r   r   rb   rH  	math_tagsr9   rA  r5  SkipChildren)
rM   r   is_blockformat	math_code	converterr   r  tagr9  rP   rL   rQ   
visit_math(  s~   






zHTMLTranslator.visit_mathc                 C  rV  rH   rP   rW  rP   rP   rQ   depart_matho  rY  zHTMLTranslator.depart_mathc                 C     |  | d S rH   )r  rW  rP   rP   rQ   visit_math_blockr     zHTMLTranslator.visit_math_blockc                 C  r  rH   )rJ  rW  rP   rP   rQ   depart_math_blocku  r  z HTMLTranslator.depart_math_blockc                 C  s$   | j | j|dfi |  d S )Nr?   )r?   r   rB  non_default_attributesrW  rP   rP   rQ   
visit_metaz  s   zHTMLTranslator.visit_metac                 C  rV  rH   rP   rW  rP   rP   rQ   depart_meta~  rY  zHTMLTranslator.depart_metac                 C  r  )Nr  r.   optionrz  r\  rW  rP   rP   rQ   visit_option  rr  zHTMLTranslator.visit_optionc                 C  s6   | j d t|jdddtjr| j d d S d S )Nr  FTr  , )r9   r   r   r  r   r  rW  rP   rP   rQ   depart_option  s   zHTMLTranslator.depart_optionc                 C  s.   | j |dd | j | |dd d S )N	delimiterr   varr.   )r9   r   r   rA  rW  rP   rP   rQ   visit_option_argument  s   z$HTMLTranslator.visit_option_argumentc                 C  r^  )Nz</var>r_  rW  rP   rP   rQ   depart_option_argument  ra  z%HTMLTranslator.depart_option_argumentc                 C  s&   | j | |dd | j d d S )Nr2  r.   z<kbd>r\  rW  rP   rP   rQ   visit_option_group  s   z!HTMLTranslator.visit_option_groupc                 C  r^  )Nz</kbd></dt>
r_  rW  rP   rP   rQ   depart_option_group  ra  z"HTMLTranslator.depart_option_groupc                 C  r  )Nr  zoption-listrz  r\  rW  rP   rP   rQ   visit_option_list  s   z HTMLTranslator.visit_option_listc                 C  r^  r  r_  rW  rP   rP   rQ   depart_option_list  ra  z!HTMLTranslator.depart_option_listc                 C  rV  rH   rP   rW  rP   rP   rQ   visit_option_list_item  rY  z%HTMLTranslator.visit_option_list_itemc                 C  rV  rH   rP   rW  rP   rP   rQ   depart_option_list_item  rY  z&HTMLTranslator.depart_option_list_itemc                 C  rV  rH   rP   rW  rP   rP   rQ   visit_option_string  rY  z"HTMLTranslator.visit_option_stringc                 C  rV  rH   rP   rW  rP   rP   rQ   depart_option_string  rY  z#HTMLTranslator.depart_option_stringc                 C  r  )Norganizationr  rW  rP   rP   rQ   visit_organization  ra  z!HTMLTranslator.visit_organizationc                 C  r  rH   r  rW  rP   rP   rQ   depart_organization  r  z"HTMLTranslator.depart_organizationc                 C  rZ  )Nrx  r.   r\  rW  rP   rP   rQ   visit_paragraph  r  zHTMLTranslator.visit_paragraphc                 C  sL   | j d t|jtjtjfrt|jdks$| j d | | d S d S )Nr  r/  rf   )	r9   r   r   rE  r   	list_itemrG  r   rJ  rW  rP   rP   rQ   depart_paragraph  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 )Nr  z<a href="#%s">rE  r.   r  r  rz  )hasattrr9   r   r   rA  rW  rP   rP   rQ   visit_problematic  s
   
z HTMLTranslator.visit_problematicc                 C  s"   | j d | j | j  d S r  r  rW  rP   rP   rQ   depart_problematic  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   r  r.   r  r   r  r9  z</%s>)r   ry   r   rE  r   rY  r9   r   rA  r   r  )rM   r   r   rP   rP   rQ   	visit_raw  s   zHTMLTranslator.visit_rawc                 C  s   ddgi}d}d|v r0|d |d< | j jr(|d dr(| |d |d< d| _|d d nd	|v s8J d
d|d	  |d< |d d t|dkr\t|d tj	r\|d d t|j
tjsed}| j| j|d|fi | d S )Nr  rZ  r.   refurir  zmailto:Texternalr  z3References must have "refuri" or "refid" attribute.r  r,  r/  r   zimage-referencerf   r  )rb   r   r1  r   r   r   r   r   r   imagerE  rY  r9   rA  )rM   r   r   r9  rP   rP   rQ   visit_reference  s(   

"zHTMLTranslator.visit_referencec                 C  s0   | j d t|jtjs| j d d| _d S )NrE  rf   F)r9   r   r   rE  r   rY  r   rW  rP   rP   rQ   depart_reference  s   
zHTMLTranslator.depart_referencec                 C  r  )NrevisionFrf  r  rW  rP   rP   rQ   visit_revision  r  zHTMLTranslator.visit_revisionc                 C  r  rH   r  rW  rP   rP   rQ   depart_revision  r  zHTMLTranslator.depart_revisionc                 C  s    | j | |dd d|_d S )Ntrr.   r   )r9   r   rA  r  rW  rP   rP   rQ   	visit_row  s   
zHTMLTranslator.visit_rowc                 C  r^  )Nz</tr>
r_  rW  rP   rP   rQ   
depart_row	  ra  zHTMLTranslator.depart_rowc                 C  r  )Nrx  r.   rubricrz  r\  rW  rP   rP   rQ   visit_rubric  rr  zHTMLTranslator.visit_rubricc                 C  r^  r}  r_  rW  rP   rP   rQ   depart_rubric  ra  zHTMLTranslator.depart_rubricc                 C  s*   |  j d7  _ | j| j|ddd d S )Nr/  r   sectionrz  )r   r9   r   rA  rW  rP   rP   rQ   visit_section  s   zHTMLTranslator.visit_sectionc                 C  s   |  j d8  _ | jd d S )Nr/  r  )r   r9   r   rW  rP   rP   rQ   depart_section  s   zHTMLTranslator.depart_sectionc                 C  s"   | j | j|ddd d| _d S )Nr   sidebarrz  T)r9   r   rA  r   rW  rP   rP   rQ   visit_sidebar  s   
zHTMLTranslator.visit_sidebarc                 C  s   | j d d| _d S )Nr  F)r9   r   r   rW  rP   rP   rQ   depart_sidebar!  s   
zHTMLTranslator.depart_sidebarc                 C  r  )NstatusFrf  r  rW  rP   rP   rQ   visit_status%  r  zHTMLTranslator.visit_statusc                 C  r  rH   r  rW  rP   rP   rQ   depart_status(  r  zHTMLTranslator.depart_statusc                 C  rZ  )Nstrongr.   r\  rW  rP   rP   rQ   visit_strong+  r  zHTMLTranslator.visit_strongc                 C  r^  )Nz	</strong>r_  rW  rP   rP   rQ   depart_strong.  ra  zHTMLTranslator.depart_strongc                 C  rZ  )Nr   r.   r\  rW  rP   rP   rQ   visit_subscript1  r  zHTMLTranslator.visit_subscriptc                 C  r^  )Nz</sub>r_  rW  rP   rP   rQ   depart_subscript4  ra  zHTMLTranslator.depart_subscriptc                 C     t j)zInternal only.r   r  rW  rP   rP   rQ   visit_substitution_definition7     z,HTMLTranslator.visit_substitution_definitionc                 C  r  rH   )unimplemented_visitrW  rP   rP   rQ   visit_substitution_reference;  r  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-subtitler<   r/  zsection-subtitlerx  r.   rp  )r   rE  r   r  rT   r   r9   r   r  r   rA  r  rP   rP   rQ   visit_subtitleB  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   )r9   r   r   rE  r   rT   r   r<   r7   r5  rD   rW  rP   rP   rQ   depart_subtitleL  s   zHTMLTranslator.depart_subtitlec                 C  rZ  )Nsupr.   r\  rW  rP   rP   rQ   visit_superscriptU  r  z HTMLTranslator.visit_superscriptc                 C  r^  )Nz</sup>r_  rW  rP   rP   rQ   depart_superscriptX  ra  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 )Nrn  zsystem-messagerz  z <p class="system-message-title">r.   rd  r/  z%; <em><a href="#%s">backlink</a></em>r   z<a href="#%s">%s</a>z; <em>backlinks: %s</em>r  rn  z	, line %szISystem Message: %s/%s (<span class="docutils literal">%s</span>%s)%s</p>
r  rD  r	  )r9   r   rA  r   rh   r  r   )rM   r   backref_textrd  r+  ri  backrefrn  rP   rP   rQ   visit_system_message[  s2   


z#HTMLTranslator.visit_system_messagec                 C  r^  rs  r_  rW  rP   rP   rQ   depart_system_messageu  ra  z$HTMLTranslator.depart_system_messagec                 C  s   d| j jdd i}d|v r|d d|d   d|v r7|d }|dd  dv r/|d	7 }d
| d|d< | j|dfi |}| j| d S )Nr  rh  r   r8  zalign-%sr   r  z0123456789.r(  r  r   r   r4  )rb   r  r   ry   r   rA  r9   )rM   r   r   r   r  rP   rP   rQ   visit_tablex  s   zHTMLTranslator.visit_tablec                 C  r  )Nz	</table>
)r9   r   rJ  rW  rP   rP   rQ   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  r  r  r  r.   targetrz  r  )r9   r   rA  r   rW  rP   rP   rQ   visit_target  s   zHTMLTranslator.visit_targetc                 C  r!  rH   r  rW  rP   rP   rQ   depart_target  r#  zHTMLTranslator.depart_targetc                 C  r  )Ntbodyr\  rW  rP   rP   rQ   visit_tbody  r  zHTMLTranslator.visit_tbodyc                 C  r^  )Nz	</tbody>
r_  rW  rP   rP   rQ   depart_tbody  ra  zHTMLTranslator.depart_tbodyc              	   C  sX   d|j j d v r| j| j|ddd d S | j| j|dd|j d |j d d d S )	Nr  r  summaryr.   r  r2  r.  )r9  r  r.  r  rW  rP   rP   rQ   
visit_term  s   zHTMLTranslator.visit_termc                 C  sF   |j tjdddrd S d|jjd v r| jd d S | jd d S )NFTr  r  r  z</summary>
z</dt>
)r  r   r  rE  r9   r   rW  rP   rP   rQ   r    s
   zHTMLTranslator.depart_termc                 C  s   g | _ g |_d S rH   )r   r  rW  rP   rP   rQ   visit_tgroup  s   
zHTMLTranslator.visit_tgroupc                 C  rV  rH   rP   rW  rP   rP   rQ   depart_tgroup  rY  zHTMLTranslator.depart_tgroupc                 C  r  )Nr  r\  rW  rP   rP   rQ   visit_thead  r  zHTMLTranslator.visit_theadc                 C  r^  )Nz	</thead>
r_  rW  rP   rP   rQ   depart_thead  ra  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.   r  ztoc-backrefr	  zdoc-backlinkr  r  r  r  z
</a></%s>
r  )r   r   minrA  r  r   rZ  )rM   r   r   h_levelr   	start_tag	close_tagrP   rP   rQ   section_title_tags  s    
z!HTMLTranslator.section_title_tagsc                 C  sH  d}t |jtjr*| j| j|dddd | jjr)d|jd v r)| jd d	}nrt |jtj	r?| j| j|ddd
d n]t |jtj
rT| j| j|dddd nHt |jtjri| j| |dd d}n3t |jtjr| j| j|dddd d}t| j| _nt |jtjsJ | |\}}| j| | j| d S )Nr~  rx  r.   ztopic-titlerz  r  r  z*<a class="reference internal" href="#top">z	</a></p>
zsidebar-titlezadmonition-titler  z</caption>
h1r;   z</h1>
)r   rE  r   topicr9   r   rA  rb   toc_backlinksr  
Admonitionr4  rT   r   r   r  r  r   )rM   r   r  r  rP   rP   rQ   visit_title  s:   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   )	r9   r   r   r0  r   r;   r7   r5  rC   rW  rP   rP   rQ   depart_title  s   zHTMLTranslator.depart_titlec                 C  rZ  )Nciter.   r\  rW  rP   rP   rQ   visit_title_reference  r  z$HTMLTranslator.visit_title_referencec                 C  r^  )Nz</cite>r_  rW  rP   rP   rQ   depart_title_reference  ra  z%HTMLTranslator.depart_title_referencec                 C  r  )Nr   r  rz  r\  rW  rP   rP   rQ   visit_topic  r  zHTMLTranslator.visit_topicc                 C  r^  r  r_  rW  rP   rP   rQ   depart_topic  ra  zHTMLTranslator.depart_topicc                 C  r  )Nhrrk   rz  )r9   r   rB  rW  rP   rP   rQ   visit_transition  r  zHTMLTranslator.visit_transitionc                 C  rV  rH   rP   rW  rP   rP   rQ   depart_transition  rY  z HTMLTranslator.depart_transitionc                 C  r  )Nrg   Frf  r  rW  rP   rP   rQ   visit_version  r  zHTMLTranslator.visit_versionc                 C  r  rH   r  rW  rP   rP   rQ   depart_version
  r  zHTMLTranslator.depart_versionc                 C  s   t d|jj )Nz$visiting unimplemented node type: %s)NotImplementedErrorrO   rs   rW  rP   rP   rQ   r    s   z"HTMLTranslator.unimplemented_visitrr   )r   r   rF   r   )rF   r   )r   r^   r   r   r   r  rF   r^   rH   )rf   F)rf   )r   )rF   r   )T)rs   rt   ru   __doc__r  r  r   rk   rl   r   r  r  r  r$  r!  recompilerw  ry  r3  ordr   r   r   r   r   r   r   r   r   r   r  r   rA  rB  rJ  rT  rU  rX  r]  r`  rc  rd  rj  rm  rq  ru  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   ri  rl  r  r  r  r  r  r  r   r"  r&  r'  r-  r.  r0  r1  r3  r4  r5  r6  r9  r:  r=  r>  rA  rB  rD  rF  rI  rJ  rK  rL  r`  ra  rb  rc  rf  rj  rl  rm  ro  rp  rq  rr  rt  ru  r|  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r   rP   rP   rN   rQ   r      s   8


R

$,B
	



		B

G
					r   c                   @  s   e Zd ZdZdd Zdd Zdd Zd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  r  rH   )r   r  rW  rP   rP   rQ   default_visit  s   zSimpleListChecker.default_visitc                 C  rV  rH   rP   rW  rP   rP   rQ   default_departure   rY  z#SimpleListChecker.default_departurec                 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  rK  rP   rL  )r   rS  rP   rP   rQ   r   $  s    

z5SimpleListChecker.visit_list_item.<locals>.<listcomp>r   r  r/  )
rR  r   r   	paragraphr  r  r  r0  r   r  )rM   r   rR  rP   rP   rQ   rt  #  s   z!SimpleListChecker.visit_list_itemrF   rR   c                 C  rV  rH   rP   rW  rP   rP   rQ   	pass_node0  rY  zSimpleListChecker.pass_nodec                 C  r  rH   r  rW  rP   rP   rQ   ignore_node3  r  zSimpleListChecker.ignore_nodeNrr   )$rs   rt   ru   r  r  r  rt  r  r  rU  r  r  r&  r  r  r  rj  r  r  r  r  r  r  r  r  r  r  r  r-  r0  r5  r3  r  r  r  visit_pendingrP   rP   rP   rQ   r    sD    	
r  )*r  
__future__r   __docformat__rV  r   r
  os.pathr  r   xml.etree.ElementTreeetreeElementTreer  pathlibr   rk   r   r   r   r   r	   docutils.parsers.rst.directivesr
   &docutils.parsers.rst.directives.imagesr   docutils.transformsr   docutils.utils.mathr   r   r   r   r   r   TYPE_CHECKINGr   r   DoctreeTranslatorr   GenericNodeVisitorr  rP   rP   rP   rQ   <module>   sH                 c