o
    f'ha9	 ã                   @   s2  d Z ddlmZ dZddlZddlZddlZddlZddlZddl	m
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zddlZW n	 eyM   Y nw 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 ejd
krŠddl m!Z! ddl"m#Z# ddl$m%Z% ddl&m'Z' nddl!m!Z! ddl#m#Z# ddl(m'Z' ddl(m%Z% dZ)e *¡ Z+zddl,Z,ddl-Z,ddl.m/Z/m0Z0 W n ee1fyÇ   dZ,Y nw zddl2Z3W n& eyô   zddl4Z4G dd„ de5ƒZ3e4e3_4W n eyñ   dZ3Y nw Y nw e 6¡ Z7e8ej9e:ƒ�rej9Z;nej;Z;G dd„ de;ƒZ<e =d¡Z>e =d¡Z?e =d¡Z@e =d¡ZAdZBdeB ZCdZDdZEdZFi dd “d!d"“d#d$“d%d&“d'd(“d)d*“d+d,“d-d.“d/d0“d1d2“d3eF“d4d5“d6d7“d8d9“d:d;“d<d=“d>d?“d@dAdBdCdDdEdFdGœ¥ ZGZHi dd “d!d"“d#d$“d%d&“d'd(“d)d*“d+d,“d-d.“d/d0“d1d2“d3eF“d:d;“d4d5“d6d7“d8d9“d<d=“d>d?“d@dAdBdDdHœ¥ ZIZJdIdJi ZKZLd"d0eFd5dDdKœ ZMZNi dLd “dMd"“dNd$“dOd&“dPd(“dQd*“dRd,“dSd.“dTd0“dUd2“dVeF“dWd;“dXd5“dYd7“dZd9“d[d=“d\d?“d@dAdBdCdDdEdFd]œ¥ZOi dLd “dMd"“dNd$“dOd&“dPd(“dQd*“dRd,“dSd.“dTd0“dUd2“dVeF“dWd;“dXd5“dYd7“dZd9“d[d=“d\d?“d@dAdBdDd^œ¥ZPd_dJiZQd"d0eFd5dDd`œZRddeHfdadb„Z9ddeHfdcdd„ZSdedf„ ZTeHfdgdh„ZUdidj„ ZVdkdl„ ZWG dmdn„ dne5ƒZXeXdodp�ZYG dqdr„ dre5ƒZZG dsdt„ dtej[ƒZ[G dudv„ dvej\ƒZ]G dwdx„ dxej^ƒZ^dS )yz%
Open Document Format (ODF) Writer.

é    )Úabsolute_importÚreStructuredTextN)ÚElementTree)Úminidom)ÚfrontendÚnodesÚutilsÚwritersÚ	languages)Ú
standalone)Ú
references©é   r   )ÚConfigParser)ÚStringIO)Úurlopen)Ú	HTTPErrorz1.0aé   )ÚOdtPygmentsProgFormatterÚOdtPygmentsLaTeXFormatterc                   @   s   e Zd ZdS )ÚPILN)Ú__name__Ú
__module__Ú__qualname__© r   r   úC/usr/lib/python3/dist-packages/docutils/writers/odf_odt/__init__.pyr   F   s    r   c                   @   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Úattribr   r   r   r   c   s   z!_ElementInterfaceWrapper.__init__c                 C   s   |t | < d S r   ©r    )r!   Úparentr   r   r   Ú	setparentg   ó   z"_ElementInterfaceWrapper.setparentc                 C   s   t |  S r   r$   ©r!   r   r   r   Ú	getparentj   ó   z"_ElementInterfaceWrapper.getparentr   )r   r   r   r   r&   r)   r   r   r   r   r   b   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)r=   r>   r?   rA   Úmanifestz2urn:oasis:names:tc:opendocument:xmlns:manifest:1.0)r-   r4   r6   r7   rA   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)rK   rL   rM   rN   zxmlns:manifest)rE   rF   rH   rI   rN   c                 C   s*   |d u ri }t | ||ƒ\} }t| |ƒ}|S r   )Úfix_nsr   )r"   r#   ÚnsmapÚnsdictÚelr   r   r   ÚElement  s
   
rS   c                 C   s>   |d u ri }t |||ƒ\}}t||ƒ}|  |¡ | | ¡ |S r   )rO   r   Úappendr&   )r%   r"   r#   rP   rQ   rR   r   r   r   Ú
SubElement  s   


rU   c                 C   s>   t | |ƒ}i }t| ¡ ƒD ]\}}t ||ƒ}|||< q||fS r   )Úadd_nsÚlistÚitems)r"   r#   rQ   ÚnstagÚnsattribÚkeyÚvalÚnskeyr   r   r   rO   &  s   


rO   c                 C   s   | S r   r   )r"   rQ   r   r   r   rV   /  ó   rV   c                 C   s>   t ƒ }tjdkr| j|dd� n|  |¡ | ¡ }| ¡  |S )Nr   Úunicode)Úencoding)r   ÚsysÚversion_infoÚwriteÚgetvalueÚclose)ÚetÚ	outstreamÚs1r   r   r   ÚToString3  s   

ri   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   
rs   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+   ru   r   r   r   r   Q  s   
zTableStyle.__init__c                 C   ó   | j S r   ©Úborder_r(   r   r   r   Úget_border_U  ó   zTableStyle.get_border_c                 C   ó
   || _ d S r   rw   )r!   r+   r   r   r   Úset_border_X  ó   
zTableStyle.set_border_c                 C   rv   r   ©Úbackgroundcolor_r(   r   r   r   Úget_backgroundcolor_]  rz   zTableStyle.get_backgroundcolor_c                 C   r{   r   r~   )r!   ru   r   r   r   Úset_backgroundcolor_`  r}   zTableStyle.set_backgroundcolor_©NN)r   r   r   r   ry   r|   Úpropertyr+   r€   r�   ru   r   r   r   r   rt   P  s    

rt   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   m  s   
zListLevel.__init__c                 C   r{   r   ©r†   )r!   r†   r   r   r   Úset_siblingr  r}   zListLevel.set_siblingc                 C   rv   r   rˆ   r(   r   r   r   Úget_siblingu  rz   zListLevel.get_siblingc                 C   r{   r   ©r‡   )r!   r‡   r   r   r   Ú
set_nestedx  r}   zListLevel.set_nestedc                 C   rv   r   r‹   r(   r   r   r   Ú
get_nested{  rz   zListLevel.get_nestedc                 C   r{   r   ©r…   )r!   r…   r   r   r   Ú	set_level~  r}   zListLevel.set_levelc                 C   rv   r   rŽ   r(   r   r   r   Ú	get_level�  rz   zListLevel.get_levelN)TT)
r   r   r   r   r‰   rŠ   rŒ   r�   r�   r�   r   r   r   r   r„   l  s    
r„   c                   @   sZ  e Zd ZdZdZdZ	 de Ze e	j
 e	 ¡ d¡e	j
 e e¡e¡¡ZdZe e	j
 e	 ¡ d¡e	j
 e 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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d/ejdœfd0d1gddd/ejdœfd2d3gd$dd4ejdœfd5d6gd$dd4ejdœfd7d8gd9d:dœfd;d<gd9d=dœfffZd>d?iZd@ZdAZdBZdCdD„ ZdEdF„ ZdGdH„ ZdIdJ„ Zej fdKdL„Z!dMdN„ Z"dOdP„ Z#dQdR„ Z$dSdT„ Z%dUdV„ Z&dWdX„ Z'dYdZ„ Z(dS )[ÚWriterz'application/vnd.oasis.opendocument.textz.odt)ÚodtÚstylesÚdummyztemplate.txtzODF-Specific OptionsNz$Specify a stylesheet.  Default: "%s"z--stylesheetÚ
stylesheet)ÚdefaultÚdesta}  Specify a configuration/mapping file relative to the current working directory for additional ODF options.  In particular, this file may contain a section named "Formats" that maps default style names to names to be used in the resulting output file allowing for adhering to external standards. For more info and the format of the configuration/mapping file, see the odtwriter doc.z--odf-config-fileÚmetavarz<file>zyObfuscate email addresses to confuse harvesters while still keeping email links usable with standards-compliant browsers.z--cloak-email-addressesFÚ
store_trueÚcloak_email_addresses)r–   Úactionr—   Ú	validatorz!Do not obfuscate email addresses.z--no-cloak-email-addressesÚstore_falsezLSpecify the thickness of table borders in thousands of a cm.  Default is 35.z--table-border-thickness)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-doczPGenerate a bullet list table of contents, not an ODF/oowriter table of contents.z--generate-list-tocÚgenerate_oowriter_toczHGenerate an ODF/oowriter table of contents, not a bullet list. (default)z--generate-oowriter-tocz…Specify the contents of an custom header line.  See odf_odt writer documentation for details about special field character sequences.z--custom-odt-headerrm   Úcustom_headerz…Specify the contents of an custom footer line.  See odf_odt writer documentation for details about special field character sequences.z--custom-odt-footerÚcustom_footerÚoutput_encoding_error_handlerÚxmlcharrefreplace)Ústylesheet_pathz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 r·zt |¡}	W n ty•   |}	Y nw |	 d¡}	t|	ƒdkr¬|	d  d¡}	|	d
 }|du r·| jj d¡ |  | j ¡ ||¡\}
}}|
rËt  |¡}|  |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   é   Ú.z¿invalid 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_codero   ÚsplitÚlowerÚlenÚisalphaÚupperÚlocaleÚ	normalizeÚ	NameErrorr«   ÚreporterÚwarningÚupdate_stylesheetÚget_dom_stylesheetÚetreeÚtostringÚstore_embedded_filesÚcopy_from_stylesheetre   ÚseekÚreadr³   r¬   Úoutput_encodingÚdocutilsÚ__version__)r!   ÚfÚzfileÚcontentrh   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Ù   p  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_listrc   Ú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à   re   )r!   Ú
stylespathrå   rh   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_page)r!   rh   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  re   )r!   Ú
outzipfiler  Ú	inzipfilerh   r  r  Úimageobjr   r   r   rÞ   Ç  s   


€zWriter.copy_from_stylesheetc                 C   ó   d S r   r   r(   r   r   r   rÁ   ×  r^   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#   rQ   zmanifest:file-entryú/)zmanifest:media-typezmanifest:full-pathztext/xmlr¹   r¿   r  rº   z  )rS   ÚMANIFEST_NAMESPACE_ATTRIBÚMANIFEST_NAMESPACE_DICTrÛ   r   rU   rÈ   ÚMANNSDri   r   ÚparseStringÚtoprettyxml)r!   ÚrootÚdocrh   r   r   r   rË   Ú  sP   ý
þýþýþýþýþý

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r¯t d|¡}	|	D ]}
t|dtd�}|
|_q¡q‘|dkr¾t|dtd�}||_q‘|dkrÍt|dtd�}||_q‘t|dd|itd�}||_q‘t|ƒ}|S )Nzoffice:document-metar  zoffice:meta©rQ   zmeta:generatorzDocutils/rst2odf.py/%sÚUSERrm   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)rS   ÚMETA_NAMESPACE_ATTRIBÚMETA_NAMESPACE_DICTrÛ   r   rU   ÚMETNSDÚVERSIONr?   ÚosÚenvironrô   rý   Ústrftimerþ   r­   Ú	get_titleÚget_meta_dictrX   ÚrerÏ   ri   )r!   r  r  Úel1rh   Ú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Úgetcwdrâ   Ú_datadirÚ__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‘   …  sF   þþÿþý
õýüýþÿýýþýýýþýþýþýþýýýýýýýýÿüÿü’ý{ÿ	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�dëd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$�dìd8d9„Z%�díd: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„ ZHd€d�„ ZId‚dƒ„ ZJd„d…„ ZKd†d‡„ ZLdˆd‰„ ZMdŠd‹„ ZNdŒd�„ ZOdŽd�„ ZPd�d‘„ ZQd’d“„ ZRd”d•„ ZSd–d—„ ZTd˜d™„ ZUdšd›„ ZVdœd�„ ZWdždŸ„ ZXd d¡„ ZYd¢d£„ ZZd¤d¥„ Z[d¦d§„ Z\d¨d©„ Z]dªd«„ Z^d¬d­„ Z_d®d¯„ Z`d°d±„ Zad²d³„ Zbd´dµ„ Zcd¶d·„ Zdd¸d¹„ Zedºd»„ Zfd¼d½„ Zgd¾d¿„ ZhdÀdÁ„ ZidÂdÃ„ ZjdÄdÅ„ ZkdÆdÇ„ ZldÈdÉ„ ZmdÊdË„ ZndÌdÍ„ ZodÎdÏ„ ZpdÐdÑ„ ZqdÒdÓ„ ZrdÔdÕ„ ZsdÖd×„ ZtdØdÙ„ ZudÚdÛ„ ZvdÜdÝ„ ZwdÞdß„ Zxdàdá„ Zydâdã„ Zzg dä¢Z{dådæ„ Z|dçdè„ Z}dédê„ Z~dëdì„ Zdídî„ Z€dïdð„ Z�dñdò„ Z‚dódô„ Zƒdõdö„ Z„d÷dø„ Z…dùdú„ Z†dûdü„ Z‡dýdþ„ Zˆdÿ�d „ Z‰�d�d„ ZŠ�d�d„ Z‹�d�d„ ZŒ�d�d„ Z��d	�d
„ ZŽ	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„ Z¡e Z¢e¡Z£�d1�d2„ Z¤�d3�d4„ Z¥�d5�d6„ Z¦�d7�d8„ Z§�d9�d:„ Z¨�d;�d<„ Z©�d=�d>„ Zª�d?�d@„ Z«�dA�dB„ Z¬�dC�dD„ Z­�dE�dF„ Z®�dG�dH„ Z¯�dI�dJ„ Z°�dK�dL„ Z±�dM�dN„ Z²�dO�dP„ Z³�dQ�dR„ Z´�dS�dT„ Zµ�dU�dV„ Z¶�dW�dX„ Z·�dY�dZ„ Z¸�d[�d\„ Z¹�d]�d^„ Zº�d_�d`„ Z»�da�db„ Z¼�dc�dd„ Z½�de�df„ Z¾�dg�dh„ Z¿�di�dj„ ZÀ�dk�dl„ ZÁ�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Ä„ ZìeëZí�dÅ�dÆ„ ZîeëZï�dÇ�dÈ„ ZðeëZñ�dÉ�dÊ„ ZòeëZó�dË�dÌ„ ZôeëZõ�dÍ�dÎ„ ZöeëZ÷�dÏ�dÐ„ ZøeëZù�dÑ�dÒ„ ZúeëZû�dÓ�dÔ„ Züeë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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Útocenumlistr2  Ú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   s2  t j | |¡ |j| _| jj| _t | j|j¡| _i | _	| jj
rVtƒ }| | jj
¡ | d¡D ]&\}}|| jvrB| jj d|f ¡ tjdkrM|| j	|< q/| d¡| 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| _0g | _1g | _2d| _3d| _4d| _5d| _6d | _7d| _8d| _9i | _:g | _;d| _<d| _=g | _>d| _?d| _@g | _Ai | _Bd| _Cd| _Dd | _Ed| _Fd| _Gd| _Hd | _Id | _Jd| _Kg | _Ld S )NÚFormatsz,Style "%s" is not a style used by odtwriter.r   úutf-8r   zoffice:document-content©r#   )Úelementzoffice:scriptszoffice:font-face-declszoffice:automatic-styleszoffice:bodyrm  ÚAr   éÿÿÿÿFÚpythonrm   )Mr   ÚGenericNodeVisitorr   r¬   rÎ   r
   Úget_languager×   ÚlanguageÚ
format_mapÚodf_config_filer   rà   rX   Úused_stylesr«   rØ   ra   rb   ÚdecodeÚsection_levelÚsection_countrS   ÚCONTENT_NAMESPACE_ATTRIBrÛ   r   Úcontent_treeÚcurrent_elementrU   Úautomatic_stylesÚgenerate_content_elementÚbody_text_elementÚrststyleÚparagraph_style_stackÚlist_style_stackÚtable_countrp   Úcolumn_countÚtrace_levelÚoptiontablestyles_generatedÚ
field_nameÚfield_elementr2  Ú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  rR   r   r   r   r   m  s    
þ
ÿÿ
þ





zODFTranslator.__init__c                 C   rv   r   )r¼  r(   r   r   r   Úget_str_stylesheetÁ  rz   z ODFTranslator.get_str_stylesheetc                 C   sº   d}| j j}tj |¡d }|dkr t|dƒ}| ¡ }| ¡  n!||kr9t 	|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
  r¿   r¹   z,stylesheet path (%s) must be %s or .xml file)r¬   r•   r*  r9  ÚsplitextÚopenrà   re   rÄ   rÅ   rò   r¼  r½  rÛ   Ú
fromstringr¾  Údom_stylesheetcontentÚextract_table_stylesr¿  )r!   Ú	extensionr1  r  ÚextÚ
stylesfilerh   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-stylesr6   ú{%s}namer<   r¾   r   z
{%s}familyr>   z{%s}table-propertiesú{%s}%sr1   zbackground-colorÚnoneú
table-cellz{%s}table-cell-properties)rÛ   rÇ  rñ   ÚCNSDrô   rÏ   r  ÚTABLESTYLEPREFIXrt   ru   Ú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Ï  r1   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-namer2  rƒ  r   )
r¬   r2  rµ  rS   r—  r?   r–  ÚinsertÚfind_first_text_pÚattach_page_style)r!   r?   rR   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!   rR   Úchildr0  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 )
z®Attach 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ô   rU   r”  ÚSNSDrð   )r!   rR   Úcurrent_styleÚ
style_namer0  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Úname1Ú	stylenamer   r   r   r—  2  s   zODFTranslator.rststylec                 C   s
   t |dƒS )Nzoffice:text)rU   )r!   r  r   r   r   r•  >  r}   z&ODFTranslator.generate_content_elementc                 C   sT   |   | 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!   Únew_contentr   r   r   r  A  s   ÿþzODFTranslator.setup_pagec                 C   rv   r   )r¾  r(   r   r   r   rÚ   K  rz   z ODFTranslator.get_dom_stylesheetc              	      s€   z,zt  d¡}| ¡  ¡ }dd„ |D ƒ\‰‰ W n ttfy&   d\‰‰ Y nw W | ¡  n| ¡  w ‡ ‡‡fdd„‰ˆ|ƒ d S )Nzpaperconf -s 2> /dev/nullc                 s   s   � | ]}t |ƒV  qd S r   )Úfloat)Ú.0Úsr   r   r   Ú	<genexpr>R  s   € z,ODFTranslator.setup_paper.<locals>.<genexpr>)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-propertiesr<   z{%s}page-widthr1   z%.3fptz{%s}page-heightçš™™™™™¹?z{%s}margin-leftz{%s}margin-rightz{%s}margin-topz{%s}margin-bottom)r"   ré  r#   )rR   Úsubel©Úhr¶   Úwalkr   r   rû  X  s   
þ
þ
ÿz'ODFTranslator.setup_paper.<locals>.walk)r*  Úpopenrà   rÏ   ÚIOErrorÚ
ValueErrorre   )r!   Úroot_elÚfinÚ
dimensionsr   rù  r   rð  N  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r�t	|	dt
td	�}
| jD ]}td
td�}|  d¡|j|< |
 |¡ q]| jjr�|  |
| jjd|¡ | jsˆ| jjr¹t	|	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Í  r6   z{%s}master-stylesz{%s}master-pager<   rÎ  Úpagedefaultzstyle:headerr  rÞ  r  ra  zstyle:footerr^  )rñ   ré  ÚNAME_SPACE_1ró   r—  rô   r¦  r¬   r£   rU   ÚSTYLES_NAMESPACE_ATTRIBÚSTYLES_NAMESPACE_DICTrV   r#   rT   Úcreate_custom_headfootr§  r¤   )r!   rÿ  r”  r9  Ú	master_elÚmaster_el_containerÚtarget_attribÚtarget_namerR   r0  Úel2Úattrkeyr   r   r   rñ  h  sh   
ÿ



þý

þý

þõ
zODFTranslator.add_header_footerr   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%%)	rU   r—  Úsplit_field_specifiers_iterr¨   Ú
code_fieldrò   Úmake_field_elementr?   Útail)
r!   r%   r?   rë  r”  r“  Ú
field_iterÚitemÚmsgr0  r   r   r   r  ›  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-styler5   r<   )ræ  rG   rJ   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-orderrG   rJ   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)rU   r»  r—  ré  r?   )r!   r%   r?   rë  r”  r0  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   ri   )r!   r  rf   rh   r   r   r   ÚastextÃ  s   

zODFTranslator.astextc                 C   s   |   ¡ S r   )r7  r(   r   r   r   rÊ   É  r*   zODFTranslator.content_astextc                 C   r{   r   ©r2  )r!   r2  r   r   r   Ú	set_titleÌ  r}   zODFTranslator.set_titlec                 C   rv   r   r8  r(   r   r   r   r-  Ï  rz   zODFTranslator.get_titlec                 C   r{   r   ©r£  )r!   r£  r   r   r   Úset_embedded_file_listÒ  r}   z$ODFTranslator.set_embedded_file_listc                 C   rv   r   r:  r(   r   r   r   r  Õ  rz   z$ODFTranslator.get_embedded_file_listc                 C   rv   r   )r·  r(   r   r   r   r.  Ø  rz   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-errorrm   ztext:note-refÚendnoter_  útext:note-classútext:ref-nameútext:reference-formatÚpage)r°  Ú
attributesrô   r¯  ÚcopyÚdeepcopyrT   rÑ   r?   rV   ré  r"   r¬   r¡   r#   Úclear)r!   rú   r0  r<  Ú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“  rU   )r!   r"   r#   r%   rR   r   r   r   Úappend_child  s   zODFTranslator.append_childc                 C   s4   | j dd|  |¡id�}|  |¡ |d ur||_|S )NrÝ  rÞ  rƒ  )rN  r—  Úappend_pending_idsr?   )r!   r<   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³  rU   )r!   rR   Úidr   r   r   rO    s   

ÿ
z ODFTranslator.append_pending_idsc                 C   r{   r   )r“  )r!   rR   r   r   r   Úset_current_element  r}   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   sH   d| j j| f }|  d¡}t|dd|  d¡id�}||_|  d¡}|S )Nú%s:rm  ú	text:spanrÞ  rk  rƒ  rI  ©rŠ  ÚlabelsrQ  rU   r—  r?   ©r!   rú   ÚlabelrR   r0  r   r   r   Úgenerate_labeled_block  ó   
þ
z$ODFTranslator.generate_labeled_blockc                 C   sH   d| j j| f }|  d¡}t|dd|  d¡id�}||_| ¡ |_|S )NrW  rm  rX  rÞ  rk  rƒ  )rŠ  rZ  rQ  rU   r—  r?   r7  r  r[  r   r   r   Úgenerate_labeled_line&  r^  z#ODFTranslator.generate_labeled_linec                 C   s   |  dd¡}|S )NÚ
r(  )ro   )r!   r?   r   r   r   Úencode0  s   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   rc  ;  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   rS   r³  rd  r   r   r   rb  @  s   ÿzODFTranslator.handle_basic_attsc                 C   ó   | j j d|jf ¡ d S )Nzmissing visit_%s©r«   r×   rØ   Útagnamerd  r   r   r   Údefault_visitD  ó   zODFTranslator.default_visitc                 C   rg  )Nzmissing depart_%srh  rd  r   r   r   Údefault_departureG  rk  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†  )
rf  r%   râ   r   Úliteral_blockr7  rÑ   r“  r  r?   )r!   rú   r?   r   r   r   Ú
visit_TextJ  s   zODFTranslator.visit_Textc                 C   r  r   r   rd  r   r   r   Údepart_Text\  r^   zODFTranslator.depart_Textc                 C   ó   |   |d¡}|  |¡ d S )NÚaddress©r]  rT  ©r!   rú   rR   r   r   r   Úvisit_addressc  ó   zODFTranslator.visit_addressc                 C   ó   |   ¡  d S r   ©rU  rd  r   r   r   Údepart_addressg  r'   zODFTranslator.depart_addressc                 C   s4   t |jtjƒr|  d¡}n|  |d¡}|  |¡ d S )NrI  Úauthor)rf  r%   r   ÚauthorsrQ  r]  rT  rs  r   r   r   Úvisit_authorj  s   zODFTranslator.visit_authorc                 C   rv  r   rw  rd  r   r   r   Údepart_authorq  r'   zODFTranslator.depart_authorc                 C   s>   d| j jd f }|  d¡}t|dd|  d¡id�}||_d S )NrW  rz  rm  rX  rÞ  rk  rƒ  rY  r[  r   r   r   Úvisit_authorst  s   
þ
zODFTranslator.visit_authorsc                 C   r  r   r   rd  r   r   r   Údepart_authors|  r^   zODFTranslator.depart_authorsc                 C   rp  )NÚcontactrr  rs  r   r   r   Úvisit_contact  ru  zODFTranslator.visit_contactc                 C   rv  r   rw  rd  r   r   r   Údepart_contactƒ  r'   zODFTranslator.depart_contactc                 C   rp  )NÚ	copyrightrr  rs  r   r   r   Úvisit_copyright†  ru  zODFTranslator.visit_copyrightc                 C   rv  r   rw  rd  r   r   r   Údepart_copyrightŠ  r'   zODFTranslator.depart_copyrightc                 C   ó   |   |d¡ d S )NÚdate©r_  rd  r   r   r   Ú
visit_date�  rV  zODFTranslator.visit_datec                 C   r  r   r   rd  r   r   r   Údepart_date�  r^   zODFTranslator.depart_datec                 C   rp  )NÚorganizationrr  rs  r   r   r   Úvisit_organization“  ru  z ODFTranslator.visit_organizationc                 C   rv  r   rw  rd  r   r   r   Údepart_organization—  r'   z!ODFTranslator.depart_organizationc                 C   rp  )NÚstatusrr  rs  r   r   r   Úvisit_statusš  ru  zODFTranslator.visit_statusc                 C   rv  r   rw  rd  r   r   r   Údepart_statusž  r'   zODFTranslator.depart_statusc                 C   r…  )NÚrevisionr‡  rd  r   r   r   Úvisit_revision¡  rV  zODFTranslator.visit_revisionc                 C   r  r   r   rd  r   r   r   Údepart_revision¤  r^   zODFTranslator.depart_revisionc                 C   r…  )NrÀ   r‡  rd  r   r   r   Úvisit_version§  rV  zODFTranslator.visit_versionc                 C   r  r   r   rd  r   r   r   Údepart_version«  ó   zODFTranslator.depart_versionc                 C   s   |   d| ¡ ¡ d S )NrH  )rQ  r7  rd  r   r   r   Úvisit_attribution¯  ó   zODFTranslator.visit_attributionc                 C   r  r   r   rd  r   r   r   Údepart_attribution²  r^   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 )NrY  Úclassesrb  rJ  r   )rC  r˜  rT   r—  rª  r¹  rd  r   r   r   Úvisit_block_quoteµ  s   zODFTranslator.visit_block_quotec                 C   s"   | j  ¡  d| _|  jd8  _d S )Nrm   r   )r˜  Úpoprª  r¹  rd  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r�t| jdd|  d¡id�}| j 	|  d¡¡ n5| j|  d¡kr¬t| 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Þ  ro  rƒ  rW  rn  rO  rJ  rL  rK  rb  rd  rc  rY  r[  rZ  rP  )r­  r«  r¬   r¢   rC  rU   r“  r—  r™  rT   rT  rª  rs  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¢   rU  r™  r›  r­  rd  r   r   r   Údepart_bullet_listò  s   
z ODFTranslator.depart_bullet_listc                 C   ó   t  ¡ ‚r   ©r   ÚSkipChildrenrd  r   r   r   Úvisit_captionþ  r*   zODFTranslator.visit_captionc                 C   r  r   r   rd  r   r   r   Údepart_caption  r^   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 )Nrm  zoffice:annotationrƒ  r   r  rm   rÝ  )rQ  rU   r*  r+  rô   r?   r7  )r!   rú   rR   r0  r  rh   r   r   r   Úvisit_comment  s   
zODFTranslator.visit_commentc                 C   r  r   r   rd  r   r   r   Údepart_comment  r^   zODFTranslator.depart_commentc                 C   r  r   r   rd  r   r   r   Úvisit_compound  r•  zODFTranslator.visit_compoundc                 C   r  r   r   rd  r   r   r   Údepart_compound  r^   zODFTranslator.depart_compoundc                 C   s8   |j  dd¡}t|ƒdkr| j |  |d ¡¡ d S d S ©Nr™  r   r   )rC  rô   rÑ   r˜  rT   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ª  )rC  rô   rÑ   r˜  r›  r«  r   r   r   Údepart_container  s   ÿzODFTranslator.depart_containerc                 C   r  r   r   rd  r   r   r   Úvisit_decoration"  r^   zODFTranslator.visit_decorationc                 C   r  r   r   rd  r   r   r   Údepart_decoration%  r^   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ò   rd  r   r   r   Úvisit_definition_list(  s   
ÿÿz#ODFTranslator.visit_definition_listc                 C   s   |  j d8  _ d S rŸ  )r®  rd  r   r   r   Údepart_definition_list.  ó   z$ODFTranslator.depart_definition_listc                 C   r  r   r   rd  r   r   r   Úvisit_definition_list_item1  r^   z(ODFTranslator.visit_definition_list_itemc                 C   r  r   r   rd  r   r   r   Údepart_definition_list_item4  r^   z)ODFTranslator.depart_definition_list_itemc                 C   s,   |   d| j ¡}| ¡ |_|  |¡ t ¡ ‚)Nzdeflist-term-%d)rQ  r®  r7  r?   rT  r   r£  rs  r   r   r   Ú
visit_term7  s   

zODFTranslator.visit_termc                 C   rv  r   rw  rd  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˜  rT   r—  r®  r¶  r„   rd  r   r   r   Úvisit_definition@  s   ÿzODFTranslator.visit_definitionc                 C   s   | j  ¡  | j ¡  d S r   )r˜  r›  r¶  rd  r   r   r   Údepart_definitionE  ó   
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†  rX  rÞ  rV  rƒ  z (%s))rÑ   r“  rU   r—  r7  r?   ©r!   rú   rR   r0  r   r   r   Úvisit_classifierI  s   
þûzODFTranslator.visit_classifierc                 C   r  r   r   rd  r   r   r   Údepart_classifierQ  r^   zODFTranslator.depart_classifierc                 C   r  r   r   rd  r   r   r   Úvisit_documentT  r^   zODFTranslator.visit_documentc                 C   rv  r   )rM  rd  r   r   r   Údepart_documentW  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)rR  rÞ  rƒ  ©r�  r�  r¬   rŸ   rN  rT  rs  r   r   r   Úvisit_docinfoZ  s   þÿùzODFTranslator.visit_docinfoc                 C   ó&   |  j d8  _ | jjr|  ¡  d S d S rŸ  ©r�  r¬   rŸ   rU  rd  r   r   r   Údepart_docinfof  ó   ÿzODFTranslator.depart_docinfoc                 C   ó(   t | jdd|  d¡id�}|  |¡ d S )NrX  rÞ  rV  rƒ  ©rU   r“  r—  rT  rs  r   r   r   Úvisit_emphasisk  ó
   þzODFTranslator.visit_emphasisc                 C   rv  r   rw  rd  r   r   r   Údepart_emphasisq  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 )NrJ  r�  rÞ  rN  rƒ  rM  rb  rf  re  rY  r]  r\  zenumlist-%sÚenumtypeÚarabicrW  )r“  rª  r—  rU   r™  rT   rô   rT  )r!   rú   r0  r  Úliststylenamer   r   r   Úvisit_enumerated_listt  s,   
ÿ
ÿ
ÿ
ÿz#ODFTranslator.visit_enumerated_listc                 C   s   |   ¡  | j ¡  d S r   )rU  r™  r›  rd  r   r   r   Údepart_enumerated_list�  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˜  rT   r—  r­  rN  rT  rÑ   r¶  rŠ   rŒ   Úranger�   r™  )r!   rú   r0  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›  rU  rÑ   r¶  rŠ   rŒ   rÒ  r�   )r!   rú   rÓ  rÔ  rÕ  r   r   r   Údepart_list_item«  s   



þ
zODFTranslator.depart_list_itemc                 C   ó
   d| _ d S ©NT©r¨  rd  r   r   r   Úvisit_header½  r}   zODFTranslator.visit_headerc                 C   rØ  ©NFrÚ  rd  r   r   r   Údepart_headerÀ  r}   zODFTranslator.depart_headerc                 C   rØ  rÙ  ©r©  rd  r   r   r   Úvisit_footerÃ  r}   zODFTranslator.visit_footerc                 C   rØ  rÜ  rÞ  rd  r   r   r   Údepart_footerÆ  r}   zODFTranslator.depart_footerc                 C   r  r   r   rd  r   r   r   Úvisit_fieldÉ  r^   zODFTranslator.visit_fieldc                 C   r  r   r   rd  r   r   r   Údepart_fieldÌ  r^   zODFTranslator.depart_fieldc                 C   r  r   r   rd  r   r   r   Úvisit_field_listÏ  r^   zODFTranslator.visit_field_listc                 C   r  r   r   rd  r   r   r   Údepart_field_listÒ  r^   zODFTranslator.depart_field_listc                 C   s0   |   d¡}t|dd|  d¡id�}| ¡ |_d S )Nrm  rX  rÞ  rk  rƒ  )rQ  rU   r—  r7  r?   r»  r   r   r   Úvisit_field_nameÕ  s   
þzODFTranslator.visit_field_namec                 C   r  r   r   rd  r   r   r   Údepart_field_nameÜ  r^   zODFTranslator.depart_field_namec                 C   s   | j  |  d¡¡ d S )NrI  )r˜  rT   r—  rd  r   r   r   Úvisit_field_bodyß  s   zODFTranslator.visit_field_bodyc                 C   ó   | j  ¡  d S r   ©r˜  r›  rd  r   r   r   Údepart_field_bodyâ  ó   zODFTranslator.depart_field_bodyc                 C   r  r   r   rd  r   r   r   Úvisit_figureå  r^   zODFTranslator.visit_figurec                 C   r  r   r   rd  r   r   r   Údepart_figureè  r^   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`  r_  )r²  r“  Úsave_footnote_currentrS   r°  rT   rf  râ   r   r`  r˜  r—  ©r!   rú   r0  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²  rd  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   re  Úrefidrm   r>  r_  z	text:noteú%s)r=  r?  rƒ  Úautor   z[%s]ztext:note-citationz
text:labelr!  rò  )r²  rC  rô   r¬   r¡   rN  Ústrrf  râ   r   Úcitation_referencer7  rU   r?   r±  rÑ   r¨   Úfootnote_charsr¯  r£  )
r!   rú   rS  ró  rL  r0  Ú	note_autor`  r  Úfootnote_charr   r   r   Úvisit_footnote_reference  sN   

þÿÿÿÿÿ
z&ODFTranslator.visit_footnote_referencec                 C   r  r   r   rd  r   r   r   Údepart_footnote_reference*  r^   z'ODFTranslator.depart_footnote_referencec                 C   sB   d| _ |jd D ]}|| _ | j |  d¡¡ | j tdƒ¡ d S )NTre  rI  r   )rÀ  rC  rº  r˜  rT   r—  r¶  r„   )r!   rú   rS  r   r   r   Úvisit_citation-  s   zODFTranslator.visit_citationc                 C   s$   d | _ | j ¡  | j ¡  d| _d S rÜ  )rº  r˜  r›  r¶  rÀ  rd  r   r   r   Údepart_citation5  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@  rA  rƒ  ú[)r¬   r    rC  rN  r?   rT  r“  )r!   rú   rS  rR   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    rU  rd  r   r   r   Údepart_citation_referenceI  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 )Nrm  rX  r  ztext:reference-mark-startrR  rô  rƒ  )rf  r%   râ   r   r_  r£  rº  rQ  rT  r¬   r    rU   r?   rN  )r!   rú   rR   Úel0r   r   r   Úvisit_labelN  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-endrR  rô  rƒ  rX  r  )rf  r%   râ   r   r_  rº  r¬   r    rN  rU   r“  r?   rU  )r!   rú   r  r   r   r   Údepart_label]  s   
ÿ÷zODFTranslator.depart_labelc                 C   r  r   r   rd  r   r   r   Úvisit_generatedk  r^   zODFTranslator.visit_generatedc                 C   r  r   r   rd  r   r   r   Údepart_generatedn  r^   zODFTranslator.depart_generatedc                 C   s   t j |¡rdS dS )Nr   r   )r*  r9  Úexists)r!   r9  r   r   r   Úcheck_file_existsq  s   zODFTranslator.check_file_existsc                 C   s&  d|j v rE|j d }| d¡sD| d¡sD| tj¡s3t |¡\}}|r3tj |¡}|r3d|tj|f }|  |¡sD| j	j
 d|f ¡ d S nd S || jv rT| j| \}}nq|  jd7  _tj |¡d }d| j|f }| d¡st| d¡r°z#t|ƒ}| ¡ }	| ¡  tjdd	d
�}
|
 |	¡ |
 ¡  |
j}|}W n tyª   | j	j
 d|f ¡ Y nw ||f}nt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�r||_%d S d S |  $||||¡ d S )NÚurizhttp:zhttps:z%s%s%szCannot find image file %s.r   zPictures/1%08x%sÚwbF)ÚdeletezCan't open image url %s.rÝ  rÞ  rm  rƒ  )&rC  r  r*  Úsepr   Úget_source_liner9  Údirnamer  r«   r×   rØ   r¢  r   rÏ   r   rà   re   rÂ   rÃ   rc   r  r   Úabspathr£  rT   r´  r“  rU   r—  rf  r%   râ   r   ÚfigureÚgenerate_figureÚgenerate_imager  )r!   rú   r  Ú	docsourceÚliner  Úfilenamer	  Úimgfileræ   Úimgfile2ÚimgfilenameÚspecr0  r  r+  Úel4Úel5rQ  r#   Úel6Úwidthr   r   r   Úvisit_imagew  sz   


ÿ€

ÿÿ
þþþ

ÿzODFTranslator.visit_imagec                 C   r  r   r   rd  r   r   r   Údepart_imageµ  r^   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".)
rC  Ú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 )z‘Convert various units to centimeters.

        Note that a call to this method should be wrapped in:
            try: except ValueError:
        ÚpxNéþÿÿÿç9´Èv¾Ÿš?ÚingR¸…ëQ@ÚptgìQ¸…ë¡?Úpcg+‡ÙÎ÷@Úmmr÷  Úcmzunknown unit type)r%  r&  ró  rþ  )r!   r*  r+  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{®Gáz„?g      ð?)rC  Úintrþ  r«   r×   rØ   )r!   rú   r6  r   r   r   Úget_image_scaleé  s(   

ÿÿÿÿÿzODFTranslator.get_image_scalec                 C   sv  |   |¡}|  |d¡\}}|  |d¡\}}d}tdurI|| jv rI| j| \}	}
tj |	d¡}|j d|¡}zt|ƒ W n t	yH   ||f}Y nw d}|du sS|du r§|du r[t
dƒ‚|du rj|jd }t|ƒd	 }|du ry|jd
 }t|ƒd	 }|dkr§|}|jd }t|ƒd	 }|jd
 }t|ƒd	 }|  ¡ }|| }|| | }|| }||9 }||9 }d| }d| }||fS )z=Return the image size in centimeters adjusted by image attrs.r   r$  )éH   r9  Nr
  Údpiz4image size not fully specified and PIL not installedr   r0  r   r#  z%.2fcm)r8  r-  r   r¢  ÚImagerÆ  Úinforô   ÚiterÚ	TypeErrorrò   r*  ró  Úget_page_width)r!   rú   r  r6  r   Ú
width_unitr$  r»   r:  r  r	  r  ÚfactorÚimage_widthÚimage_heightÚ
line_widthr   r   r   Úget_image_scaled_width_heightû  sP   
ÿÿ



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{®Gáz.@)rÚ   Úiterfindrô   r(  rþ  r«   r×   rØ   )	r!   r  r   r   rú   Ú
page_widthÚmargin_leftÚmargin_rightr»   r   r   r   r?  &	  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¡}|r‡d|v r‡d}|rŽd|	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 ))NrQ  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Ý  )rE  r%   Úchildrenri  r7  r¡  rU   r”  ré  ÚnextÚIMAGE_NAME_COUNTERr—  rC  rô   )r!   rú   r  r	  r“  rQ  r   r$  Únode1r#   r0  rë  Ú	draw_namerW  r™  r+  r  r  r   r   r   r  L	  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¡}|r€d|v r€d}|r‡d|	d< nd|	d< |  	|¡r”d|	d< t|
d|	td� dt
tƒ }||ddœ}	t|jtjƒr´d |	d!< nd|	d!< ||	d"< ||	d#< t|d$|	d%�}
t|
d&d'|f d(d)d*d+œd%� |
|fS ),Nr   rT  rï   r  rV  rå  r  Úalign)ÚleftÚcenterÚright)ÚtopÚmiddleÚbottomrj  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-posrn  Fr™  rW  TrX  rY  rZ  rU  r!  )r[  r\  r^  zas-charr]  r_  z
svg:heightr`  rƒ  z
draw:imagerô  ÚsimpleÚembedÚonLoad)ú
xlink:hrefú
xlink:typez
xlink:showzxlink:actuate)rE  r¡  r—  rU   r”  ré  rC  rÏ   rô   Úis_in_tablerb  rc  rf  r%   r   ÚTextElement)r!   rú   r  r	  r“  Úframe_attrsr   r$  rë  r#   r0  ÚhalignÚvalignrf  r\   rW  r™  re  r   r   r   r  —	  sŽ   
ýÿ
€ò

ÿý

üzODFTranslator.generate_imagec                 C   s*   |j }|rt|tjjƒrdS |j }|sdS )NTF)r%   rf  râ   r   Úentry)r!   rú   rd  r   r   r   rt  ë	  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   rR  )	rf  r%   râ   r   r  r“  r˜  rT   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   )rf  r%   râ   r   r  r˜  r›  rU  rd  r   r   r   Údepart_legendú	  s   
üzODFTranslator.depart_legendc                 C   s    |  j d7  _ |  jd7  _d S rŸ  ©r¹  r¸  rd  r   r   r   Úvisit_line_block
  ó   zODFTranslator.visit_line_blockc                 C   s    |  j d8  _ |  jd8  _d S rŸ  r|  rd  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¹  rU   r“  r—  )r!   rú   r<   r0  r   r   r   Ú
visit_line	
  s
   
ÿ
zODFTranslator.visit_linec                 C   rv  r   rw  rd  r   r   r   Údepart_line
  r'   zODFTranslator.depart_linec                 C   rÇ  )NrX  rÞ  rh  rƒ  rÈ  rs  r   r   r   Úvisit_literal
  rÊ  zODFTranslator.visit_literalc                 C   rv  r   rw  rd  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   rX  rÞ  rƒ  r   )	rC  rô   r“  rU   r—  rÑ   rT  rÁ  rT   )r!   rú   r“   rR   Úinline_styleÚcountr   r   r   Úvisit_inline
  s   ÿÿ

zODFTranslator.visit_inlinec                 C   s$   | j  ¡ }t|ƒD ]}|  ¡  q	d S r   )rÁ  r›  rÒ  rU  )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Úmatchr0  rÑ   ÚTABS_PATTERN)r!   r  r…  ÚmatchobjÚpadr   r   r   Ú_calculate_code_block_padding2
  s   

üz+ODFTranslator._calculate_code_block_paddingc                    sX   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>C
  r'   z8ODFTranslator._add_syntax_highlighting.<locals>.<lambda>)Úescape_functionc                    r“  r   r”  r•  r(   r   r   r–  H
  r'   ©r   )ÚpygmentsÚlexersÚget_lexer_by_namer   rs   r   Ú	highlight)r!   ÚinsourcerŠ  ÚlexerÚfmtrÚ	outsourcer   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_lineN
  s   zODFTranslator.fill_linec                 C   s   |  d¡}dt|ƒf }|S )Nr   z<text:s text:c="%d"/>©r0  rÑ   ©r!   r�  ÚspacesÚreplr   r   r   r¤  S
  s   
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¦  X
  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 |¡ q€d S )Nr   z)<text:p text:style-name="%s">%%s</text:p>rU  rT  rŠ  r‡  r`  r†  rm   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—  r7  r™  r¬   rž   rô   r¡  rs   rÏ   r§  ro   rT   r:  ra  rÛ   rÇ  r“  )r!   rú   Úwrapper1r  rŠ  ÚlinesÚlines1Úmy_linesÚmy_lineÚmy_lines_strÚmy_lines_str2rh   r0  rã  r   r   r   Úvisit_literal_block]
  sD   ÿÿÿþ








ÿz!ODFTranslator.visit_literal_blockc                 C   r  r   r   rd  r   r   r   Údepart_literal_block„
  r^   z"ODFTranslator.depart_literal_blockc                 C   ó    | j jjd|d� |  |¡ d S )Nz"math" role not supported©Ú	base_node)r«   r×   rØ   r‚  rd  r   r   r   Ú
visit_math‹
  ó   
ÿzODFTranslator.visit_mathc                 C   ó   |   |¡ d S r   )rƒ  rd  r   r   r   Údepart_math�
  rë  zODFTranslator.depart_mathc                 C   rµ  )Nz"math" directive not supportedr¶  )r«   r×   rØ   r³  rd  r   r   r   Úvisit_math_block“
  r¹  zODFTranslator.visit_math_blockc                 C   rº  r   )r´  rd  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æ   )rC  rô   r·  )r!   rú   r  ræ   r   r   r   Ú
visit_meta›
  s
   ÿzODFTranslator.visit_metac                 C   r  r   r   rd  r   r   r   Údepart_meta¡
  r^   zODFTranslator.depart_metac              
   C   s®  d}| j sàd| _ 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 )2Nrx  Trå  r>   ©ræ  rç  r  ústyle:table-propertiesz17.59cmrg  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�  rU   r”  r—  ré  rN  r?   rT  )r!   rú   Ú
table_namerR   r0  r  r+  r  r   r   r   Úvisit_option_list¤
  s  þþýýþþÿÿþþÿÿÿýýúúÿýýþþÿýýûûÿýýûû
þÿÿÿÿ

ÿ
ýÿÿ
ýÿzODFTranslator.visit_option_listc                 C   rv  r   rw  rd  r   r   r   Údepart_option_list   r'   z ODFTranslator.depart_option_listc                 C   s   |   d¡}|  |¡ d S )Nr×  ©rN  rT  rs  r   r   r   Úvisit_option_list_item  rº  z$ODFTranslator.visit_option_list_itemc                 C   rv  r   rw  rd  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ƒ  )rN  rš  rT  rs  r   r   r   Úvisit_option_group
  s
   
þz ODFTranslator.visit_option_groupc                 C   rv  r   rw  rd  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ƒ  )rN  r7  r?   rs  r   r   r   Úvisit_option  s   ÿzODFTranslator.visit_optionc                 C   r  r   r   rd  r   r   r   Údepart_option  r^   zODFTranslator.depart_optionc                 C   r  r   r   rd  r   r   r   Úvisit_option_string  r^   z!ODFTranslator.visit_option_stringc                 C   r  r   r   rd  r   r   r   Údepart_option_string  r^   z"ODFTranslator.depart_option_stringc                 C   r  r   r   rd  r   r   r   Úvisit_option_argument"  r^   z#ODFTranslator.visit_option_argumentc                 C   r  r   r   rd  r   r   r   Údepart_option_argument%  r^   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æ  )rN  rš  rU   r7  r?   r   r£  r»  r   r   r   Úvisit_description(  s   
þÿ
zODFTranslator.visit_descriptionc                 C   r  r   r   rd  r   r   r   Údepart_description2  r^   z ODFTranslator.depart_descriptionc                 C   s^   d| _ | jr|  d¡}n| jr|  d¡}n| jd }| jdd|id�}|  |¡ |  |¡ d S )NTra  r^  r†  rÝ  rÞ  rƒ  )r´  r¨  rQ  r©  r˜  rN  rO  rT  )r!   rú   rR   rë  r   r   r   Úvisit_paragraph5  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´  rU  r¨  r¦  rT   r“  Úremover©  r§  rd  r   r   r   Údepart_paragraphC  s   þzODFTranslator.depart_paragraphc                 C   r  r   r   rd  r   r   r   Úvisit_problematicM  r^   zODFTranslator.visit_problematicc                 C   r  r   r   rd  r   r   r   Údepart_problematicP  r^   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   g | ]
\}}d ||f ‘qS )z%s="%s"r   )rô  ÚkÚvr   r   r   Ú
<listcomp>Y  s    
ÿÿz+ODFTranslator.visit_raw.<locals>.<listcomp>z<stuff %s>%s</stuff>r‚  r   )rC  rÏ   r7  r:  rW   r‘  rX   ra  rÛ   rÇ  rÑ   r¨  r©  r“  rT   r   r£  )	r!   rú   ÚformatsÚ
formatlistÚrawstrÚattrstrÚ
contentstrræ   r0  r   r   r   Ú	visit_rawS  s*   



þ

üÿzODFTranslator.visit_rawc                 C   s   | j rd S | jr
d S 	 d S r   )r¨  r©  rd  r   r   r   Ú
depart_rawi  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ô  ro  )rr  rs  rƒ  ró  rÿ  r?   r   z3References must have "refuri" or "refid" attribute.r   r   )r¬   r    rš   r  Úcloak_mailtorN  rT  r«   r×   rØ   r«  rÑ   ra  rf  râ   r   Ú	generatedrð  )r!   rú   ÚhrefrR   r   r   r   Úvisit_referenceq  s@   ÿþ

þ
þ€ÿÿÿüzODFTranslator.visit_referencec                 C   s$   | j jrd|v r|  ¡  d S d S d S )Nrþ  )r¬   r    rU  rd  r   r   r   Údepart_reference�  s
   þzODFTranslator.depart_referencec                 C   sT   |   d¡}| d¡}|r|d }|r|}t| jdd|id�}| ¡ }|  |¡|_d S )Nrj  r™  r   râ  rÞ  rƒ  )r—  rô   rU   r“  r7  ra  r?   )r!   rú   rë  r™  Úclass1rR   r?   r   r   r   Úvisit_rubric”  s   

ýzODFTranslator.visit_rubricc                 C   r  r   r   rd  r   r   r   Údepart_rubric£  r^   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_idsrR   r   r   r   Úvisit_section¦  s   
þûzODFTranslator.visit_sectionc                 C   rÃ  rŸ  rÄ  rd  r   r   r   Údepart_section°  rÆ  zODFTranslator.depart_sectionc                 C   rÇ  )NrX  rÞ  rk  rƒ  rÈ  rs  r   r   r   Úvisit_strongµ  s   ÿzODFTranslator.visit_strongc                 C   rv  r   rw  rd  r   r   r   Údepart_strongº  r'   zODFTranslator.depart_strongc                 C   r¡  r   r¢  rd  r   r   r   Úvisit_substitution_definition½  r*   z+ODFTranslator.visit_substitution_definitionc                 C   r  r   r   rd  r   r   r   Údepart_substitution_definitionÀ  r^   z,ODFTranslator.depart_substitution_definitionc                 C   r  r   r   rd  r   r   r   Úvisit_system_messageÃ  r^   z"ODFTranslator.visit_system_messagec                 C   r  r   r   rd  r   r   r   Údepart_system_messageÆ  r^   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Á  rg  Ú0inz0.10in)rÃ  rO  rN  Úmargins)rÃ  rO  rN  rË  rÈ  r…  rÑ  z0.%03dcm solid #000000rÉ  z0.049cmrÑ  r2  rl  rÒ  rÓ  rƒ  g        )rš  r  rÓ  rU   r”  r—  ré  ru   r¬   Útable_border_thicknessr+   ra  ri  r7  rQ  r“  rT  Úcurrent_table_styleÚtable_width)r!   rú   r  rÞ  r0  r  Ú	thicknessÚline_style1r2  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   )rV   ré  r  r  r#   rU  )r!   rú   rJ  Ú	attribvalr0  r  r   r   r   Údepart_table0  s   
zODFTranslator.depart_tablec                 C   s   t dƒd | _d S )Nr…  r   )rp   r›  rd  r   r   r   Úvisit_tgroup8  r³  zODFTranslator.visit_tgroupc                 C   r  r   r   rd  r   r   r   Údepart_tgroup;  r^   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š  ÚchrrU   r”  ré  rN  r  )r!   rú   Úcolspec_namer#  r0  r   r   r   Úvisit_colspec>  s(   þþý
þÿzODFTranslator.visit_colspecc                 C   r  r   r   rd  r   r   r   Údepart_colspecP  r^   zODFTranslator.depart_colspecc                 C   s*   |   d¡}|  |¡ d| _| j d¡ d S )NrÖ  TrÛ  )rN  rT  Úin_theadr˜  rT   rs  r   r   r   Úvisit_theadS  s   

zODFTranslator.visit_theadc                 C   s   |   ¡  d| _| j ¡  d S rÜ  )rU  r(  r˜  r›  rd  r   r   r   Údepart_theadY  s   zODFTranslator.depart_theadc                 C   s&   t dƒd | _|  d¡}|  |¡ d S )Nr…  r   r×  )rp   r›  rN  rT  rs  r   r   r   Ú	visit_row^  s   
zODFTranslator.visit_rowc                 C   rv  r   rw  rd  r   r   r   Ú
depart_rowc  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ô   rN  rT  )r!   rú   Úcellspec_namer#   r-  r/  r0  r   r   r   Úvisit_entryf  s"   
þþzODFTranslator.visit_entryc                 C   rv  r   rw  rd  r   r   r   Údepart_entryz  r'   zODFTranslator.depart_entryc                 C   r  r   r   rd  r   r   r   Úvisit_tbody}  r^   zODFTranslator.visit_tbodyc                 C   r  r   r   rd  r   r   r   Údepart_tbody€  r^   zODFTranslator.depart_tbodyc                 C   s"   d|v sd|v sd|v sd S 	 d S )Nrþ  ró  Úrefnamer   rd  r   r   r   Úvisit_targetƒ  s
   zODFTranslator.visit_targetc                 C   r  r   r   rd  r   r   r   Údepart_targetŽ  r^   zODFTranslator.depart_targetr2  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â  r.  z	heading%d©útext:outline-levelrÞ  rƒ  rÝ  rÞ  T)rf  r%   râ   r   Úsectionr�  r«   r×   rØ   r7  rN  r—  rO  rT  rU   r“  r2  rµ  )r!   rú   r  Ú
title_typer�  r0  r?   r   r   r   Úvisit_title‘  s@   ÿÿÿÿýÿ

ÿ
õzODFTranslator.visit_titlec                 C   s0   t |jtjjƒst |jtjjƒr|  ¡  d S d S r   )rf  r%   râ   r   r;  r«   rU  rd  r   r   r   Údepart_title±  s   ÿþýzODFTranslator.depart_titlec                 C   s   | j ||dd� d S )Nrp  )r<  )r=  )r!   rú   r  r   r   r   Úvisit_subtitle·  r—  zODFTranslator.visit_subtitlec                 C   rº  r   )r>  rd  r   r   r   Údepart_subtitleº  rë  zODFTranslator.depart_subtitlec                 C   s0   | j dd|  d¡id�}|  | ¡ ¡|_t ¡ ‚)NrX  rÞ  ri  rƒ  )rN  r—  ra  r7  r?   r   r£  rs  r   r   r   Úvisit_title_reference½  s
   
ÿz#ODFTranslator.visit_title_referencec                 C   r  r   r   rd  r   r   r   Údepart_title_referenceÃ  r^   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-templater.  rÑ  r9  rƒ  ztext:index-entry-chapterztext:index-entry-textztext:index-entry-tab-stopr¾   ri  )zstyle:leader-charz
style:typeztext:index-entry-page-number)rÒ  rU   r—  )r!   r0  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 )Nrm   )ra  rf  r7  rŠ  rZ  )r!   rú   Ú
class_typeÚ	label_keyr\  Ú
title_noderã  r   r   r   Úfind_title_label×  s   

þÿzODFTranslator.find_title_labelc           
      C   s¸  d|j v rØd|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)rR  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-headingrg  rS  rX  rk  TÚabstractÚ
dedication)rC  rH  râ   r   r2  r¬   r¢   rN  rU   r?   rD  r—  r“  Úsave_current_elementr¬  rT  rQ  r«  )
r!   rú   r\  r0  r  r+  r  r  r  rR   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™  rI  rg  F)	rC  r¬   r¢   Úupdate_toc_page_numbersr¬  rT  rP  rQ  r«  rd  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!   rR   Ú
collectionr   r   r   rR  +  s   z%ODFTranslator.update_toc_page_numbersc                 C   s<   |  ||f¡ |d7 }|D ]}|jdkr|  |||¡ qd S )Nr   rM  )rT   r"   rT  )r!   rR   r…   rV  Úchild_elr   r   r   rT  0  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?   rU   r  )r!   rV  r…   r0  r  r   r   r   rU  7  s   


€ûz$ODFTranslator.update_toc_add_numbersc                 C   s   |   d¡ d S )Nrg  )rQ  rd  r   r   r   Úvisit_transition?  rë  zODFTranslator.visit_transitionc                 C   r  r   r   rd  r   r   r   Údepart_transitionB  r^   zODFTranslator.depart_transitionc                 C   r…  )NrØ   ©Úgenerate_admonitionrd  r   r   r   Úvisit_warningH  rV  zODFTranslator.visit_warningc                 C   rè  r   ré  rd  r   r   r   Údepart_warningK  rë  zODFTranslator.depart_warningc                 C   r…  )NÚ	attentionr[  rd  r   r   r   Úvisit_attentionN  rV  zODFTranslator.visit_attentionc                 C   r…  )NÚcautionr[  rd  r   r   r   Úvisit_cautionS  rV  zODFTranslator.visit_cautionc                 C   r…  )NÚdangerr[  rd  r   r   r   Úvisit_dangerX  rV  zODFTranslator.visit_dangerc                 C   r…  )NÚerrorr[  rd  r   r   r   Úvisit_error]  rV  zODFTranslator.visit_errorc                 C   r…  )NÚhintr[  rd  r   r   r   Ú
visit_hintb  rV  zODFTranslator.visit_hintc                 C   r…  )NÚ	importantr[  rd  r   r   r   Úvisit_importantg  rV  zODFTranslator.visit_importantc                 C   r…  )NÚnoter[  rd  r   r   r   Ú
visit_notel  rV  zODFTranslator.visit_notec                 C   r…  )NÚtipr[  rd  r   r   r   Ú	visit_tipq  rV  zODFTranslator.visit_tipc                 C   sR   d }|j D ]}|jdkr| ¡ }q|d u r | d¡}|r |d }|  |d|¡ d S )Nr2  r™  r   Úgeneric)ra  ri  r7  rô   r\  )r!   rú   r2  rã  Úclasses1r   r   r   Úvisit_admonitionv  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 )NrZ  rÝ  rÞ  zadmon-%s-hdrrƒ  z%s!zadmon-%s-body)ÚhasattrrŠ  rZ  rô   rU   r“  r—  r?   Ú
capitalizer˜  rT   )r!   rú   r\  r2  Útranslated_labelr0  rh   r   r   r   r\  ƒ  s   ÿÿz!ODFTranslator.generate_admonitionc                 C   ó    | j dddid�}|  |¡ d S )NrX  rÞ  zrststyle-subscriptrƒ  rá  rs  r   r   r   Úvisit_subscript–  ó   ÿzODFTranslator.visit_subscriptc                 C   rv  r   rw  rd  r   r   r   Údepart_subscriptœ  r'   zODFTranslator.depart_subscriptc                 C   ru  )NrX  rÞ  zrststyle-superscriptrƒ  rá  rs  r   r   r   Úvisit_superscriptŸ  rw  zODFTranslator.visit_superscriptc                 C   rv  r   rw  rd  r   r   r   Údepart_superscript¥  r'   z ODFTranslator.depart_superscriptc                 C   r  r   r   rd  r   r   r   Úvisit_abbreviation¨  r^   z ODFTranslator.visit_abbreviationc                 C   r  r   r   rd  r   r   r   Údepart_abbreviation«  r^   z!ODFTranslator.depart_abbreviationc                 C   r  r   r   rd  r   r   r   Úvisit_acronym®  r^   zODFTranslator.visit_acronymc                 C   r  r   r   rd  r   r   r   Údepart_acronym±  r^   zODFTranslator.depart_acronymc                 C   r  r   r   rd  r   r   r   Úvisit_sidebar´  r^   zODFTranslator.visit_sidebarc                 C   r  r   r   rd  r   r   r   Údepart_sidebar·  r^   zODFTranslator.depart_sidebarr˜  r‚   r   )r   )r   r2  (	  r   r   r   r�  r   rÄ  r®   rÉ  rÔ  r±   rà  rá  r—  r•  r  rÚ   rð  rñ  rW   rÒ  Ú	code_noner  r/  r/  Úcompiler,  r  r  r  r7  rÊ   r9  r-  r;  r  r.  rM  rN  rQ  rO  rT  rU  r]  r_  ra  rc  rb  rj  rl  rn  ro  rt  rx  r{  r|  r}  r~  r€  r�  rƒ  r„  rˆ  r‰  r‹  rŒ  rŽ  r�  r‘  r’  r“  r”  r–  r˜  rš  rœ  rž  r   r¤  r¥  r¦  r§  r¨  r©  r¬  r­  r®  r¯  r±  r²  r´  rµ  r¶  r·  r¸  r¹  r¼  r½  r¾  r¿  rÂ  rÅ  rÉ  rË  rÏ  rÐ  rÖ  r×  rÛ  rÝ  rß  rà  rá  râ  rã  rä  rå  ræ  rç  rê  rì  rí  rð  rñ  rø  rû  rü  rý  rþ  r  r  r  r  r  r	  r  r!  r"  r-  r(  r8  rE  r?  r  r  rt  rz  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*  r+  r,  r1  r2  r3  r4  r6  r7  r=  r>  r?  r@  rA  rB  rD  rH  rQ  rS  rR  rT  rU  rY  rZ  r]  r^  r`  Údepart_attentionrb  Údepart_cautionrd  Údepart_dangerrf  Údepart_errorrh  Údepart_hintrj  Údepart_importantrl  Údepart_notern  Ú
depart_tiprq  Údepart_admonitionr\  rv  rx  ry  rz  r{  r|  r}  r~  r  r€  r   r   r   r   r¨   2  s   9T
0
 {&

,	(>
+&LÿT'\


(? <r¨   c                   @   s   e Zd Zdd„ ZdS )ÚReaderc                 C   s&   t j | ¡}| jjr|S dd„ |D ƒS )Nc                 S   s   g | ]	}|t jur|‘qS r   )r   ÚDanglingReferences)rô  Úir   r   r   rö  Â  s    
ÿz)Reader.get_transforms.<locals>.<listcomp>)r   rŽ  Úget_transformsr¬   r    )r!   r–   r   r   r   r‘  ¾  s   zReader.get_transformsN)r   r   r   r‘  r   r   r   r   rŽ  ¼  s    rŽ  )_Ú__doc__Ú
__future__r   Ú__docformat__ra   r*  Úos.pathrÂ   rÄ   Ú	xml.etreer   rÛ   Úxml.domr   rý   r/  rD  Ú	itertoolsÚweakrefrÔ   ÚImportErrorrâ   r   r   r   r	   r
   Údocutils.readersr   Údocutils.transformsr   rb   Úconfigparserr   Úior   Úurllib.requestr   Úurllib.errorr   Úurllib2r)  r…  rc  r™  Úpygments.lexersÚpygmentsformatterr   r   ÚSyntaxErrorÚ	PIL.Imager   r;  ÚobjectÚWeakKeyDictionaryr    rf  rS   Ú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&  rU   rO   rV   ri   rs   rt   r  r„   r‘   rˆ  r¨   rŽ  r   r   r   r   Ú<module>   sD  ÿ
ÿ
ÿ€ù



þýüûúùø	÷
öõôóòñðîíæþýüûúùø	÷
öõôóòñðïîêÿ
úþýüûúùø	÷
öõôòñðïîíæþýüûúùø	÷
öõôòñðïîíéÿú
	ÿ   0                     