o
    Ni                 	   @   sz  d Z dZddlmZ ddlZddlmZ ddlZddlZddl	Z	ddl
Z	ddlmZ ddlZddlZddlZddlZddlZddlZddlmZ ddlmZ ddlZddlZdd	lmZmZmZmZmZ dd
lm Z  ddl!m"Z" ddl#m$Z$ zddl%Z%ddl&Z%ddl'm(Z(m)Z) W n e*e+fy   dZ%Y nw dZ,e- Z.e/ Z0e1ej2e3rej2Z4nej4Z4G dd de4Z5e6dZ7e6dZ8e6dZ9e6dZ:dZ;de; Z<dZ=dZ>dZ?i dddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/e?d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdC Z@ZAi dddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/e?d6d7d0d1d2d3d4d5d8d9d:d;d<d=d>d@dD ZBZCdEdFi ZDZEdd,e?d1d@dG ZFZGi dHddIddJd dKd"dLd$dMd&dNd(dOd*dPd,dQd.dRe?dSd7dTd1dUd3dVd5dWd9dXd;d<d=d>d?d@dAdBdYZHi dHddIddJd dKd"dLd$dMd&dNd(dOd*dPd,dQd.dRe?dSd7dTd1dUd3dVd5dWd9dXd;d<d=d>d@dZZId[dFiZJdd,e?d1d@d\ZKddeAfd]d^Z2ddeAfd_d`ZLdadb ZMeAfdcddZNdedf ZOdgdh ZPG didj djZQeQdkdlZRG dmdn dnZSG dodp dpejTZTG dqdr drejUZVG dsdt dte"jWZWdS )uz
Open Document Format (ODF) Writer.

This module is provisional:
the API is not settled and may change with any minor Docutils version.
reStructuredText    )ConfigParserN)StringIO)Path)ElementTree)minidom)frontendnodesutilswriters	languages)PIL)
standalone)
references   )OdtPygmentsProgFormatterOdtPygmentsLaTeXFormatterz1.0ac                   @   s&   e Zd ZdddZdd Zdd ZdS )	_ElementInterfaceWrapperNc                 C   s   t | || d t| < d S N)_ElementInterface__init___parents)selftagattrib r   U/home/ubuntu/.local/lib/python3.10/site-packages/docutils/writers/odf_odt/__init__.pyr   K   s   z!_ElementInterfaceWrapper.__init__c                 C   s   |t | < d S r   r   )r   parentr   r   r   	setparentO      z"_ElementInterfaceWrapper.setparentc                 C   s   t |  S r   r   r   r   r   r   	getparentR      z"_ElementInterfaceWrapper.getparentr   )__name__
__module____qualname__r   r   r"   r   r   r   r   r   J   s    
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)r9   r:   r;   r=   manifestz2urn:oasis:names:tc:opendocument:xmlns:manifest:1.0)r)   r0   r2   r3   r=   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)rG   rH   rI   rJ   zxmlns:manifest)rA   rB   rD   rE   rJ   c                 C   s&   |d u ri }t | ||\} }t| |S r   )fix_nsr   )r   r   nsmapnsdictr   r   r   Element   s   
rN   c                 C   s>   |d u ri }t |||\}}t||}| | ||  |S r   )rK   r   appendr   )r   r   r   rL   rM   elr   r   r   
SubElement  s   


rQ   c                 C   s>   t | |}i }t| D ]\}}t ||}|||< q||fS r   )add_nslistitems)r   r   rM   nstagnsattribkeyvalnskeyr   r   r   rK     s   


rK   c                 C   s   | S r   r   )r   rM   r   r   r   rR        rR   c                 C   s(   t  }| j|dd | }|  |S )Nunicodeencoding)r   writegetvalueclose)et	outstreams1r   r   r   ToString  s
   rd   c                 C   sb   |  dd} |  dd} |  dd} d}| D ]}t|tdkr*|d	t|f 7 }q||7 }q|S )
N&z&amp;<z&lt;>z&gt; z&#x%X;)replaceord)r;   asciicharr   r   r   escape_cdata"  s   
rn   c                   @   sJ   e Zd ZdddZdd Zdd ZeeeZdd	 Zd
d Z	eee	Z
dS )
TableStyleNc                 C   s   || _ || _d S r   )r'   backgroundcolor)r   r'   rp   r   r   r   r   5  s   
zTableStyle.__init__c                 C      | j S r   border_r!   r   r   r   get_border_9     zTableStyle.get_border_c                 C   
   || _ d S r   rr   )r   r'   r   r   r   set_border_<     
zTableStyle.set_border_c                 C   rq   r   backgroundcolor_r!   r   r   r   get_backgroundcolor_A  ru   zTableStyle.get_backgroundcolor_c                 C   rv   r   ry   )r   rp   r   r   r   set_backgroundcolor_D  rx   zTableStyle.set_backgroundcolor_NN)r$   r%   r&   r   rt   rw   propertyr'   r{   r|   rp   r   r   r   r   ro   4  s    

ro   z0.0007in solid #000000)r'   c                   @   sF   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dS )	ListLevelTc                 C   s   || _ || _|| _d S r   )levelsibling_levelnested_level)r   r   r   r   r   r   r   r   Q  s   
zListLevel.__init__c                 C   rv   r   r   )r   r   r   r   r   set_siblingV  rx   zListLevel.set_siblingc                 C   rq   r   r   r!   r   r   r   get_siblingY  ru   zListLevel.get_siblingc                 C   rv   r   r   )r   r   r   r   r   
set_nested\  rx   zListLevel.set_nestedc                 C   rq   r   r   r!   r   r   r   
get_nested_  ru   zListLevel.get_nestedc                 C   rv   r   r   )r   r   r   r   r   	set_levelb  rx   zListLevel.set_levelc                 C   rq   r   r   r!   r   r   r   	get_levele  ru   zListLevel.get_levelN)TT)
r$   r%   r&   r   r   r   r   r   r   r   r   r   r   r   r   P  s    
r   c                   @   sb  e Zd ZdZdZdZ	 de Zee	j
e	 de	j
e	j
eeZdZee	j
e	 de	j
e	j
eeZddd	e d
geddfddgddifddgdddejdfddgdddejdfddgddejdfddgddd ejdfd!d"gddd ejdfd#d$gd%dd&ejdfd'd(gd%dd&ejdfd)d*gddd+ejdfd,d-gddd+ejdfd.d/gddd0ejdfd1d2gddd0ejdfd3d4gdd5ejd6fd7d8gd%dd5ejdfd9d:gd;d<d=d>fd?d@gd;dAdBd>fffZdCdDiZdEZdFZdGZdHdI ZdJdK ZdLdM ZdNdO ZejfdPdQZ dRdS Z!dTdU Z"dVdW Z#dXdY Z$dZd[ Z%d\d] Z&d^d_ Z'dS )`Writerz'application/vnd.oasis.opendocument.textz.odt)odtstylesdummyztemplate.txtzODF-Specific Options.Nz$Specify a stylesheet.  Default: "%s"z--stylesheet
stylesheet)defaultdestz]Specify an ODF-specific configuration/mapping file relative to the current working directory.z--odf-config-filemetavarz<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-headerrh   custom_headerz<custom header>)r   r   r   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                 C   s   t j|  t| _d S r   )r   r   r   ODFTranslatortranslator_classr!   r   r   r   r     s   
zWriter.__init__c                 C   sV   | j j| _| | j | _| j| j | j | j | j  |   | j	d | _
d S )Nwhole)documentsettingsr   visitorretrieve_styles	EXTENSION	walkaboutadd_doc_titleassemble_my_partspartsoutputr!   r   r   r   	translate  s   

zWriter.translatec                 C   s  t j|  t }t|dtj}| j|d| j	tj
d | j }| |d| |  }| |d| |  }| |d| |  }d}d}| jjr| jjdd	}|d	}|d
  }|dd D ]}t|dkrv| rv| } n	t|dkr~ nqd|du rzt|}	W n ty   |}	Y nw |	d}	t|	dkr|	d d}	|	d
 }|du r| jjd | | j ||\}
}}|
rt |}| |d| | !| | "| |#  |$d
 |% }|#  || j&d< | jj'j(| j&d< t)j*| j&d< dS )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   r]   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_coderj   splitlowerlenisalphaupperlocale	normalize	NameErrorr   reporterwarningupdate_stylesheetget_dom_stylesheetetreetostringstore_embedded_filescopy_from_stylesheetr`   seekreadr   r   output_encodingdocutils__version__)r   fzfilecontentrc   r   region_codelanguage_idssubtagrcodeupdatednew_dom_stylesupdated_noder   r   r   r   r     sp   









zWriter.assemble_my_partsc                 C   s   d}t  }|dus|duro|d}|du rtd|d}|s%td|D ]G}|jd}	|	dks7|	d	krn|d
}
|
du rDtd|durY||
jd< ||
jd< d}||
 |durn||
jd< ||
jd< d}||
 q'|||fS )z@Update xml style sheet element with language and region/country.FNz8{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n3r   r   r   r   I  sj   


zWriter.update_stylesheetc                 C   s6   t t   }t||}d|_||_||| d S )Nl     H )time	localtimer   ZipInfoexternal_attrr   writestr)r   r   namebytesr   r   zinfor   r   r   r   {  s
   zWriter.write_zip_strc              	   C   s\   | j  }|D ]$\}}|d u rqz||| W q ty+   | jjd|f  Y qw d S )NzCan't open file %s.)r   get_embedded_file_listr^   OSErrorr   r   r   )r   r   embedded_filessourcedestinationr   r   r   r     s   
zWriter.store_embedded_filesc                 C   s*   | j j}t|d}|d}|  |S )z.
        modeled after get_stylesheet
        rsettings.xml)r   r   r   r   r   r`   )r   
stylespathr   rc   r   r   r   get_settings  s
   
zWriter.get_settingsc                 C   s
   | j  S )zXGet the stylesheet from the visitor.
        Ask the visitor to setup the page.
        )r   
setup_pager!   r   r   r   r     s   
zWriter.get_stylesheetc                 C   sj   | j j}t|d}|d}| |d| | }|D ]}|dr.||}||| q|	  dS )zLCopy images, settings, etc from the stylesheet doc into target doc.
        r  r  z	Pictures/N)
r   r   r   r   r   r   namelist
startswithr   r`   )r   
outzipfiler  	inzipfilerc   r
  r   imageobjr   r   r   r     s   


zWriter.copy_from_stylesheetc                 C      d S r   r   r!   r   r   r   r     rZ   zWriter.assemble_partsc                 C   s   t dttd}t|}t|d| jddtd t|ddddtd t|ddddtd t|ddd	dtd t|ddd
dtd t|}t	
|}|dS )Nzmanifest:manifestr   rM   zmanifest:file-entry/)zmanifest:media-typezmanifest:full-pathztext/xmlr   r   r  r   z  )rN   MANIFEST_NAMESPACE_ATTRIBMANIFEST_NAMESPACE_DICTr   r   rQ   r   MANNSDrd   r   parseStringtoprettyxml)r   rootdocrc   r   r   r   r     sN   


zWriter.create_manifestc                 C   s  t dttd}t|}t|dtd}t|dtd}dtf |_t	j
dd}t|d	td}||_td
t }t|dtd}||_t|dtd}||_t|dtd}||_t|dtd}d|_t|dtd}d|_t|dtd}d|_| j }t|dtd}|r||_nd|_| j  D ]I\}}|dkrtd|}	|	D ]}
t|dtd}|
|_qq|dkrt|dtd}||_q|dkrt|dtd}||_qt|dd|itd}||_qt|}|S )Nzoffice:document-metar  zoffice:metarM   zmeta:generatorzDocutils/rst2odf.py/%sUSERrh   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:titlez
[no title]keywordsz, *zmeta:keyworddescriptionzdc:descriptionsubjectz
dc:subjectzmeta:user-definedz	meta:name)rN   META_NAMESPACE_ATTRIBMETA_NAMESPACE_DICTr   r   rQ   METNSDVERSIONr;   osenvironr   r   strftimer   r   	get_titleget_meta_dictrT   rer   rd   )r   r  r  el1rc   s2titlepropvaluer  keywordr   r   r   r     sb   

zWriter.create_meta)(r$   r%   r&   r   r   	supporteddefault_stylesheetr
   relative_pathr%  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   r  r   r   r   r   r   r   r   r   r   r   i  sJ   r	E3
	
r   c                   @   s	  e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd ZdddZdd Zdd Zdd Zdd Zdd Zeed\ZZZed Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Z d/d0 Z!d1d2 Z"d3d4 Z#d5d6 Z$dd8d9Z%dd:d;Z&d<d= Z'd>d? Z(d@dA Z)dBdC Z*dDdE Z+dFdG Z,dHdI Z-dJdK Z.dLdM Z/dNdO Z0dPdQ Z1dRdS Z2dTdU Z3dVdW Z4dXdY Z5dZd[ Z6d\d] Z7d^d_ Z8d`da Z9dbdc Z:ddde Z;dfdg Z<dhdi Z=djdk Z>dldm Z?dndo Z@dpdq ZAdrds ZBdtdu ZCdvdw ZDdxdy ZEdzd{ ZFd|d} ZGd~d ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd ZiddÄ Zjddń ZkddǄ ZlddɄ Zmdd˄ Zndd̈́ Zoddτ Zpddф Zqddӄ ZrddՄ Zsddׄ Ztddل Zuddۄ Zvdd݄ Zwdd߄ Zxdd Zydd Zzg dZ{dd Z|dd Z}dd Z~dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zdd Zdd Zdd Zdd Zd	d
 Z	7dddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 ZeZeZd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Zd=d> Zd?d@ ZdAdB ZdCdD ZdEdF ZdGdH ZdIdJ ZdKdL ZdMdN ZdOdP ZdQdR ZdSdT ZdUdV ZdWdX ZdYdZ Zd[d\ Zd]d^ Zd_d` Zdadb Zdcdd Zdedf Zdgdh Zdidj Zdkdl ZddndoZdpdq ZÐdrds ZĐdtdu ZŐdvdw ZƐdxdy Zǐdzd{ ZȐd|d} Zɐd~d Zʐdd Zːdd Z̐dd Z͐dd Zΐdd Zϐdd ZАdd Zѐdd ZҐdd ZӐdd ZԐdd ZՐdd Z֐dd Zאdd Zؐdd Zِdd ZڐdddZېdd ZܐdddZݐdd Zސdd Zߐdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdÐdĄ ZeZdŐdƄ ZeZdǐdȄ ZeZdɐdʄ ZeZdːd̄ ZeZd͐d΄ ZeZdϐdЄ ZeZdѐd҄ ZeZdӐdԄ ZeZddՐdքZdאd؄ Zdِdڄ Z dېd܄ Zdݐdބ Zdߐd Zdd Zdd Zdd Zdd Zdd Zd7S (  r   )[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tocenumlistr-  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                 C   s  t j| | |j| _| jj| _t| j|j| _i | _	| jj
rHt }|| jj
 |dD ]\}}|| jvrB| jjd|f  || j	|< q/d| _d| _tdtd}tj|d| _|| _t|d t|d t|d	}|| _t|d
}| |}|| _|| _| dg| _g | _d| _ t!dd | _"d| _#d| _$d | _%d | _&d | _'d| _(d| _)i | _*g | _+d| _,d| _-g | _.g | _/d| _0d| _1d| _2d| _3d | _4d| _5d| _6i | _7g | _8d| _9d| _:g | _;d| _<d| _=g | _>i | _?d| _@d| _Ad | _Bd| _Cd| _Dd| _Ed | _Fd | _Gd| _Hg | _Id S )NFormatsz,Style "%s" is not a style used by odtwriter.r   zoffice:document-contentr   )elementzoffice:scriptszoffice:font-face-declszoffice:automatic-styleszoffice:bodyrh  Ar   Fpythonrh   )Jr	   GenericNodeVisitorr   r   r   r   get_languager   language
format_mapr   r   r   rT   used_stylesr   r   section_levelsection_countrN   CONTENT_NAMESPACE_ATTRIBr   r   content_treecurrent_elementrQ   automatic_stylesgenerate_content_elementbody_text_elementrststyleparagraph_style_stacklist_style_stacktable_countrk   column_counttrace_leveloptiontablestyles_generated
field_namefield_elementr-  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  formatr  rP   r   r   r   r   D  s   







zODFTranslator.__init__c                 C   rq   r   )r  r!   r   r   r   get_str_stylesheet  ru   z ODFTranslator.get_str_stylesheetc                 C   s   d}| j j}tj|d }|dkr.t|ddd}| }W d   n1 s(w   Y  n!||krGt|d}|d}|d}|	  nt
d	||f || _|| _t| j| _t| j| _| || _dS )
z|Retrieve the stylesheet from either a .xml file or from
        a .odt (zip) file.  Return the content as a string.
        Nr   z.xmlr  utf-8r\   r   r   z,stylesheet path (%s) must be %s or .xml file)r   r   r%  r4  splitextopenr   r   r   r`   r   r  r  r   
fromstringr  dom_stylesheetcontentextract_table_stylesr  )r   	extensionr,  r  ext
stylesfilerc   r   r   r   r   r     s.   



zODFTranslator.retrieve_stylesc                 C   s  t |}i }|dtd f }|D ]u}|dtd f }|dd }|dtd f }|tr||}	|	d u rEt }	|	||< |dkrj|d	td f }
|
d
td df }|d uri|dkri||	_	q|dkr|dtd f }
|
d ur| 
|
}|d ur||	_q|S )N{%s}automatic-stylesr2   {%s}namer8   r   r   z
{%s}familyr:   z{%s}table-properties{%s}%sr-   zbackground-colornone
table-cellz{%s}table-cell-properties)r   r  r   CNSDr   r   r  TABLESTYLEPREFIXro   rp   get_propertyr'   )r   
styles_strr  r  auto_styles	stylenoder   	tablenamer   
tablestyle
propertiesr~   r'   r   r   r   r    sD   



z"ODFTranslator.extract_table_stylesc                 C   s@   d }t D ]}|dtd |f }|d ur|dkr|  S q|S )Nr  r-   r  )TABLEPROPERTYNAMESr   r  )r   r  r'   propertynamer   r   r   r    s   zODFTranslator.get_propertyc                 C   sh   | j j}|r!|| _| js!tdd| did}||_| jd| | | j}|d ur2| 	| d S d S )Ntext:ptext:style-namer-  r}  r   )
r   r-  r  rN   r  r;   r  insertfind_first_text_pattach_page_style)r   r;   rP   r   r   r   r     s   
zODFTranslator.add_doc_titlec                 C   s@   |j dks
|j dkr|S |D ]}| |}|dur|  S qdS )zHSearch the generated doc and return the first <text:p> element.
        r  text:hN)r   r  )r   rP   childr+  r   r   r   r    s   
zODFTranslator.find_first_text_pc                 C   sH   | d}d}t| jd|dddtd}|r|d| |d| d	S )
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:familyr  style:parent-style-nameN)r   rQ   r  SNSDr   )r   rP   current_style
style_namer+  r   r   r   r    s   
zODFTranslator.attach_page_styler   c                 C   s   || }| j |d| S )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   r   
parametersname1r   r   r   r    s   zODFTranslator.rststylec                 C   s
   t |dS )Nzoffice:text)rQ   )r   r  r   r   r   r    rx   z&ODFTranslator.generate_content_elementc                 C   sP   |  | j t| jdkst| jdks| jjs| jjr"| | j t	
| jS Nr   )setup_paperr  r   r  r  r   r   r   add_header_footerr   r   r!   r   r   r   r	    s   zODFTranslator.setup_pagec                 C   rq   r   )r  r!   r   r   r   r     ru   z ODFTranslator.get_dom_stylesheetc              
      sx   zt jdt jd}dd | D \ W n t jttfy-   | jj	d d\ Y nw  fdd| d S )	N)	paperconfz-s)stderrc                 s   s    | ]}t |V  qd S r   )float).0sr   r   r   	<genexpr>$  s    z,ODFTranslator.setup_paper.<locals>.<genexpr>z-Cannot use `paperconf`, defaulting to Letter.)id  i  c                    s   | j dtd  krVdtd  | jvrVd | jdtd  < d  | jdtd  < dd   | jdtd  < | jd	td  < dd    | jd
td  < | jdtd  < d S | D ]}| qXd S )Nz{%s}page-layout-propertiesr8   z{%s}page-widthr-   z%.3fptz{%s}page-height皙?z{%s}margin-leftz{%s}margin-rightz{%s}margin-topz{%s}margin-bottom)r   r  r   )rP   subelhr   walkr   r   r  *  s   


z'ODFTranslator.setup_paper.<locals>.walk)

subprocesscheck_outputSTDOUTr   CalledProcessErrorFileNotFoundError
ValueErrorr   r   info)r   root_el
dimensionsr   r  r   r    s   zODFTranslator.setup_paperc                 C   sz  | dtd  }dtf }| |}|d u rd S dtd f }||}d }dtd f }| d}|D ]}|||krB|} nq5|d u rId S |}	| jsR| jjrt	|	dt
td	}
| jD ]}td
td}| d|j|< |
| q]| jjr| |
| jjd| | js| jjrt	|	dt
td	}
| jD ]}td
td}| d|j|< |
| q| jjr| |
| jjd| d S d S d S )Nr  r2   z{%s}master-stylesz{%s}master-pager8   r  pagedefaultzstyle:headerr  r  r  r\  zstyle:footerrY  )r   r  NAME_SPACE_1r   r  r   r  r   r   rQ   STYLES_NAMESPACE_ATTRIBSTYLES_NAMESPACE_DICTrR   r   rO   create_custom_headfootr  r   )r   r  r  r4  	master_elmaster_el_containertarget_attribtarget_namerP   r+  el2attrkeyr   r   r   r  :  sh   









zODFTranslator.add_header_footer   z%(..?)%c           
      C   s   t |dd| |id}d }| |}|D ]E}|d tjkrK|d dvr/d|d f }t|| ||d ||}	|	d u rHd|d f }t||	}q|d u rU|d |_q|d |_qd S )Nr  r  r}  r   r   )pPt1t2t3t4d1d2d3d4d5r  tazbad field spec: %%%s%%)	rQ   r  split_field_specifiers_iterr   
code_fieldr   make_field_elementr;   tail)
r   r   r;   r  r  r  
field_iteritemmsgr+  r   r   r   r  m  s,   


z$ODFTranslator.create_custom_headfootc                 C   s   |dkrt |dddid}|S |dkrt |di d}|S |dkrf|  jd	7  _t |d
| |dd| j dd}t |dd| j td td dd}t |dddid}t |d}d|_t |dddid}|S |dkr|  jd	7  _t |d
| |dd| j dd}t |dd| j td td dd}t |dddid}t |d}d|_t |dddid}t |d}d|_t |dddid}|S |dkr|  jd	7  _t |d
| |dd| j dd}t |dd| j td td dd}t |dddid}t |d}d|_t |dddid}t |d}d|_t |d}|S |dkr|  jd	7  _t |d
| |dd| j dd}t |dd| j td td dd}t |dddid}t |d}d|_t |dddid}t |d}d|_t |dddid}t |d}d|_t |d}|S |dkr|  jd	7  _t |d| |d | j d!d}t |d"d | j dtd td d#d}t |d$ddid}t |d}d%|_t |d&ddid}t |d}d%|_t |d'}|S |d(kr6|  jd	7  _t |d| |d | j d!d}t |d"d | j dtd td d#d}t |d$ddid}t |d}d%|_t |d&ddid}t |d}d%|_t |d'ddid}|S |d)kr|  jd	7  _t |d| |d | j d!d}t |d"d | j dtd td d#d}t |d$d*did}t |d}d|_t |d&i d}t |d}d+|_t |d'ddid}|S |d,kr|  jd	7  _t |d| |d | j d!d}t |d"d | j dtd td d#d}t |d$ddd-d}t |d}d|_t |d&i d}t |d}d+|_t |d'ddid}|S |d.krF|  jd	7  _t |d| |d | j d!d}t |d"d | j td td dd}t |d'ddid}t |d}d/|_t |d$ddid}t |d}d/|_t |d&ddid}|S |d0krYt |d1d2| |id}|S |d3krlt |d4d2| |id}|S |d5kr|t |d6d7d8id}|S d }|S )9Nr
  ztext:page-numberztext:select-pagecurrentr}  r  ztext:page-countr  r   z	text:timetruezrst-time-style-%d)r  
text:fixedstyle:data-style-nameznumber:time-styler1   r8   )r  rC   rF   znumber:hoursnumber:stylelongznumber:text:znumber:minutesr  znumber:secondsr   znumber:am-pmr  r  z	text:datezrst-date-style-%d)r  r!  znumber:date-style)r  znumber:automatic-orderrC   rF   znumber:monthr  z
number:dayznumber:yearr  r  number:textualz, r  )r&  r"  r  r   r  ztext:subjectr  r  z
text:titler  ztext:author-namer   false)rQ   r  r  r  r;   )r   r   r;   r  r  r+  r  el3r   r   r   r    s
   w  r 


 ] 



 C 





 ) 






  





s




[




C





*








	
z ODFTranslator.make_field_elementc                 c   s    d}	 t j||}|r-| }||krt j||| fV  t j|dfV  | }nnq||d  }|r?t j|fV  d S d S )Nr   Tr   )r   	field_patsearchstart	code_textr  groupend)r   r;   pos1mopos2trailingr   r   r   r    s    

z)ODFTranslator.split_field_specifiers_iterc                 C   s   | j  }t|}t|S r   )r  getrootr   r   rd   )r   r  ra   r   r   r   astext  s   

zODFTranslator.astextc                 C   s   |   S r   )r4  r!   r   r   r   r     r#   zODFTranslator.content_astextc                 C   rv   r   r-  )r   r-  r   r   r   	set_title  rx   zODFTranslator.set_titlec                 C   rq   r   r5  r!   r   r   r   r(    ru   zODFTranslator.get_titlec                 C   rv   r   r  )r   r  r   r   r   set_embedded_file_list  rx   z$ODFTranslator.set_embedded_file_listc                 C   rq   r   r7  r!   r   r   r   r     ru   z$ODFTranslator.get_embedded_file_listc                 C   rq   r   )r  r!   r   r   r   r)    ru   zODFTranslator.get_meta_dictc                 C   s  | j D ]\}}|jdg }d}|D ]u}| j|}|d ur|r-d}t|}|| qt|dkr|d }|j}	t	dt
d}
||
d}|d u rLd}t	d	t
d}||_| jjr\d
}nd}|j  t	dt
d}
||j|
< t	dt
d}
||j|
< t	dt
d}
d|j|
< |	|_qqd S )NbackrefsTFr   text:idr  zfootnote-errorrh   ztext:note-refendnoterZ  text:note-classtext:ref-nametext:reference-formatpage)r  
attributesr   r  copydeepcopyrO   r   r;   rR   r  r   r   r   r   clear)r   r   r+  r9  firstrefr  r(  r  ref1	attribkeyid1r   
note_classr   r   r   process_footnotes  sF   




zODFTranslator.process_footnotesNc                 C   s   |d u r| j }t|||S r   )r  rQ   )r   r   r   r   r   r   r   append_child  s   zODFTranslator.append_childc                 C   s4   | j dd| |id}| | |d ur||_|S )Nr  r  r}  )rK  r  append_pending_idsr;   )r   r8   r;   resultr   r   r   append_p  s   

zODFTranslator.append_pc                 C   s0   | j jr| jD ]}t|dd|id qg | _d S )Nztext:reference-mark	text:namer}  )r   r   r  rQ   )r   rP   idr   r   r   rL    s   


z ODFTranslator.append_pending_idsc                 C   rv   r   )r  )r   rP   r   r   r   set_current_element  rx   z!ODFTranslator.set_current_elementc                 C   s   | j  | _ d S r   )r  r"   r!   r   r   r   set_to_parent     zODFTranslator.set_to_parentc                 C   sD   d| j j| f }| d}t|dd| did}||_| dS )N%s:rh  	text:spanr  rf  r}  rD  r  labelsrN  rQ   r  r;   r   r   labelrP   r+  r   r   r   generate_labeled_block  s   

z$ODFTranslator.generate_labeled_blockc                 C   sH   d| j j| f }| d}t|dd| did}||_| |_|S )NrT  rh  rU  r  rf  r}  )r  rW  rN  rQ   r  r;   r4  r  rX  r   r   r   generate_labeled_line  s   

z#ODFTranslator.generate_labeled_linec                 C   s   | ddS )N
r%  )rj   )r   r;   r   r   r   encode  r    zODFTranslator.encodec                 C   s   |  | tj| | dS )z9Override to catch basic attributes which many nodes have.N)handle_basic_attsr	   r  dispatch_visitr   r   r   r   r   r_  	  s   
zODFTranslator.dispatch_visitc                 C   s2   t |tjr|d r|  j|d 7  _d S d S d S )Nids)
isinstancer	   rN   r  r`  r   r   r   r^    s   zODFTranslator.handle_basic_attsc                 C      | j jd|jf  d S )Nzmissing visit_%sr   r   r   tagnamer`  r   r   r   default_visit     zODFTranslator.default_visitc                 C   rc  )Nzmissing depart_%srd  r`  r   r   r   default_departure  rg  zODFTranslator.default_departurec                 C   s   t |jtjjr
d S | }t| jdkr/| jd jr'| jd  j|7  _d S || jd _d S | jj	r=| j j	|7  _	d S || j_	d S )Nr   r  )
rb  r   r   r	   literal_blockr4  r   r  r  r;   )r   r   r;   r   r   r   
visit_Text  s   zODFTranslator.visit_Textc                 C   r  r   r   r`  r   r   r   depart_Text*  rZ   zODFTranslator.depart_Textc                 C      |  |d}| | d S )NaddressrZ  rQ  r   r   rP   r   r   r   visit_address1     zODFTranslator.visit_addressc                 C      |    d S r   rR  r`  r   r   r   depart_address5  r    zODFTranslator.depart_addressc                 C   s4   t |jtjr| d}n| |d}| | d S )NrD  author)rb  r   r	   authorsrN  rZ  rQ  ro  r   r   r   visit_author8  s   zODFTranslator.visit_authorc                 C   rr  r   rs  r`  r   r   r   depart_author?  r    zODFTranslator.depart_authorc                 C   s>   d| j jd f }| d}t|dd| did}||_d S )NrT  rv  rh  rU  r  rf  r}  rV  rX  r   r   r   visit_authorsB  s   

zODFTranslator.visit_authorsc                 C   r  r   r   r`  r   r   r   depart_authorsJ  rZ   zODFTranslator.depart_authorsc                 C   rl  )Ncontactrn  ro  r   r   r   visit_contactM  rq  zODFTranslator.visit_contactc                 C   rr  r   rs  r`  r   r   r   depart_contactQ  r    zODFTranslator.depart_contactc                 C   rl  )N	copyrightrn  ro  r   r   r   visit_copyrightT  rq  zODFTranslator.visit_copyrightc                 C   rr  r   rs  r`  r   r   r   depart_copyrightX  r    zODFTranslator.depart_copyrightc                 C      |  |d d S )Ndater[  r`  r   r   r   
visit_date[  rS  zODFTranslator.visit_datec                 C   r  r   r   r`  r   r   r   depart_date^  rZ   zODFTranslator.depart_datec                 C   rl  )Norganizationrn  ro  r   r   r   visit_organizationa  rq  z ODFTranslator.visit_organizationc                 C   rr  r   rs  r`  r   r   r   depart_organizatione  r    z!ODFTranslator.depart_organizationc                 C   rl  )Nstatusrn  ro  r   r   r   visit_statush  rq  zODFTranslator.visit_statusc                 C   rr  r   rs  r`  r   r   r   depart_statusl  r    zODFTranslator.depart_statusc                 C   r  )Nrevisionr  r`  r   r   r   visit_revisiono  rS  zODFTranslator.visit_revisionc                 C   r  r   r   r`  r   r   r   depart_revisionr  rZ   zODFTranslator.depart_revisionc                 C   r  )Nr   r  r`  r   r   r   visit_versionu  rS  zODFTranslator.visit_versionc                 C   r  r   r   r`  r   r   r   depart_versiony     zODFTranslator.depart_versionc                 C   s   |  d|  d S )NrC  )rN  r4  r`  r   r   r   visit_attribution}     zODFTranslator.visit_attributionc                 C   r  r   r   r`  r   r   r   depart_attribution  rZ   z ODFTranslator.depart_attributionc                 C   s   d|j d v r| j| d | d| _n&d|j d v r.| j| d | d| _n| j| d | d| _|  jd7  _d S )NrT  classesr]  rE  r   )r@  r  rO   r  r  r  r`  r   r   r   visit_block_quote  s   zODFTranslator.visit_block_quotec                 C   s"   | j   d| _|  jd8  _d S )Nrh   r   )r  popr  r  r`  r   r   r   depart_block_quote  s   
z ODFTranslator.depart_block_quotec                 C   s  |  j d7  _ | jrO| jjrd S d|v r2d|jd v r2t| jdd| did}| j	| d nt| jdd| d	id}| j	| d
 | 
| d S | j| dkrnt| jdd| did}| j	| d nT| j| dkrt| jdd| did}| j	| d n5| j| dkrt| jdd| did}| j	| d nt| jdd| did}| j	| d
 | 
| d S )Nr   r  zauto-toc	text:listr  rj  r}  rR  ri  rJ  rE  rG  rF  r]  r_  r^  rT  rV  rU  rK  )r  r  r   r   r@  rQ   r  r  r  rO   rQ  r  ro  r   r   r   visit_bullet_list  sR   





zODFTranslator.visit_bullet_listc                 C   sH   | j r| jjrn|   | j  n	|   | j  |  jd8  _d S Nr   )r  r   r   rR  r  r  r  r`  r   r   r   depart_bullet_list  s   
z ODFTranslator.depart_bullet_listc                 C      t  r   r	   SkipChildrenr`  r   r   r   visit_caption  r#   zODFTranslator.visit_captionc                 C   r  r   r   r`  r   r   r   depart_caption  rZ   zODFTranslator.depart_captionc                 C   sV   |  d}t|di d}t|di d}tjdd}||_t|di d}| |_d S )Nrh  zoffice:annotationr}  r  r  rh   r  )rN  rQ   r%  r&  r   r;   r4  )r   r   rP   r+  r  rc   r   r   r   visit_comment  s   
zODFTranslator.visit_commentc                 C   r  r   r   r`  r   r   r   depart_comment  rZ   zODFTranslator.depart_commentc                 C   r  r   r   r`  r   r   r   visit_compound  r  zODFTranslator.visit_compoundc                 C   r  r   r   r`  r   r   r   depart_compound  rZ   zODFTranslator.depart_compoundc                 C   s8   |j dd}t|dkr| j| |d  d S d S Nr  r   r   )r@  r   r   r  rO   r  r   r   r   r   r   r   visit_container  s   zODFTranslator.visit_containerc                 C   s,   |j dd}t|dkr| j  d S d S r  )r@  r   r   r  r  r  r   r   r   depart_container  s   zODFTranslator.depart_containerc                 C   r  r   r   r`  r   r   r   visit_decoration  rZ   zODFTranslator.visit_decorationc                 C   r  r   r   r`  r   r   r   depart_decoration  rZ   zODFTranslator.depart_decorationc                 C   s$   |  j d7  _ | jdkrtdd S )Nr      z*max definition list nesting level exceeded)r  r  r   r`  r   r   r   visit_definition_list  s   
z#ODFTranslator.visit_definition_listc                 C   s   |  j d8  _ d S r  )r  r`  r   r   r   depart_definition_list     z$ODFTranslator.depart_definition_listc                 C   r  r   r   r`  r   r   r   visit_definition_list_item  rZ   z(ODFTranslator.visit_definition_list_itemc                 C   r  r   r   r`  r   r   r   depart_definition_list_item  rZ   z)ODFTranslator.depart_definition_list_itemc                 C   s,   |  d| j }| |_| | t )Nzdeflist-term-%d)rN  r  r4  r;   rQ  r	   r  ro  r   r   r   
visit_term  s   

zODFTranslator.visit_termc                 C   rr  r   rs  r`  r   r   r   depart_term
  r    zODFTranslator.depart_termc                 C   s,   | j | d| j  | jtd d S )Nzdeflist-def-%dr   )r  rO   r  r  r  r   r`  r   r   r   visit_definition  s   zODFTranslator.visit_definitionc                 C   s   | j   | j  d S r   )r  r  r  r`  r   r   r   depart_definition     
zODFTranslator.depart_definitionc                 C   sH   t | jdkr"| jd }t|dd| did}d| f |_d S d S )Nr   r  rU  r  rQ  r}  z (%s))r   r  rQ   r  r4  r;   r   r   rP   r+  r   r   r   visit_classifier  s   
zODFTranslator.visit_classifierc                 C   r  r   r   r`  r   r   r   depart_classifier  rZ   zODFTranslator.depart_classifierc                 C   r  r   r   r`  r   r   r   visit_document!  rZ   zODFTranslator.visit_documentc                 C   rr  r   )rJ  r`  r   r   r   depart_document$  r    zODFTranslator.depart_documentc                 C   sV   |  j d7  _ |  jd7  _| jjr)| jdd| j d| j  dd}| | d S d S Nr   ztext:sectionz	Section%dzSect%d)rO  r  r}  r  r  r   r   rK  rQ  ro  r   r   r   visit_docinfo'  s   zODFTranslator.visit_docinfoc                 C   &   |  j d8  _ | jjr|   d S d S r  r  r   r   rR  r`  r   r   r   depart_docinfo3     zODFTranslator.depart_docinfoc                 C   (   t | jdd| did}| | d S )NrU  r  rQ  r}  rQ   r  r  rQ  ro  r   r   r   visit_emphasis8  
   zODFTranslator.visit_emphasisc                 C   rr  r   rs  r`  r   r   r   depart_emphasis>  r    zODFTranslator.depart_emphasisc                 C   s  | j }| j| dkr!t|dd| did}| j| d nZ| j| dkr?t|dd| did}| j| d	 n<| j| d
kr]t|dd| did}| j| d nd|ddf }t|dd| |id}| j| d | | d S )NrE  r  r  rI  r}  rH  r]  ra  r`  rT  rX  rW  zenumlist-%senumtypearabicrR  )r  r  r  rQ   r  rO   r   rQ  )r   r   r+  r  liststylenamer   r   r   visit_enumerated_listA  s,   



z#ODFTranslator.visit_enumerated_listc                 C   s   |    | j  d S r   )rR  r  r  r`  r   r   r   depart_enumerated_listZ  s   z$ODFTranslator.depart_enumerated_listc                 C   s   | j r"| jjr| j| d| jf  d S | d}| | d S | d}|}t	| j
dkr[| j
d }| r[|d | j
D ]}t| D ]}| jd|d}| jd|d}qIqA| j| jd  | | d S )Ncontents-%dztext:list-itemr   r  Fr  )r   )r  r   r   r  rO   r  r  rK  rQ  r   r  r   r   ranger   r  )r   r   r+  r(  	level_obj
level_obj1idxr  r   r   r   visit_list_item^  s,   




zODFTranslator.visit_list_itemc                 C   s   | j r| jjr| j  d S |   d S t| jdkr@| jd }| r@|	d | jD ]}t
| D ]
}|   |   q4q,| j  |   d S )Nr   r  T)r  r   r   r  r  rR  r   r  r   r   r  r   )r   r   r  r  r  r   r   r   depart_list_itemx  s   




zODFTranslator.depart_list_itemc                 C   
   d| _ d S NTr  r`  r   r   r   visit_header  rx   zODFTranslator.visit_headerc                 C   r  NFr  r`  r   r   r   depart_header  rx   zODFTranslator.depart_headerc                 C   r  r  r  r`  r   r   r   visit_footer  rx   zODFTranslator.visit_footerc                 C   r  r  r  r`  r   r   r   depart_footer  rx   zODFTranslator.depart_footerc                 C   r  r   r   r`  r   r   r   visit_field  rZ   zODFTranslator.visit_fieldc                 C   r  r   r   r`  r   r   r   depart_field  rZ   zODFTranslator.depart_fieldc                 C   r  r   r   r`  r   r   r   visit_field_list  rZ   zODFTranslator.visit_field_listc                 C   r  r   r   r`  r   r   r   depart_field_list  rZ   zODFTranslator.depart_field_listc                 C   s0   |  d}t|dd| did}| |_d S )Nrh  rU  r  rf  r}  )rN  rQ   r  r4  r;   r  r   r   r   visit_field_name  s   
zODFTranslator.visit_field_namec                 C   r  r   r   r`  r   r   r   depart_field_name  rZ   zODFTranslator.depart_field_namec                 C   s   | j | d d S )NrD  )r  rO   r  r`  r   r   r   visit_field_body  s   zODFTranslator.visit_field_bodyc                 C      | j   d S r   r  r  r`  r   r   r   depart_field_body     zODFTranslator.depart_field_bodyc                 C   r  r   r   r`  r   r   r   visit_figure  rZ   zODFTranslator.visit_figurec                 C   r  r   r   r`  r   r   r   depart_figure  rZ   zODFTranslator.depart_figurec                 C   sn   |  j d7  _ | j| _td}|| _| j||f t|tjj	r,| j
| d d S | j
| d d S )Nr   ztext:note-bodyr[  rZ  )r  r  save_footnote_currentrN   r  rO   rb  r   r	   r[  r  r  r   r   r+  r   r   r   visit_footnote  s   zODFTranslator.visit_footnotec                 C   s$   | j   | j| _|  jd8  _d S r  )r  r  r  r  r  r`  r   r   r   depart_footnote  s   
zODFTranslator.depart_footnote)	*z**z***z++z+++z##z###z@@z@@@c           
      C   s.  | j dkr|jd d }|jd}|d u rd}| jjrd}nd}| jdd|f |d	d
}t|jdd}t|tj	j
rQd|  }t|dd|id
}||_n=|dkrft|dd| id
}| |_n(|dkr| jttjkrud| _tj| j }	|  jd7  _t|dd|	id
}|	|_|| j|< t	 )Nr   ra  refidrh   r;  rZ  z	text:note%s)r:  r<  r}  autor   z[%s]ztext:note-citationz
text:labelr  r  )r  r@  r   r   r   rK  strrb  r   r	   citation_referencer4  rQ   r;   r  r   r   footnote_charsr  r  )
r   r   rP  r  rI  r+  	note_autor[  r  footnote_charr   r   r   visit_footnote_reference  sN   


z&ODFTranslator.visit_footnote_referencec                 C   r  r   r   r`  r   r   r   depart_footnote_reference  rZ   z'ODFTranslator.depart_footnote_referencec                 C   sB   d| _ |jd D ]}|| _ | j| d | jtd d S )NTra  rD  r   )r  r@  r  r  rO   r  r  r   )r   r   rP  r   r   r   visit_citation  s   zODFTranslator.visit_citationc                 C   s$   d | _ | j  | j  d| _d S r  )r  r  r  r  r  r`  r   r   r   depart_citation  s   


zODFTranslator.depart_citationc                 C   sl   | j jr |jd }| jdd|f ddd}d|_| | d S | jjd u r,d| j_d S | j jd7  _d S )Nr  text:reference-refr  r;   r=  r>  r}  [)r   r   r@  rK  r;   rQ  r  )r   r   rP  rP   r   r   r   visit_citation_reference  s   

z&ODFTranslator.visit_citation_referencec                 C   s(   | j  jd7  _| jjr|   d S d S )N])r  r;   r   r   rR  r`  r   r   r   depart_citation_reference  s   z'ODFTranslator.depart_citation_referencec                 C   sz   t |jtjjrt | jd ur;| d}| | | j	j
r6t|d}d|_| jddd| jf id d S d|_d S d S )Nrh  rU  r  ztext:reference-mark-startrO  r  r}  )rb  r   r   r	   rZ  r  r  rN  rQ  r   r   rQ   r;   rK  )r   r   rP   el0r   r   r   visit_label  s   




zODFTranslator.visit_labelc                 C   st   t |jtjjr
d S | jd ur8| jjr*| jddd| jf id t	| j
d}d|_n| j
 jd7  _|   d S d S )Nztext:reference-mark-endrO  r  r}  rU  r  )rb  r   r   r	   rZ  r  r   r   rK  rQ   r  r;   rR  )r   r   r  r   r   r   depart_label*  s   
zODFTranslator.depart_labelc                 C   r  r   r   r`  r   r   r   visit_generated8  rZ   zODFTranslator.visit_generatedc                 C   r  r   r   r`  r   r   r   depart_generated;  rZ   zODFTranslator.depart_generatedc                 C   s   t j|rdS dS )Nr   r   )r%  r4  exists)r   r4  r   r   r   check_file_exists>  s   zODFTranslator.check_file_existsc              
   C   s  |d }t j|}|jdv rVt j|j}|dr,t| jj	}||dd   
 }nt|\}}|rDtj|}|rDtj||}| |sV| jjd| d d S || jv rc| j| \}}	n|  jd7  _tj|d }d| j|f }	|jdv rtj||	f}
nbzt j|}| }W d    n1 sw   Y  W n" t jjy } z| jjd| d	|  W Y d }~d S d }~ww tjd
dd}|| W d    n1 sw   Y  |j }||	f}
| j!"|
 ||	f| j|< | j#r| j$}nt%| j$dd| &did}|}t'|j(t)j*j+r:| ,|||	|\}}}}i }| -|||	||\}}|d ur8||_.d S d S | -|||	| d S )Nuri)rh   filer  r   zCannot find image file "z".zPictures/1%08x%szCannot open image URL "z". wbF)deleter  r  rh  r}  )/urllibparseurlparseschemeunquoter4  r  r   r   root_prefixas_posixr
   get_source_liner%  r7  r5  r  r   r   r   r  r  r   abspathrequesturlopenr   errorURLErrorr   r   r^   r   r  rO   r  r  rQ   r  rb  r   r   r	   figuregenerate_figuregenerate_imager  )r   r   r  	uri_partsr  	docsourceliner7  filenamer  specimgfiler   errimgfile2r+  r  r(  el4el5rL  r   el6widthr   r   r   visit_imageD  s   








zODFTranslator.visit_imagec                 C   r  r   r   r`  r   r   r   depart_image  rZ   zODFTranslator.depart_imagec              
   C   s   d }d }||j v rc|j | }| }z,|dr.|dkr td|d}t|d }d}n| |\}}W ||fS W ||fS  tyb } z| jj	d||j | |f  W Y d }~||fS d }~ww ||fS )N%heightz!percentage not allowed for heightz %g      Y@z)Invalid %s for image: "%s".  Error: "%s".)
r@  stripendswithr  rstripr  convert_to_cmr   r   r   )r   r   attrsizeunitexpr   r   r   get_image_width_height  s6   



z$ODFTranslator.get_image_width_heightc                 C   s   |  }|drt|dd d }nR|dr$t|dd d }nB|dr4t|dd d }n2|d	rDt|dd d
 }n"|drTt|dd d }n|drbt|dd }ntdd}||fS )zConvert various units to centimeters.

        Note that a call to this method should be wrapped in:
            try: except ValueError:
        pxN9v?ingRQ@ptgQ?pcg+@mmr  cmzunknown unit type)r,  r-  r  r  )r   r1  r2  r   r   r   r/    s    





zODFTranslator.convert_to_cmc                 C   s   d|j v r=|j d }zt|}W n ty&   | jjd|j d f  Y nw |dk r7| jjd|f  d}|d }|S d}|S )NscalezInvalid scale for image: "%s"r   z!scale out of range (%s), using 1.g{Gz?g      ?)r@  intr  r   r   r   )r   r   r=  r   r   r   get_image_scale  s(   

zODFTranslator.get_image_scalec                 C   s  |  |}| |d\}}| |d\}}d}tdur\|| jv r\| j| \}	}
tj|	d}|j}|jd|}W d   n1 sCw   Y  zt	| W n t
y[   ||f}Y nw d}|du sf|du r|du rntd|du r||d }t|d	 }|du r|d
 }t|d	 }|dkr|}|d }t|d	 }|d
 }t|d	 }|  }|| }|| | }|| }||9 }||9 }d| }d| }||fS )z=Return the image size in centimeters adjusted by image attrs.r'  r+  )H   r@  Nr  dpiz4image size not fully specified and PIL not installedr   r7  r   r*  z%.2fcm)r?  r4  r   r  Imager  r1  r  r   iter	TypeErrorr   r  get_page_width)r   r   r  r=  r'  
width_unitr+  r   rA  r  r  imgimg_sizefactorimage_widthimage_height
line_widthr   r   r   get_image_scaled_width_height  sT   
z+ODFTranslator.get_image_scaled_width_heightc           	   	   C   s   |   }|d}d}|D ]L}|d}|d}|d}|du s*|du s*|du r+qz| |\}}| |\}}| |\}}W n tyR   | jjd Y nw || | }q|du r`d}|S )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   r/  r  r   r   r   )	r   r  r	   r'  r   
page_widthmargin_leftmargin_rightr   r   r   r   rE    s@   zODFTranslator.get_page_widthc              	   C   s  d }|  ||\}}|jjD ]}|jdkr| }q|  jd7  _|d urWddddd}	t| jd|	td	}
d
d
ddd}	t|
d|	td	 ddddddddd}	t|
d|	td	 d| j }dt	t
 }|d| dd}	t| jd|	td	}
i }	d}|jjd}|rd|v rd}|rd|	d< nd |	d< t|
d!|	td	 ||ddd"}	||	d#< t|d$|	d%}i }	t|d&|	d%}d'| di}	t|d(|	d%}||||fS ))NrL  r   extrar   CaptionStandard)zstyle:classr  r  r  r  r  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{  r  r  r  Fr  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  )rM  r   childrenre  r4  r  rQ   r  r  nextIMAGE_NAME_COUNTERr  r@  r   )r   r   r  r  r  rL  r'  r+  node1r   r+  r  	draw_namer_  r  r(  r$  r%  r   r   r   r  	  s   




zODFTranslator.generate_figurec                 C   s  |  ||\}}|  jd7  _d| j }|d| dd}	t| jd|	td}
d }d }d|jv rH|jd  }|D ]}|d	v rA|}q8|d
v rG|}q8|d u r^ddddddddddddddd}	n|}	|d urh||	d< |d urp||	d< d}|jd}|rd|v rd}|rd|	d< nd|	d< | 	|rd|	d< t|
d|	td dt
t }||dd}	t|jtjrd |	d!< nd|	d!< ||	d"< ||	d#< t|d$|	d%}
t|
d&d'|f d(d)d*d+d% |
|fS ),Nr   r\  r   rz  r^  r  r  align)leftcenterright)topmiddlebottomrr  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-posrv  Fr  r_  Tr`  ra  rb  r]  r  )rc  rd  rf  zas-charre  rg  z
svg:heightrh  r}  z
draw:imager  simpleembedonLoad)
xlink:href
xlink:typez
xlink:showzxlink:actuate)rM  r  r  rQ   r  r  r@  r   r   is_in_tablerj  rk  rb  r   r	   TextElement)r   r   r  r  r  frame_attrsr'  r+  r  r   r+  halignvalignrn  rX   r_  r  rm  r   r   r   r  g	  s   





zODFTranslator.generate_imagec                 C   s*   |j }|rt|tjjrdS |j }|sdS )NTF)r   rb  r   r	   entry)r   r   rl  r   r   r   r|  	  s   zODFTranslator.is_in_tablec                 C   sF   t |jtjjr!| jd }|d d }|| _| j| d d S d S )Nr  r   rM  )	rb  r   r   r	   r  r  r  rO   r  r  r   r   r   visit_legend	  s   
zODFTranslator.visit_legendc                 C   s:   t |jtjjr| j  |   |   |   d S d S r   )rb  r   r   r	   r  r  r  rR  r`  r   r   r   depart_legend	  s   
zODFTranslator.depart_legendc                 C   s    |  j d7  _ |  jd7  _d S r  r  r  r`  r   r   r   visit_line_block	     zODFTranslator.visit_line_blockc                 C   s    |  j d8  _ |  jd8  _d S r  r  r`  r   r   r   depart_line_block	  r  zODFTranslator.depart_line_blockc                 C   s.   d| j  }t| jdd| |id}|| _d S )Nzlineblock%dr  r  r}  )r  rQ   r  r  )r   r   r8   r+  r   r   r   
visit_line	  s
   

zODFTranslator.visit_linec                 C   rr  r   rs  r`  r   r   r   depart_line	  r    zODFTranslator.depart_linec                 C   r  )NrU  r  rc  r}  r  ro  r   r   r   visit_literal	  r  zODFTranslator.visit_literalc                 C   rr  r   rs  r`  r   r   r   depart_literal	  r    zODFTranslator.depart_literalc                 C   sn   |j dd}|r"| j}|D ]}t|dd| |id}qt|}nt| jd}d}| | | j| d S )Nr  r   rU  r  r}  r   )	r@  r   r  rQ   r  r   rQ  r  rO   )r   r   r   rP   inline_stylecountr   r   r   visit_inline	  s   

zODFTranslator.visit_inlinec                 C   s$   | j  }t|D ]}|   q	d S r   )r  r  r  rR  )r   r   r  xr   r   r   depart_inline	  s   

zODFTranslator.depart_inlinec                 C   sL   d}t |}|r| }t|}|S t|}|r$| }t|d }|S )Nr      )SPACES_PATTERNmatchr-  r   TABS_PATTERN)r   r  r  matchobjpadr   r   r   _calculate_code_block_padding
  s   

z+ODFTranslator._calculate_code_block_paddingc                    sT   t jj|dd}|dv rtd	 fdd	td}ntd	 fdd	td}t |||S )
NT)stripall)latextexr   c                         | |S r   r  r   r  r!   r   r   <lambda>
  r    z8ODFTranslator._add_syntax_highlighting.<locals>.<lambda>)escape_functionc                    r  r   r  r  r!   r   r   r  
  r    r   )pygmentslexersget_lexer_by_namer   rn   r   	highlight)r   insourcer  lexerfmtrr   r!   r   _add_syntax_highlighting
  s   z&ODFTranslator._add_syntax_highlightingc                 C   s   t | j|}t| j|S r   )	FILL_PAT1sub
fill_func1	FILL_PAT2
fill_func2)r   r  r   r   r   	fill_line
  s   zODFTranslator.fill_linec                 C   s   | d}dt|f S )Nr   z<text:s text:c="%d"/>r-  r   r   r  spacesr   r   r   r  !
  r  zODFTranslator.fill_func1c                 C   s   | d}dt|d f S )Nr   z <text:s text:c="%d"/>r   r  r  r   r   r   r  %
  s   
zODFTranslator.fill_func2c                 C   s  t | jdkrd| df }nd| df }| }tr/| jjr/|dd}| ||}nt	|}|
d}|d d	krA|d= d
g}g }|D ]}| |}|dd}|| qHd|}	||	f }
||
 |d d	|}|d}t|}|D ]}| j| qd S )Nr   z)<text:p text:style-name="%s">%%s</text:p>rP  rO  r  r  r\  r  rh   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  r4  r  r   r   r   r  rn   r   r  rj   rO   r5  r]  r   r  r  )r   r   wrapper1r  r  lineslines1my_linesmy_linemy_lines_strmy_lines_str2rc   r+  r  r   r   r   visit_literal_block)
  s>   








z!ODFTranslator.visit_literal_blockc                 C   r  r   r   r`  r   r   r   depart_literal_blockK
  rZ   z"ODFTranslator.depart_literal_blockc                 C       | j jjd|d | | d S )Nz"math" role not supported	base_node)r   r   r   r  r`  r   r   r   
visit_mathR
     
zODFTranslator.visit_mathc                 C      |  | d S r   )r  r`  r   r   r   depart_mathW
  r  zODFTranslator.depart_mathc                 C   r  )Nz"math" directive not supportedr  )r   r   r   r  r`  r   r   r   visit_math_blockZ
  r  zODFTranslator.visit_math_blockc                 C   r  r   )r  r`  r   r   r   depart_math_block_
  r  zODFTranslator.depart_math_blockc                 C   s>   |j d}|j d}|d ur|d ur|| j|< d S d S d S )Nr   r   )r@  r   r  )r   r   r   r   r   r   r   
visit_metab
  s
   zODFTranslator.visit_metac                 C   r  r   r   r`  r   r   r   depart_metah
  rZ   zODFTranslator.depart_metac              
   C   s  d}| j sd| _ t| jd| |ddtd}t|ddd	d
dtd}t| jd| d| dddtd}t|ddditd}t| jd| d| dddtd}t|ddditd}t| jd| d| dddtd}t|ddddd
dddtd}t|dtd}t| jd| d| dddtd}t|ddddtd}t| jd| d| d ddtd}t|dddd
d
dd!td}t| jd| d| d"ddtd}t|ddddd
dd!td}| jd#| || |d$d%}t|d&d'| d| did%}t|d&d'| d| did%}t|d(}t|d)}t|d*| d| dd+d,d%}t|d-d.d/id%}d0|_t|d*| d| dd+d,d%}t|d-d.d/id%}d1|_| | d S )2Nrs  Tr  r:   r  r  r  style:table-propertiesz17.59cmro  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   )r  z	fo:border)r  r   r  r  r  r  r  )r  r   table:tablez
table:nametable:style-namer}  table:table-columnr  table:table-header-rowstable:table-rowtable:table-cellstringr  zoffice:value-typer  r  Table_20_HeadingOptionDescription)r  rQ   r  r  r  rK  r;   rQ  )r   r   
table_namerP   r+  r  r(  r$  r   r   r   visit_option_listk
  s  




zODFTranslator.visit_option_listc                 C   rr  r   rs  r`  r   r   r   depart_option_list
  r    z ODFTranslator.depart_option_listc                 C   s   |  d}| | d S )Nr  rK  rQ  ro  r   r   r   visit_option_list_item
  r  z$ODFTranslator.visit_option_list_itemc                 C   rr  r   rs  r`  r   r   r   depart_option_list_item
  r    z%ODFTranslator.depart_option_list_itemc                 C   s(   | j dd| j ddd}| | d S )Nr  z
Table%d.A2r  r  r}  )rK  r  rQ  ro  r   r   r   visit_option_group
  s
   
z ODFTranslator.visit_option_groupc                 C   rr  r   rs  r`  r   r   r   depart_option_group
  r    z!ODFTranslator.depart_option_groupc                 C   s    | j dddid}| |_d S )Nr  r  Table_20_Contentsr}  )rK  r4  r;   ro  r   r   r   visit_option
  s   zODFTranslator.visit_optionc                 C   r  r   r   r`  r   r   r   depart_option
  rZ   zODFTranslator.depart_optionc                 C   r  r   r   r`  r   r   r   visit_option_string
  rZ   z!ODFTranslator.visit_option_stringc                 C   r  r   r   r`  r   r   r   depart_option_string
  rZ   z"ODFTranslator.depart_option_stringc                 C   r  r   r   r`  r   r   r   visit_option_argument
  rZ   z#ODFTranslator.visit_option_argumentc                 C   r  r   r   r`  r   r   r   depart_option_argument
  rZ   z$ODFTranslator.depart_option_argumentc                 C   s>   | j dd| j ddd}t|dddid}| |_t )	Nr  z
Table%d.B2r  r  r}  r  r  r  )rK  r  rQ   r4  r;   r	   r  r  r   r   r   visit_description
  s   

zODFTranslator.visit_descriptionc                 C   r  r   r   r`  r   r   r   depart_description
  rZ   z ODFTranslator.depart_descriptionc                 C   s^   d| _ | jr| d}n| jr| d}n| jd }| jdd|id}| | | | d S )NTr\  rY  r  r  r  r}  )r  r  rN  r  r  rK  rL  rQ  )r   r   rP   r  r   r   r   visit_paragraph
  s   

zODFTranslator.visit_paragraphc                 C   sn   d| _ |   | jr| j| jd  | j| jd  d S | jr5| j| jd  | j| jd  d S d S )NFr  )	r  rR  r  r  rO   r  remover  r  r`  r   r   r   depart_paragraph
  s   zODFTranslator.depart_paragraphc                 C   r  r   r   r`  r   r   r   visit_problematic  rZ   zODFTranslator.visit_problematicc                 C   r  r   r   r`  r   r   r   depart_problematic  rZ   z ODFTranslator.depart_problematicc           	      C   s   d|j v rT|j d }| }d|v rT| }ddd tt D }d||f }|d}t	|}t
|dkrT|d }| jrF	 t | jrN	 t | j| t )	Nr  r   r%  c                 s   s     | ]\}}d ||f V  qdS )z%s="%s"Nr   )r  kvr   r   r   r     s
    

z*ODFTranslator.visit_raw.<locals>.<genexpr>z<stuff %s>%s</stuff>r  r   )r@  r   r4  r5  rS   r  rT   r]  r   r  r   r  r  r  rO   r	   r  )	r   r   formats
formatlistrawstrattrstr
contentstrr   r+  r   r   r   	visit_raw  s*   





zODFTranslator.visit_rawc                 C   s   | j rd S | jr
d S 	 d S r   )r  r  r`  r   r   r   
depart_raw0  s
   zODFTranslator.depart_rawc                 C   s   | j jrLd|v r,|d }| j jr|dr| |}| jdd| ddd}| | n d|v rE| j jrD|d }| jd	d| d
dd}n| jj	d | j
rjt|jdkrlt|jd tjjrn||jd  d S d S d S d S )Nrefurizmailto:ztext:ar  rw  )rz  r{  r}  r  r  r;   r  z3References must have "refuri" or "refid" attribute.r   r   )r   r   r   r  cloak_mailtorK  rQ  r   r   r   r  r   ri  rb  r   r	   	generatedr  )r   r   hrefrP   r   r   r   visit_reference8  s<   


zODFTranslator.visit_referencec                 C   s$   | j jrd|v r|   d S d S d S )Nr  )r   r   rR  r`  r   r   r   depart_referenceT  s
   zODFTranslator.depart_referencec                 C   sT   |  d}|d}|r|d }|r|}t| jdd|id}| }| ||_d S )Nre  r  r   r  r  r}  )r  r   rQ   r  r4  r]  r;   )r   r   r  r  class1rP   r;   r   r   r   visit_rubricY  s   

zODFTranslator.visit_rubricc                 C   r  r   r   r`  r   r   r   depart_rubrich  rZ   zODFTranslator.depart_rubricr   c                 C   sV   |  j d7  _ |  jd7  _| jjr)| jdd| j d| j  dd}| | d S d S r  r  )r   r   move_idsrP   r   r   r   visit_sectionk  s   
zODFTranslator.visit_sectionc                 C   r  r  r  r`  r   r   r   depart_sectionu  r  zODFTranslator.depart_sectionc                 C   r  )NrU  r  rf  r}  r  ro  r   r   r   visit_strongz  s   zODFTranslator.visit_strongc                 C   rr  r   rs  r`  r   r   r   depart_strong  r    zODFTranslator.depart_strongc                 C   r  r   r  r`  r   r   r   visit_substitution_definition  r#   z+ODFTranslator.visit_substitution_definitionc                 C   r  r   r   r`  r   r   r   depart_substitution_definition  rZ   z,ODFTranslator.depart_substitution_definitionc                 C   r  r   r   r`  r   r   r   visit_system_message  rZ   z"ODFTranslator.visit_system_messagec                 C   r  r   r   r`  r   r   r   depart_system_message  rZ   z#ODFTranslator.depart_system_messagec                 C   s   d }d }| d}|d ur|D ]}|tr|} nq|d urM| j |}|d u rK| jjd|f  t}| j |}|d u rK| jjd|f  t}|S t}| j |}|d u re| jjd|f  t}|S )Nr  z,Can't find table style "%s".  Using default.z=Can't find default table style "%s".  Using built-in default.)	r   r  r  r  r   r   r   TABLENAMEDEFAULTBUILTIN_DEFAULT_TABLE_STYLE)r   r   table_styler  str_classes	str_classr   r   r   get_table_style  sN   

zODFTranslator.get_table_stylec              	   C   s  |  j d7  _ | |}dt }t| jd| d| | j fddtd}|jd u r6t|dd	d
ddtd nt|ddd
d|jdtd t| jd| d| | j ddfddtd}| jj	}|d u rf|j
}nd|f }t|dd||||dtd d }|jD ]}	|	jdkr|	 } nq~|d ur| d| n	 t| jd| d| | j f| d| | j fdd}
| |
 || _d| _d S )Nr   z%s%%dr  r  r:   r  r  r  ro  0inz0.10in)r  rW  rV  margins)r  rW  rV  r  r  r  r  z0.%03dcm solid #000000r  z0.049cmr  r-  rg  r  r  r}  g        )r  r  r  rQ   r  r  r  rp   r   table_border_thicknessr'   ri  re  r4  rN  r  rQ  current_table_styletable_width)r   r   r  r  r+  r  	thicknessline_style1r-  r  r$  r   r   r   visit_table  s   

	





zODFTranslator.visit_tablec                 C   s<   t dtd}d| jf }| j}|d }||j|< |   d S )Nr  r  %.4finr   )rR   r  r  r  r   rR  )r   r   rG  	attribvalr+  r  r   r   r   depart_table  s   
zODFTranslator.depart_tablec                 C   s   t dd | _d S )Nr  r   )rk   r  r`  r   r   r   visit_tgroup  r  zODFTranslator.visit_tgroupc                 C   r  r   r   r`  r   r   r   depart_tgroup   rZ   zODFTranslator.depart_tgroupc                 C   s   |  j d7  _ | dt | jt| j f}|d d }t| jd|ddtd}t|d	d
d| itd | jdd|id |  j	|7  _	d S )Nr   z	%s%%d.%%scolwidthg      (@r  r  r  r  r  r  r#  r  r  r}  )
r  r  r  r  chrrQ   r  r  rK  r  )r   r   colspec_namer(  r+  r   r   r   visit_colspec  s(   
zODFTranslator.visit_colspecc                 C   r  r   r   r`  r   r   r   depart_colspec  rZ   zODFTranslator.depart_colspecc                 C   s*   |  d}| | d| _| jd d S )Nr  Tr  )rK  rQ  in_theadr  rO   ro  r   r   r   visit_thead  s   

zODFTranslator.visit_theadc                 C   s   |    d| _| j  d S r  )rR  r-  r  r  r`  r   r   r   depart_thead  s   zODFTranslator.depart_theadc                 C   s&   t dd | _| d}| | d S )Nr  r   r  )rk   r  rK  rQ  ro  r   r   r   	visit_row#  s   
zODFTranslator.visit_rowc                 C   rr  r   rs  r`  r   r   r   
depart_row(  r    zODFTranslator.depart_rowc                 C   s   |  j d7  _ | dt | jddf}|dd}|dd}|dkr2d|d f |d	< |  j |7  _ |d
d}|dkrEd|d f |d< | jd|d}| | d S )Nr   z%s%%d.%%c%%dr  r  r  morecolsr   %dztable:number-columns-spannedmorerowsztable:number-rows-spannedr  r}  )r  r  r  r  r   rK  rQ  )r   r   cellspec_namer   r2  r4  r+  r   r   r   visit_entry+  s"   
zODFTranslator.visit_entryc                 C   rr  r   rs  r`  r   r   r   depart_entry?  r    zODFTranslator.depart_entryc                 C   r  r   r   r`  r   r   r   visit_tbodyB  rZ   zODFTranslator.visit_tbodyc                 C   r  r   r   r`  r   r   r   depart_tbodyE  rZ   zODFTranslator.depart_tbodyc                 C   s"   d|vrd|vrd|vrd S 	 d S )Nr  r  refnamer   r`  r   r   r   visit_targetH  s
   zODFTranslator.visit_targetc                 C   r  r   r   r`  r   r   r   depart_targetS  rZ   zODFTranslator.depart_targetr-  c                 C   s   t |jtjjrA| j}|dkr$| jjd | jjd|	 f  d}| j
dd| | d|fdd}| | | | d S t |jtjjrlt| jd	d
| |id}| | |	 }|| _d| _| | d S d S )N   z4Heading/section levels greater than 7 not supported.z1    Reducing to heading level 7 for heading: "%s"r  r3  z	heading%dtext:outline-levelr  r}  r  r  T)rb  r   r   r	   sectionr  r   r   r   r4  rK  r  rL  rQ  rQ   r  r-  r  )r   r   r  
title_typer  r+  r;   r   r   r   visit_titleV  s@   


zODFTranslator.visit_titlec                 C   s0   t |jtjjst |jtjjr|   d S d S r   )rb  r   r   r	   r@  r   rR  r`  r   r   r   depart_titlev  s
   zODFTranslator.depart_titlec                 C   s   | j ||dd d S )Nrk  )rA  )rB  )r   r   r  r   r   r   visit_subtitle{  r  zODFTranslator.visit_subtitlec                 C   r  r   )rC  r`  r   r   r   depart_subtitle~  r  zODFTranslator.depart_subtitlec                 C   s0   | j dd| did}| | |_t )NrU  r  rd  r}  )rK  r  r]  r4  r;   r	   r  ro  r   r   r   visit_title_reference  s
   
z#ODFTranslator.visit_title_referencec                 C   r  r   r   r`  r   r   r   depart_title_reference  rZ   z$ODFTranslator.depart_title_referencec              	   C   sl   t ddD ].}t|dd|f | d|f dd}t|d t|d	 t|d
dddd t|d qd S )Nr      z$text:table-of-content-entry-templater3  r  r>  r}  ztext:index-entry-chapterztext:index-entry-textztext:index-entry-tab-stopr   rq  )zstyle:leader-charz
style:typeztext:index-entry-page-number)r  rQ   r  )r   r+  r  r  r   r   r   (generate_table_of_content_entry_template  s    


z6ODFTranslator.generate_table_of_content_entry_templatec                 C   sJ   d}d }|j D ]}t||r|} nq|d ur| }|S | jj| }|S )Nrh   )ri  rb  r4  r  rW  )r   r   
class_type	label_keyrY  
title_noder  r   r   r   find_title_label  s   

zODFTranslator.find_title_labelc           
      C   s  d|j v rd|j d v r| |tjjd}| jjrd| jdddddd}t|d	d
did}t|dddid}||_	| 
| t|d}t|d}t|dd| did}||_	| j| _|| _| | n| d}	| d}	t|	dd| did}||_	d| _d S d|j d v r| d}	| d}	t|	dd| did}| |tjjd}||_	d S d|j d v r| d}	| d}	t|	dd| did}| |tjjd}||_	d S d S d S )Nr  contentsztext:table-of-contentzTable of Contents1r  Sect1)rO  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-headingrb  rN  rU  rf  Tabstract
dedication)r@  rM  r   r	   r-  r   r   rK  rQ   r;   rI  r  r  save_current_elementr  rQ  rN  r  )
r   r   rY  r+  r  r(  r$  r%  r&  rP   r   r   r   visit_topic  s   















0zODFTranslator.visit_topicc                 C   sV   d|j v r'd|j d v r)| jjr| | j | | j n| d d| _d S d S d S )Nr  rN  rb  F)	r@  r   r   update_toc_page_numbersr  rQ  rU  rN  r  r`  r   r   r   depart_topic  s   


zODFTranslator.depart_topicc                 C   s    g }|  |d| | | d S r  )update_toc_collectupdate_toc_add_numbers)r   rP   
collectionr   r   r   rW    s   z%ODFTranslator.update_toc_page_numbersc                 C   s<   | ||f |d7 }|D ]}|jdkr| ||| qd S )Nr   rR  )rO   r   rY  )r   rP   r   r[  child_elr   r   r   rY    s   
z ODFTranslator.update_toc_collectc                 C   s6   |D ]\}}|j dkr|jdkrt|d}d|_qd S )Nr  zTable of Contentsztext:tab9999)r   r;   rQ   r  )r   r[  r   r+  r  r   r   r   rZ    s   


z$ODFTranslator.update_toc_add_numbersc                 C   s   |  d d S )Nrb  )rN  r`  r   r   r   visit_transition  r  zODFTranslator.visit_transitionc                 C   r  r   r   r`  r   r   r   depart_transition  rZ   zODFTranslator.depart_transitionc                 C   r  )Nr   generate_admonitionr`  r   r   r   visit_warning  rS  zODFTranslator.visit_warningc                 C   r  r   r  r`  r   r   r   depart_warning  r  zODFTranslator.depart_warningc                 C   r  )N	attentionr`  r`  r   r   r   visit_attention  rS  zODFTranslator.visit_attentionc                 C   r  )Ncautionr`  r`  r   r   r   visit_caution  rS  zODFTranslator.visit_cautionc                 C   r  )Ndangerr`  r`  r   r   r   visit_danger  rS  zODFTranslator.visit_dangerc                 C   r  )Nr  r`  r`  r   r   r   visit_error   rS  zODFTranslator.visit_errorc                 C   r  )Nhintr`  r`  r   r   r   
visit_hint%  rS  zODFTranslator.visit_hintc                 C   r  )N	importantr`  r`  r   r   r   visit_important*  rS  zODFTranslator.visit_importantc                 C   r  )Nnoter`  r`  r   r   r   
visit_note/  rS  zODFTranslator.visit_notec                 C   r  )Ntipr`  r`  r   r   r   	visit_tip4  rS  zODFTranslator.visit_tipc                 C   sR   d }|j D ]}|jdkr| }q|d u r |d}|r |d }| |d| d S )Nr-  r  r   generic)ri  re  r4  r   ra  )r   r   r-  r  classes1r   r   r   visit_admonition9  s   


zODFTranslator.visit_admonitionc                 C   sz   t | jdr| jj||}n|}t| jdd| d|fid}|r&||_nd| f |_| d|f}| j	
| d S )NrW  r  r  zadmon-%s-hdrr}  z%s!zadmon-%s-body)hasattrr  rW  r   rQ   r  r  r;   
capitalizer  rO   )r   r   rY  r-  translated_labelr+  rc   r   r   r   ra  F  s   z!ODFTranslator.generate_admonitionc                 C       | j dddid}| | d S )NrU  r  zrststyle-subscriptr}  r  ro  r   r   r   visit_subscriptY     zODFTranslator.visit_subscriptc                 C   rr  r   rs  r`  r   r   r   depart_subscript_  r    zODFTranslator.depart_subscriptc                 C   ry  )NrU  r  zrststyle-superscriptr}  r  ro  r   r   r   visit_superscriptb  r{  zODFTranslator.visit_superscriptc                 C   rr  r   rs  r`  r   r   r   depart_superscripth  r    z ODFTranslator.depart_superscriptc                 C   r  r   r   r`  r   r   r   visit_abbreviationk  rZ   z ODFTranslator.visit_abbreviationc                 C   r  r   r   r`  r   r   r   depart_abbreviationn  rZ   z!ODFTranslator.depart_abbreviationc                 C   r  r   r   r`  r   r   r   visit_acronymq  rZ   zODFTranslator.visit_acronymc                 C   r  r   r   r`  r   r   r   depart_acronymt  rZ   zODFTranslator.depart_acronymc                 C   r  r   r   r`  r   r   r   visit_sidebarw  rZ   zODFTranslator.visit_sidebarc                 C   r  r   r   r`  r   r   r   depart_sidebarz  rZ   zODFTranslator.depart_sidebarr  r}   r   )r   )r   r-  (	  r$   r%   r&   r  r   r  r   r  r  r   r  r  r  r  r	  r   r  r  rS   r  	code_noner  r,  r*  compiler)  r  r  r  r4  r   r6  r(  r8  r   r)  rJ  rK  rN  rL  rQ  rR  rZ  r[  r]  r_  r^  rf  rh  rj  rk  rp  rt  rw  rx  ry  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  r  r  r  r  r  r  r  r  r  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/  r?  rM  rE  r  r  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  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  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  r1  r6  r7  r8  r9  r;  r<  rB  rC  rD  rE  rF  rG  rI  rM  rV  rX  rW  rY  rZ  r^  r_  rb  rc  re  depart_attentionrg  depart_cautionri  depart_dangerrj  depart_errorrl  depart_hintrn  depart_importantrp  depart_noterr  
depart_tipru  depart_admonitionra  rz  r|  r}  r~  r  r  r  r  r  r  r   r   r   r   r   	  s   9Q	0
 {&	

,	(@
,&LT"\


(? <r   c                       s   e Zd Z fddZ  ZS )Readerc                    s"   t   }| jjs|tj |S r   )superget_transformsr   r   r  r   DanglingReferences)r   
transforms	__class__r   r   r    s   
zReader.get_transforms)r$   r%   r&   r  __classcell__r   r   r  r   r    s    r  )X__doc____docformat__configparserr   rA  ior   	itertoolsr   r%  os.pathpathlibr   r*  r  r   r   r  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SyntaxErrorr$  r  rk  WeakKeyDictionaryr   rb  rN   typer   r   r  r  r  r  r  r  r  r  GENERATOR_DESCr  CONTENT_NAMESPACE_DICTr  r  r  r  r  r"  r#  r  r   r  r!  rQ   rK   rR   rd   rn   ro   r  r   r   r  r   r  r   r   r   r   <module>   s  



	
	

	
	

	   #                     