
    Ki                       d Z ddlmZ dZddlZddlZddlmZm	Z	m
Z
 ddlmZ ddlmZ  G d d	e
j                  j                        Z G d
 de
j                  j                         Z G d de
j                  j"                        Zy)a/  
Simple HyperText Markup Language document tree Writer.

The output conforms to the XHTML version 1.0 Transitional DTD
(*almost* strict).  The output contains a minimum of formatting
information.  The cascading style sheet "html4css1.css" is required
for proper viewing with a modern graphical browser.
    )annotationsreStructuredTextN)frontendnodeswriters)
_html_base)PILc                     e Zd ZdZ	 dgZdej                  j                  ej                  j                  e	            ej                  j                  ej                  j                  ej                  j                  ej                  j                  e	            d            gZej                  j                  ej                  j                  ej                  j                  e	            d      Z ej                  ej                   j"                  j$                  dez  dgedd	fd
dj                  e      z  dgddej&                  edfddj                  e      z  dgdej&                  edfddgdj)                         dddfddgddej*                  dfdd gd!d"ej,                  d#f$      Zed%d&d'd(gd)dej.                  d*fd+d,gd)dej.                  d*fffz   Zd-Zd0d.Zy/)1Writer)htmlhtml4	html4css1xhtmlxhtml10zhtml4css1.css.html5_polyglotztemplate.txtz-Template file. (UTF-8 encoded, default: "%s")z
--templatez<file>)defaultmetavarzComma 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: "%s"),z--stylesheet-pathz<file[,file,...]>
stylesheet)r   	overrides	validatorr   zComma-separated list of directories where stylesheets are found. Used by --stylesheet-path when expanding relative path arguments. (default: "%s")z--stylesheet-dirsz<dir[,dir,...]>)r   r   r   zySpecify the initial header level. Does not affect document title & subtitle (see --no-doc-title). (default: 1 for "<h1>")z--initial-header-levelz1 2 3 4 5 6 auto1z<level>)choicesr   r   zmMath output format (one of "MathML", "HTML", "MathJax", or "LaTeX") and option(s). (default: "HTML math.css")z--math-outputz<format [option(s)]>zHTML math.css)r   r   r   z&Prepend an XML declaration (default). z--xml-declarationT
store_true)r   actionr   )templatestylesheet_pathstylesheet_dirsinitial_header_levelmath_outputxml_declarationzHTML4 Writer Options zSpecify the maximum width (in characters) for one-column field names.  Longer field names will span an entire row of the table used to render the field list.  Default is 14 characters.  Use 0 for "no limit".z--field-name-limit   )r   r   r   zSpecify the maximum width (in characters) for options in option lists.  Longer options will span an entire row of the table used to render the option list.  Default is 14 characters.  Use 0 for "no limit".z--option-limitzhtml4css1 writerc                (    i | _         t        | _        y N)partsHTMLTranslatortranslator_classselfs    o/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/docutils/writers/html4css1/__init__.py__init__zWriter.__init__k   s    
 .    NreturnNone)__name__
__module____qualname__	supporteddefault_stylesheetsospathabspathdirname__file__joindefault_stylesheet_dirsdefault_templater   filter_settings_specr   r   r   settings_specvalidate_comma_separated_listsplitvalidate_math_outputvalidate_booleanvalidate_nonnegative_intconfig_sectionr-    r.   r,   r   r      sK   BI'*+"!wwrwwx/HI!wwrww||#%77??277??83L#M#305  6! ww||
12ND 2H11!!//;>NNN(X>@
 !$)< =	>
 !!+,"@@+-	.)+.884K+LM !!)"@@/12M%&*002s!#	$A.?"779	: 5 !"3356I)
MT "
"  
 Y 99;
<" 
Y 99;
<	%
 
M( (N/r.   r   c                  Z   e Zd ZdZdZdZdZej                  j                  j                         Z	de	d<   dddd	d
ZdldZdldZdldZdldZdmdldZdldZdldZdldZdldZdldZdldZd ZdldZdldZdldZdldZdldZdldZdldZdldZdld Z dld!Z!dld"Z"dld#Z#dld$Z$dld%Z%dld&Z&dld'Z'dld(Z(dld)Z)dndld*Z*dld+Z+dld,Z,dld-Z-dld.Z.dld/Z/dld0Z0dld1Z1dld2Z2dld3Z3dld4Z4dld5Z5dld6Z6dld7Z7dld8Z8dld9Z9dld:Z:dld;Z;dld<Z<dld=Z=dld>Z>dld?Z?d@dAdBdCdDdEZ@dldFZAdldGZBdldHZCdldIZDdldJZEdldKZFdL ZGdldMZHdldNZIdldOZJdldPZKdldQZLdldRZMdldSZNdldTZOdldUZPdodVZQdldWZRdldXZSdldYZTdldZZUdld[ZVdld\ZWdld]ZXdld^ZYdld_ZZdld`Z[dldaZ\dldbZ]dldcZ^dlddZ_dldeZ`dldfZadldgZbdldhZcdldiZddldjZedk Zfy)pr(   aH  
    The html4css1 writer has been optimized to produce visually compact
    lists (less vertical whitespace).  HTML's mixed content models
    allow list items to contain "<li><p>body elements</p></li>" or
    "<li>just text</li>" or even "<li>text<p>and body
    elements</p>combined</li>", each with different effects.  It would
    be best to stick with strict body elements in list items, but they
    affect vertical spacing in older browsers (although they really
    shouldn't).
    The html5_polyglot writer solves this using CSS2.

    Here is an outline of the optimization:

    - Check for and omit <p> tags in "simple" lists: list items
      contain either a single paragraph, a nested simple list, or a
      paragraph followed by a nested simple list.  This means that
      this list can be compact:

          - Item 1.
          - Item 2.

      But this list cannot be compact:

          - Item 1.

            This second paragraph forces space between list items.

          - Item 2.

    - In non-list contexts, omit <p> tags on a paragraph if that
      paragraph is the only child of its parent (footnotes & citations
      are allowed a label first).

    - Regardless of the above, in definitions, table cells, field bodies,
      option descriptions, and list items, mark the first child with
      'class="first"' and the last child with 'class="last"'.  The stylesheet
      sets the margins (top & bottom respectively) to 0 for these elements.

    The ``no_compact_lists`` setting (``--no-compact-lists`` command-line
    option) disables list whitespace optimization.
    zz<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
zC<meta http-equiv="Content-Type" content="text/html; charset=%s" />
zO<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=%s" />
&nbsp;   )z&mdash;r#   )())r#   r#   )dashparenthesesparensnonec                P    | j                  |dd       | j                  |dd       y )Nfirstr   last)set_class_on_childr+   nodes     r,   set_first_lastzHTMLTranslator.set_first_last   s&    gq1fb1r.   c                    | j                  |dd       | j                  j                  | j                  |dd             y )NaddressF)metapreCLASS)visit_docinfo_itembodyappendstarttagrV   s     r,   visit_addresszHTMLTranslator.visit_address   s8    ie<		tU)DEr.   c                Z    | j                   j                  d       | j                          y Nz
</pre>
)r`   ra   depart_docinfo_itemrV   s     r,   depart_addresszHTMLTranslator.depart_address   s     		&  "r.   c                    |d   j                  dd       | j                  j                  | j                  |d             | j	                  |       y )Nclassesr   
admonitiondiv)insertr`   ra   rb   rX   rV   s     r,   visit_admonitionzHTMLTranslator.visit_admonition   sA    Yq,/		tU34D!r.   Nc                :    | j                   j                  d       y N</div>
r`   ra   rV   s     r,   depart_admonitionz HTMLTranslator.depart_admonition       		$r.   c                    t        |j                  t        j                        r)| j                  r| j
                  j                  d       y y | j                  |d       y )Nz
<br />author)
isinstanceparentr   authorsauthor_in_authorsr`   ra   r_   rV   s     r,   visit_authorzHTMLTranslator.visit_author   sF    dkk5==1%%		  , & ##D(3r.   c                |    t        |j                  t        j                        rd| _        y | j                          y )NT)rv   rw   r   rx   ry   rf   rV   s     r,   depart_authorzHTMLTranslator.depart_author   s(    dkk5==1%)D"$$&r.   c                6    | j                  |d       d| _        y )Nrx   F)r_   ry   rV   s     r,   visit_authorszHTMLTranslator.visit_authors   s    i0!&r.   c                $    | j                          y r&   )rf   rV   s     r,   depart_authorszHTMLTranslator.depart_authors   s      "r.   c                    | j                   j                  |       |j                  j                  j                  |j                  j                  d             y )Nstub)colspecsra   rw   stubs
attributesgetrV   s     r,   visit_colspeczHTMLTranslator.visit_colspec   s;    T"  !4!4V!<=r.   c           	     r   t        |j                  dd      t        j                        ry d|j                  j                  d   v s3d| j
                  j                  v rd|j                  j                  d   vry t        d | j                  D              }| j                  j                  | j                  |d             | j                  D ]K  }|j                         d	z  |z  d
z   }| j                  j                  | j                  |dd|z               M | j                  j                  d       y )NFTdescendsiblingszcolwidths-autori   zcolwidths-givenc              3  <   K   | ]  }|j                           y wr&   )	propwidth).0rW   s     r,   	<genexpr>z0HTMLTranslator.depart_colspec.<locals>.<genexpr>   s     Et$..*Es   colgroupg      Y@g      ?colz%i%%)widthz</colgroup>
)rv   	next_noder   colspecrw   settingstable_stylesumr   r`   ra   rb   r   emptytag)r+   rW   total_widthcolwidths       r,   depart_colspeczHTMLTranslator.depart_colspec   s   dnnUTnBmm% 2 29 == DMM$=$==%T[[-?-?	-JJEt}}EE		tZ89MM 	ED~~'%/+=CHIIT]]417(1B + D E	E 			)r.   c                    d|d   v xsS | j                   j                  xr; d|d   vxr2 | j                  xs$ d|j                  d   v xs | j	                  |      S )Ncompactri   opencontents)r   compact_listscompact_simplerw   check_simple_listrV   s     r,   is_compactablezHTMLTranslator.is_compactable   so    T)_, ;MM// :d9o5:,, 9&$++i*@@9 !2248	<r.   c           	         | j                   j                  | j                  |dddd             | j                   j                  d       | j                  |       y )Ntablezdocutils citationvoidrP   r^   framerulesK<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr>r`   ra   rb   footnote_backrefsrV   s     r,   visit_citationzHTMLTranslator.visit_citation  [    		tW-@-36 ' C 	D 			   	! 	t$r.   c                :    | j                   j                  d       y Nz</td></tr>
</tbody>
</table>
rq   rV   s     r,   depart_citationzHTMLTranslator.depart_citation
      		 0 	1r.   c           	         d}d|v r	||d   z  }n#d|v r|| j                   j                  |d      z  }| j                  j                  | j	                  |dd|dg             y )N#refidrefnamea[zcitation-reference)suffixhrefri   )documentnameidsr`   ra   rb   )r+   rW   r   s      r,   visit_citation_referencez'HTMLTranslator.visit_citation_reference  ss    d?DM!D$DMM))$y/::D		tS40D/E ' G 	Hr.   c                :    | j                   j                  d       y )Nz]</a>rq   rV   s     r,   depart_citation_referencez(HTMLTranslator.depart_citation_reference      		!r.   c                    | j                   j                  d       | j                   j                  | j                  |ddd             y )Nz- <span class="classifier-delimiter">:</span> spanr#   
classifierr]   r`   ra   rb   rV   s     r,   visit_classifierzHTMLTranslator.visit_classifier  s8    		HI		tVR|LMr.   c                \    | j                   j                  d       | j                  |       y )N</span>)r`   ra   depart_termrV   s     r,   depart_classifierz HTMLTranslator.depart_classifier  s"    		#r.   c                   | j                   j                  | j                  |dd             t        |      dkD  rM|d   d   j                  d       |d   d   j                  d	       |dd D ]  }|d   j                  d
        y y )Nrk   compoundr]      r   ri   zcompound-firstrT   zcompound-lastzcompound-middler`   ra   rb   len)r+   rW   childs      r,   visit_compoundzHTMLTranslator.visit_compound$  s    		tU*EFt9q=GI%%&67HY&&7a ;i ''(9:; r.   c                :    | j                   j                  d       y ro   rq   rV   s     r,   depart_compoundzHTMLTranslator.depart_compound,  rs   r.   c                ~    | j                   j                  | j                  |dd             | j                  |       y )Nddr#   r`   ra   rb   rX   rV   s     r,   visit_definitionzHTMLTranslator.visit_definition0  /    		tT267D!r.   c                :    | j                   j                  d       y )Nz</dd>
rq   rV   s     r,   depart_definitionz HTMLTranslator.depart_definition4      		#r.   c                ^    | j                   j                  | j                  |dd             y )Ndldocutilsr]   r   rV   s     r,   visit_definition_listz$HTMLTranslator.visit_definition_list8  s#    		tTDEr.   c                :    | j                   j                  d       y )Nz</dl>
rq   rV   s     r,   depart_definition_listz%HTMLTranslator.depart_definition_list;  r   r.   c                     y r&   rG   rV   s     r,   visit_definition_list_itemz)HTMLTranslator.visit_definition_list_item?      r.   c                     y r&   rG   rV   s     r,   depart_definition_list_itemz*HTMLTranslator.depart_definition_list_itemB  r   r.   c                ~    | j                   j                  | j                  |dd             | j                  |       y )Ntdr#   r   rV   s     r,   visit_descriptionz HTMLTranslator.visit_descriptionF  r   r.   c                :    | j                   j                  d       y )Nz</td>rq   rV   s     r,   depart_descriptionz!HTMLTranslator.depart_descriptionJ  r   r.   c           	        | j                   j                  t        | j                               | j                  j                  | j	                  |dddd             | j                  j                  d       d| _        y )Nr   docinfor   rP   r   zR<col class="docinfo-name" />
<col class="docinfo-content" />
<tbody valign="top">
T)contextra   r   r`   rb   
in_docinforV   s     r,   visit_docinfozHTMLTranslator.visit_docinfoN  sn    C		N+		tW-6-36 ' C 	D 			 2 	3 r.   c                    | j                   j                  d       d| _        | j                  j	                         }| j                   |d  | _        g | _         y )N</tbody>
</table>
F)r`   ra   r   r   popr   )r+   rW   starts      r,   depart_docinfozHTMLTranslator.depart_docinfoX  sG    		/0  "yy(	r.   c                6   |rAd|d| j                  |j                               d}| j                  j                  |       | j                  j                  | j                  |dd             | j                  j                  d| j                  j                  |   z         t        |      rjt        |d   t        j                        r|d   d   j                  d	       t        |d
   t        j                        r|d
   d   j                  d       y y y )Nz<meta name="z" content="z" />
trr#   z&<th class="docinfo-name">%s:</th>
<td>r   ri   rR   rT   rS   )attvalastextr[   ra   r`   rb   languagelabelsr   rv   r   Element)r+   rW   namer[   meta_tags        r,   r_   z!HTMLTranslator.visit_docinfo_item_  s    DKKM :<HIIX&		tT267		B==//56 	7t9$q'5==1Q	"))'2$r(EMM2R#**62 3 r.   c                :    | j                   j                  d       y )Nz</td></tr>
rq   r*   s    r,   rf   z"HTMLTranslator.depart_docinfo_itemm  s    		(r.   c                ^    | j                   j                  | j                  |dd             y )Nr\   zdoctest-blockr]   r   rV   s     r,   visit_doctest_blockz"HTMLTranslator.visit_doctest_blockq  #    		tU/JKr.   c                :    | j                   j                  d       y re   rq   rV   s     r,   depart_doctest_blockz#HTMLTranslator.depart_doctest_blockt      		&r.   c                    t         j                  j                  j                  | |       t	        |      dk(  r| j
                  j                  d       | j                  |       y )Nr   rI   )r   r   r(   visit_entryr   r`   ra   rX   rV   s     r,   r  zHTMLTranslator.visit_entryx  sI    ))55dDAt9>IIX&D!r.   c                j    | j                   j                  | j                  j                                y r&   r`   ra   r   r   rV   s     r,   depart_entryzHTMLTranslator.depart_entry~  s!    		))+,r.   c                   i }d|v r|d   |d<   d|v r|d   |d<   | j                   }| j                  j                  | j                   | j                  f       d| _        | j	                  |      | _         | j                   r(|s&|j                  dd      dz   j                         |d<   | j                  j                   | j                  |dfi |       y)z
        The 'start' attribute does not conform to HTML 4.01's strict.dtd, but
        cannot be emulated in CSS1 (HTML 5 reincludes it).
        r   enumtypeclassNr#   z simpleol)	r   r   ra   	compact_pr   r   stripr`   rb   )r+   rW   attsold_compact_simples       r,   visit_enumerated_listz$HTMLTranslator.visit_enumerated_list  s    
 d? MDM ,DM "00T00$..AB"11$7'9!XXgr2Y>EEGDM		tT:T:;r.   c                    | j                   j                         \  | _        | _        | j                  j                  d       y )Nz</ol>
)r   r   r   r  r`   ra   rV   s     r,   depart_enumerated_listz%HTMLTranslator.depart_enumerated_list  s0    .2ll.>.>.@+T^		#r.   c                `    | j                   j                  | j                  |ddd             y )Nr   r#   fieldr]   r   rV   s     r,   visit_fieldzHTMLTranslator.visit_field  s%    		tT2WEFr.   c                :    | j                   j                  d       y N</tr>
rq   rV   s     r,   depart_fieldzHTMLTranslator.depart_field  r   r.   c                   | j                   j                  | j                  |ddd             | j                  |dd       |j                  }| j
                  sXt        |j                  t        j                        s4|j                  j                  |      t        |j                        dz
  k(  r| j                  |dd	       y y )
Nr   r#   z
field-bodyr]   rR   r   r   rS   rT   )r`   ra   rb   rU   rw   compact_field_listrv   r   r   indexr   )r+   rW   r  s      r,   visit_field_bodyzHTMLTranslator.visit_field_body  s    		tT2\JKgq1##%,,6||!!%(C,=,AA ##D&"5	 Br.   c                :    | j                   j                  d       y )Nz</td>
rq   rV   s     r,   depart_field_bodyz HTMLTranslator.depart_field_body  r   r.   c           	        | j                   j                  | j                  | j                  f       d | _        d|d   v rd| _        n$| j                  j
                  rd|d   vrd| _        | j                  r|D ]  }|d   }t        |t        j                        sJ |D cg c]  }t        |t        j                        s|  }}t        |      dk(  r\t        |      dk(  r.t        |d   t        j                  t        j                  f      rd| _         n | j                  j                  | j                  |d	d
dd             | j                  j                  d       y c c}w )Nr   ri   Tr   rT   r   r   Fr   r   rP   zdocutils field-list)r   r   r^   zK<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
)r   ra   r  r  r   compact_field_listsrv   r   
field_body	Invisibler   	paragraph
line_blockr`   rb   )r+   rW   r  r$  nchildrens         r,   visit_field_listzHTMLTranslator.visit_field_list  sX   T44dnnEFY'&*D#mm//Y/&*D#"" 
"2Y
!*e.>.>???'1 C!#-a#A  C CH*x=A-&x{(-9I9I'JL.3D+
 			tWF-3-B ' D 	E 			 2 	3Cs   "#E'c                    | j                   j                  d       | j                  j                         \  | _        | _        y Nr   )r`   ra   r   r   r  r  rV   s     r,   depart_field_listz HTMLTranslator.depart_field_list  s1    		/026,,2B2B2D/r.   c           	        i }| j                   rd|d<   nd|d<   | j                  j                  rtt        |j	                               | j                  j                  kD  rDd|d<   | j
                  j                  d| j                  |j                  ddd	
      z   dz          n| j
                  j                  d       | j                  j                   | j                  |ddfi |       y )Nzdocinfo-namer  z
field-name   colspanr  r   r#   r  r]   z<td>&nbsp;</td>th)
r   r   field_name_limitr   r   r   ra   rb   rw   r`   r+   rW   r  s      r,   visit_field_namezHTMLTranslator.visit_field_name  s    ??*DM(DMMM**DKKM"T]]%C%CCDOLL	"&--T26= #0 #?!? #4!4 5
 LL#		tT2>>?r.   c                    | j                   j                  d       | j                   j                  | j                  j                                y )Nz:</th>r  rV   s     r,   depart_field_namez HTMLTranslator.depart_field_name  s3    		"		))+,r.   c           	         | j                   j                  | j                  |dddd             | j                   j                  d       | j                  |       y )Nr   zdocutils footnoter   rP   r   r   r   rV   s     r,   visit_footnotezHTMLTranslator.visit_footnote  r   r.   c                   g }|d   }| j                   j                  r|rt        |      dk(  rX| j                  j	                  d       | j                  j	                  d       | j                  j	                  d|d   z         nt        |d      D ]  \  }}|j	                  d|d|d        | j                  j	                  d	d
j                  |      z         | xj                  ddgz  c_        n2| j                  j	                  d       | xj                  ddgz  c_        t        |      dkD  r1|s|d   d   j	                  d       |d   d   j	                  d       y y )Nbackrefsr   r#   </a>z!<a class="fn-backref" href="#%s">r   z<a class="fn-backref" href="#">z<em>(%s)</em> , ri   rR   rT   rS   )r   footnote_backlinksr   r   ra   	enumerater<   )r+   rW   	backlinksr:  ibackrefs         r,   r   z HTMLTranslator.footnote_backrefs  sA   	
#==++8}!##B'##F+##$G&.qk%2 3 %.h$: 5LQ$$(/&4 55 ##$4tyy7K$KLR(LL#LLRH$Lt9q= Q	"))'2HY&&v. r.   c                :    | j                   j                  d       y r   rq   rV   s     r,   depart_footnotezHTMLTranslator.depart_footnote  r   r.   c           	     ,   d|d   z   }| j                   j                  }|dk(  rd}| j                  j                  d       n$|dk(  sJ d}| j                  j                  d       | j                  j                  | j                  |d	|d
|             y )Nr   r   bracketsr   ]superscriptz<sup></sup>r   zfootnote-reference)r^   r   )r   footnote_referencesr   ra   r`   rb   )r+   rW   r   formatr   s        r,   visit_footnote_referencez'HTMLTranslator.visit_footnote_reference  s    T']"22ZFLL$]***FLL)		tS&-A ' N 	Or.   c                p    | j                   j                  | j                  j                         dz          y )Nr;  r  rV   s     r,   depart_footnote_referencez(HTMLTranslator.depart_footnote_reference  s&    		))+f45r.   c                     y r&   rG   rV   s     r,   visit_generatedzHTMLTranslator.visit_generated  r   r.   zimage/svg+xmlzapplication/x-shockwave-flashz	video/mp4z
video/webmz	video/ogg)z.svgz.swfz.mp4z.webmz.oggc                   i }|d   }t         j                  j                  |      d   j                         }|| j                  v r||d<   | j                  |   |d<   n||d<   |j                  d|      |d<   d|v r|d   |d<   d|v r|d   |d<   d	|v r't        rd|vsd|vr| j                  j                  r	 | j                  |      }t        j                  j                  |      5 }|j                  }d d d        | j                  j                  j                  |j                                d|vrd
d   z  |d<   d|vrd
d   z  |d<   	 dD ]f  }	|	|v st-        j.                  d||	         }
|
sJ t1        |
j3                  d            t1        |d	         dz  z  |
j3                  d      ||	<   h g }dD ]J  }	|	|v st-        j.                  d||	         r||	xx   dz  cc<   |j5                  |	d||	   d       ||	= L |rdj7                  |      |d<   t9        |j:                  t<        j>                        rRt9        |j:                  t<        j@                        r1t9        |j:                  j:                  t<        j>                        sd}nd}d|v rd|d   z  |d<   || j                  v rH| jB                  j5                   | jD                  |ddfi ||j                  d|      z   dz   |z          y | jB                  j5                   | jF                  |d|fi |       y # 1 sw Y   =xY w# t         t"        t$        f$ r3}| j&                  j(                  j+                  d|        Y d }~0d }~ww xY w)Nurir   datatypesrcaltr   heightscalez%dpxr   zProblem reading image file: )r   rW  z([0-9.]+)(\S*)$d   r/  z	^[0-9.]+$pxz: ; style
r#   alignalign-%sr  objectz	</object>img)$r7   r8   splitextlowerobject_image_typesr   r	   r   file_insertion_enableduri2pathImager   sizerecord_dependenciesaddas_posix
ValueErrorOSErrorUnicodeEncodeErrorr   reporterwarningrematchfloatgroupra   r<   rv   rw   r   TextElement	referencer`   rb   r   )r+   rW   r  rR  ext	imagepathrb  img_sizeeatt_namers  r]  r   s                r,   visit_imagezHTMLTranslator.visit_image.  sd   5kggs#A&,,.$)))DL2237DLDK((5#.DKd? MDMt!(^DNd?,0DMM88> $c 2I	2 ,c#&88, MM5599):L:L:NOd*(.!(<Wt+)/(1+)=X- (t#HH%7hHE L5ekk!n-tG}1E1KLA&(DN	( ) 	#H488L$x.9Nd*N(DNCDN	# HHUODM4;;(9(9:$++u7t{{1153D3DEFFd?&g6DM$)))II]T]]42FF#xxs346ABDJK L II]T]]4G$GHU, ,"G-?@ <MM**226qc:< <<s0   :0L? *L27L? 2L<7L? ?N(NNc                     y r&   rG   rV   s     r,   depart_imagezHTMLTranslator.depart_imagen  r   r.   c           	         | j                   j                  | j                  |dd| j                  j	                         z  d             y )Nr   z%s[labelr]   )r`   ra   rb   r   r   rV   s     r,   visit_labelzHTMLTranslator.visit_labels  s?    		tT54<<;K;K;M3M-4 ' 6 	7r.   c                    | j                   j                  d| j                  j                          d| j                  j                                 y )NrG  z	</td><td>r  rV   s     r,   depart_labelzHTMLTranslator.depart_labelw  s=    		1T\\--/0	$,,:J:J:L9MNOr.   c                    | j                   j                  | j                  |dd             t        |      r|d   d   j                  d       y y )Nlir#   r   ri   rR   r   rV   s     r,   visit_list_itemzHTMLTranslator.visit_list_item{  sD    		tT267t9GI%%g. r.   c                :    | j                   j                  d       y )Nz</li>
rq   rV   s     r,   depart_list_itemzHTMLTranslator.depart_list_item  r   r.   c                ^   |d   }d|v rF|D cg c]
  }|dk7  s	| c}|d<   | j                   j                  | j                  |dd             y | j                   j                  | j                  |ddd             |j                         }| j                  j                  |      D ]  }|j                         rt| j                  j                  |      r.| j                   j                  d| j                  |      z         \| j                   j                  | j                  |             |dv r| j                   j                  |       | j                   j                  d	t        |      d
z
  z  dz           | j                   j                  d       t        j                  c c}w )Nri   coder#   ttzdocutils literalr]   z<span class="pre">%s</span>)r^  r\  rI   r   r\  </tt>)r`   ra   rb   r   words_and_spacesfindallr  in_word_wrap_pointsearchencoder   r   SkipNode)r+   rW   ri   clstexttokens         r,   visit_literalzHTMLTranslator.visit_literal  sj   y/W.5GssGDOIIT]]4<=		MM$b0BMC	E{{}**2248 	DE{{} **11%8II$$%B'+{{5'9&: ; II$$T[[%78+%		  ' 		  SZ!^!<s!BC	D 			!nn/ Hs
   
F*F*c                :    | j                   j                  d       y )Nz</code>rq   rV   s     r,   depart_literalzHTMLTranslator.depart_literal  s    		#r.   c                ^    | j                   j                  | j                  |dd             y )Nr\   zliteral-blockr]   r   rV   s     r,   visit_literal_blockz"HTMLTranslator.visit_literal_block  r  r.   c                :    | j                   j                  d       y re   rq   rV   s     r,   depart_literal_blockz#HTMLTranslator.depart_literal_block  r  r.   c                   i }| j                   j                  rQt        |j                               | j                   j                  kD  r!d|d<   | j                  j                  d       n| j                  j                  d       | j                  j                   | j                  |dfddi|       | j                  j                  d       | j                  j                  d	       y )
Nr/  r0  z</tr>
<tr><td>&nbsp;</td>r#   r   r^   zoption-groupz<kbd>r   )r   option_limitr   r   r   ra   r`   rb   r3  s      r,   visit_option_groupz!HTMLTranslator.visit_option_group  s    MM&&DKKM"T]]%?%??DOLL <=LL#		DMM$CNCdC	E		!Ar.   c                    | j                   j                          | j                  j                  d       | j                  j                  | j                   j                                y )Nz</kbd></td>
)r   r   r`   ra   rV   s     r,   depart_option_groupz"HTMLTranslator.depart_option_group  sC    		)		))+,r.   c           	         | j                   j                  | j                  |dddd             | j                   j                  d       y )Nr   zdocutils option-listr   rP   r   zH<col class="option" />
<col class="description" />
<tbody valign="top">
r   rV   s     r,   visit_option_listz HTMLTranslator.visit_option_list  sJ    		mmD'1G"(  8	9 			 2 	3r.   c                :    | j                   j                  d       y r,  rq   rV   s     r,   depart_option_listz!HTMLTranslator.depart_option_list  s    		/0r.   c                \    | j                   j                  | j                  |dd             y )Nr   r#   r   rV   s     r,   visit_option_list_itemz%HTMLTranslator.visit_option_list_item  s!    		tT267r.   c                :    | j                   j                  d       y r  rq   rV   s     r,   depart_option_list_itemz&HTMLTranslator.depart_option_list_item  r   r.   c           
        t        |j                  t        j                        s$t        |j                  t        j                        ry|j                         D ]*  \  }}|j                  |      s|dk(  r|g dgdgddgfv r* y t        |j                  d   t        j                        }|j                  j                  |d D ]$  }t        |t        j                        r||u r n y t        |j                  D cg c]/  }t        |t        j                  t        j                  f      r.|1 c}      }| j                  s| j                  s| j                  r|dk(  ryyc c}w )	zU
        Determine if the <p> tags around paragraph ``node`` can be omitted.
        Fri   rR   rS   r   Nr   T)rv   rw   r   r   r   attlistis_not_defaultr  r)  r%  r   r   r  r  )r+   rW   keyvaluerR   r   r(  parent_lengths           r,   should_be_compact_paragraphz*HTMLTranslator.should_be_compact_paragraph  s=    t{{ENN3$++u~~6,,. 	JC##C(	)"rG9(.x'61B'D D 	 4;;q>5;;7[[))%&1 	E%1}	  01:-</Q 0 1&&~~-1"40s   /E'1E'c                    | j                  |      r| j                  j                  d       y | j                  j                  | j	                  |dd             | j                  j                  d       y )Nr#   p</p>
)r  r   ra   r`   rb   rV   s     r,   visit_paragraphzHTMLTranslator.visit_paragraph  sS    ++D1LL#IIT]]4b9:LL)r.   c                    | j                   j                  | j                  j                                | j	                  |       y r&   )r`   ra   r   r   report_messagesrV   s     r,   depart_paragraphzHTMLTranslator.depart_paragraph  s/    		))+,T"r.   c                    | j                   j                  | j                  |dd             | j                  |       d| _        y )Nrk   sidebarr]   T)r`   ra   rb   rX   
in_sidebarrV   s     r,   visit_sidebarzHTMLTranslator.visit_sidebar  s;    		MM$YM7	9D!r.   c                H    | j                   j                  d       d| _        y )Nrp   F)r`   ra   r  rV   s     r,   depart_sidebarzHTMLTranslator.depart_sidebar  s    		$r.   c                   t        |j                  t        j                        r/| j                  j                  | j                  |ddd             y | j                  j                  | j                  |dd             y )Nr   r#   	subscriptr]   subrv   rw   r   literal_blockr`   ra   rb   rV   s     r,   visit_subscriptzHTMLTranslator.visit_subscript
  sb    dkk5#6#67IIT]]41< + > ? IIT]]4;<r.   c                    t        |j                  t        j                        r| j                  j                  d       y | j                  j                  d       y )Nr   z</sub>rv   rw   r   r  r`   ra   rV   s     r,   depart_subscriptzHTMLTranslator.depart_subscript  :    dkk5#6#67IIY'IIX&r.   c           	     <   t        |j                  t        j                        rJ| j                  j                  | j                  |ddd             | j                  j                  d       y t        |j                  t        j                        rd| j                  j                  | j                  |ddd             | j                  j                  d       t        | j                        | _
        y t        |j                  t        j                        rd	| j                  | j                  z   d
z
  z  }| j                  j                  | j                  ||dd      | j                  i ddd      z          | j                  j                  d|z         y y )Nr  r#   zsidebar-subtitler]   r  h2subtitlez</h2>
zh%sr   zsection-subtitler   z</span></%s>
)rv   rw   r   r  r`   ra   rb   r   r   r   in_document_titlesectionsection_levelr    )r+   rW   tags      r,   visit_subtitlezHTMLTranslator.visit_subtitle  s>   dkk5==1IIT]]4b1C + E FLL)U^^4IIT]]4r]LMLL	*%(^D"U]]34--0I0IIAMNCIIdC3EF--FB6H-IJK LL 03 67 4r.   c                   | j                   j                  | j                  j                                | j                  r| j                   | j                  d | _        d| _        | j                  j                  | j                          | j                  j                  | j                          | j                   d d = y y )NrT   r   )	r`   ra   r   r   r  r  body_pre_docinfoextendhtml_subtitlerV   s     r,   depart_subtitlezHTMLTranslator.depart_subtitle(  s    		))+,!! IId&<&<R@DM%&D"!!((3%%dii0		! "r.   c                   t        |j                  t        j                        r/| j                  j                  | j                  |ddd             y | j                  j                  | j                  |dd             y )Nr   r#   rH  r]   supr  rV   s     r,   visit_superscriptz HTMLTranslator.visit_superscript2  sd    dkk5#6#67IIT]]41> + @ A IIT]]4;<r.   c                    t        |j                  t        j                        r| j                  j                  d       y | j                  j                  d       y )Nr   rI  r  rV   s     r,   depart_superscriptz!HTMLTranslator.depart_superscript9  r  r.   c                "   | j                   j                  | j                  |dd             | j                   j                  d       d}t        |d         rX|d   }t        |      dk(  r	d|d	   z  }n<d}g }|D ]  }|j                  d
|d|d       |dz  }! ddj	                  |      z  }|j                  d      r	d|d   z  }nd}| j                   j                  d|d   d|d   d| j                  |d         d|d|d       y )Nrk   zsystem-messager]   z <p class="system-message-title">r#   r:  r   z%; <em><a href="#%s">backlink</a></em>r   z
<a href="#r<  r;  z; <em>backlinks: %s</em>r=  linez	, line %szSystem Message: rT  /levelz (<tt class="docutils">sourcer  rL   r  )r`   ra   rb   r   r<   hasattrr  )r+   rW   backref_textr:  rA  r@  rB  r  s           r,   visit_system_messagez#HTMLTranslator.visit_system_message@  s   		tU:JKL		;<tJ J'H8}! G"*1+!. 	' G$$w%JKFA !;"&))I"6!7<<f-DD		 L$w- KKX7|M 	Nr.   c                :    | j                   j                  d       y ro   rq   rV   s     r,   depart_system_messagez$HTMLTranslator.depart_system_messageZ  rs   r.   c           	        | j                   j                  | j                         d| _        ddi}d| j                  j                  g}d|v r|j                  d|d   z         d|v r|d   }|dd  d	v r|d
z  }d| |d<   | j
                  j                   | j                  |dfddj                  |      i|       y )NTborderr   r   r_  r`  r   rT   z0123456789.rZ  zwidth: r]  r   r^   r\  )r   ra   r  r   r   r`   rb   r<   )r+   rW   r  ri   r   s        r,   visit_tablezHTMLTranslator.visit_table^  s    DNN+!}t}}889d?NN:W56d?MERSz]*%eW-DM		DMM$Isxx/@IDI	Kr.   c                x    | j                   j                         | _        | j                  j	                  d       y )Nz	</table>
)r   r   r  r`   ra   rV   s     r,   depart_tablezHTMLTranslator.depart_tablem  s(    ))+		&r.   c                ^    | j                   j                  | j                  |dd             y )Ntbodytopvalignr   rV   s     r,   visit_tbodyzHTMLTranslator.visit_tbodyr  s#    		tWUCDr.   c                :    | j                   j                  d       y )Nz	</tbody>
rq   rV   s     r,   depart_tbodyzHTMLTranslator.depart_tbodyu  r  r.   c           
         | j                   j                  | j                  |dd|j                  d   |j                  d                y )Ndtr#   ri   ids)ri   r  )r`   ra   rb   rw   rV   s     r,   
visit_termzHTMLTranslator.visit_termy  sC    		tT2/3{{9/E+/;;u+= ' ? 	@r.   c                    |j                  t        j                  dd      ry | j                  j	                  d       y )NFTr   z</dt>
)r   r   r   r`   ra   rV   s     r,   r   zHTMLTranslator.depart_term~  s/    >>%**ED>I		#r.   c                ^    | j                   j                  | j                  |dd             y )Ntheadbottomr  r   rV   s     r,   visit_theadzHTMLTranslator.visit_thead  s#    		tWXFGr.   c                :    | j                   j                  d       y )Nz	</thead>
rq   rV   s     r,   depart_theadzHTMLTranslator.depart_thead  r  r.   c                   g }| j                   | j                  z   dz
  }t        |j                        dk\  r8t	        |j                  d   t
        j                        r|j                  d       |dkD  r|j                  d|z         dt        |d      z  }| j                  ||d|      }|j                  d      r3i }d	|d
<   d|d   z   |d<   | | j                  i ddfi |z  }d|z  }||fS d|z  }||fS )Nr   r/  zwith-subtitle   zh%ir#   )ri   r   ztoc-backrefr  r   r   r   z
</a></%s>
z</%s>
)r  r    r   rw   rv   r   r  ra   minrb   r  )r+   rW   ri   h_leveltagname	start_tagr  	close_tags           r,   section_title_tagsz!HTMLTranslator.section_title_tags  s
   $$t'@'@@1D!4;;q>5>>:NN?+Q;NN57?+#gq/)MM$WME	<< D)DMg.DLr3;d;;I%/I )## "G+I)##r.   r/   r&   )T)r0   bool)gr2   r3   r4   __doc__doctypecontent_typecontent_type_mathmlr   r(   special_characterscopyattribution_formatsrX   rc   rg   rm   rr   rz   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r_   rf   r   r  r  r	  r  r  r  r  r  r!  r*  r-  r4  r6  r8  r   rD  rL  rN  rP  re  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  rG   r.   r,   r(   r(   p   sN   (\	H <LO $22EEJJL't $3*4%/#+-2
F#
"
%4''#>
*(<%1H"N
;%"$F$""3)L'"-<($
G$
6$36E@"-
%/41
O6 #2"A"-#/"-	>I@
7P/
$
<$
L'-
318$
>*#
 
='8 ='N4%K'
E'@
$H'
$r.   r(   c                  (    e Zd ZdZd Zd Zd Zd Zy)SimpleListCheckerz
    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.
    c                   |j                   D cg c]  }t        |t        j                        s|  }}|rgt        |d   t        j                        rJt        |d   t        j
                        st        |d   t        j                        r|j                          t        |      dk  ry t        j                  c c}w )Nr   rT   r   )
r)  rv   r   r%  r&  bullet_listenumerated_listr   r   	NodeFound)r+   rW   r   r)  s       r,   r  z!SimpleListChecker.visit_list_item  s    '+}} ?e%eU__=  ? ?HQKAHRL%*;*;<x|U-B-BCLLNx=A//!?s   #B<c                "    t         j                  r&   )r   r  rV   s     r,   r  z!SimpleListChecker.visit_paragraph  s    nnr.   c                "    t         j                  r&   r   r  rV   s     r,   r   z'SimpleListChecker.visit_definition_list      oor.   c                "    t         j                  r&   r  rV   s     r,   r   zSimpleListChecker.visit_docinfo  r  r.   N)r2   r3   r4   r  r  r  r   r   rG   r.   r,   r  r    s    
"$r.   r  )r  
__future__r   __docformat__os.pathr7   rr  r   r   r   r   docutils.writersr   docutils.writers._html_baser	   r   r(   r  rG   r.   r,   <module>r     st    #"  	 - - ' +R/W&& R/jo$W''66 o$d"**<< "r.   