
    k7i0             	         S r SSKJr  SrSSKJr  SSKrSSKJr  SSK	r	SSK
r
SSKrSSKrSSKJr  SSKrSSKrSSKrSSKrSSKrSSKrSSKJr  SS	KJr  SSKrSSKrSS
KJrJrJrJrJ r   SSK!J"r"  SSK#J$r$  SSK%J&r&   SSK'r'SSK(r'SSK)J*r*J+r+  Sr.\	R^                  " 5       r0\Rb                  " 5       r2\3" \Rh                  \55      (       a  \Rh                  r6O\Rl                  r6 " S S\65      r7\Rp                  " S5      r9\Rp                  " S5      r:\Rp                  " S5      r;\Rp                  " S5      r<Sr=S\=-  r>Sr?Sr@SrA0 SS_SS_S S!_S"S#_S$S%_S&S'_S(S)_S*S+_S,S-_S.S/_S0\A_S1S2_S3S4_S5S6_S7S8_S9S:_S;S<_S=S>S?S@SASBSCSD.E=rBrC0 SS_SS_S S!_S"S#_S$S%_S&S'_S(S)_S*S+_S,S-_S.S/_S0\A_S7S8_S1S2_S3S4_S5S6_S9S:_S;S<_S=S>S?SASE.E=rDrESFSG0=rFrGSS-\AS2SASH.=rHrI0 SIS_SJS_SKS!_SLS#_SMS%_SNS'_SOS)_SPS+_SQS-_SRS/_SS\A_STS8_SUS2_SVS4_SWS6_SXS:_SYS<_S=S>S?S@SASBSCSZ.ErJ0 SIS_SJS_SKS!_SLS#_SMS%_SNS'_SOS)_SPS+_SQS-_SRS/_SS\A_STS8_SUS2_SVS4_SWS6_SXS:_SYS<_S=S>S?SAS[.ErKS\SG0rLSS-\AS2SAS].rMSS\C4S^ jr4SS\C4S_ jrNS` rO\C4Sa jrPSb rQSc rR " Sd Se5      rS\S" SfSg9rT " Sh Si5      rU " Sj Sk\R                  5      rV " Sl Sm\R                  5      rX " Sn So\$R                  5      rYg! \,\-4 a    Sr' GNQf = f)pz
Open Document Format (ODF) Writer.

This module is provisional:
the API is not settled and may change with any minor Docutils version.
    )annotationsreStructuredText)ConfigParserN)StringIO)Path)ElementTree)minidom)frontendnodesutilswriters	languages)PIL)
standalone)
references   )OdtPygmentsProgFormatterOdtPygmentsLaTeXFormatterz1.0ac                  2    \ rS rSrSSS jjrSS jrS rSrg)	_ElementInterfaceWrapperK   Nc                B    [         R                  XU5        S [        U '   g N)_ElementInterface__init___parents)selftagattribs      [/home/james-whalen/.local/lib/python3.13/site-packages/docutils/writers/odf_odt/__init__.pyr   !_ElementInterfaceWrapper.__init__L   s    ""4f5    c                    U[         U '   g r   r   )r   parents     r    	setparent"_ElementInterfaceWrapper.setparentP   s    r"   c                    [         U    $ r   r$   r   s    r    	getparent"_ElementInterfaceWrapper.getparentS   s    ~r"    r   returnNone)__name__
__module____qualname____firstlineno__r   r&   r*   __static_attributes__r,   r"   r    r   r   K   s     r"   r   z( +)z(\t+)z^ +z {2,}zrststyle-table-z%s0)borderz
border-topzborder-leftzborder-rightzborder-bottomzDocutils.org/odf_odtz0urn:oasis:names:tc:opendocument:xmlns:office:1.0chartz/urn:oasis:names:tc:opendocument:xmlns:chart:1.0dcz http://purl.org/dc/elements/1.1/domz!http://www.w3.org/2001/xml-eventsdr3dz.urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0drawz1urn:oasis:names:tc:opendocument:xmlns:drawing:1.0foz;urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0formz.urn:oasis:names:tc:opendocument:xmlns:form:1.0mathz"http://www.w3.org/1998/Math/MathMLmetaz.urn:oasis:names:tc:opendocument:xmlns:meta:1.0numberz3urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0officeoooz!http://openoffice.org/2004/officeoooczhttp://openoffice.org/2004/calcooowz!http://openoffice.org/2004/writerpresentationz6urn:oasis:names:tc:opendocument:xmlns:presentation:1.0scriptz0urn:oasis:names:tc:opendocument:xmlns:script:1.0stylez/urn:oasis:names:tc:opendocument:xmlns:style:1.0z8urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0z/urn:oasis:names:tc:opendocument:xmlns:table:1.0z.urn:oasis:names:tc:opendocument:xmlns:text:1.0zhttp://www.w3.org/2002/xformszhttp://www.w3.org/1999/xlinkz http://www.w3.org/2001/XMLSchemaz)http://www.w3.org/2001/XMLSchema-instance)svgtabletextxformsxlinkxsdxsi)rG   rH   rI   rK   manifestz2urn:oasis:names:tc:opendocument:xmlns:manifest:1.0)r7   r>   r@   rA   rK   zxmlns:chartxmlns:dcz	xmlns:domz
xmlns:dr3dz
xmlns:drawzxmlns:foz
xmlns:formz
xmlns:math
xmlns:metaxmlns:numberxmlns:officezxmlns:presentation	xmlns:oooz
xmlns:ooocz
xmlns:ooowzxmlns:scriptxmlns:style)	xmlns:svgxmlns:table
xmlns:textzxmlns:xformsxmlns:xlinkz	xmlns:xsdz	xmlns:xsi)rU   rV   rW   rX   zxmlns:manifest)rO   rP   rR   rS   rX   c                >    Uc  0 n[        XU5      u  p[        X5      $ r   )fix_nsr   )r   r   nsmapnsdicts       r    Elementr]      s%    ~f-KC#C00r"   c                    Uc  0 n[        XU5      u  p[        X5      nU R                  U5        UR                  U 5        U$ r   )rZ   r   appendr&   )r%   r   r   r[   r\   els         r    
SubElementra     sA    ~f-KC	!#	.B
MM"LLIr"   c                    [        X5      n0 n[        UR                  5       5       H  u  pV[        XR5      nXdU'   M     X44$ r   )add_nslistitems)r   r   r\   nstagnsattribkeyvalnskeys           r    rZ   rZ     sC    3EH(s# ) ?r"   c                    U $ r   r,   )r   r\   s     r    rc   rc     s    Jr"   c                z    [        5       nU R                  USS9  UR                  5       nUR                  5         U$ )Nunicodeencoding)r   writegetvalueclose)et	outstreams1s      r    ToStringrv     s6    
IHHYH+				BOOIr"   c                    U R                  SS5      n U R                  SS5      n U R                  SS5      n SnU  H3  n[        U5      [        S5      :  a  US	[        U5      4-  -  nM/  X-  nM5     U$ )
N&z&amp;<z&lt;>z&gt; z&#x%X;)replaceord)rI   ascii_chars      r    escape_cdatar   #  st    <<W%D<<V$D<<V$DFt9F#h#d)..FNF	 
 Mr"   c                  f    \ rS rSrS	S
S jjrS rS
S jr\" \\5      rS r	S
S jr
\" \	\
5      rSrg)
TableStylei5  Nc                    Xl         X l        g r   )r5   backgroundcolor)r   r5   r   s      r    r   TableStyle.__init__6  s    .r"   c                    U R                   $ r   border_r)   s    r    get_border_TableStyle.get_border_:  s    ||r"   c                    Xl         g r   r   )r   r5   s     r    set_border_TableStyle.set_border_=  s    r"   c                    U R                   $ r   backgroundcolor_r)   s    r    get_backgroundcolor_TableStyle.get_backgroundcolor_B  s    $$$r"   c                    Xl         g r   r   )r   r   s     r    set_backgroundcolor_TableStyle.set_backgroundcolor_E  s     /r"   )r   r   r5   r   NNr-   )r0   r1   r2   r3   r   r   r   propertyr5   r   r   r   r4   r,   r"   r    r   r   5  s7    / k;/F%035IJOr"   r   z0.0007in solid #000000)r5   c                  R    \ rS rSrSSS jjrSS jrS rSS jrS rSS jr	S r
S	rg
)	ListLeveliQ  c                (    Xl         X l        X0l        g r   )levelsibling_levelnested_level)r   r   r   r   s       r    r   ListLevel.__init__R  s    
*(r"   c                    Xl         g r   r   )r   r   s     r    set_siblingListLevel.set_siblingW  s    *r"   c                    U R                   $ r   r   r)   s    r    get_siblingListLevel.get_siblingZ  s    !!!r"   c                    Xl         g r   r   )r   r   s     r    
set_nestedListLevel.set_nested]  s    (r"   c                    U R                   $ r   r   r)   s    r    
get_nestedListLevel.get_nested`  s       r"   c                    Xl         g r   r   )r   r   s     r    	set_levelListLevel.set_levelc      
r"   c                    U R                   $ r   r   r)   s    r    	get_levelListLevel.get_levelf      zzr"   )r   r   r   N)TTr-   )r0   r1   r2   r3   r   r   r   r   r   r   r   r4   r,   r"   r    r   r   Q  s%    )
+")!r"   r   c                     \ rS rSrSrSrSr S\-   r\R                  " \
R                  R                  \
R                  " 5       S5      \
R                  R                  \
R                  R                  \5      \5      5      rSr\R                  " \
R                  R                  \
R                  " 5       S5      \
R                  R                  \
R                  R                  \5      \5      5      rSS	S
\-  S/\SSS.4SS/SS04SS/SSS\R(                  S.4SS/SSS\R(                  S.4SS/S	S\R*                  S.4S S!/SSS"\R(                  S.4S#S$/SSS"\R(                  S.4S%S&/S'SS(\R(                  S.4S)S*/S'SS(\R(                  S.4S+S,/SSS-\R(                  S.4S.S//SSS-\R(                  S.4S0S1/SSS2\R(                  S.4S3S4/SSS2\R(                  S.4S5S6/SS7\R(                  S8.4S9S:/S'SS7\R(                  S.4S;S</S=S>S?S.4S@SA/S=SBSCS.444rSDSE0rSFrSGrSHrSVSI jrSVSJ jrSVSK jrSL r\R@                  4 SVSM jjr!SVSN jr"SO r#SP r$SVSQ jr%SVSR jr&SS r'ST r(SUr)g	)WWriterij  z'application/vnd.oasis.opendocument.text.odt)odtstylesdummyztemplate.txtzODF-Specific Options.Nz$Specify a stylesheet.  Default: "%s"z--stylesheet
stylesheetz
<filename>)defaultdestmetavarz]Specify an ODF-specific configuration/mapping file relative to the current working directory.z--odf-config-filer   z<file>z0Obfuscate email addresses to confuse harvesters.z--cloak-email-addressesF
store_truecloak_email_addresses)r   actionr   	validatorz!Do not obfuscate email addresses.z--no-cloak-email-addressesstore_falsezKSpecify the thickness of table borders in thousands of a cm. Default is 35.z--table-border-thicknessz<int>)r   r   r   z/Add syntax highlighting in literal code blocks.z--add-syntax-highlightingadd_syntax_highlightingz@Do not add syntax highlighting in literal code blocks. (default)z--no-syntax-highlightingz'Create sections for headers.  (default)z--create-sectionsTcreate_sectionsz#Do not create sections for headers.z--no-sectionszCreate links.z--create-linkscreate_linkszDo not create links.  (default)z
--no-linkszFGenerate endnotes at end of document, not footnotes at bottom of page.z--endnotes-end-docendnotes_end_doczPGenerate footnotes at bottom of page, not endnotes at end of document. (default)z--no-endnotes-end-doczMGenerate a bullet list table of contents, not a native ODF table of contents.z--generate-list-tocgenerate_oowriter_toc)r   r   r   zEGenerate a native ODF table of contents, not a bullet list. (default)z--generate-oowriter-toczSpecify the contents of an custom header line.  See ODF/ODT writer documentation for details about special field character sequences.z--custom-odt-headerr{   custom_headerz<custom header>z]Specify the contents of an custom footer line.  See ODF/ODT writer documentation for details.z--custom-odt-footercustom_footerz<custom footer>output_encoding_error_handlerxmlcharrefreplace)odf_config_filer   zodf_odt writer)r   c                X    [         R                  R                  U 5        [        U l        g r   )r   r   r   ODFTranslatortranslator_classr)   s    r    r   Writer.__init__  s    % -r"   c                   U R                   R                  U l        U R                  U R                   5      U l        U R                  R	                  U R
                  5        U R                   R                  U R                  5        U R                  R                  5         U R                  5         U R                  S   U l
        g )Nwhole)documentsettingsr   visitorretrieve_styles	EXTENSION	walkaboutadd_doc_titleassemble_my_partspartsoutputr)   s    r    	translateWriter.translate  s    ..,,T]];$$T^^4-""$ jj)r"   c                   [         R                  R                  U 5        [        R                  " 5       n[
        R                  " US[
        R                  5      nU R                  USU R                  [
        R                  S9  U R                  R                  5       nU R                  USU5        U R                  5       nU R                  USU5        U R                  5       nU R                  USU5        U R                  5       nSnSnU R                  R                   (       Ga  U R                  R                   R#                  SS	5      nUR%                  S	5      nUS
   R'                  5       nUSS  HJ  n[)        U5      S:X  a'  UR+                  5       (       a  UR-                  5       n  O[)        U5      S:X  d  MJ    O   Ucx   [.        R0                  " U5      n	U	R%                  S5      n	[)        U	5      S:  a  U	S   R%                  S5      n	U	S
   nUc%  U R4                  R6                  R9                  S5        U R;                  U R                  R=                  5       XV5      u  pnU
(       a  [>        R@                  " U5      nU R                  USU5        U RC                  U5        U RE                  U5        URG                  5         URI                  S
5        URK                  5       nURG                  5         XRL                  S'   U R4                  RN                  RP                  U RL                  S'   [R        RT                  U RL                  S'   g! [2         a    Un	 GNf = f)zEAssemble the `self.parts` dictionary.  Extend in subclasses.
        wmimetype)compress_typecontent.xmlzMETA-INF/manifest.xmlmeta.xmlN_-r   r      .zinvalid language-region.
  Could not find region with locale.normalize().
  Please specify both language and region (ll-RR).
  Examples: es-MX (Spanish, Mexico),
  en-AU (English, Australia).
styles.xmlr   ro   version)+r   r   assemble_partstempfileNamedTemporaryFilezipfileZipFileZIP_DEFLATEDwrite_zip_str	MIME_TYPE
ZIP_STOREDr   content_astextcreate_manifestcreate_metaget_stylesheetlanguage_coder}   splitlowerlenisalphaupperlocale	normalize	NameErrorr   reporterwarningupdate_stylesheetget_dom_stylesheetETtostringstore_embedded_filescopy_from_stylesheetrr   seekreadr   r   output_encodingdocutils__version__)r   fzfilecontentru   r   region_codelanguage_idssubtagrcodeupdatednew_dom_stylesupdated_noder   s                 r    r   Writer.assemble_my_parts  s    	%%d+'')3(<(<=:t~~!,, 	 	. ,,--/5-9!!#5"92>5*b1  "
 <<%%%<<55==c3GL'--c2L(O113M&qr*v;!#(8(8"(,,.K[A% + "*",,];E C(u:>!!HNN3/E"'(K&MM**2289 150F0FLL++-}1K-^,B5,3!!%(!!%(	q			#

7!%!7!7!G!G

: ( 4 4

9= ! *)E*s   	M M)(M)c                (   Sn[        5       nUc  Ub  UR                  S5      nUc  [        S5      eUR                  S5      nU(       d  [        S5      eU H  nUR                  R                  S5      n	U	S:X  d  U	S:X  d  M,  UR                  S	5      n
U
c  [        S
5      eUb1  UU
R                  S'   UU
R                  S'   SnUR                  U
5        Uc  M  UU
R                  S'   UU
R                  S'   SnUR                  U
5        M     XAU4$ )z@Update xml style sheet element with language and region/country.Fz8{urn:oasis:names:tc:opendocument:xmlns:office:1.0}stylesz5Cannot find 'styles' element in styles.odt/styles.xmlz>{urn:oasis:names:tc:opendocument:xmlns:style:1.0}default-stylez1Cannot find 'default-style' element in styles.xmlz7{urn:oasis:names:tc:opendocument:xmlns:style:1.0}family	paragraphgraphicz@{urn:oasis:names:tc:opendocument:xmlns:style:1.0}text-propertiesz3Cannot find 'text-properties' element in styles.xmlzE{urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0}languagezA{urn:oasis:names:tc:opendocument:xmlns:style:1.0}language-complexTzD{urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0}countryz@{urn:oasis:names:tc:opendocument:xmlns:style:1.0}country-complex)setfindRuntimeErrorfindallr   getadd)r   stylesheet_rootr   r  r  modified_nodesn1n2_nodesnodefamilyn3s              r    r  Writer.update_stylesheetI  s|   $(? %%B z"KM Mzz !H ",- - ! [(Fi,?*+B z*45 5 %0 AN 		=>
 =J 		9: #'&**2.". @K 		<=
 <G 		89 #'&**2.; !< 77r"   c                    [         R                  " [         R                   " 5       5      n[        R                  " X%5      nSUl        XFl        UR                  Xc5        g )Nl     H )time	localtimer   ZipInfoexternal_attrr   writestr)r   r  namebytes_r   r/  zinfos          r    r   Writer.write_zip_str{  s@     NN499;/	05+u%r"   c                    U R                   R                  5       nU H  u  p4Uc  M
   UR                  X45        M     g ! [         a.    U R                  R
                  R                  SU< S35         MX  f = f)NzCan't open file r   )r   get_embedded_file_listrp   OSErrorr   r  r  )r   r  embedded_filessourcedestinations        r    r
  Writer.store_embedded_files  si    <<>#1F~8F0	 $2
  8&&..-3688s   >4A65A6c                    U R                   R                  n[        R                  " US5      nUR	                  S5      nUR                  5         U$ )z
modeled after get_stylesheet
rsettings.xml)r   r   r   r   r  rr   )r   
stylespathr  ru   s       r    get_settingsWriter.get_settings  s?     ]]--

C0ZZ'	r"   c                6    U R                   R                  5       $ )zHGet the stylesheet from the visitor.
Ask the visitor to setup the page.
)r   
setup_pager)   s    r    r   Writer.get_stylesheet  s     ||&&((r"   c                   U R                   R                  nUR                  S5      (       d  g[        R                  " US5      nUR                  S5      nU R                  USU5        UR                  5       nU H=  nUR                  S5      (       d  M  UR                  U5      nUR                  Xg5        M?     UR                  5         g)zLCopy images, settings, etc from the stylesheet doc into target doc.
        r   Nr?  r@  z	Pictures/)r   r   endswithr   r   r  r   namelist
startswithr2  rr   )r   
outzipfilerA  	inzipfileru   rI  r3  imageobjs           r    r  Writer.copy_from_stylesheet  s     ]]--
""6**OOJ4	^^N+:~r:%%'D{++$>>$/##D3  	r"   c                    g r   r,   r)   s    r    r   Writer.assemble_parts      r"   c                   [        S[        [        S9n[        R                  " U5      n[        USU R                  SS.[        S9  [        USSSS.[        S9  [        USSSS.[        S9  [        USSS	S.[        S9  [        USSS
S.[        S9  [        U5      n[        R                  " U5      nUR                  S5      $ )Nzmanifest:manifestr   r\   zmanifest:file-entry/)zmanifest:media-typezmanifest:full-pathztext/xmlr   r   r@  r   z  )r]   MANIFEST_NAMESPACE_ATTRIBMANIFEST_NAMESPACE_DICTr  r   ra   r   MANNSDrv   r	   parseStringtoprettyxml)r   rootdocru   s       r    r   Writer.create_manifest  s    ,*

 nnT"4.#'>>"%8
 	 	4.#-"/8
 	 	4.#-".8
 	 	4.#-"08
 	 	4.#-",8
 	 c]!!"%t$$r"   c                h   [        S[        [        S9n[        R                  " U5      n[        US[        S9n[        US[        S9nS[        < 3Ul        [        R                  R                  SS5      n[        US	[        S9nXCl        [        R                  " S
[        R                  " 5       5      n[        US[        S9nXSl        [        US[        S9nXCl        [        US[        S9nXSl        [        US[        S9nSUl        [        US[        S9nSUl        [        US[        S9nSUl        [        US[        S9nU R                  R                  SS5      Ul        U R                   R#                  5       R%                  5        H  u  pgUS:X  a7  [&        R(                  " SU5      nU H  n	[        US[        S9nXl        M     MB  US:X  a  [        US[        S9nXsl        M_  US:X  a  [        US[        S9nXsl        M|  [        USSU0[        S9nXsl        M     [+        U5      nU$ ) Nzoffice:document-metarS  zoffice:metar\   zmeta:generatorzDocutils/rst2odf.py/USERr{   zmeta:initial-creatorz%Y-%m-%dT%H:%M:%Szmeta:creation-date
dc:creatorzdc:datezdc:languagezen-USzmeta:editing-cycles1zmeta:editing-durationPT00M01Szdc:titletitlez
[no title]keywordsz, *zmeta:keyworddescriptionzdc:descriptionsubjectz
dc:subjectzmeta:user-definedz	meta:name)r]   META_NAMESPACE_ATTRIBMETA_NAMESPACE_DICTr  r   ra   METNSDVERSIONrI   osenvironr#  r.  strftimer/  r   r   get_meta_dictre   rer   rv   )
r   rZ  r[  el1ru   s2propvaluerd  keywords
             r    r   Writer.create_meta  s   "(&

 nnT"$f=/?/69ZZ^^FB'5fE]].0@A3FC|F;y8}V<4VD6vFz&9==$$Wl;<<557==?KDz!88E51'G$T>&IC&H  ( & '7G " |FC  ':)4d(;FL ! @" c] 	r"   )r   r   r   r   r-   )*r0   r1   r2   r3   r   r   	supporteddefault_stylesheetr   relative_pathrk  pathjoingetcwddirname__file__default_stylesheet_pathdefault_templatedefault_template_pathr
   validate_booleanvalidate_nonnegative_intsettings_specsettings_defaultsrelative_path_settingsconfig_sectionconfig_section_dependenciesr   r   r   r  r   r   r   r
  rB  r   r  r   r   r   r4   r,   r"   r    r   r   j  s   9III'!I-#11
RYY['*
RWW__X.0BCE &!//
RYY['*
RWW__X.0@AC
 	  "9: 3(+-.=$%H%' @*+!*3!)!:!:<= 1-.!+3!)!:!:<=!+, &!)!B!BDE ?,-!*5!)!:!:<=1+,!+5!)!:!:<= 7$% *-!)!:!:<= 3 ! +-!)!:!:<= !"!**!)!:!:<= /!+*!)!:!:<=%%&!*.!)!:!:<=0()!+.!)!:!:<=6&'(3!)!:!:<=/*+ *3!)!:!:<=; ''+02	3@&'+023Ij	
nMb 	()< @%N"..*C5J08f 291E1E&	&	8)$%>0r"   r   c                  	   \ rS rSrSrSS jrS rS rS rS r	SS jr
S	 rSS
 jrSS jrS rS rS rSS jrSS jr\" \" S5      5      u  rrr\R2                  " S5      rS rS rS rS rS rSS jr S r!SS jr"S r#S r$SS jr%SS jr&SS  jr'SS! jr(SS" jr)SS# jr*S$ r+S% r,S& r-SS' jr.SS( jr/SS) jr0SS* jr1SS+ jr2SS, jr3SS- jr4SS. jr5SS/ jr6SS0 jr7SS1 jr8SS2 jr9SS3 jr:SS4 jr;SS5 jr<SS6 jr=SS7 jr>SS8 jr?SS9 jr@SS: jrASS; jrBSS< jrCSS= jrDSS> jrESS? jrFSS@ jrGSSA jrHSSB jrISSC jrJSSD jrKSSE jrLSSF jrMSG rNSSH jrOSSI jrPSSJ jrQSSK jrRSSL jrSSSM jrTSSN jrUSSO jrVSSP jrWSQ rXSSR jrYSSS jrZSST jr[SU r\SSV jr]SSW jr^SSX jr_SSY jr`SSZ jraSS[ jrbSS\ jrcSS] jrdSS^ jreSS_ jrfSS` jrgSSa jrhSSb jriSSc jrjSSd jrkSSe jrlSSf jrmSSg jrnSSh jroSSi jrpSSj jrqSSk jrrSSl jrsSSm jrtSSn jruSSo jrvSSp jrwSSq jrxSSr jrySSs jrzSSt jr{/ SuQr|Sv r}SSw jr~SSx jrSSy jrSSz jrSS{ jrS| rSS} jrSS~ jrSS jrSS jrSS jrSS jrS rS rS rS rS rS r SS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrS rS rS rSS jrSS jrSS jrSS jr\r\rSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrS rSS jrSS jrSS jrSS jrSS jrS rSS jrSS jrSS jrSS jrSS jrGS SS jjrSS jrSS jrSS jrS rSS jrSS jrSS jrS rSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrGSSS jjrSS jrGS SS jjrSS jrS rSS jrSS jrS rSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jr\rSS jr\rSS jr\rSS jr\rSS jr\rSS jr\rSS jr\rSS jr\rSS jr\rSSS jjrSS jGr SS jGrSS jGrSS jGrSS jGrSS jGrSS jGrSS jGrSS jGrSS jGr	SGr
g(  r   i  )[attributionblockindent
blockquoteblockquote-bulletitemblockquote-bulletlistblockquote-enumitemblockquote-enumlist
bulletitem
bulletlistcaptionlegendcenteredtextbody	codeblockcodeblock-indentedzcodeblock-classnamezcodeblock-commentzcodeblock-functionnamezcodeblock-keywordzcodeblock-namezcodeblock-numberzcodeblock-operatorzcodeblock-stringemphasisenumitemenumlistepigraphepigraph-bulletitemepigraph-bulletlistepigraph-enumitemepigraph-enumlistfooterfootnotecitationheader
highlightshighlights-bulletitemhighlights-bulletlisthighlights-enumitemhighlights-enumlisthorizontallineinlineliteral	quotationrubricstrongtable-titletextbodytocbulletlisttocenumlistrc  subtitleheading1heading2heading3heading4heading5heading6heading7zadmon-attention-hdrzadmon-attention-bodyzadmon-caution-hdrzadmon-caution-bodyzadmon-danger-hdrzadmon-danger-bodyzadmon-error-hdrzadmon-error-bodyzadmon-generic-hdrzadmon-generic-bodyzadmon-hint-hdrzadmon-hint-bodyzadmon-important-hdrzadmon-important-bodyzadmon-note-hdrzadmon-note-bodyzadmon-tip-hdrzadmon-tip-bodyzadmon-warning-hdrzadmon-warning-bodytableoptionztableoption.%cztableoption.%c%dzTable%dz
Table%d.%czTable%d.%c%d
lineblock1
lineblock2
lineblock3
lineblock4
lineblock5
lineblock6imagefigureframec                   [         R                  R                  X5        UR                  U l        U R                  R                  S:X  a%  U R
                  R                  R                  S5        U R                  R                  U l        [        R                  " U R                  UR                  5      U l        0 U l        U R                  R                  (       a  [        5       nUR                  U R                  R                  5        UR!                  S5       HL  u  p4X0R"                  ;  a*  U R
                  R                  R%                  SU< S35        X@R                  U'   MN     SU l        SU l        [+        S[,        S9n[.        R0                  " US	9U l        XPl        [7        US
5        [7        US5        [7        US5      nX`l        [7        US5      nU R;                  U5      nX`l        X`l        U R?                  S5      /U l         / U l!        SU l"        [G        S5      S-
  U l$        SU l%        SU l&        S U l'        S U l(        S U l)        SU l*        SU l+        0 U l,        / U l-        SU l.        SU l/        / U l0        / U l1        SU l2        SU l3        SU l4        SU l5        S U l6        SU l7        SU l8        0 U l9        / U l:        SU l;        SU l<        / U l=        SU l>        SU l?        / U l@        0 U lA        SU lB        SU lC        S U lD        SU lE        SU lF        SU lG        S U lH        S U lI        SU lJ        / U lK        g )Nrm   z>The ODT writer returns `bytes` that cannot be decoded to `str`FormatszStyle "z#" is not a style used by odtwriter.r   zoffice:document-contentr   )elementzoffice:scriptszoffice:font-face-declszoffice:automatic-styleszoffice:bodyr  Ar   Fpythonr{   )Lr   GenericNodeVisitorr   r   r  r   r  severer   r   get_languagelanguage
format_mapr   r   r  re   used_stylesr  section_levelsection_countr]   CONTENT_NAMESPACE_ATTRIBr  r   content_treecurrent_elementra   automatic_stylesgenerate_content_elementbody_text_elementrststyleparagraph_style_stacklist_style_stacktable_countr~   column_counttrace_leveloptiontablestyles_generated
field_namefield_elementrc  image_countimage_style_count
image_dictembedded_file_listsyntaxhighlightingsyntaxhighlight_lexerheader_contentfooter_content	in_header	in_footer
blockstylein_table_of_contentstable_of_content_index_body
list_leveldef_list_levelfootnote_ref_dictfootnote_listfootnote_chars_idxfootnote_levelpending_idsin_paragraphfound_doc_titlebumped_list_level_stack	meta_dictline_block_levelline_indent_levelcitation_idstyle_indexstr_stylesheetstr_stylesheetcontentdom_stylesheettable_stylesin_citationinline_style_count_stack)r   r   parserr  formatrZ  r`   s          r    r   ODFTranslator.__init__C  s     ))$9 ))==((I5MM"")) +L M "]]88!.. ==((!^FKK556$*LL$; #3#33MM**22$() -3) %< %+
 NN48#4)*41278 "m,**2.!!#&*mmJ&?%B" "HqL+0(!
!""$"#%-"  $)!+/(!#"#!$')$ !!" %'""   )+%r"   c                    U R                   $ r   )r  r)   s    r    get_str_stylesheet ODFTranslator.get_str_stylesheet      """r"   c                d   U R                   R                  n[        R                  R	                  U5      S   nUS:X  a  [        U5      R                  SS9nSnOcX1:X  aJ  [        R                  " US5      nUR                  S5      nUR                  S5      nUR                  5         O[        S	U< S
U< S35      eX@l        XPl        [        R                  " U R                  5      U l        U(       d  g[        R                  " U R                  5      U l        U R%                  U5      U l        g)z_Retrieve the stylesheet from a .xml or .odt (zip) file.

Store in `self.*_styles*` attributes.
r   z.xmlutf-8rn   r{   r?  r   r   zstylesheet path (z
) must be z or .xml fileN)r   r   rk  ry  splitextr   	read_textr   r   r  rr   r!  r  r  r  
fromstringr  dom_stylesheetcontentextract_table_stylesr  )r   	extensionrA  extru   rq  r  s          r    r   ODFTranslator.retrieve_styles  s    
 ]]--
ggz*1-&=j!++W+=BBOOJ4EL)BM*BKKM.8) E F F %'" mmD,?,?@%']]&&&(" 55b9r"   c                   [         R                  " U5      n0 nUR                  S[        S   < S35      nU GH0  nUR	                  S[        S   < S35      nUR                  S5      S   nUR	                  S[        S   < S35      nUR                  [        5      (       d  Mn  UR	                  U5      n	U	c  [        5       n	XU'   US	:X  aR  UR                  S[        S   < S
35      n
U
R	                  S[        S   < SS< 35      nUb  US:w  a  Xl	        M  M  M  US:X  d  M  UR                  S[        S   < S35      n
U
c  GM  U R                  U
5      nUc  GM*  Xl        GM3     U$ )N{r@   z}automatic-stylesrF   }namer   r   z}familyrH   z}table-propertiesr;   }zbackground-colornone
table-cellz}table-cell-properties)r  r  r   CNSDr#  r   rJ  TABLESTYLEPREFIXr   r   get_propertyr5   )r   
styles_strrZ  r  auto_styles	stylenoder3  	tablenamer*  
tablestyle
properties	property_r5   s                r    r  "ODFTranslator.extract_table_styles  sL   }}Z(ii&*8n79$I==tG}!?@D

3*I]]4=#CDF/00)--i8
%!+J.8+W$!*26w-B"DJ *$(J0BE!GI ,f1D5>2 2E,|+!*7;G}G"IJ!-!%!2!2:!>!-06-- %. r"   c                    S n[          H2  nUR                  S[        S   < SU< 35      nUc  M(  US:w  d  M0  Us  $    U$ )Nr  r;   r  r  )TABLEPROPERTYNAMESr#  r  )r   r  r5   propertynames       r    r  ODFTranslator.get_property  sA    .L]]tDz<#JKF!f&6 / r"   c                F   U R                   R                  nU(       aT  Xl        U R                  (       d=  [        SSU R	                  S5      0S9nXl        U R                  R                  SU5        U R                  U R                  5      nUb  U R                  U5        g g )Ntext:ptext:style-namerc  r  r   )
r   rc  r  r]   r  rI   r  insertfind_first_text_pattach_page_style)r   rI   r`   s      r    r   ODFTranslator.add_doc_title  s    }}""J''X%t}}W'=/  &&--a4##D$:$:;>""2& r"   c                    UR                   S:X  d  UR                   S:X  a  U$ U H  nU R                  U5      nUc  M  Us  $    g)zHSearch the generated doc and return the first <text:p> element.
        r)  text:hN)r   r,  )r   r`   childrp  s       r    r,  ODFTranslator.find_first_text_p  sI     66X8!3I,,U3?J  r"   c                    UR                  S5      nSn[        U R                  SUSSS.[        S9nU(       a  UR	                  SU5        UR	                  SU5        g	)
zAttach the default page style.

Create an automatic-style that refers to the current style
of this element and that refers to the default page style.
r*  P1003style:stylezrststyle-pagedefaultr  )
style:namezstyle:master-page-namestyle:familyrS  style:parent-style-nameN)r#  ra   r  SNSDr  )r   r`   current_style
style_namerp  s        r    r-  ODFTranslator.attach_page_style  sc     01
!!=(*@ +:  GG-}=
 *-r"   c                H    X-  nU R                   R                  USU-  5      $ )z
Returns the style name to use for the given style.

If `parameters` is given `name` must contain a matching number of
``%`` and is used as a format expression with `parameters` as
the value.
zrststyle-%s)r  r#  )r   r3  
parametersname1s       r    r  ODFTranslator.rststyle	  s(     !""5-%*?@@r"   c                    [        US5      $ )Nzoffice:text)ra   )r   rZ  s     r    r  &ODFTranslator.generate_content_element  s    $..r"   c                ~   U R                  U R                  5        [        U R                  5      S:  dO  [        U R                  5      S:  d6  U R
                  R                  (       d  U R
                  R                  (       a  U R                  U R                  5        [        R                  " U R                  5      $ Nr   )setup_paperr  r   r  r  r   r   r   add_header_footerr  r	  r)   s    r    rE  ODFTranslator.setup_page  s    ,,-##$q(4&&'!+}}**}}**""4#6#67{{4..//r"   c                    U R                   $ r   )r  r)   s    r    r   ODFTranslator.get_dom_stylesheet   r  r"   c                H  ^^^  [         R                  " S[         R                  S9nS UR                  5        5       u  mmSUUU4S jjmT" U5        g ! [         R                  [
        [        4 a-    U R                  R                  R                  S5        Su  mm N^f = f)N)	paperconfz-s)stderrc              3  8   #    U  H  n[        U5      v   M     g 7fr   )float).0ss     r    	<genexpr>,ODFTranslator.setup_paper.<locals>.<genexpr>*  s     9&8E!HH&8s   z-Cannot use `paperconf`, defaulting to Letter.)id  i  c                  > U R                   S[        S   -  :X  a  S[        S   -  U R                  ;  a  ST-  U R                  S[        S   -  '   ST-  U R                  S[        S   -  '   SST-  -  =U R                  S[        S   -  '   U R                  S	[        S   -  '   SST-  -  =U R                  S
[        S   -  '   U R                  S[        S   -  '   g U  H  nT" U5        M     g )Nz{%s}page-layout-propertiesrF   z{%s}page-widthr;   z%.3fptz{%s}page-height皙?z{%s}margin-leftz{%s}margin-rightz{%s}margin-topz{%s}margin-bottom)r   r9  r   )r`   subelhr   walks     r    rW  'ODFTranslator.setup_paper.<locals>.walk0  s    vv5WEE$tDz1B;Ca<		*T$Z78<DqL		+d4j89 Q'(		+d4j89II04:=> Q'(		*T$Z78II1DJ>?  EK  r"   r-   )

subprocesscheck_outputSTDOUTr   CalledProcessErrorFileNotFoundError
ValueErrorr   r  info)r   root_el
dimensionsrV  r   rW  s      @@@r    rE  ODFTranslator.setup_paper#  s    	#001D8B8I8IKJ9j&6&6&89DAq	  	  	W' --/@*M 	MM""''?ADAq	s   =A A	B! B!c                   UR                  S[        S   -  5      nS[        < S3nUR                  U5      nUc  g S[        S   < S3nUR                  U5      nS nS[        S   < S3nU R	                  S5      nU H  nUR                  U5      U:X  d  M  Un  O   Uc  g Un	U R                  (       d  U R                  R                  (       a  [        U	S	[        [        S
9n
U R                   H@  n[        S[        S9nU R	                  S5      UR                  U'   U
R                  U5        MB     U R                  R                  (       a(  U R                  U
U R                  R                  SU5        U R                   (       d  U R                  R"                  (       a  [        U	S[        [        S
9n
U R                    H@  n[        S[        S9nU R	                  S5      UR                  U'   U
R                  U5        MB     U R                  R"                  (       a)  U R                  U
U R                  R"                  SU5        g g g )Nz{%s}automatic-stylesr@   r  z}master-stylesrF   z}master-pager  pagedefaultzstyle:headerrS  r*  r^  r  zstyle:footerr  )r   r9  NAME_SPACE_1r"  r  r#  r  r   r   ra   STYLES_NAMESPACE_ATTRIBSTYLES_NAMESPACE_DICTrc   r   r_   create_custom_headfootr  r   )r   r`  r  ry  	master_elmaster_el_containertarget_attribtarget_namer`   rp  el2attrkeys               r    rF  ODFTranslator.add_header_footer@  s   "<<"T(^35&25LL&	 $(M4'//5	&*7m6mmM2%Bvvm$3	 & $--"="=^.,C
 )) !24@%)]]8%<		'"

2 * }}**++MM//;KM $--"="=^.,C
 )) !24@%)]]8%<		'"

2 * }}**++MM//;KM + #>r"      z%(..?)%c                t   [        USSU R                  U5      0S9nS nU R                  U5      nU H  nUS   [        R                  :X  aP  US   S;  a  SUS   < S3n[        U5      eU R                  UUS   X45      n	U	c  SUS   < S3n[        U5      eU	nMj  Uc  US   Ul        My  US   Ul        M     g )	Nr)  r*  r  r   r   )pPt1t2t3t4d1d2d3d4d5rP  tazbad field spec: %%)	ra   r  split_field_specifiers_iterr   
code_fieldr!  make_field_elementrI   tail)
r   r%   rI   r;  r  r  
field_iteritemmsgrp  s
             r    rh  $ODFTranslator.create_custom_headfoots  s    FHt}}Z86
  55d;
DAw-2227 #' '
 7;1g@C&s++--GZ; ;6:1g@C&s++&)O"*"&q'FK+/7O(+ r"   c           	     t   US:X  a  [        USSS0S9nU$ US:X  a  [        US0 S9nU$ US:X  a  U =R                  S	-  sl        [        US
U R                  U5      SSU R                  -  S.S9n[        USSU R                  -  [        S   [        S   S.S9n[        USSS0S9n[        US5      nSUl        [        USSS0S9nU$ US:X  a  U =R                  S	-  sl        [        US
U R                  U5      SSU R                  -  S.S9n[        USSU R                  -  [        S   [        S   S.S9n[        USSS0S9n[        US5      nSUl        [        USSS0S9n[        US5      nSUl        [        USSS0S9nU$ US:X  a  U =R                  S	-  sl        [        US
U R                  U5      SSU R                  -  S.S9n[        USSU R                  -  [        S   [        S   S.S9n[        USSS0S9n[        US5      nSUl        [        USSS0S9n[        US5      nSUl        [        US5      nU$ US:X  a  U =R                  S	-  sl        [        US
U R                  U5      SSU R                  -  S.S9n[        USSU R                  -  [        S   [        S   S.S9n[        USSS0S9n[        US5      nSUl        [        USSS0S9n[        US5      nSUl        [        USSS0S9n[        US5      nSUl        [        US5      nU$ US:X  a  U =R                  S	-  sl        [        USU R                  U5      S U R                  -  S!.S9n[        US"S U R                  -  S[        S   [        S   S#.S9n[        US$SS0S9n[        US5      nS%Ul        [        US&SS0S9n[        US5      nS%Ul        [        US'5      nU$ US(:X  a  U =R                  S	-  sl        [        USU R                  U5      S U R                  -  S!.S9n[        US"S U R                  -  S[        S   [        S   S#.S9n[        US$SS0S9n[        US5      nS%Ul        [        US&SS0S9n[        US5      nS%Ul        [        US'SS0S9nU$ US):X  a  U =R                  S	-  sl        [        USU R                  U5      S U R                  -  S!.S9n[        US"S U R                  -  S[        S   [        S   S#.S9n[        US$S*S0S9n[        US5      nSUl        [        US&0 S9n[        US5      nS+Ul        [        US'SS0S9nU$ US,:X  a  U =R                  S	-  sl        [        USU R                  U5      S U R                  -  S!.S9n[        US"S U R                  -  S[        S   [        S   S#.S9n[        US$SSS-.S9n[        US5      nSUl        [        US&0 S9n[        US5      nS+Ul        [        US'SS0S9nU$ US.:X  a  U =R                  S	-  sl        [        USU R                  U5      S U R                  -  S!.S9n[        US"S U R                  -  [        S   [        S   S.S9n[        US'SS0S9n[        US5      nS/Ul        [        US$SS0S9n[        US5      nS/Ul        [        US&SS0S9nU$ US0:X  a  [        US1S2U R                  U5      0S9nU$ US3:X  a  [        US4S2U R                  U5      0S9nU$ US5:X  a  [        US6S7S80S9nU$ S nU$ )9Nrr  ztext:page-numberztext:select-pagecurrentr  rs  ztext:page-countrt  r   z	text:timetruezrst-time-style-%d)r*  
text:fixedstyle:data-style-nameznumber:time-styler?   rF   )r6  rQ   rT   znumber:hoursnumber:stylelongznumber:text:znumber:minutesru  znumber:secondsrv   znumber:am-pmrw  rx  z	text:datezrst-date-style-%d)r*  r  znumber:date-style)r6  znumber:automatic-orderrQ   rT   znumber:monthrT  z
number:dayznumber:yearry  rz  number:textualz, r{  )r  r  r|  r   rP  ztext:subjectr*  r}  z
text:titler~  ztext:author-namer  false)ra   r  r  r9  rI   )r   r%   rI   r;  r  rp  rm  el3s           r    r   ODFTranslator.make_field_element  s	   3;V%7"IA Cl 
e S[V%6 @ Cb 
] T\!V[#'==#<$'$*:*::	: C -/B1D4D4DD $X#G}L C
 S.: C S-0CCHS"2< Cx 
s T\!V[#'==#<$'$*:*::	: C -/B1D4D4DD $X#G}L C
 S.: C S-0CCHS"2< C S-0CCHS"2< CD 
 T\!V[#'==#<$'$*:*::	: C -/B1D4D4DD $X#G}L C
 S.: C S-0CCHS"2< C S-0CCHS.1CP 
O T\!V[#'==#<$'$*:*::	: C -/B1D4D4DD $X#G}L C
 S.: C S-0CCHS"2< C S-0CCHS"2< C S-0CCHS.1CV 
U T\!V[#'==#<'$*:*::: C
 -/B1D4D4DD*0 $X#G}	L C S.: C S-0CCHS,8 C S-0CCHS-0Cf 
e T\!V[#'==#<'$*:*::: C
 -/B1D4D4DD*0 $X#G}	L C S.: C S-0CCHS,8 C S-0CCHS-9 Cv 
q T\!V[#'==#<'$*:*::: C
 -/B1D4D4DD*0 $X#G}	L C S. &: C S-0CCHS,r:CS-0CCHS-9 CF 
A T\!V[#'==#<'$*:*::: C
 -/B1D4D4DD*0 $X#G}	L C S."( &: C S-0CCHS,r:CS-0CCHS-9 CT 
O T\!V[#'==#<'$*:*::: C
 -/B1D4D4DD $X#G}L C
 S-9 C S-0CCHS.: C S-0CCHS,8 C" 
 S[V^!4==#<= C 
 S[V\!4==#<; C 
 S[V%7gA C
 
 C
r"   c              #  b  #    Sn [         R                  R                  X5      nU(       a_  UR                  5       nXB:  a  [         R                  XU 4v   [         R
                  UR                  S5      4v   UR                  5       nOOM  XS  nU(       a  [         R                  U4v   g g 7f)Nr   r   )r   	field_patsearchstart	code_textr  groupend)r   rI   pos1mopos2trailings         r    r  )ODFTranslator.split_field_specifiers_iter  s     ((//;Bxxz;'114T?BB#..;;vvx  ;))833 s   B-B/c                x    U R                   R                  5       n[        R                  " U5      n[	        U5      $ r   )r  getrootr  r   rv   )r   rZ  rs   s      r    astextODFTranslator.astext  s.      ((*^^D!|r"   c                "    U R                  5       $ r   )r  r)   s    r    r   ODFTranslator.content_astext  s    {{}r"   c                    Xl         g r   rc  )r   rc  s     r    	set_titleODFTranslator.set_title  r   r"   c                    U R                   $ r   r  r)   s    r    	get_titleODFTranslator.get_title  r   r"   c                    Xl         g r   r  )r   r  s     r    set_embedded_file_list$ODFTranslator.set_embedded_file_list  s    "4r"   c                    U R                   $ r   r  r)   s    r    r8  $ODFTranslator.get_embedded_file_list  s    &&&r"   c                    U R                   $ r   )r  r)   s    r    rn  ODFTranslator.get_meta_dict  s    ~~r"   c                   U R                    GHq  u  pUR                  R                  S/ 5      nSnU GHF  nU R                  R                  U5      nUc  M$  U(       a+  Sn[        R
                  " U5      nUR                  U5        MV  [        U5      S:  d  Mg  US   nUR                  n	[        S[        S9n
UR                  U
S5      nUc  Sn[        S	[        S9nXl        U R                  R                  (       a  S
nOSnUR                  R                  5         [        S[        S9n
XR                  U
'   [        S[        S9n
XR                  U
'   [        S[        S9n
SUR                  U
'   Xl        GMI     GMt     g )NbackrefsTFr   text:idr^  zfootnote-errorr{   ztext:note-refendnoter  text:note-classtext:ref-nametext:reference-formatpage)r  
attributesr#  r  copydeepcopyr_   r   rI   rc   r9  r   r   r   r   clear)r   r)  rp  r  firstrefrm  r  r1  ref1	attribkeyid1r   
note_classs                 r    process_footnotesODFTranslator.process_footnotes  sE   ++ID**:r:HE,,005? %"mmC0

3s8a<$'FE#(::D(.y(FI"%'')5E"FC"{&("("FC&)G#}}==-6
-7
JJ,,.(./@(NI4>JJy1(.t(LI47JJy1(. 7)FI4:CJJy1'+H;   ,r"   Nc                8    Uc  U R                   n[        X1U5      $ r   )r  ra   )r   r   r   r%   s       r    append_childODFTranslator.append_child  s    >))F&v..r"   c                |    U R                  SSU R                  U5      0S9nU R                  U5        Ub  X#l        U$ )Nr)  r*  r  )r  r  append_pending_idsrI   )r   rF   rI   results       r    append_pODFTranslator.append_p  sH    ""8t}}U355" 6'Kr"   c                    U R                   R                  (       a   U R                   H  n[        USSU0S9  M     / U l        g )Nztext:reference-mark	text:namer  )r   r   r  ra   )r   r`   ids      r    r   ODFTranslator.append_pending_ids  s@    ==%%&&24>% & ' r"   c                    Xl         g r   )r  )r   r`   s     r    set_current_element!ODFTranslator.set_current_element  s    !r"   c                B    U R                   R                  5       U l         g r   )r  r*   r)   s    r    set_to_parentODFTranslator.set_to_parent  s    #33==?r"   c                    U R                   R                  U   < S3nU R                  S5      n[        USSU R	                  S5      0S9nX$l        U R                  S5      $ )Nr  r  	text:spanr*  r  r  r  r  labelsr  ra   r  rI   r   r)  labelr`   rp  s        r    generate_labeled_block$ODFTranslator.generate_labeled_block  s^    --e47]]:&%t}}X'>?A }}]++r"   c                    U R                   R                  U   < S3nU R                  S5      n[        USSU R	                  S5      0S9nX$l        UR                  5       Ul        U$ )Nr  r  r  r*  r  r  )r  r  r  ra   r  rI   r  r  r  s        r    generate_labeled_line#ODFTranslator.generate_labeled_line  sa    --e47]]:&%t}}X'>?A ;;=	r"   c                &    UR                  SS5      $ )N
r  )r}   )r   rI   s     r    encodeODFTranslator.encode  s    ||D#&&r"   c                d    U R                  U5        [        R                  R                  X5        g)z9Override to catch basic attributes which many nodes have.N)handle_basic_attsr   r  dispatch_visitr   r)  s     r    r  ODFTranslator.dispatch_visit  s$    t$  //;r"   c                    [        U[        R                  5      (       a$  US   (       a  U =R                  US   -  sl        g g g )Nids)
isinstancer   r]   r  r  s     r    r  ODFTranslator.handle_basic_atts  s6    dEMM**tE{U+ 0;*r"   c                f    U R                   R                  R                  SUR                   3US9  g )Nzmissing visit_	base_noder   r  r  tagnamer  s     r    default_visitODFTranslator.default_visit  s/    &&~'F15 	' 	7r"   c                f    U R                   R                  R                  SUR                   3US9  g )Nzmissing depart_r  r  r  s     r    default_departureODFTranslator.default_departure  s/    &&'G15 	' 	7r"   c                   [        UR                  [        R                  R                  5      (       a  g UR                  5       n[        U R                  5      S:  aU  U R                  S   R                  (       a#  U R                  S   =R                  U-  sl        g X R                  S   l        g U R                  R                  (       a   U R                  =R                  U-  sl	        g X R                  l	        g )Nr   r  )
r  r%   r  r   literal_blockr  r   r  r  rI   )r   r)  rI   s      r    
visit_TextODFTranslator.visit_Text   s    dkk8>>#?#?@@{{} t##$q(##B',,$$R(--5-04$$R(-##(($$))T1),0$$)r"   c                    g r   r,   r  s     r    depart_TextODFTranslator.depart_Text2  rQ  r"   c                J    U R                  US5      nU R                  U5        g )Naddressr  r  r   r)  r`   s      r    visit_addressODFTranslator.visit_address9  "    ((y9  $r"   c                $    U R                  5         g r   r  r  s     r    depart_addressODFTranslator.depart_address=      r"   c                    [        UR                  [        R                  5      (       a  U R	                  S5      nOU R                  US5      nU R                  U5        g )Nr  author)r  r%   r   authorsr  r  r  r  s      r    visit_authorODFTranslator.visit_author@  sE    dkk5==11}-B,,T8<B  $r"   c                $    U R                  5         g r   r  r  s     r    depart_authorODFTranslator.depart_authorG  r  r"   c                    U R                   R                  S   < S3nU R                  S5      n[        USSU R	                  S5      0S9nX$l        g )Nr  r  r  r  r*  r  r  r  r  s        r    visit_authorsODFTranslator.visit_authorsJ  sO    --i8;]]:&%t}}X'>?A r"   c                    g r   r,   r  s     r    depart_authorsODFTranslator.depart_authorsR  rQ  r"   c                J    U R                  US5      nU R                  U5        g )Ncontactr  r  s      r    visit_contactODFTranslator.visit_contactU  r  r"   c                $    U R                  5         g r   r  r  s     r    depart_contactODFTranslator.depart_contactY  r  r"   c                J    U R                  US5      nU R                  U5        g )N	copyrightr  r  s      r    visit_copyrightODFTranslator.visit_copyright\  s"    (({;  $r"   c                $    U R                  5         g r   r  r  s     r    depart_copyrightODFTranslator.depart_copyright`  r  r"   c                (    U R                  US5        g )Ndater  r  s     r    
visit_dateODFTranslator.visit_datec  s    ""40r"   c                    g r   r,   r  s     r    depart_dateODFTranslator.depart_datef  rQ  r"   c                J    U R                  US5      nU R                  U5        g )Norganizationr  r  s      r    visit_organization ODFTranslator.visit_organizationi  s"    ((~>  $r"   c                $    U R                  5         g r   r  r  s     r    depart_organization!ODFTranslator.depart_organizationm  r  r"   c                J    U R                  US5      nU R                  U5        g )Nstatusr  r  s      r    visit_statusODFTranslator.visit_statusp  s"    ((x8  $r"   c                $    U R                  5         g r   r  r  s     r    depart_statusODFTranslator.depart_statust  r  r"   c                (    U R                  US5        g )Nrevisionr/  r  s     r    visit_revisionODFTranslator.visit_revisionw  s    ""44r"   c                    g r   r,   r  s     r    depart_revisionODFTranslator.depart_revisionz  rQ  r"   c                (    U R                  US5        g )Nr   r/  r  s     r    visit_versionODFTranslator.visit_version}  s    ""43r"   c                    g r   r,   r  s     r    depart_versionODFTranslator.depart_version      r"   c                D    U R                  SUR                  5       5        g )Nr  )r  r  r  s     r    visit_attributionODFTranslator.visit_attribution  s    mT[[]3r"   c                    g r   r,   r  s     r    depart_attribution ODFTranslator.depart_attribution  rQ  r"   c                   SUR                   S   ;   aA  U R                  R                  U R                  S5      5        U R                  S5      U l        OSUR                   S   ;   aA  U R                  R                  U R                  S5      5        U R                  S5      U l        O@U R                  R                  U R                  S5      5        U R                  S5      U l        U =R
                  S-  sl        g )Nr  classesr  r  r   )r  r  r_   r  r  r  r  s     r    visit_block_quoteODFTranslator.visit_block_quote  s    33&&--dmmJ.GH"mmJ7DOT__Y77&&--dmmL.IJ"mmL9DO&&--dmmL.IJ"mmL9DO!#r"   c                p    U R                   R                  5         SU l        U =R                  S-  sl        g )Nr{   r   )r  popr  r  r  s     r    depart_block_quote ODFTranslator.depart_block_quote  s,    ""&&(!#r"   c                   U =R                   S-  sl         U R                  (       a  U R                  R                  (       a  g SU;   ad  SUR                  S   ;   aQ  [        U R                  SSU R                  S5      0S9nU R                  R                  U R                  S5      5        OP[        U R                  SSU R                  S	5      0S9nU R                  R                  U R                  S
5      5        U R                  U5        g U R                  U R                  S5      :X  aR  [        U R                  SSU R                  S5      0S9nU R                  R                  U R                  S5      5        GO0U R                  U R                  S5      :X  aQ  [        U R                  SSU R                  S5      0S9nU R                  R                  U R                  S5      5        OU R                  U R                  S5      :X  aQ  [        U R                  SSU R                  S5      0S9nU R                  R                  U R                  S5      5        OP[        U R                  SSU R                  S5      0S9nU R                  R                  U R                  S
5      5        U R                  U5        g )Nr   rX  zauto-toc	text:listr*  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )r  r  r   r   r  ra   r  r  r  r_   r  r  r  s      r    visit_bullet_listODFTranslator.visit_bullet_list  sX   1$$}}22$"dooi&@@#D$8$8+)4==+GO B ))00z1JK#D$8$8+)4==+IO B ))00|1LM((,$--"== 4 4k%t}}5L'MK  %%,,MM"9:<DMM,$?? 4 4k%t}}5L'MK  %%,,MM"9:<DMM*$== 4 4k%t}}5J'KK  %%,,MM"78:   4 4k%t}}\'BK  %%,,T]]<-HI$$R(r"   c                2   U R                   (       aG  U R                  R                  (       a  OUU R                  5         U R                  R                  5         O*U R                  5         U R                  R                  5         U =R                  S-  sl        g Nr   )r  r   r   r  r  r\  r  r  s     r    depart_bullet_list ODFTranslator.depart_bullet_list  se    $$}}22""$%%))+ !!%%'1r"   c                "    [         R                  er   r   SkipChildrenr  s     r    visit_captionODFTranslator.visit_caption         r"   c                    g r   r,   r  s     r    depart_captionODFTranslator.depart_caption  rQ  r"   c                    U R                  S5      n[        US0 S9n[        US0 S9n[        R                  R	                  SS5      nXTl        [        US0 S9nUR                  5       Ul        g )Nr  zoffice:annotationr  r`  r_  r{   r)  )r  ra   rk  rl  r#  rI   r  )r   r)  r`   rp  rm  ru   s         r    visit_commentODFTranslator.visit_comment  sa    ]]:&0<l26ZZ^^FB'hr2;;=r"   c                    g r   r,   r  s     r    depart_commentODFTranslator.depart_comment  rQ  r"   c                    g r   r,   r  s     r    visit_compoundODFTranslator.visit_compound  rP  r"   c                    g r   r,   r  s     r    depart_compoundODFTranslator.depart_compound  rQ  r"   c                    UR                   R                  SS5      n[        U5      S:  a.  U R                  R	                  U R                  US   5      5        g g NrX  r,   r   )r  r#  r   r  r_   r  r   r)  r   s      r    visit_containerODFTranslator.visit_container  sI    $$Y3v;?&&--dmmF1I.FG r"   c                    UR                   R                  SS5      n[        U5      S:  a  U R                  R	                  5         g g r}  )r  r#  r   r  r\  r~  s      r    depart_containerODFTranslator.depart_container  s:    $$Y3v;?&&**, r"   c                    g r   r,   r  s     r    visit_decorationODFTranslator.visit_decoration  rQ  r"   c                    g r   r,   r  s     r    depart_decorationODFTranslator.depart_decoration  rQ  r"   c                d    U =R                   S-  sl         U R                  S:  a  [        S5      eg )Nr      z*max definition list nesting level exceeded)r  r  r!  r  s     r    visit_definition_list#ODFTranslator.visit_definition_list  s4    q ??Q<> > r"   c                .    U =R                   S-  sl         g rd  )r  r  s     r    depart_definition_list$ODFTranslator.depart_definition_list  s    q r"   c                    g r   r,   r  s     r    visit_definition_list_item(ODFTranslator.visit_definition_list_item  rQ  r"   c                    g r   r,   r  s     r    depart_definition_list_item)ODFTranslator.depart_definition_list_item	  rQ  r"   c                    U R                  SU R                  -  5      nUR                  5       Ul        U R	                  U5        [
        R                  e)Nzdeflist-term-%d)r  r  r  rI   r  r   ri  r  s      r    
visit_termODFTranslator.visit_term  sC    ]],t/B/BBC++-  $   r"   c                $    U R                  5         g r   r  r  s     r    depart_termODFTranslator.depart_term  r  r"   c                    U R                   R                  U R                  SU R                  -  5      5        U R                  R                  [        S5      5        g )Nzdeflist-def-%dr   )r  r_   r  r  r  r   r  s     r    visit_definitionODFTranslator.visit_definition  sG    ""))MM*T-@-@@A	C$$++IaL9r"   c                l    U R                   R                  5         U R                  R                  5         g r   )r  r\  r  r  s     r    depart_definitionODFTranslator.depart_definition  s&    ""&&($$((*r"   c                    [        U R                  5      S:  aF  U R                  S   n[        USSU R                  S5      0S9nSUR	                  5       < S3Ul        g g )	Nr   r  r  r*  r  r  z ())r   r  ra   r  r  rI   r   r)  r`   rp  s       r    visit_classifierODFTranslator.visit_classifier  s]    t##$q(%%b)BK)4==+DEGC #'++-2CH )r"   c                    g r   r,   r  s     r    depart_classifierODFTranslator.depart_classifier&  rQ  r"   c                    g r   r,   r  s     r    visit_documentODFTranslator.visit_document)  rQ  r"   c                $    U R                  5         g r   )r  r  s     r    depart_documentODFTranslator.depart_document,  s     r"   c                   U =R                   S-  sl         U =R                  S-  sl        U R                  R                  (       a?  U R	                  SSU R                  -  SU R                   -  S.S9nU R                  U5        g g Nr   ztext:sectionz	Section%dzSect%d)r  r*  r  r  r  r   r   r  r  r  s      r    visit_docinfoODFTranslator.visit_docinfo/  s    aa==((""!,t/A/A!A'/$2D2D'D( # B $$R( )r"   c                    U =R                   S-  sl         U R                  R                  (       a  U R                  5         g g rd  r  r   r   r  r  s     r    depart_docinfoODFTranslator.depart_docinfo;  1    a==((  )r"   c                r    [        U R                  SSU R                  S5      0S9nU R                  U5        g )Nr  r*  r  r  ra   r  r  r  r  s      r    visit_emphasisODFTranslator.visit_emphasis@  s9      +%t}}Z'@AC 	  $r"   c                $    U R                  5         g r   r  r  s     r    depart_emphasisODFTranslator.depart_emphasisF  r  r"   c                \   U R                   nU R                  U R                  S5      :X  aH  [        USSU R                  S5      0S9nU R                  R                  U R                  S5      5        GO(U R                  U R                  S5      :X  aG  [        USSU R                  S5      0S9nU R                  R                  U R                  S	5      5        OU R                  U R                  S
5      :X  aG  [        USSU R                  S5      0S9nU R                  R                  U R                  S5      5        O\SUR                  SS5      < 3n[        USSU R                  U5      0S9nU R                  R                  U R                  S5      5        U R                  U5        g )Nr  r`  r*  r  r  r  r  r  r  r  r  r  z	enumlist-enumtypearabicr  )r  r  r  ra   r  r_   r#  r  )r   r)  rp  rm  liststylenames        r    visit_enumerated_list#ODFTranslator.visit_enumerated_listI  sz   ""??dmmL99S+!4==1F#G7 C !!((7L)MN__l ;;S+!4==1F#G7 C !!((7L)MN__j 99S+!4==1D#E7 C !!((7J)KL	 : .2XXj(-KNMS+!4==#?7 C !!((z)BC  %r"   c                X    U R                  5         U R                  R                  5         g r   )r  r  r\  r  s     r    depart_enumerated_list$ODFTranslator.depart_enumerated_listb  s     !!#r"   c                   U R                   (       aw  U R                  R                  (       a9  U R                  R	                  U R                  SU R                  4-  5      5        g U R                  S5      nU R                  U5        g U R                  S5      nUn[        U R                  5      S:  a  U R                  S   nUR                  5       (       ad  UR                  S5        U R                   HC  n[        UR                  5       5       H#  nU R                  SUS9nU R                  SUS9nM%     ME     U R                  R	                  U R                  S   5        U R                  U5        g )Ncontents-%dztext:list-itemr   r  Fr`  )r%   )r  r   r   r  r_   r  r  r  r  r   r  r   r   ranger   r  )r   r)  rp  r  	level_obj
level_obj1idxrm  s           r    visit_list_itemODFTranslator.visit_list_itemf  sF    $$}}22**11MM-4??2E"EFH ''(89((-##$45CC4//014 88<	((**((/&*&B&B
#()=)=)?#@C"&"3"3K"3"LC"&"3"3 0 #4 #>C $A 'C
 &&--d.C.CB.GH$$S)r"   c                J   U R                   (       aG  U R                  R                  (       a  U R                  R	                  5         g U R                  5         g [        U R                  5      S:  a  U R                  S   nUR                  5       (       ad  UR                  S5        U R                   HC  n[        UR                  5       5       H#  nU R                  5         U R                  5         M%     ME     U R                  R	                  5         U R                  5         g )Nr   r  T)r  r   r   r  r\  r  r   r  r   r   r  r   )r   r)  r  r  r  s        r    depart_list_itemODFTranslator.depart_list_item  s    $$}}22**..0""$4//014 88<	((**((.&*&B&B
#()=)=)?#@C ..0 ..0 $A 'C &&**, r"   c                    SU l         g NTr  r  s     r    visit_headerODFTranslator.visit_header  	    r"   c                    SU l         g NFr  r  s     r    depart_headerODFTranslator.depart_header  	    r"   c                    SU l         g r  r  r  s     r    visit_footerODFTranslator.visit_footer  r  r"   c                    SU l         g r  r  r  s     r    depart_footerODFTranslator.depart_footer  r  r"   c                    g r   r,   r  s     r    visit_fieldODFTranslator.visit_field  rQ  r"   c                    g r   r,   r  s     r    depart_fieldODFTranslator.depart_field  rQ  r"   c                    g r   r,   r  s     r    visit_field_listODFTranslator.visit_field_list  rQ  r"   c                    g r   r,   r  s     r    depart_field_listODFTranslator.depart_field_list  rQ  r"   c                    U R                  S5      n[        USSU R                  S5      0S9nUR                  5       Ul        g )Nr  r  r*  r  r  )r  ra   r  r  rI   r  s       r    visit_field_nameODFTranslator.visit_field_name  s@    ]]:&%t}}X'>?A ;;=r"   c                    g r   r,   r  s     r    depart_field_nameODFTranslator.depart_field_name  rQ  r"   c                X    U R                   R                  U R                  S5      5        g )Nr  )r  r_   r  r  s     r    visit_field_bodyODFTranslator.visit_field_body  s    ""))$--*FGr"   c                8    U R                   R                  5         g r   r  r\  r  s     r    depart_field_bodyODFTranslator.depart_field_body      ""&&(r"   c                    g r   r,   r  s     r    visit_figureODFTranslator.visit_figure  rQ  r"   c                    g r   r,   r  s     r    depart_figureODFTranslator.depart_figure  rQ  r"   c                   U =R                   S-  sl         U R                  U l        [        S5      nX l        U R                  R                  X45        [        U[        R                  R                  5      (       a+  U R                  R                  U R                  S5      5        g U R                  R                  U R                  S5      5        g )Nr   ztext:note-bodyr  r  )r  r  save_footnote_currentr]   r  r_   r  r  r   r  r  r  r   r)  rp  s      r    visit_footnoteODFTranslator.visit_footnote  s    q %)%9%9"&'"!!4+.dHNN3344&&--dmmJ.GH&&--dmmJ.GHr"   c                    U R                   R                  5         U R                  U l        U =R                  S-  sl        g rd  )r  r\  r	  r  r  r  s     r    depart_footnoteODFTranslator.depart_footnote  s3    ""&&(#99q r"   )	*z**z***z++z+++z##z###z@@z@@@c                x   U R                   S::  Ga  UR                  S   S   nUR                  R                  S5      nUc  SnU R                  R                  (       a  SnOSnU R                  SU< US.S	9n[        UR                  R                  S
S5      5      n[        U[        R                  R                  5      (       a'  SUR                  5       -  n[        USSU0S	9nXxl        OUS:X  a1  [        USSUR                  5       0S	9nUR                  5       Ul        OyUS:X  as  U R                  [        [         R"                  5      :  a  SU l        [         R"                  U R                     n	U =R                  S-  sl        [        USSU	0S	9nXl        XPR$                  U'   [        R&                  e)Nr   r  refidr{   r  r  z	text:note)r  r  r  autor   z[%s]ztext:note-citationz
text:labelra  r  )r  r  r#  r   r   r  strr  r  r   citation_referencer  ra   rI   r  r   r   footnote_charsr  ri  )
r   r)  r  r  r  rp  	note_autor  rm  footnote_chars
             r    visit_footnote_reference&ODFTranslator.visit_footnote_reference  s   !#'*BOO''0E}}}--&
'
##K#(#-9# C DOO//:;I$ A ABB!DKKM1 &: (D  $c! &: $++-D   ;;=c!**c%44/6 6./D+ - < <++!-''1,' &: -D  )),""2&   r"   c                    g r   r,   r  s     r    depart_footnote_reference'ODFTranslator.depart_footnote_reference  rQ  r"   c                    SU l         UR                  S    H	  nX l          O   U R                  R	                  U R                  S5      5        U R                  R	                  [        S5      5        g )NTr  r  r   )r   r  r  r  r_   r  r  r   )r   r)  r  s      r    visit_citationODFTranslator.visit_citation  s]    //%(B! ) 	""))$--*FG$$++IaL9r"   c                    S U l         U R                  R                  5         U R                  R                  5         SU l        g r  )r  r  r\  r  r   r  s     r    depart_citationODFTranslator.depart_citation
  s6    ""&&($$((* r"   c                D   U R                   R                  (       a=  UR                  S   nU R                  SU< SS.S9nSUl        U R                  U5        g U R                  R                  c  SU R                  l        g U R                  =R                  S-  sl        g )Nr  text:reference-refrI   r  r  r  [)r   r   r  r  rI   r  r  )r   r)  r  r`   s       r    visit_citation_reference&ODFTranslator.visit_citation_reference  s    ==%%)B""#7)+)/A" B BG$$R(!!&&.(+D  %  %%,%r"   c                    U R                   =R                  S-  sl        U R                  R                  (       a  U R	                  5         g g )N])r  rI   r   r   r  r  s     r    depart_citation_reference'ODFTranslator.depart_citation_reference  s7    !!S(!==%%  &r"   c                   [        UR                  [        R                  R                  5      (       a  [        R
                  eU R                  bw  U R                  S5      nU R                  U5        U R                  R                  (       a2  [        US5      nSUl        U R                  SSU R                  < 0S9  g SUl        g g )Nr  r  r'  ztext:reference-mark-startr  r  )r  r%   r  r   r  ri  r  r  r  r   r   ra   rI   r  )r   r)  r`   el0s       r    visit_labelODFTranslator.visit_label#  s    dkk8>>#:#:;;$$$)z*B$$R(}})) [1!!"=)9)9G!   *r"   c                   [        UR                  [        R                  R                  5      (       a  g U R
                  b  U R                  R                  (       a<  U R                  SSU R
                  < 0S9  [        U R                  S5      nSUl        OU R                  =R                  S-  sl        U R                  5         g g )Nztext:reference-mark-endr  r  r  r+  )r  r%   r  r   r  r  r   r   r  ra   r  rI   r  )r   r)  r/  s      r    depart_labelODFTranslator.depart_label2  s    dkk8>>#:#:;;)}}))!!";)9)9E!  !!5!5{C$$))S0)  *r"   c                    g r   r,   r  s     r    visit_generatedODFTranslator.visit_generated@  rQ  r"   c                    g r   r,   r  s     r    depart_generatedODFTranslator.depart_generatedC  rQ  r"   c                N    [         R                  R                  U5      (       a  gg)Nr   r   )rk  ry  exists)r   ry  s     r    check_file_existsODFTranslator.check_file_existsF  s    77>>$r"   c                   US   n[         R                  R                  U5      nUR                  S;   Ga2  [         R                  R	                  UR
                  5      nU R                  R                  (       aK  UR                  S5      (       a5  [        U R                  R                  5      nXBSS  -  R                  5       nOd[        R                  " U5      u  pVU(       aE  [        R
                  R                  U5      nU(       a  [        R
                  R                  Xr5      nU R!                  U5      (       d)  U R"                  R$                  R'                  SU S3US9  g X R(                  ;   a  U R(                  U   u  pGOU =R*                  S-  sl        [        R
                  R-                  U5      S   nSU R*                  U4-  n	UR                  S;   a"  [        R
                  R/                  U5      U	4n
Ow [         R0                  R3                  U5       nUR5                  5       nS S S 5        [:        R<                  " SSS9 nUR?                  W5        S S S 5        WR@                  nX)4n
U RB                  RE                  U
5        X)4U R(                  U'   U RF                  (       a  U RH                  nO&[K        U RH                  SSU RM                  S5      0S9nUn[O        URP                  [R        RT                  RV                  5      (       a=  U RY                  XU	U5      u  nnnn0 nU R[                  XU	UU5      u  nnUb  UUl.        g g U R[                  XU	U5        g ! , (       d  f       GNB= f! [         R6                  R8                   a4  nU R"                  R$                  R'                  S	U S
U 3US9   S nAg S nAff = f! , (       d  f       GNz= f)Nuri)r{   filerT  r   zCannot find image file "".r  zPictures/1%08x%szCannot open image URL "z". wbF)deleter)  r*  r  r  )/urllibparseurlparseschemeunquotery  r   root_prefixrJ  r   as_posixr   get_source_linerk  r|  rz  r=  r   r  r  r  r  r   abspathrequesturlopenr  errorURLErrorr   r   rp   r3  r  r_   r  r  ra   r  r  r%   r  r   figuregenerate_figuregenerate_imager  )r   r)  r;  	uri_partsrJ  	docsourceliner|  filenamer<  specimgfiler  errimgfile2rp  rm  r  el4el5r  r   el6widths                           r    visit_imageODFTranslator.visit_imageL  sB   eLL))&1	|+\\)))..9F}}((V->->s-C-C"4==#<#<=%QRj0::< #("7"7"=	 ggooi8G!#g!>))&11&&...vhb9T / K__$$(OOF$;!Hk!ww}}V,Q/H,0@0@(/KKK<//>//77"),,. 8 008=?BJNN7+? "-##**40'-&<DOOF#&&C$$h)4==+DEGC dkk8>>#8#899%)%9%9S&""Cc7 F,,kVJC "" # k3?C 87||,, MM**221&SEB"& 3 ( 	
? ?sB   N $M05N O0
M?:N ?N O *OO
O&c                    g r   r,   r  s     r    depart_imageODFTranslator.depart_image  rQ  r"   c           
        S nS nX!R                   ;   a  UR                   U   nUR                  5       n UR                  S5      (       a5  US:X  a  [        S5      eUR	                  S5      n[        U5      S-  nSnX44$ U R                  U5      u  p4 X44$ X44$ ! [         aK  nU R                  R                  R                  SU SUR                   U    SU S	3US
9  Su  p4 S nAX44$ S nAff = f)Nr  heightz!percentage not allowed for heightz %g      Y@zInvalid z for image: "z".  Error: "rB  r  )g      ?cm)
r  striprH  r^  rstriprN  convert_to_cmr   r  r  )r   r)  attrsizeunitexps         r    get_image_width_height$ODFTranslator.get_image_width_height  s   ??"??4(D::<D'==%%x'()LMM;;t,D ;.DD z "&!3!3D!9JD$ ztz  '&&..tfM$//$2G1H I"e2'26 / 8 '
dz's   AB ?B 
C.#?C))C.c                   UR                  5       nUR                  S5      (       a  [        USS 5      S-  nGOUR                  S5      (       a  [        USS 5      S-  nOUR                  S5      (       a  [        USS 5      S-  nOUR                  S	5      (       a  [        USS 5      S
-  nOUR                  S5      (       a  [        USS 5      S-  nOpUR                  S5      (       a  [        USS 5      S-  nOHUR                  S5      (       a  [        USS 5      nO#USS S;   a  [        U5      S-  nO[        S5      eSnX4$ )zyConvert various units to centimeters.

Note that a call to this method should be wrapped in:
    try: except ValueError:
pxN9v?ingRQ@ptgQ?pcgOn?mmrT  Qr  g      ?rh  z0123456789.zunit not supported with ODT)ri  rH  rN  r^  )r   rm  rn  s      r    rk  ODFTranslator.convert_to_cm  s;    zz|==cr#e+D]]4  cr#d*D]]4  cr#e+D]]4  cr#e+D]]4  cr#c)D]]3cr#d*D]]4  cr#D"#Y-';&D:;;zr"   c                    SUR                   ;   aF  UR                   S   nUS:  a*  U R                  R                  R                  SU S3US9  SnUS-  nU$ SnU$ )Nscaler   zscale out of range (z), using 1.r  g{Gz?g      ?)r  r   r  r  )r   r)  r}  s      r    get_image_scaleODFTranslator.get_image_scale  sp    doo%OOG,Eqy&&..*5'= / ODLE  Er"   c                   U R                  U5      nU R                  US5      u  pEU R                  US5      u  pgSnUb  Uc  [        c%  U R                  R                  R                  SUS9  gU R                  U   u  p[        R                  R                  U	S5       nUR                  nUR                  R                  S	U5      nSSS5         [        U5        Uc  WS
   S-  nUc  US:w  a  WS   S-  nUS:X  a5  UnU R                  5       nX-  nUc  WS
   S-  nUS   S-  nX-  U-  nUU-  nXC-  nXc-  nSU-  nSU-  nXF4$ ! , (       d  f       N= f! [         a    X4n Nf = f)z=Return the image size in centimeters adjusted by image attrs.r`  rg  )`   r  Nz4image size not fully specified and PIL not installedr  )0.5cmr  r?  dpir   ru  r  r   z%.2fcm)r~  rp  r   r   r  r  r  Imageopenrm  r_  r#  iter	TypeErrorget_page_width)r   r)  r;  r}  r`  
width_unitrg  r   r  rX  r<  imgimg_sizefactor
line_widthimage_widthimage_heights                    r    get_image_scaled_width_height+ODFTranslator.get_image_scaled_width_height  s   $$T* 77gF//h?	=FN{&&..J" / $ ($(OOF$;!H#.#88hhll5#. /!S	 =QK%'E>jC/a[5(FF,,.J'E~&qkE1'{U2 -<,.5 F"}7 /.  !j!s   )EE 
EE)(E)c                   U R                  5       nUR                  S5      nSnU H  nUR                  S5      nUR                  S5      nUR                  S5      nUb  Ub  Uc  MA   U R                  U5      u  pXU R                  U5      u  phU R                  U5      u  pxXV-
  U-
  nM     Uc  SnU$ ! [         a(    U R
                  R                  R                  S5         NCf = f)z0Return the document's page width in centimeters.z.//{urn:oasis:names:tc:opendocument:xmlns:style:1.0}page-layout/{urn:oasis:names:tc:opendocument:xmlns:style:1.0}page-layout-propertiesNzG{urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0}page-widthzH{urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0}margin-leftzI{urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0}margin-rightz;Stylesheet file contains invalid page width or margin size.g{Gz.@)r  iterfindr#  rk  r^  r   r  r  )	r   rZ  r   r`  r)  
page_widthmargin_leftmargin_rightr   s	            r    r  ODFTranslator.get_page_width  s   &&(%&
 DJ ((K  88 L "&'' $ 2 2: >
!%!3!3K!@"&"4"4\"B
 ,|;E- . = E  '&&..&''s   (9B33/C%$C%c           	     b   S nU R                  X5      u  pgUR                  R                   H%  nUR                  S:X  d  M  UR	                  5       nM'     U =R
                  S-  sl        UbS  SSSSS.n	[        U R                  SU	[        S	9n
S
S
SSS.n	[        U
SU	[        S	9  SSSSSSSSS.n	[        U
SU	[        S	9  SU R
                  -  nS[        [        5      -  nUSU R                  S5      S.n	[        U R                  SU	[        S	9n
0 n	SnUR                  R                  R                  S5      nU(       a  SU;   a  SnU(       a  SU	S'   OS U	S'   [        U
S!U	[        S	9  UUSSS".n	XiS#'   [        US$U	S%9n0 n	[        US&U	S%9nS'U R                  S5      0n	[        US(U	S%9nUUUU4$ ))Nr  r   extrar  CaptionStandard)zstyle:classr7  r6  r8  r5  rS  z0.0835in0r  )fo:margin-bottomfo:margin-topztext:line-numberztext:number-lineszstyle:paragraph-properties12ptitalicTimesLucidasans1)zfo:font-sizezfo:font-stylezstyle:font-namezstyle:font-name-complexzstyle:font-size-asianzstyle:font-size-complexzstyle:font-style-asianzstyle:font-style-complexzstyle:text-propertiesrstframestyle%d
graphics%dr  r  r6  r7  r8  FrX  wrapTdynamic
style:wrapr  style:graphic-properties)draw:style-name	draw:nametext:anchor-typedraw:z-index	svg:width
draw:framer  zdraw:text-boxr*  r)  )r  r%   childrenr  r  r  ra   r  r9  nextIMAGE_NAME_COUNTERr  r  r#  )r   r)  r;  r<  r  r  r`  rg  node1r   rp  r;  	draw_namer  rX  r  r]  r^  s                     r    rS  ODFTranslator.generate_figure!	  s   ::4H[[))E}}	),,. * 	!# & +'+5	F T22M$*49C %/!+$'%,	F s8$T3 !'!)#*+8)/+1*2,4	F s3$T3&)?)??
 4(:#;;	 %%'+}}]'C

 ..&vdD++((,,Y7v(D#,F< #)F< 32 	/  *" +	
 ${,vFof=t}}Y7
 hv6Cg%%r"   c                n   U R                  X5      u  pgU =R                  S-  sl        SU R                  -  nUSU R                  S5      S.n	[        U R                  SU	[
        S9n
S nS nSUR                  ;   a:  UR                  S   R                  5       nU H  nUS	;   a  UnM  US
;   d  M  UnM     Uc  SSSSSSSSSSSSSSS.n	OUn	Ub  XS'   Ub  XS'   SnUR                  R                  S5      nU(       a  SU;   a  SnU(       a  SU	S'   OSU	S'   U R                  U5      (       a  SU	S'   [        U
SU	[
        S9  S[        [        5      -  nUUSS.n	[        UR                  [        R                  5      (       a  S U	S!'   OSU	S!'   XiS"'   XyS#'   [        US$U	S%9n
[        U
S&U< S'S(S)S*.S%9  X4$ )+Nr   r  r  r  r  r5  rS  align)leftcenterright)topmiddlebottomr  r  r  zrect(0cm 0cm 0cm 0cm)z0%z100%r  standard)style:vertical-poszstyle:vertical-relzstyle:horizontal-relzstyle:mirrorzfo:clipzdraw:luminancezdraw:contrastzdraw:redz
draw:greenz	draw:bluez
draw:gammazdraw:color-inversionzdraw:image-opacityzdraw:color-modezstyle:horizontal-posr  FrX  r  Tr  r  r  r  ra  )r  r  r  zas-charr  r  z
svg:heightr  r  z
draw:imagesimpleembedonLoad)
xlink:href
xlink:typez
xlink:showzxlink:actuate)r  r  r  ra   r  r9  r  r   r#  is_in_tabler  r  r  r%   r   TextElement)r   r)  r;  r<  r  frame_attrsr`  rg  r;  r   rp  halignvalignr  ri   r  rX  r  s                     r    rT  ODFTranslator.generate_imagel	  s!   ::4H!#&)?)??
 %%'+}}W'=

 ..&vdDdoo%OOG,224E55 F77 F	 
 &+&1(3 &2"&!% "!$(/&,#-F" !F-3)*+1'( //%%i0v(D#,F< #)F< D!!#)F< 32 	/ 4(:#;;	
  *"

 dkk5#4#455)2F%&)4F%&#{%|,vF3"-"!%	.
 	 zr"   c                    UR                   nU(       a?  [        U[        R                  R                  5      (       a  gUR                   nU(       a  M?  g)NTF)r%   r  r  r   entry)r   r)  r  s      r    r  ODFTranslator.is_in_table	  s=    %!5!566LLE e r"   c                    [        UR                  [        R                  R                  5      (       aH  U R
                  S   nUS   S   nX l        U R                  R                  U R                  S5      5        g g )Nr  r   r  )	r  r%   r  r   rR  r  r  r_   r  r
  s      r    visit_legendODFTranslator.visit_legend	  sb    dkk8>>#8#899&&r*Ca&)C#& &&--dmmH.EF	 :r"   c                    [        UR                  [        R                  R                  5      (       aK  U R
                  R                  5         U R                  5         U R                  5         U R                  5         g g r   )r  r%   r  r   rR  r  r\  r  r  s     r    depart_legendODFTranslator.depart_legend	  sX    dkk8>>#8#899&&**,   	 :r"   c                X    U =R                   S-  sl         U =R                  S-  sl        g rd  r  r  r  s     r    visit_line_blockODFTranslator.visit_line_block	  $    !#"r"   c                X    U =R                   S-  sl         U =R                  S-  sl        g rd  r  r  s     r    depart_line_blockODFTranslator.depart_line_block	  r  r"   c                z    SU R                   -  n[        U R                  SSU R                  U5      0S9nX0l        g )Nzlineblock%dr)  r*  r  )r  ra   r  r  )r   r)  rF   rp  s       r    
visit_lineODFTranslator.visit_line	  s>     6 66--x!2DMM%4H KM"r"   c                $    U R                  5         g r   r  r  s     r    depart_lineODFTranslator.depart_line	  r  r"   c                r    [        U R                  SSU R                  S5      0S9nU R                  U5        g )Nr  r*  r  r  r  r  s      r    visit_literalODFTranslator.visit_literal	  s9      +%t}}_'EFH 	  $r"   c                $    U R                  5         g r   r  r  s     r    depart_literalODFTranslator.depart_literal	  r  r"   c           	     L   UR                   R                  SS5      nU(       a=  U R                  nU H  n[        USSU R	                  U5      0S9nM!     [        U5      nO[        U R                  S5      nSnU R                  U5        U R                  R                  U5        g )NrX  r,   r  r*  r  r   )	r  r#  r  ra   r  r   r  r  r_   )r   r)  r   r`   inline_stylecounts         r    visit_inlineODFTranslator.visit_inline	  s    $$Y3%%B &K(9(,l(C(EF !' KE D00+>BE  $%%,,U3r"   c                |    U R                   R                  5       n[        U5       H  nU R                  5         M     g r   )r  r\  r  r  )r   r)  r  xs       r    depart_inlineODFTranslator.depart_inline
  s0    --113uA  r"   c                    Sn[         R                  U5      nU(       a  UR                  5       n[        U5      nU$ [        R                  U5      nU(       a  UR                  5       n[        U5      S-  nU$ )Nr      )SPACES_PATTERNmatchr  r   TABS_PATTERN)r   rW  r  matchobjpads        r    _calculate_code_block_padding+ODFTranslator._calculate_code_block_padding
  si    !''-.."CHE 	 $))$/Hnn&C1r"   c                    [         R                  R                  USS9nUS;   a  [        U R                  [
        S9nO[        U R                  [
        S9n[         R                  " XU5      $ )NT)stripall)latextex)escape_function)pygmentslexersget_lexer_by_namer   r  r   r   	highlight)r   insourcer  lexerfmtrs        r    _add_syntax_highlighting&ODFTranslator._add_syntax_highlighting
  sa    11(T1J'',|D ,|D !!(488r"   c                    [         R                  U R                  U5      n[        R                  U R                  U5      $ r   )	FILL_PAT1sub
fill_func1	FILL_PAT2
fill_func2)r   rW  s     r    	fill_lineODFTranslator.fill_line 
  s+    }}T__d3}}T__d33r"   c                B    UR                  S5      nS[        U5      4-  $ )Nr   z<text:s text:c="%d"/>r  r   r   r  spacess      r    r  ODFTranslator.fill_func1$
  s!    "&#f+88r"   c                H    UR                  S5      nS[        U5      S-
  4-  $ )Nr   z <text:s text:c="%d"/>r   r  r  s      r    r  ODFTranslator.fill_func2(
  s&    "'3v;?*===r"   c                "   [        U R                  5      S:  a  SU R                  S5      < S3nOSU R                  S5      < S3nUR                  5       n[        (       a?  U R
                  R                  (       a$  UR                  SS5      nU R                  X45      nO[        U5      nUR                  S5      nUS	   S
:X  a  US		 S/n/ nU H7  nU R                  U5      nUR                  SS5      nUR                  U5        M9     SR                  U5      n	X)4-  n
UR                  U
S45        S
R                  U5      nUR!                  S5      n["        R$                  " U5      nU H  nU R&                  R                  U5        M      g )Nr   z<text:p text:style-name="r  z">%s</text:p>r  r  r  r  r  r{   zI<wrappertag1 xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0">z&#10;z<text:line-break/>z</wrappertag1>r
  )r   r  r  r  r  r   r   r#  r  r   r   r  r}   r_   rz  extendr  r  r  r  )r   r)  wrapper1r;  r  lineslines1my_linesmy_linemy_lines_strmy_lines_str2ru   rp  r1  s                 r    visit_literal_block!ODFTranslator.visit_literal_block,
  sd   t))*Q.237H /
 k*.HH>>xx
H5H226DF!&)FT"9?b	2 3GnnW-Googt4GOOG$  ,00: #33}&678WWV_YYwmmBE  ''. r"   c                    g r   r,   r  s     r    depart_literal_block"ODFTranslator.depart_literal_blockM
  rQ  r"   c                n    U R                   R                  R                  SUS9  U R                  U5        g )Nz"math" role not supportedr  )r   r  r  r  r  s     r    
visit_mathODFTranslator.visit_mathT
  s3    &&'B15 	' 	74 r"   c                &    U R                  U5        g r   )r  r  s     r    depart_mathODFTranslator.depart_mathY
  s    D!r"   c                n    U R                   R                  R                  SUS9  U R                  U5        g )Nz"math" directive not supportedr  )r   r  r  r   r  s     r    visit_math_blockODFTranslator.visit_math_block\
  s3    &&'G15 	' 	7  &r"   c                &    U R                  U5        g r   )r#  r  s     r    depart_math_blockODFTranslator.depart_math_blocka
  s    !!$'r"   c                    UR                   R                  S5      nUR                   R                  S5      nUb  Ub  X0R                  U'   g g g )Nr3  r  )r  r#  r  )r   r)  r3  r  s       r    
visit_metaODFTranslator.visit_metad
  sI    ""6*//%%i0 3#*NN4  !4r"   c                    g r   r,   r  s     r    depart_metaODFTranslator.depart_metaj
  rQ  r"   c                   SnU R                   (       Gd  SU l         [        U R                  SU R                  U5      SS.[        S9n[        USSS	S
S.[        S9n[        U R                  SU R                  SU-  S5      SS.[        S9n[        USSS0[        S9n[        U R                  SU R                  SU-  S5      SS.[        S9n[        USSS0[        S9n[        U R                  SU R                  SU-  S5      SS.[        S9n[        USSSSS
SSS.[        S9n[        US[        S9n[        U R                  SU R                  SU-  S5      SS.[        S9n[        USSSS.[        S9n[        U R                  SU R                  SU-  S 5      SS.[        S9n[        USSSS
S
SS!.[        S9n[        U R                  SU R                  SU-  S"5      SS.[        S9n[        USSSSS
SS!.[        S9nU R                  S#U R                  U5      U R                  U5      S$.S%9n[        US&S'U R                  SU-  S5      0S%9n[        US&S'U R                  SU-  S5      0S%9n[        US(5      n[        US)5      n[        US*U R                  SU-  S5      S+S,.S%9n[        US-S.S/0S%9nS0Ul        [        US*U R                  SU-  S5      S+S,.S%9n[        US-S.S/0S%9nS1Ul        U R                  U5        g )2Nr  Tr5  rH   r6  r7  rS  style:table-propertiesz17.59cmr  r  )style:widthtable:alignzstyle:shadowz%s.%%c)r  table-columnstyle:table-column-propertiesstyle:column-widthz4.999cm)Bz12.587cm	%s.%%c%%d)r  r   r  style:table-cell-propertiestransparentz0.097cmz0.035cm solid #000000)fo:background-color
fo:paddingfo:border-leftfo:border-rightfo:border-topfo:border-bottomzstyle:background-imager^  )r?  r   )rD  z	fo:border)r  r   rD  rE  rF  rG  rH  )r?  r   table:tablez
table:nametable:style-namer  table:table-columnrL  table:table-header-rowstable:table-rowtable:table-cellstringrL  zoffice:value-typer)  r*  Table_20_HeadingOptionDescription)r  ra   r  r  r9  r  rI   r  )r   r)  
table_namer`   rp  rm  r  r]  s           r    visit_option_listODFTranslator.visit_option_listm
  s   "
 ////3D,D11="mmJ7 'J)157B R!9(% &C( 156C D11="mmHz,A7K .J08<>B R!@$iJ19=?CD11="mmHz,A7K .J08<>B R!@$jJ2:>@CD11="mm*,j: ,J. 7;<B R!>'4'"9#)!8$;H= FJKC S":4HCD11="mm*,j: ,J. 7;<B R!>'4H6>BDC D11="mm*,j: ,J. 7;<B R!>'"9#)!'$;H=
 FJKC D11="mm*,j: ,J. 7;<B R!>'"9#:!'$;H=
 FJKC }--
3 $j 96
  1:%w!0;1 2 1:%w!0;1 2 67/00 $j(*!6!):+ , h103 40 $j(*!6!):+ , h103 4   $r"   c                $    U R                  5         g r   r  r  s     r    depart_option_list ODFTranslator.depart_option_list
  r  r"   c                H    U R                  S5      nU R                  U5        g )NrO  r  r  r  s      r    visit_option_list_item$ODFTranslator.visit_option_list_item
  s!    01  $r"   c                $    U R                  5         g r   r  r  s     r    depart_option_list_item%ODFTranslator.depart_option_list_item
  r  r"   c                f    U R                  SSU R                  -  SS.S9nU R                  U5        g )NrP  z
Table%d.A2rQ  rR  r  )r  r  r  r  s      r    visit_option_group ODFTranslator.visit_option_group
  s>    1 ,t/?/? ?!);
  	  $r"   c                $    U R                  5         g r   r  r  s     r    depart_option_group!ODFTranslator.depart_option_group
  r  r"   c                R    U R                  SSS0S9nUR                  5       Ul        g )Nr)  r*  Table_20_Contentsr  )r  r  rI   r  s      r    visit_optionODFTranslator.visit_option
  s/    x214 5++-r"   c                    g r   r,   r  s     r    depart_optionODFTranslator.depart_option
  rQ  r"   c                    g r   r,   r  s     r    visit_option_string!ODFTranslator.visit_option_string
  rQ  r"   c                    g r   r,   r  s     r    depart_option_string"ODFTranslator.depart_option_string
  rQ  r"   c                    g r   r,   r  s     r    visit_option_argument#ODFTranslator.visit_option_argument
  rQ  r"   c                    g r   r,   r  s     r    depart_option_argument$ODFTranslator.depart_option_argument
  rQ  r"   c                    U R                  SSU R                  -  SS.S9n[        USSS0S9nUR                  5       Ul        [
        R                  e)	NrP  z
Table%d.B2rQ  rR  r  r)  r*  rj  )r  r  ra   r  rI   r   ri  r  s       r    visit_descriptionODFTranslator.visit_description
  sb    1 ,t/?/? ?!);
  X2/4 5;;=   r"   c                    g r   r,   r  s     r    depart_description ODFTranslator.depart_description
  rQ  r"   c                $   SU l         U R                  (       a  U R                  S5      nOUU R                  (       a  U R                  S5      nO2U R                  S   nU R                  SSU0S9nU R                  U5        U R                  U5        g )NTr  r  r  r)  r*  r  )r  r  r  r  r  r  r  r  )r   r)  r`   r;  s       r    visit_paragraphODFTranslator.visit_paragraph
  s     >>x(B^^x(B33B7J""):6 # 8B ##B'  $r"   c                   SU l         U R                  5         U R                  (       aQ  U R                  R	                  U R
                  S   5        U R
                  R                  U R
                  S   5        g U R                  (       aQ  U R                  R	                  U R
                  S   5        U R
                  R                  U R
                  S   5        g g )NFr  )	r  r  r  r  r_   r  remover  r  r  s     r    depart_paragraphODFTranslator.depart_paragraph  s    !>>&&t';';B'?@  ''(<(<R(@A^^&&t';';B'?@  ''(<(<R(@A r"   c                    g r   r,   r  s     r    visit_problematicODFTranslator.visit_problematic  rQ  r"   c                    g r   r,   r  s     r    depart_problematic ODFTranslator.depart_problematic  rQ  r"   c                ^   SUR                   ;   Ga  UR                   S   nUR                  5       nSU;   a  UR                  5       nSR                  S [	        [
        R                  5       5       5       5      nSU< SU< S3nUR                  S5      n[        R                  " U5      n[        U5      S	:  ad  US	   nU R                  (       a   [        R                   eU R                  (       a   [        R                   eU R                  R                  U5        [        R                   e)
Nr  r   r  c              3  :   #    U  H  u  pU< S U< S3v   M     g7f)z=""Nr,   )rO  kvs      r    rQ  *ODFTranslator.visit_raw.<locals>.<genexpr>"  s      #H F "#A( Fs   z<stuff rz   z</stuff>r
  r   )r  r   r  rz  rd   r  re   r  r  r  r   r  r  r  r_   r   ri  )	r   r)  formats
formatlistrawstrattrstr
contentstrr  rp  s	            r    	visit_rawODFTranslator.visit_raw  s    t&ooh/G J
"(( #H $%=%C%C%E F#H H 8?I
'..w7
--
3w<!#!!*C~~
    	      ,,33C8   r"   c                L    U R                   (       a  g U R                  (       a  g g r   )r  r  r  s     r    
depart_rawODFTranslator.depart_raw2  s    >>^^r"   c                   U R                   R                  (       a  SU;   ao  US   nU R                   R                  (       a'  UR                  S5      (       a  U R	                  U5      nU R                  SSU-  SS.S9nU R                  U5        OaSU;   a7  U R                   R                  (       a  US   nU R                  S	SU-  S
S.S9nO$U R                  R                  R                  SUS9  U R                  (       ap  [        UR                  5      S:  aV  [        UR                  S   [        R                  R                   5      (       a  UR#                  UR                  S   5        g g g g )Nrefurizmailto:ztext:a%sr  )r  r  r  r  r%  rI   r&  z3References must have "refuri" or "refid" attribute.r  r   r   )r   r   r   rJ  cloak_mailtor  r  r   r  r  r  r   r  r  r  r   	generatedr  )r   r)  hrefr`   s       r    visit_referenceODFTranslator.visit_reference:  sJ   ==%%4H~MM77	22,,T2D&&x"&+"*9&  ((,D==--=D**+?)-17I* B
 &&..I" / $ %%DMM"a'4==+X^^-E-EFFKKa() G ( &r"   c                j    U R                   R                  (       a  SU;   a  U R                  5         g g g )Nr  )r   r   r  r  s     r    depart_referenceODFTranslator.depart_referenceW  s-    ==%%4""$   &r"   c                    U R                  S5      nUR                  S5      nU(       a  US   nU(       a  Un[        U R                  SSU0S9nUR	                  5       nU R                  U5      Ul        g )Nr  rX  r   r0  r*  r  )r  r#  ra   r  r  r  rI   )r   r)  r;  rX  class1r`   rI   s          r    visit_rubricODFTranslator.visit_rubric\  sp    ]]8,
((9%QZF#
,,h z@
 
 {{}++d#r"   c                    g r   r,   r  s     r    depart_rubricODFTranslator.depart_rubrick  rQ  r"   c                   U =R                   S-  sl         U =R                  S-  sl        U R                  R                  (       a?  U R	                  SSU R                  -  SU R                   -  S.S9nU R                  U5        g g r  r  )r   r)  move_idsr`   s       r    visit_sectionODFTranslator.visit_sectionn  s|    aa==(("">(4+=+==#+d.@.@#@;" B $$R( )r"   c                    U =R                   S-  sl         U R                  R                  (       a  U R                  5         g g rd  r  r  s     r    depart_sectionODFTranslator.depart_sectionx  r  r"   c                r    [        U R                  SSU R                  S5      0S9nU R                  U5        g )Nr  r*  r  r  r  r  s      r    visit_strongODFTranslator.visit_strong}  s6    ,,k 14==3JKM  $r"   c                $    U R                  5         g r   r  r  s     r    depart_strongODFTranslator.depart_strong  r  r"   c                "    [         R                  er   rh  r  s     r    visit_substitution_definition+ODFTranslator.visit_substitution_definition  rl  r"   c                    g r   r,   r  s     r    depart_substitution_definition,ODFTranslator.depart_substitution_definition  rQ  r"   c                    g r   r,   r  s     r    visit_system_message"ODFTranslator.visit_system_message  rQ  r"   c                    g r   r,   r  s     r    depart_system_message#ODFTranslator.depart_system_message  rQ  r"   c                Z   S nS nUR                  S5      nUb'  U H!  nUR                  [        5      (       d  M  Un  O   Ub  U R                  R                  U5      nUcz  U R                  R
                  R                  SU S3US9  [        nU R                  R                  U5      nUc.  U R                  R
                  R                  SU S3US9  [        nU$ [        nU R                  R                  U5      nUc*  U R                  R
                  R                  SUS9  [        nU$ )NrX  zCan't find table style "z".  Using default.r  z Can't find default table style "z".  Using built-in default.zGCan't find default table style "{table_name}".  Using built-in default.)	r#  rJ  r  r  r   r  r  TABLENAMEDEFAULTBUILTIN_DEFAULT_TABLE_STYLE)r   r)  table_stylerV  str_classes	str_classs         r    get_table_styleODFTranslator.get_table_style  sU   
hhy)"(	''(899!*J ) !++//
;K" &&../
|;MN" / $ .
"//33J?& MM**22;J< H2 2=A 3 C #>K  *J++//
;K" &&...9= / ? :r"   c           
        U =R                   S-  sl         U R                  U5      nS[        -  n[        U R                  SU R                  SU-  U R                   45      SS.[        S9nUR                  c  [        USS	S
SS.[        S9  O[        USSS
SUR                  S.[        S9  [        U R                  SU R                  SU-  U R                   SS45      SS.[        S9nU R                  R                  nUc  UR                  nOSU4-  n[        USSUUUUS.[        S9  S nUR                   H%  n	U	R                  S:X  d  M  U	R                  5       n  O   Ub  U R                  SU5        O [        U R                  SU R                  SU-  U R                   45      U R                  SU-  U R                   45      S.S9n
U R!                  U
5        X@l        SU l        g )Nr   z%s%%dr5  r  rH   r8  rS  r9  r  0inz0.10in)r;  r  r  margins)r;  r  r  rC  r@  r  r  z0.%03dcm solid #000000rA  z0.049cmrI  rc  r  rJ  rK  r  g        )r  r  r  ra   r  r  r9  r   r   table_border_thicknessr5   r  r  r  r  r  r  current_table_styletable_width)r   r)  r  rV  rp  rm  	thicknessline_style1rc  r1  r]  s              r    visit_tableODFTranslator.visit_table  s$   A**40//
..--z!D$4$4#79#G
 	
 &&.s4  &!&$,>  s4(!&$,'2'B'B>  ..--j(4+;+;S!*FH(G
 	
 MM88	%,,K2i]BK35#)*( +?
 	 ]]E}}' # MM-/--}--z!D$4$4#79 $z!D$4$4#7!9F
  	  %#& r"   c                    [        S[        S9nSU R                  4-  nU R                  nUS   nX5R                  U'   U R                  5         g )Nr:  r^  %.4finr   )rc   r9  r  r  r   r  )r   r)  r  	attribvalrp  rm  s         r    depart_tableODFTranslator.depart_table  sM    =6	 0 033	&&!f )

9r"   c                *    [        S5      S-
  U l        g )Nr  r   )r~   r  r  s     r    visit_tgroupODFTranslator.visit_tgroup  s    HqLr"   c                    g r   r,   r  s     r    depart_tgroupODFTranslator.depart_tgroup  rQ  r"   c                v   U =R                   S-  sl         U R                  S[        -  U R                  [	        U R                   5      45      nUR                  5       S-  n[        U R                  SUSS.[        S9n[        USS	S
U-  0[        S9  U R                  SSU0S9  U =R                  U-  sl
        g )Nr   z	%s%%d.%%sg      (@r5  r<  r8  rS  r=  r>  r  rM  rL  r  )r  r  r  r  chr	propwidthra   r  r9  r  r  )r   r)  colspec_namecolwidthrp  s        r    visit_colspecODFTranslator.visit_colspec  s    Q}}**s4#4#458
 >>#d*..&*G
  	37/H1DE	  	."4l!E 	 	GH$r"   c                    g r   r,   r  s     r    depart_colspecODFTranslator.depart_colspec  rQ  r"   c                    U R                  S5      nU R                  U5        SU l        U R                  R	                  S5        g )NrN  TrS  )r  r  in_theadr  r_   r  s      r    visit_theadODFTranslator.visit_thead  s=    89  $""))*<=r"   c                f    U R                  5         SU l        U R                  R                  5         g r  )r  r  r  r\  r  s     r    depart_theadODFTranslator.depart_thead  s'    ""&&(r"   c                n    [        S5      S-
  U l        U R                  S5      nU R                  U5        g )Nr  r   rO  )r~   r  r  r  r  s      r    	visit_rowODFTranslator.visit_row$  s1    HqL01  $r"   c                $    U R                  5         g r   r  r  s     r    
depart_rowODFTranslator.depart_row)  r  r"   c                   U =R                   S-  sl         U R                  S[        -  U R                  SS45      nUSS.nUR	                  SS5      nUS:  a!  SUS-   4-  US	'   U =R                   U-  sl         UR	                  S
S5      nUS:  a  SUS-   4-  US'   U R                  SUS9nU R                  U5        g )Nr   z%s%%d.%%c%%dr  rQ  rR  morecolsr   %dztable:number-columns-spannedmorerowsztable:number-rows-spannedrP  r  )r  r  r  r  r#  r  r  )r   r)  cellspec_namer   r  r  rp  s          r    visit_entryODFTranslator.visit_entry,  s    Q--sA(

 !.!)
 88J*a<59X\O5KF12)88J*a<26(Q,2HF./ 26B  %r"   c                $    U R                  5         g r   r  r  s     r    depart_entryODFTranslator.depart_entry@  r  r"   c                    g r   r,   r  s     r    visit_tbodyODFTranslator.visit_tbodyC  rQ  r"   c                    g r   r,   r  s     r    depart_tbodyODFTranslator.depart_tbodyF  rQ  r"   c                *    SU;  a  SU;  a  SU;  a  g g )Nr  r  refnamer,   r  s     r    visit_targetODFTranslator.visit_targetI  s"     D 4'T)r"   c                    g r   r,   r  s     r    depart_targetODFTranslator.depart_targetT  rQ  r"   c                   [        UR                  [        R                  R                  5      (       a  U R
                  nUS:  a9  U R                  R                  R                  SUR                  5       < S3US9  SnU R                  SSU-  U R                  SU45      S.S	9nU R                  U5        U R                  U5        g [        UR                  [        R                  R                  5      (       af  [        U R                  S
SU R                  U5      0S	9nU R                  U5        UR                  5       nX`l        SU l        U R                  U5        g g )N   zbHeading/section levels greater than 7 not supported.    Reducing to heading level 7 for heading: "r  r  r0  r   z	heading%dtext:outline-levelr*  r  r)  r*  T)r  r%   r  r   sectionr  r   r  r  r  r  r  r  r  ra   r  rc  r  )r   r)  r  
title_typer  rp  rI   s          r    visit_titleODFTranslator.visit_titleW  s>   dkk8>>#9#9:: ..Mq &&.. )48 / : !"##*.*>'+}}#m%6(8" $ C ##C($$S)X^^%<%<== T118!4==#<E C ##C(;;=DJ#'D $$S) >r"   c                    [        UR                  [        R                  R                  5      (       d3  [        UR                  [        R                  R
                  5      (       a  U R                  5         g g r   )r  r%   r  r   r  r   r  r  s     r    depart_titleODFTranslator.depart_titlev  sJ    t{{HNN$:$:;;$++x~~'>'>??  @r"   c                $    U R                  XSS9  g )Nr  )r  )r  )r   r)  r  s      r    visit_subtitleODFTranslator.visit_subtitle{  s    J?r"   c                &    U R                  U5        g r   )r  r  s     r    depart_subtitleODFTranslator.depart_subtitle~  s    $r"   c                    U R                  SSU R                  S5      0S9nU R                  UR                  5       5      Ul        [
        R                  e)Nr  r*  r  r  )r  r  r  r  rI   r   ri  r  s      r    visit_title_reference#ODFTranslator.visit_title_reference  sL    {t}}[94; <++dkkm,   r"   c                    g r   r,   r  s     r    depart_title_reference$ODFTranslator.depart_title_reference  rQ  r"   c           
         [        SS5       HZ  n[        USSU4-  U R                  SU4-  5      S.S9n[        US5        [        US	5        [        US
SSS.S9  [        US5        M\     g )Nr      z$text:table-of-content-entry-templater   r  r  r  ztext:index-entry-chapterztext:index-entry-textztext:index-entry-tab-stopr   r  )zstyle:leader-charz
style:typeztext:index-entry-page-number)r  ra   r  )r   rp  r  rm  s       r    (generate_table_of_content_entry_template6ODFTranslator.generate_table_of_content_entry_template  s    B<C6*.#.'+}}]cW5L'MC s67s34s7%(%A  s:;  r"   c                    SnS nUR                    H  n[        Xb5      (       d  M  Un  O   Ub  UR                  5       nU$ U R                  R                  U   nU$ )Nr{   )r  r  r  r  r  )r   r)  
class_type	label_keyr  
title_noder1  s          r    find_title_labelODFTranslator.find_title_label  se    
]]E%,,"
 # !%%'E  MM((3Er"   c                   SUR                   ;   GaU  SUR                   S   ;   Ga:  U R                  U[        R                  R                  S5      nU R
                  R                  (       a  U R                  SSSSS.S9n[        US	S
S0S9n[        USSS0S9nX%l	        U R                  U5        [        US5      n[        US5      n[        USSU R                  S5      0S9nX(l	        U R                  U l        X`l        U R                  U5        ODU R!                  S5      n	U R!                  S5      n	[        U	SSU R                  S5      0S9nX#l	        SU l        g SUR                   S   ;   ap  U R!                  S5      n	U R!                  S5      n	[        U	SSU R                  S5      0S9nU R                  U[        R                  R                  S5      nX#l	        g SUR                   S   ;   ap  U R!                  S5      n	U R!                  S5      n	[        U	SSU R                  S5      0S9nU R                  U[        R                  R                  S5      nX#l	        g g g )NrX  contentsztext:table-of-contentzTable of Contents1r  Sect1)r  ztext:protectedr*  r  ztext:table-of-content-sourcer  10ztext:index-title-templater*  Contents_20_Headingtext:index-bodyztext:index-titler)  zcontents-headingr  r  r  r  Tabstract
dedication)r  r4  r  r   rc  r   r   r  ra   rI   r.  r  r  save_current_elementr  r  r  r  )
r   r)  r  rp  rm  r  r]  r^  r_  r`   s
             r    visit_topicODFTranslator.visit_topic  st   'T__Y77--(....
<==66++,C%9*0+2M+ C
 %60$ C %S*E)+@O C  %HAA#F$S*;<C$S*<=C$S()4==9K+L< C  %H040D0DD-7:4,,S1'78B'9:B$K 14==3JKMC  %H,0)ty99]]#34]]#56 -t}}X/FGI --(....  !!;;]]#34]]#56 -t}}X/FGI --(.... " ! <a (r"   c                "   SUR                   ;   a  SUR                   S   ;   ak  U R                  R                  (       a7  U R                  U R                  5        U R                  U R                  5        OU R                  S5        SU l        g g g )NrX  r7  r  F)	r  r   r   update_toc_page_numbersr  r  r>  r  r  r  s     r    depart_topicODFTranslator.depart_topic  sv    'T__Y77==660088:,,T-F-FGMM"23,1) 8 (r"   c                P    / nU R                  USU5        U R                  U5        g rD  )update_toc_collectupdate_toc_add_numbers)r   r`   
collections      r    rB  %ODFTranslator.update_toc_page_numbers  s'    
Az2##J/r"   c                    UR                  X!45        US-  nU H'  nUR                  S:w  d  M  U R                  XBU5        M)     g )Nr   r;  )r_   r   rF  )r   r`   r   rH  child_els        r    rF   ODFTranslator.update_toc_collect  sB    5+&
H||00''D r"   c                    U H<  u  p#UR                   S:X  d  M  UR                  S:w  d  M)  [        US5      nSUl        M>     g )Nr)  zTable of Contentsztext:tab9999)r   rI   ra   r  )r   rH  r   rp  rm  s        r    rG  $ODFTranslator.update_toc_add_numbers  s:    $JE8#HH 33 j1!	 %r"   c                &    U R                  S5        g )Nr  )r  r  s     r    visit_transitionODFTranslator.visit_transition  s    &'r"   c                    g r   r,   r  s     r    depart_transitionODFTranslator.depart_transition  rQ  r"   c                (    U R                  US5        g )Nr  generate_admonitionr  s     r    visit_warningODFTranslator.visit_warning        y1r"   c                8    U R                   R                  5         g r   r  r  s     r    depart_warningODFTranslator.depart_warning  r  r"   c                (    U R                  US5        g )N	attentionrW  r  s     r    visit_attentionODFTranslator.visit_attention        {3r"   c                (    U R                  US5        g )NcautionrW  r  s     r    visit_cautionODFTranslator.visit_caution  r[  r"   c                (    U R                  US5        g )NdangerrW  r  s     r    visit_dangerODFTranslator.visit_danger  s      x0r"   c                (    U R                  US5        g )NrP  rW  r  s     r    visit_errorODFTranslator.visit_error   s      w/r"   c                (    U R                  US5        g )NhintrW  r  s     r    
visit_hintODFTranslator.visit_hint%        v.r"   c                (    U R                  US5        g )N	importantrW  r  s     r    visit_importantODFTranslator.visit_important*  rc  r"   c                (    U R                  US5        g )NnoterW  r  s     r    
visit_noteODFTranslator.visit_note/  rs  r"   c                (    U R                  US5        g )NtiprW  r  s     r    	visit_tipODFTranslator.visit_tip4  s      u-r"   c                    S nUR                    H%  nUR                  S:X  d  M  UR                  5       nM'     Uc  UR                  S5      nU(       a  US   nU R	                  USU5        g )Nrc  rX  r   generic)r  r  r  r#  rX  )r   r)  rc  r1  classes1s        r    visit_admonitionODFTranslator.visit_admonition9  s_    ]]E}}' # =xx	*H   y%8r"   c           	        [        U R                  S5      (       a&  U R                  R                  R                  X"5      nOUn[	        U R
                  SSU R                  SU45      0S9nU(       a  X5l        OUR                  5       < S3Ul        U R                  SU45      nU R                  R                  U5        g )Nr  r)  r*  zadmon-%s-hdrr  !zadmon-%s-body)hasattrr  r  r#  ra   r  r  rI   
capitalizer  r_   )r   r)  r  rc  translated_labelrp  ru   s          r    rX  !ODFTranslator.generate_admonitionF  s    4==(++#}}3377E$--xt}}	 +A
  H 0 ; ; =@CH]]?UI6""))"-r"   c                J    U R                  SSS0S9nU R                  U5        g )Nr  r*  zrststyle-subscriptr  r]  r  s      r    visit_subscriptODFTranslator.visit_subscriptY  s2    {34
  	  $r"   c                $    U R                  5         g r   r  r  s     r    depart_subscriptODFTranslator.depart_subscript_  r  r"   c                J    U R                  SSS0S9nU R                  U5        g )Nr  r*  zrststyle-superscriptr  r]  r  s      r    visit_superscriptODFTranslator.visit_superscriptb  s2    {54
  	  $r"   c                $    U R                  5         g r   r  r  s     r    depart_superscript ODFTranslator.depart_superscripth  r  r"   c                    g r   r,   r  s     r    visit_abbreviation ODFTranslator.visit_abbreviationk  rQ  r"   c                    g r   r,   r  s     r    depart_abbreviation!ODFTranslator.depart_abbreviationn  rQ  r"   c                    g r   r,   r  s     r    visit_acronymODFTranslator.visit_acronymq  rQ  r"   c                    g r   r,   r  s     r    depart_acronymODFTranslator.depart_acronymt  rQ  r"   c                    g r   r,   r  s     r    visit_sidebarODFTranslator.visit_sidebarw  rQ  r"   c                    g r   r,   r  s     r    depart_sidebarODFTranslator.depart_sidebarz  rQ  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  rc  r  r-   )r,   r   r   )r.   int)r.   bool)r.   r  )r   )r   rc  (  r0   r1   r2   r3   r  r   r  r   r  r  r   r,  r-  r  r  rE  r  rE  rF  rd   r  	code_noner  r  ro  compiler  rh  r  r  r  r   r  r  r  r8  rn  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+  r0  r3  r7  r:  r>  rA  rE  rH  rK  rN  rR  rU  rY  r]  ra  re  rj  rn  rq  rt  rw  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r(  r,  r0  r3  r6  r9  r=  ra  rd  rp  rk  r~  r  r  rS  rT  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r#  visit_doctest_blockdepart_doctest_blockr&  r)  r,  r/  r2  r5  rW  rZ  r^  ra  rd  rg  rk  rn  rq  rt  rw  rz  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r  r!  r$  r'  r*  r.  r4  r?  rC  rB  rF  rG  rQ  rT  rY  r]  ra  depart_attentionrf  depart_cautionrj  depart_dangerrm  depart_errorrq  depart_hintrv  depart_importantrz  depart_noter~  
depart_tipr  depart_admonitionrX  r  r  r  r  r  r  r  r  r  r  r4   r,   r"   r    r   r     sd   7KrS+j#:8<'
.$	A/0#:.M` (,E!H~$Iz9

:&I3<xt4 
5'!,L/
"@,'<
,771$%%%%1%%544
$$
*)X
!!H
-
>!!:
+3!
)!
%&2$*4!$!H)	I!
N&!P:!-!
!?@B28
(T$LI&X $(RhG!###%4$!

949>/B ./!
"'
(+Z%x%% 
!%B!,*:%
$)!
%
!$L=~)%$>)
%
&(	*>!
@ !<":!x	20
E"(2)4 &2 $N1 #M0 "L/ !K4 &/ !K.  J	9 '.&%% r"   r   c                  (   ^  \ rS rSrU 4S jrSrU =r$ )Readeri  c                   > [         TU ]  5       nU R                  R                  (       d  UR	                  [
        R                  5        U$ r   )superget_transformsr   r   r  r   DanglingReferences)r   
transforms	__class__s     r    r  Reader.get_transforms  s7    W+-
}}))j;;<r"   r,   )r0   r1   r2   r3   r  r4   __classcell__)r  s   @r    r  r    s     r"   r  )Z__doc__
__future__r   __docformat__configparserr   r  ior   	itertoolsr  rk  os.pathpathlibr   ro  rY  r   r.  rE  weakref	xml.etreer   r  xml.domr	   r   r  r
   r   r   r   r   &docutils.parsers.rst.directives.imagesr   docutils.readersr   docutils.transformsr   r  pygments.lexerspygmentsformatterr   r   ImportErrorSyntaxErrorrj  r  r  WeakKeyDictionaryr   r  r]   typer   r   r  r  r  r	  r  r  r  r%  GENERATOR_DESCre  CONTENT_NAMESPACE_DICTr  rg  r9  rV  rW  rh  ri  r  rf  rU  rg  ra   rZ   rc   rv   r   r   r  r   r   r  r   r  r,   r"   r    <module>r     s,  
 #" %     	   	      '    ? ? 6 ' *? __&  $$&bjj$

,,	0 	 G$zz(#JJv	JJx 	$ ++ '  (A!>! 	
,! 
.	!
 <! ?! 	
G! <! 0! <! C! l! 
.! -! /!  L!!$ @%!& >'!( F><-+-65!  : >  	
,  
.	 
 <  ?  	
G  <  0  <  C  l  L  
.  -   /! " @# $ >% & F><+-   4 D$  & -<.+   fD 2 4	
 B E M B 6 B I L @ 4  3!" 5#$ F%& D'( LDB313<5 :D 2 4	
 B E M B 6 B I L @ 4  3!" 5#$ F%& D'( LDB1/ 6 J  3B 41 & D 1 $(tD   
$K K* )#%  2ZW^^ Z|s)E,, s)nSZ cj 	[! Hs   >K 
K K 