o f'ha9  @s2dZddlmZdZddlZddlZddlZddlZddlZddl m Z ddl m Z ddlZddlZddlZddlZddlZzddlZWn eyMYnwddlZddlmZmZmZmZmZddlmZdd lmZejd krdd l m!Z!dd l"m#Z#dd l$m%Z%ddl&m'Z'ndd l!m!Z!dd l#m#Z#ddl(m'Z'dd l(m%Z%dZ)e*Z+zddl,Z,ddl-Z,ddl.m/Z/m0Z0Wn ee1fydZ,Ynwzddl2Z3Wn&eyzddl4Z4Gddde5Z3e4e3_4Wn eydZ3YnwYnwe6Z7e8e j9e:re j9Z;ne j;Z;Gddde;Ze=dZ?e=dZ@e=dZAdZBdeBZCdZDdZEdZFidd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3eFd4d5d6d7d8d9d:d;dd?d@dAdBdCdDdEdFdGZGZHidd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3eFd:d;d4d5d6d7d8d9dd?d@dAdBdDdHZIZJdIdJiZKZLd"d0eFd5dDdKZMZNidLd dMd"dNd$dOd&dPd(dQd*dRd,dSd.dTd0dUd2dVeFdWd;dXd5dYd7dZd9d[d=d\d?d@dAdBdCdDdEdFd]ZOidLd dMd"dNd$dOd&dPd(dQd*dRd,dSd.dTd0dUd2dVeFdWd;dXd5dYd7dZd9d[d=d\d?d@dAdBdDd^ZPd_dJiZQd"d0eFd5dDd`ZRddeHfdadbZ9ddeHfdcddZSdedfZTeHfdgdhZUdidjZVdkdlZWGdmdndne5ZXeXdodpZYGdqdrdre5ZZGdsdtdtej[Z[Gdudvdvej\Z]Gdwdxdxej^Z^dS)yz% Open Document Format (ODF) Writer. )absolute_importreStructuredTextN) ElementTree)minidom)frontendnodesutilswriters languages) standalone) referencesr) ConfigParser)StringIO)urlopen) HTTPErrorz1.0a)OdtPygmentsProgFormatterOdtPygmentsLaTeXFormatterc@s eZdZdS)PILN)__name__ __module__ __qualname__rrC/usr/lib/python3/dist-packages/docutils/writers/odf_odt/__init__.pyrFsrc@s&eZdZdddZddZddZdS) _ElementInterfaceWrapperNcCst|||dt|<dSN)_ElementInterface__init___parents)selftagattribrrrrcs z!_ElementInterfaceWrapper.__init__cCs |t|<dSrr )r!parentrrr setparentg z"_ElementInterfaceWrapper.setparentcCst|Srr$r!rrr getparentjz"_ElementInterfaceWrapper.getparentr)rrrrr&r)rrrrrbs  rz( +)z(\t+)z^ +z {2,}zrststyle-table-z%s0)borderz border-topz border-leftz border-rightz border-bottomzDocutils.org/odf_odtz0urn:oasis:names:tc:opendocument:xmlns:office:1.0chartz/urn:oasis:names:tc:opendocument:xmlns:chart:1.0dcz http://purl.org/dc/elements/1.1/domz!http://www.w3.org/2001/xml-eventsdr3dz.urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0drawz1urn:oasis:names:tc:opendocument:xmlns:drawing:1.0foz;urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0formz.urn:oasis:names:tc:opendocument:xmlns:form:1.0mathz"http://www.w3.org/1998/Math/MathMLmetaz.urn:oasis:names:tc:opendocument:xmlns:meta:1.0numberz3urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0officeoooz!http://openoffice.org/2004/officeoooczhttp://openoffice.org/2004/calcooowz!http://openoffice.org/2004/writer presentationz6urn:oasis:names:tc:opendocument:xmlns:presentation:1.0scriptz0urn:oasis:names:tc:opendocument:xmlns:script:1.0stylez/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.0zhttp://www.w3.org/2002/xformszhttp://www.w3.org/1999/xlinkz http://www.w3.org/2001/XMLSchemaz)http://www.w3.org/2001/XMLSchema-instance)svgtabletextxformsxlinkxsdxsi)r=r>r?rAmanifestz2urn:oasis:names:tc:opendocument:xmlns:manifest:1.0)r-r4r6r7rAz xmlns:chartxmlns:dcz xmlns:domz xmlns:dr3dz xmlns:drawzxmlns:foz xmlns:formz xmlns:math xmlns:meta xmlns:number xmlns:officezxmlns: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)rKrLrMrNzxmlns:manifest)rErFrHrIrNcCs*|duri}t|||\}}t||}|Sr)fix_nsr)r"r#nsmapnsdictelrrrElements  rScCs>|duri}t|||\}}t||}|||||Sr)rOrappendr&)r%r"r#rPrQrRrrr SubElements   rUcCs>t||}i}t|D] \}}t||}|||<q ||fSr)add_nslistitems)r"r#rQnstagnsattribkeyvalnskeyrrrrO&s   rOcCs|Srr)r"rQrrrrV/rVcCs>t}tjdkr|j|ddn|||}||S)Nr unicode)encoding)rsys version_infowritegetvalueclose)et outstreams1rrrToString3s  ricCsb|dd}|dd}|dd}d}|D]}t|tdkr*|d t|f7}q||7}q|S) N&z&z>z&#x%X;)replaceord)r?asciicharrrr escape_cdata>s    rsc@sJeZdZd ddZddZddZeeeZdd Zd d Z eee Z dS) TableStyleNcCs||_||_dSr)r+backgroundcolor)r!r+rurrrrQs zTableStyle.__init__cC|jSrborder_r(rrr get_border_UzTableStyle.get_border_cC ||_dSrrw)r!r+rrr set_border_X zTableStyle.set_border_cCrvrbackgroundcolor_r(rrrget_backgroundcolor_]rzzTableStyle.get_backgroundcolor_cCr{rr~)r!rurrrset_backgroundcolor_`r}zTableStyle.set_backgroundcolor_NN) rrrrryr|propertyr+rrrurrrrrtPs  rtz0.0007in solid #000000)r+c@sFeZdZdddZddZddZdd Zd d Zd d ZddZ dS) ListLevelTcCs||_||_||_dSr)level sibling_level nested_level)r!rrrrrrrms zListLevel.__init__cCr{rr)r!rrrr set_siblingrr}zListLevel.set_siblingcCrvrrr(rrr get_siblingurzzListLevel.get_siblingcCr{rr)r!rrrr set_nestedxr}zListLevel.set_nestedcCrvrrr(rrr get_nested{rzzListLevel.get_nestedcCr{rr)r!rrrr set_level~r}zListLevel.set_levelcCrvrrr(rrr get_levelrzzListLevel.get_levelN)TT) rrrrrrrrrrrrrrrls  rc@sZeZdZdZdZdZ deZee j e de j e eeZdZee j e de j e eeZddd ed ged d fd dgddifddgdddejdfddgdddejdfddgdejdfddgdddejdfd d!gdddejdfd"d#gd$dd%ejdfd&d'gd$dd%ejdfd(d)gddd*ejdfd+d,gddd*ejdfd-d.gddd/ejdfd0d1gddd/ejdfd2d3gd$dd4ejdfd5d6gd$dd4ejdfd7d8gd9d:d fd;dd?iZd@ZdAZdBZdCdDZdEdFZdGdHZdIdJZej fdKdLZ!dMdNZ"dOdPZ#dQdRZ$dSdTZ%dUdVZ&dWdXZ'dYdZZ(dS)[Writerz'application/vnd.oasis.opendocument.textz.odt)odtstylesdummyz template.txtzODF-Specific OptionsNz$Specify a stylesheet. Default: "%s"z --stylesheet stylesheet)defaultdesta}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-filemetavarzzyObfuscate email addresses to confuse harvesters while still keeping email links usable with standards-compliant browsers.z--cloak-email-addressesF store_truecloak_email_addresses)ractionr 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)rrz/Add syntax highlighting in literal code blocks.z--add-syntax-highlightingadd_syntax_highlightingz@Do not add syntax highlighting in literal code blocks. (default)z--no-syntax-highlightingz'Create sections for headers. (default)z--create-sectionsTcreate_sectionsz#Do not create sections for headers.z --no-sectionsz Create links.z--create-links create_linkszDo not create links. (default)z --no-linkszFGenerate endnotes at end of document, not footnotes at bottom of page.z--endnotes-end-docendnotes_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-tocgenerate_oowriter_toczHGenerate an ODF/oowriter table of contents, not a bullet list. (default)z--generate-oowriter-toczSpecify the contents of an custom header line. See odf_odt writer documentation for details about special field character sequences.z--custom-odt-headerrm custom_headerzSpecify the contents of an custom footer line. See odf_odt writer documentation for details about special field character sequences.z--custom-odt-footer custom_footeroutput_encoding_error_handlerxmlcharrefreplace)stylesheet_pathzodf_odt writer)r cCstj|t|_dSr)r rr ODFTranslatortranslator_classr(rrrrs  zWriter.__init__cCsV|jj|_||j|_|j|j|j|j|j||j d|_ dS)Nwhole) documentsettingsrvisitorretrieve_styles EXTENSION walkabout add_doc_titleassemble_my_partspartsoutputr(rrr translate"s  zWriter.translatecCstj|t}t|dtj}|j|d|j tj d|j }||d|| }||d||}||d||}d}d}|j jr|j jdd }|d }|d }|d dD]}t|d krv|rv|}n t|d kr~nqd|durzt|} Wn ty|} Ynw| d} t| d kr| d d } | d }|dur|jjd||j ||\} } } | rt | }||d||!||"||#|$d |%} |#| |j&d<|jj'j(|j&d<t)j*|j&d<dS)zEAssemble the `self.parts` dictionary. Extend in subclasses. wmimetype) compress_type content.xmlzMETA-INF/manifest.xmlmeta.xmlN_-rr.zinvalid language-region. Could not find region with locale.normalize(). Please specify both language and region (ll-RR). Examples: es-MX (Spanish, Mexico), en-AU (English, Australia). styles.xmlrr`version)+r rassemble_partstempfileNamedTemporaryFilezipfileZipFile ZIP_DEFLATED write_zip_str MIME_TYPE ZIP_STOREDrcontent_astextcreate_manifest create_metaget_stylesheet language_coderosplitlowerlenisalphaupperlocale normalize NameErrorrreporterwarningupdate_stylesheetget_dom_stylesheetetreetostringstore_embedded_filescopy_from_stylesheetreseekreadrroutput_encodingdocutils __version__)r!fzfilecontentrhr region_code language_idssubtagrcodeupdatednew_dom_styles updated_noderrrrr+sp               zWriter.assemble_my_partsc Csd}t}|dus |duro|d}|durtd|d}|s%td|D]G}|jd} | dks7| d krn|d } | durDtd |durY|| jd <|| jd <d}|| |durn|| jd<|| jd<d}|| q'|||fS)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 paragraphgraphicz@{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)setfind RuntimeErrorfindallr#getadd) r!stylesheet_rootrrrmodified_nodesn1n2_nodesnodefamilyn3rrrrpsj   zWriter.update_stylesheetcCs6tt}t||}d|_||_|||dS)NlH)time localtimerZipInfo external_attrrwritestr)r!rnamebytesrrzinforrrrs  zWriter.write_zip_strc Cs\|j}|D]$\}}|durqz|||Wqty+|jjd|fYqwdS)NzCan't open file %s.)rget_embedded_file_listrcOSErrorrrr)r!rembedded_filessource destinationrrrrs   zWriter.store_embedded_filescCs*|jj}t|d}|d}||S)z. modeled after get_stylesheet r settings.xml)rrrrrre)r! stylespathrrhrrr get_settingss   zWriter.get_settingscCs|j}|S)zXGet the stylesheet from the visitor. Ask the visitor to setup the page. )r setup_page)r!rhrrrrs zWriter.get_stylesheetcCsj|jj}t|d}|d}||d||}|D]}|dr.||}|||q| dS)zLCopy images, settings, etc from the stylesheet doc into target doc. r r z Pictures/N) rrrrrrnamelist startswithrre)r! outzipfiler  inzipfilerhrrimageobjrrrrs      zWriter.copy_from_stylesheetcCdSrrr(rrrrr^zWriter.assemble_partscCstdttd}t|}t|d|jddtdt|ddddtdt|ddddtdt|ddd dtdt|ddd dtdt|}t |}| d }|S) Nzmanifest:manifestr#rQzmanifest:file-entry/)zmanifest:media-typezmanifest:full-pathztext/xmlrrr rz ) rSMANIFEST_NAMESPACE_ATTRIBMANIFEST_NAMESPACE_DICTrrrUrMANNSDrir parseString toprettyxml)r!rootdocrhrrrrsP   zWriter.create_manifestc Cstdttd}t|}t|dtd}t|dtd}dtf|_t j dd}t|d td}||_t d t }t|d td}||_t|d td}||_t|d td}||_t|dtd}d|_t|dtd}d|_t|dtd}d|_|j}t|dtd}|r||_nd|_|jD]I\}}|dkrtd|} | D] } t|dtd}| |_qq|dkrt|dtd}||_q|dkrt|dtd}||_qt|dd|itd}||_qt|}|S)Nzoffice:document-metarz office:metarQzmeta:generatorzDocutils/rst2odf.py/%sUSERrmzmeta:initial-creatorz%Y-%m-%dT%H:%M:%Szmeta:creation-date dc:creatorzdc:datez dc:languagezen-USzmeta:editing-cycles1zmeta:editing-durationPT00M01Szdc:titlez [no title]keywordsz, *z meta:keyword descriptionzdc:descriptionsubjectz dc:subjectzmeta:user-definedz meta:name)rSMETA_NAMESPACE_ATTRIBMETA_NAMESPACE_DICTrrrUMETNSDVERSIONr?osenvironrrstrftimerr get_title get_meta_dictrXrerri) r!rrel1rhs2titlepropvaluer#keywordrrrrsb    zWriter.create_meta))rrrrr supporteddefault_stylesheetr relative_pathr*pathjoingetcwdr_datadir__file__default_stylesheet_pathdefault_templatedefault_template_pathrvalidate_booleanvalidate_nonnegative_int settings_specsettings_defaultsrelative_path_settingsconfig_sectionconfig_section_dependenciesrrrrrrrrr rrrrrrrrrrsF  { E3     rc@s eZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ dddZ ddZ ddZddZddZddZeed\ZZZed Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Z d/d0Z!d1d2Z"d3d4Z#d5d6Z$dd8d9Z%dd:d;Z&dd?Z(d@dAZ)dBdCZ*dDdEZ+dFdGZ,dHdIZ-dJdKZ.dLdMZ/dNdOZ0dPdQZ1dRdSZ2dTdUZ3dVdWZ4dXdYZ5dZd[Z6d\d]Z7d^d_Z8d`daZ9dbdcZ:dddeZ;dfdgZdldmZ?dndoZ@dpdqZAdrdsZBdtduZCdvdwZDdxdyZEdzd{ZFd|d}ZGd~dZHddZIddZJddZKddZLddZMddZNddZOddZPddZQddZRddZSddZTddZUddZVddZWddZXddZYddZZddZ[ddZ\ddZ]ddZ^ddZ_ddZ`ddZaddZbddZcddZdddZeddZfddZgddZhddZiddÄZjddńZkddDŽZlddɄZmdd˄Zndd̈́ZoddτZpddфZqddӄZrddՄZsddׄZtddلZuddۄZvdd݄Zwdd߄ZxddZyddZzgdZ{ddZ|ddZ}ddZ~ddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZd d Z 7dd d Zd dZddZddZddZddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0ZeZeZd1d2Zd3d4Zd5d6Zd7d8Zd9d:Zd;d<Zd=d>Zd?d@ZdAdBZdCdDZdEdFZdGdHZdIdJZdKdLZdMdNZdOdPZdQdRZdSdTZdUdVZdWdXZdYdZZd[d\Zd]d^Zd_d`ZdadbZdcddZdedfZdgdhZdidjZdkdlZddndoZdpdqZÐdrdsZĐdtduZŐdvdwZƐdxdyZǐdzd{ZȐd|d}Zɐd~dZʐddZːddZ̐ddZ͐ddZΐddZϐddZАddZѐddZҐddZӐddZԐddZՐddZ֐ddZאddZؐddZِddZڐdddZېddZܐdddZݐddZސddZߐddZddZddZddZddZddZddZddZddZddZddZdd„ZdÐdĄZeZdŐdƄZeZdǐdȄZeZdɐdʄZeZdːd̄ZeZd͐d΄ZeZdϐdЄZeZdѐd҄ZeZdӐdԄZeZddՐdքZdאd؄ZdِdڄZdېd܄ZdݐdބZdߐdZddZddZddZddZddZd7S(r)[ attribution blockindent blockquoteblockquote-bulletitemblockquote-bulletlistblockquote-enumitemblockquote-enumlist bulletitem bulletlistcaptionlegendcenteredtextbody codeblockcodeblock-indentedzcodeblock-classnamezcodeblock-commentzcodeblock-functionnamezcodeblock-keywordzcodeblock-namezcodeblock-numberzcodeblock-operatorzcodeblock-stringemphasisenumitemenumlistepigraphepigraph-bulletitemepigraph-bulletlistepigraph-enumitemepigraph-enumlistfooterfootnotecitationheader highlightshighlights-bulletitemhighlights-bulletlisthighlights-enumitemhighlights-enumlisthorizontalline inlineliteral quotationrubricstrong table-titletextbody tocbulletlist tocenumlistr2subtitleheading1heading2heading3heading4heading5heading6heading7zadmon-attention-hdrzadmon-attention-bodyzadmon-caution-hdrzadmon-caution-bodyzadmon-danger-hdrzadmon-danger-bodyzadmon-error-hdrzadmon-error-bodyzadmon-generic-hdrzadmon-generic-bodyzadmon-hint-hdrzadmon-hint-bodyzadmon-important-hdrzadmon-important-bodyzadmon-note-hdrzadmon-note-bodyz admon-tip-hdrzadmon-tip-bodyzadmon-warning-hdrzadmon-warning-body tableoptionztableoption.%cztableoption.%c%dzTable%dz Table%d.%cz Table%d.%c%d lineblock1 lineblock2 lineblock3 lineblock4 lineblock5 lineblock6image figureframecCs2tj|||j|_|jj|_t|j|j|_i|_ |jj rVt }| |jj | dD]&\}}||jvrB|jjd|ftjdkrM||j |<q/|d|j |<q/d|_d|_tdtd}tj|d|_||_t|d t|d t|d }||_t|d }||}||_||_| d g|_!g|_"d|_#t$dd|_%d|_&d|_'d|_(d|_)d|_*d|_+d|_,i|_-g|_.d|_/d|_0g|_1g|_2d|_3d|_4d|_5d|_6d|_7d|_8d|_9i|_:g|_;d|_d|_?d|_@g|_Ai|_Bd|_Cd|_Dd|_Ed|_Fd|_Gd|_Hd|_Id|_Jd|_Kg|_LdS)NFormatsz,Style "%s" is not a style used by odtwriter.r utf-8rzoffice:document-contentr#)elementzoffice:scriptszoffice:font-face-declszoffice:automatic-stylesz office:bodyrmArFpythonrm)MrGenericNodeVisitorrrrr get_languagerlanguage format_mapodf_config_filerrrX used_stylesrrrarbdecode section_level section_countrSCONTENT_NAMESPACE_ATTRIBrr content_treecurrent_elementrUautomatic_stylesgenerate_content_elementbody_text_elementrststyleparagraph_style_stacklist_style_stack table_countrp column_count trace_leveloptiontablestyles_generated field_name field_elementr2 image_countimage_style_count image_dictembedded_file_listsyntaxhighlightingsyntaxhighlight_lexerheader_contentfooter_content in_header in_footer blockstylein_table_of_contentstable_of_content_index_body list_leveldef_list_levelfootnote_ref_dict footnote_listfootnote_chars_idxfootnote_level pending_ids in_paragraphfound_doc_titlebumped_list_level_stack meta_dictline_block_levelline_indent_level citation_id style_indexstr_stylesheetstr_stylesheetcontentdom_stylesheet table_styles in_citationinline_style_count_stack)r!rparserrformatrrRrrrrms          zODFTranslator.__init__cCrvr)rr(rrrget_str_stylesheetrzz ODFTranslator.get_str_stylesheetcCsd}|jj}tj|d}|dkr t|d}|}|n!||kr9t |d}|d}|d}|nt d||f||_ ||_ t |j |_t |j |_|||_dS)z|Retrieve the stylesheet from either a .xml file or from a .odt (zip) file. Return the content as a string. Nrz.xmlr rrz,stylesheet path (%s) must be %s or .xml file)rrr*r9splitextopenrrerrrrrr fromstringrdom_stylesheetcontentextract_table_stylesr)r! extensionr1r ext stylesfilerhrrrrrs,      zODFTranslator.retrieve_stylesc Cst|}i}|dtdf}|D]u}|dtdf}|dd}|dtdf}|tr||} | durEt} | ||<|dkrj|d tdf} | d td d f} | duri| d kri| | _ q|dkr|dtdf} | dur| | } | dur| | _ q|S)N{%s}automatic-stylesr6{%s}namer<rrz {%s}familyr>z{%s}table-properties{%s}%sr1zbackground-colornone table-cellz{%s}table-cell-properties) rrrCNSDrrrTABLESTYLEPREFIXrtru get_propertyr+) r! styles_strrr auto_styles stylenoder tablenamer tablestyle propertiesrr+rrrrsD       z"ODFTranslator.extract_table_stylescCs@d}tD]}|dtd|f}|dur|dkr|Sq|S)Nrr1r)TABLEPROPERTYNAMESrr)r!rr+ propertynamerrrrszODFTranslator.get_propertycCsh|jj}|r!||_|js!tdd|did}||_|jd|||j}|dur2| |dSdS)Ntext:ptext:style-namer2rr) rr2rrSrr?rinsertfind_first_text_pattach_page_style)r!r?rRrrrrs  zODFTranslator.add_doc_titlecCs@|jdks |jdkr |S|D]}||}|dur|SqdS)zHSearch the generated doc and return the first element. rtext:hN)r"r)r!rRchildr0rrrrs   zODFTranslator.find_first_text_pcCsH|d}d}t|jd|dddtd}|r|d||d|d S) zAttach the default page style. Create an automatic-style that refers to the current style of this element and that refers to the default page style. rP1003 style:stylezrststyle-pagedefaultr) style:namezstyle:master-page-name style:familyrstyle:parent-style-nameN)rrUrSNSDr)r!rR current_style style_namer0rrrr s  zODFTranslator.attach_page_stylercCs||}|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)rr)r!r parametersname1 stylenamerrrr2szODFTranslator.rststylecCs t|dS)Nz office:text)rU)r!rrrrr>r}z&ODFTranslator.generate_content_elementcCsT||jt|jdkst|jdks|jjs|jjr"||jt |j}|SNr) setup_paperrrrrrrradd_header_footerrr)r! new_contentrrrrAs   zODFTranslator.setup_pagecCrvr)rr(rrrrKrzz ODFTranslator.get_dom_stylesheetc sz,ztd}|}dd|D\Wnttfy&d\YnwW|n|wfdd|dS)Nzpaperconf -s 2> /dev/nullcss|]}t|VqdSr)float).0srrr Rsz,ODFTranslator.setup_paper..)idics|jdtdkrVdtd|jvrVd|jdtd<d|jdtd<dd|jdtd<|jd td<dd|jd td<|jd td<dS|D]}|qXdS) Nz{%s}page-layout-propertiesr<z{%s}page-widthr1z%.3fptz{%s}page-height皙?z{%s}margin-leftz{%s}margin-rightz{%s}margin-topz{%s}margin-bottom)r"rr#)rRsubelhrwalkrrrXs   z'ODFTranslator.setup_paper..walk)r*popenrrIOError ValueErrorre)r!root_elfin dimensionsrrrrNs    zODFTranslator.setup_paperc Csz|dtd}dtf}||}|durdSdtdf}||}d}dtdf}|d}|D] }|||krB|}nq5|durIdS|} |jsR|jjrt | dt t d } |jD]}t d td } |d |j | <| |q]|jjr|| |jjd ||js|jjrt | d t t d } |jD]}t d td } |d|j | <| |q|jjr|| |jjd|dSdSdS)Nrr6z{%s}master-stylesz{%s}master-pager<r pagedefaultz style:headerrrrraz style:footerr^)rr NAME_SPACE_1rrrrrrrUSTYLES_NAMESPACE_ATTRIBSTYLES_NAMESPACE_DICTrVr#rTcreate_custom_headfootrr) r!rrr9 master_elmaster_el_container target_attrib target_namerRr0el2attrkeyrrrrhsh              zODFTranslator.add_header_footerrz%(..?)%c Cst|dd||id}d}||}|D]E}|dtjkrK|ddvr/d|df}t||||d||} | durHd|df}t|| }q|durU|d|_q|d|_qdS)Nrrrrr)pPt1t2t3t4d1d2d3d4d5rtazbad field spec: %%%s%%) rUrsplit_field_specifiers_iterr code_fieldrmake_field_elementr?tail) r!r%r?rrr field_iteritemmsgr0rrrrs,      z$ODFTranslator.create_custom_headfootcCs|dkrt|dddid}|S|dkrt|did}|S|dkrf|jd 7_t|d ||d d |jd d}t|dd |jtdtddd}t|dddid}t|d}d|_t|dddid}|S|dkr|jd 7_t|d ||d d |jd d}t|dd |jtdtddd}t|dddid}t|d}d|_t|dddid}t|d}d|_t|dddid}|S|dkr|jd 7_t|d ||d d |jd d}t|dd |jtdtddd}t|dddid}t|d}d|_t|dddid}t|d}d|_t|d}|S|dkr|jd 7_t|d ||d d |jd d}t|dd |jtdtddd}t|dddid}t|d}d|_t|dddid}t|d}d|_t|dddid}t|d}d|_t|d}|S|dkr|jd 7_t|d||d |jd!d}t|d"d |jd tdtdd#d}t|d$ddid}t|d}d%|_t|d&ddid}t|d}d%|_t|d'}|S|d(kr6|jd 7_t|d||d |jd!d}t|d"d |jd tdtdd#d}t|d$ddid}t|d}d%|_t|d&ddid}t|d}d%|_t|d'ddid}|S|d)kr|jd 7_t|d||d |jd!d}t|d"d |jd tdtdd#d}t|d$d*d id}t|d}d|_t|d&id}t|d}d+|_t|d'ddid}|S|d,kr|jd 7_t|d||d |jd!d}t|d"d |jd tdtdd#d}t|d$d dd-d}t|d}d|_t|d&id}t|d}d+|_t|d'ddid}|S|d.krF|jd 7_t|d||d |jd!d}t|d"d |jtdtddd}t|d'ddid}t|d}d/|_t|d$ddid}t|d}d/|_t|d&ddid}|S|d0krYt|d1d2||id}|S|d3krlt|d4d2||id}|S|d5kr|t|d6d7d8id}|Sd}|S)9Nr ztext:page-numberztext:select-pagecurrentrrztext:page-countrrz text:timetruezrst-time-style-%d)r text:fixedstyle:data-style-nameznumber:time-styler5r<)rrGrJz number:hours number:stylelongz number:text:znumber:minutesrznumber:secondsr z number:am-pmrrz text:datezrst-date-style-%d)rr$znumber:date-style)rznumber:automatic-orderrGrJz number:monthrz number:dayz number:yearrrnumber:textualz, r)r)r%rrrz text:subjectrrz text:titlerztext:author-namer#false)rUrrrr?)r!r%r?rrr0r el3rrrrs wr   ]    C      )             s     [     C     *          z ODFTranslator.make_field_elementccsd} tj||}|r-|}||krtj|||fVtj|dfV|}nnq||d}|r?tj|fVdSdS)NrTr)r field_patsearchstart code_textrgroupend)r!r?pos1mopos2trailingrrrrs   z)ODFTranslator.split_field_specifiers_itercCs |j}t|}t|}|Sr)rgetrootrrri)r!rrfrhrrrastexts  zODFTranslator.astextcCs|Sr)r7r(rrrrr*zODFTranslator.content_astextcCr{rr2)r!r2rrr set_titler}zODFTranslator.set_titlecCrvrr8r(rrrr-rzzODFTranslator.get_titlecCr{rr)r!rrrrset_embedded_file_listr}z$ODFTranslator.set_embedded_file_listcCrvrr:r(rrrrrzz$ODFTranslator.get_embedded_file_listcCrvr)rr(rrrr.rzzODFTranslator.get_meta_dictcCs|jD]\}}|jdg}d}|D]u}|j|}|dur|r-d}t|}||qt|dkr|d}|j} t dt d} || d} | durLd} t d t d} | |_ |j j r\d } nd } |jt d t d} | |j| <t d t d} | |j| <t dt d} d|j| <| |_qqdS)NbackrefsTFrtext:idrzfootnote-errorrmz text:note-refendnoter_text:note-class text:ref-nametext:reference-formatpage)r attributesrrcopydeepcopyrTrr?rVrr"rrr#clear)r!rr0r<firstrefr r+rref1 attribkeyid1r" note_classrrrprocess_footnotessF             zODFTranslator.process_footnotesNcCs|dur|j}t|||}|Sr)rrU)r!r"r#r%rRrrr append_childs zODFTranslator.append_childcCs4|jdd||id}|||dur||_|S)Nrrr)rNrappend_pending_idsr?)r!r<r?resultrrrappend_ps  zODFTranslator.append_pcCs0|jjr|jD] }t|dd|idqg|_dS)Nztext:reference-mark text:namer)rrrrU)r!rRidrrrrOs   z ODFTranslator.append_pending_idscCr{r)r)r!rRrrrset_current_elementr}z!ODFTranslator.set_current_elementcCs|j|_dSr)rr)r(rrr set_to_parentzODFTranslator.set_to_parentcCsHd|jj|f}|d}t|dd|did}||_|d}|S)N%s:rm text:spanrrkrrIrlabelsrQrUrr?r!rlabelrRr0rrrgenerate_labeled_block   z$ODFTranslator.generate_labeled_blockcCsHd|jj|f}|d}t|dd|did}||_||_|S)NrWrmrXrrkr)rrZrQrUrr?r7rr[rrrgenerate_labeled_line&r^z#ODFTranslator.generate_labeled_linecCs|dd}|S)N r()ro)r!r?rrrencode0s zODFTranslator.encodecCs||tj||dS)z9Override to catch basic attributes which many nodes have.N)handle_basic_attsrrdispatch_visitr!rrrrrc;s zODFTranslator.dispatch_visitcCs2t|tjr|dr|j|d7_dSdSdS)Nids) isinstancerrSrrdrrrrb@szODFTranslator.handle_basic_attscC|jjd|jfdS)Nzmissing visit_%srrrtagnamerdrrr default_visitDzODFTranslator.default_visitcCrg)Nzmissing depart_%srhrdrrrdefault_departureGrkzODFTranslator.default_departurecCst|jtjjr dS|}t|jdkr/|jdjr'|jdj|7_dS||jd_dS|jj r=|jj |7_ dS||j_ dS)Nrr) rfr%rr literal_blockr7rrrr?)r!rr?rrr visit_TextJs  zODFTranslator.visit_TextcCrrrrdrrr depart_Text\r^zODFTranslator.depart_TextcC||d}||dS)Naddressr]rTr!rrRrrr visit_addressc zODFTranslator.visit_addresscC |dSrrUrdrrrdepart_addressgr'zODFTranslator.depart_addresscCs4t|jtjr |d}n||d}||dS)NrIauthor)rfr%rauthorsrQr]rTrsrrr visit_authorjs  zODFTranslator.visit_authorcCrvrrwrdrrr depart_authorqr'zODFTranslator.depart_authorcCs>d|jjdf}|d}t|dd|did}||_dS)NrWrzrmrXrrkrrYr[rrr visit_authorsts   zODFTranslator.visit_authorscCrrrrdrrrdepart_authors|r^zODFTranslator.depart_authorscCrp)Ncontactrrrsrrr visit_contactruzODFTranslator.visit_contactcCrvrrwrdrrrdepart_contactr'zODFTranslator.depart_contactcCrp)N copyrightrrrsrrrvisit_copyrightruzODFTranslator.visit_copyrightcCrvrrwrdrrrdepart_copyrightr'zODFTranslator.depart_copyrightcC||ddS)Ndater_rdrrr visit_daterVzODFTranslator.visit_datecCrrrrdrrr depart_dater^zODFTranslator.depart_datecCrp)N organizationrrrsrrrvisit_organizationruz ODFTranslator.visit_organizationcCrvrrwrdrrrdepart_organizationr'z!ODFTranslator.depart_organizationcCrp)Nstatusrrrsrrr visit_statusruzODFTranslator.visit_statuscCrvrrwrdrrr depart_statusr'zODFTranslator.depart_statuscCr)Nrevisionrrdrrrvisit_revisionrVzODFTranslator.visit_revisioncCrrrrdrrrdepart_revisionr^zODFTranslator.depart_revisioncCr)Nrrrdrrr visit_versionrVzODFTranslator.visit_versioncCrrrrdrrrdepart_versionzODFTranslator.depart_versioncCs|d|dS)NrH)rQr7rdrrrvisit_attributionzODFTranslator.visit_attributioncCrrrrdrrrdepart_attributionr^z ODFTranslator.depart_attributioncCsd|jdvr|j|d|d|_n&d|jdvr.|j|d|d|_n|j|d|d|_|jd7_dS)NrYclassesrbrJr)rCrrTrrrrdrrrvisit_block_quotes zODFTranslator.visit_block_quotecCs"|jd|_|jd8_dS)Nrmr)rpoprrrdrrrdepart_block_quotes z ODFTranslator.depart_block_quotecCs|jd7_|jrO|jjrdSd|vr2d|jdvr2t|jdd|did}|j |dnt|jdd|d id}|j |d | |dS|j |d krnt|jdd|d id}|j |d nT|j |dkrt|jdd|did}|j |dn5|j |dkrt|jdd|did}|j |dnt|jdd|did}|j |d | |dS)Nrrzauto-toc text:listrrorrWrnrOrJrLrKrbrdrcrYr[rZrP) rrrrrCrUrrrrTrTrrsrrrvisit_bullet_listsR      zODFTranslator.visit_bullet_listcCsH|jr|jjrn||jn ||j|jd8_dSNr)rrrrUrrrrdrrrdepart_bullet_lists  z ODFTranslator.depart_bullet_listcCtrr SkipChildrenrdrrr visit_captionr*zODFTranslator.visit_captioncCrrrrdrrrdepart_captionr^zODFTranslator.depart_captioncCsV|d}t|did}t|did}tjdd}||_t|did}||_dS)Nrmzoffice:annotationrr rrmr)rQrUr*r+rr?r7)r!rrRr0r rhrrr visit_comments zODFTranslator.visit_commentcCrrrrdrrrdepart_commentr^zODFTranslator.depart_commentcCrrrrdrrrvisit_compoundrzODFTranslator.visit_compoundcCrrrrdrrrdepart_compoundr^zODFTranslator.depart_compoundcCs8|jdd}t|dkr|j||ddSdSNrrr)rCrrrrTrr!rrrrrvisit_containers zODFTranslator.visit_containercCs,|jdd}t|dkr|jdSdSr)rCrrrrrrrrdepart_containers zODFTranslator.depart_containercCrrrrdrrrvisit_decoration"r^zODFTranslator.visit_decorationcCrrrrdrrrdepart_decoration%r^zODFTranslator.depart_decorationcCs$|jd7_|jdkrtddS)Nrz*max definition list nesting level exceeded)rrrrdrrrvisit_definition_list(s  z#ODFTranslator.visit_definition_listcCs|jd8_dSr)rrdrrrdepart_definition_list.z$ODFTranslator.depart_definition_listcCrrrrdrrrvisit_definition_list_item1r^z(ODFTranslator.visit_definition_list_itemcCrrrrdrrrdepart_definition_list_item4r^z)ODFTranslator.depart_definition_list_itemcCs,|d|j}||_||t)Nzdeflist-term-%d)rQrr7r?rTrrrsrrr visit_term7s  zODFTranslator.visit_termcCrvrrwrdrrr depart_term=r'zODFTranslator.depart_termcCs,|j|d|j|jtddS)Nzdeflist-def-%dr)rrTrrrrrdrrrvisit_definition@szODFTranslator.visit_definitioncCs|j|jdSr)rrrrdrrrdepart_definitionE zODFTranslator.depart_definitioncCsHt|jdkr"|jd}t|dd|did}d|f|_dSdS)NrrrXrrVrz (%s))rrrUrr7r?r!rrRr0rrrvisit_classifierIs  zODFTranslator.visit_classifiercCrrrrdrrrdepart_classifierQr^zODFTranslator.depart_classifiercCrrrrdrrrvisit_documentTr^zODFTranslator.visit_documentcCrvr)rMrdrrrdepart_documentWr'zODFTranslator.depart_documentcCsV|jd7_|jd7_|jjr)|jdd|jd|jdd}||dSdSNrz text:sectionz Section%dzSect%d)rRrrrrrrrNrTrsrrr visit_docinfoZszODFTranslator.visit_docinfocC&|jd8_|jjr|dSdSrrrrrUrdrrrdepart_docinfof zODFTranslator.depart_docinfocC(t|jdd|did}||dS)NrXrrVrrUrrrTrsrrrvisit_emphasisk  zODFTranslator.visit_emphasiscCrvrrwrdrrrdepart_emphasisqr'zODFTranslator.depart_emphasiscCs|j}|j|dkr!t|dd|did}|j|dnZ|j|dkr?t|dd|did}|j|d n<|j|d kr]t|dd|d id}|j|d nd |ddf}t|dd||id}|j|d||dS)NrJrrrNrrMrbrfrerYr]r\z enumlist-%senumtypearabicrW)rrrrUrrTrrT)r!rr0r  liststylenamerrrvisit_enumerated_listts,    z#ODFTranslator.visit_enumerated_listcCs||jdSr)rUrrrdrrrdepart_enumerated_listsz$ODFTranslator.depart_enumerated_listcCs|jr"|jjr|j|d|jfdS|d}||dS|d}|}t |j dkr[|j d}| r[| d|j D]}t |D]}|jd|d}|jd|d}qIqA|j|jd||dS)N contents-%dztext:list-itemrrFr)r%)rrrrrTrrrNrTrrrrrangerr)r!rr0r+ level_obj level_obj1idxr rrrvisit_list_items,     zODFTranslator.visit_list_itemcCs|jr|jjr|jdS|dSt|jdkr@|jd}|r@| d|jD]}t | D] }||q4q,|j|dS)NrrT) rrrrrrUrrrrrr)r!rrrrrrrdepart_list_items       zODFTranslator.depart_list_itemcC d|_dSNTrrdrrr visit_headerr}zODFTranslator.visit_headercCrNFrrdrrr depart_headerr}zODFTranslator.depart_headercCrrrrdrrr visit_footerr}zODFTranslator.visit_footercCrrrrdrrr depart_footerr}zODFTranslator.depart_footercCrrrrdrrr visit_fieldr^zODFTranslator.visit_fieldcCrrrrdrrr depart_fieldr^zODFTranslator.depart_fieldcCrrrrdrrrvisit_field_listr^zODFTranslator.visit_field_listcCrrrrdrrrdepart_field_listr^zODFTranslator.depart_field_listcCs0|d}t|dd|did}||_dS)NrmrXrrkr)rQrUrr7r?rrrrvisit_field_names  zODFTranslator.visit_field_namecCrrrrdrrrdepart_field_namer^zODFTranslator.depart_field_namecCs|j|ddS)NrI)rrTrrdrrrvisit_field_bodyszODFTranslator.visit_field_bodycC|jdSrrrrdrrrdepart_field_bodyzODFTranslator.depart_field_bodycCrrrrdrrr visit_figurer^zODFTranslator.visit_figurecCrrrrdrrr depart_figurer^zODFTranslator.depart_figurecCsn|jd7_|j|_td}||_|j||ft|tjj r,|j | ddS|j | ddS)Nrztext:note-bodyr`r_) rrsave_footnote_currentrSrrTrfrrr`rrr!rr0rrrvisit_footnoteszODFTranslator.visit_footnotecCs$|j|j|_|jd8_dSr)rrrrrrdrrrdepart_footnotes zODFTranslator.depart_footnote) *z**z***z++z+++z##z###z@@z@@@c Cs.|jdkr|jdd}|jd}|durd}|jjrd}nd}|jdd|f|d d }t|jd d }t|tj j rQd | }t |dd|id }||_ n=|dkrft |dd| id }| |_ n(|dkr|jttjkrud|_tj|j} |jd 7_t |dd| id }| |_ ||j|<t )Nrrerefidrmr>r_z text:note%s)r=r?rautorz[%s]ztext:note-citationz text:labelr!r)rrCrrrrNstrrfrrcitation_referencer7rUr?rrrfootnote_charsrr) r!rrSrrLr0 note_autor`r  footnote_charrrrvisit_footnote_referencesN      z&ODFTranslator.visit_footnote_referencecCrrrrdrrrdepart_footnote_reference*r^z'ODFTranslator.depart_footnote_referencecCsBd|_|jdD]}||_|j|d|jtddS)NTrerIr)rrCrrrTrrr)r!rrSrrrvisit_citation-s zODFTranslator.visit_citationcCs$d|_|j|jd|_dSr)rrrrrrdrrrdepart_citation5s   zODFTranslator.depart_citationcCsl|jjr |jd}|jdd|fddd}d|_||dS|jjdur,d|j_dS|jjd7_dS)Nrtext:reference-refrr?r@rAr[)rrrCrNr?rTr)r!rrSrRrrrvisit_citation_reference;s    z&ODFTranslator.visit_citation_referencecCs(|jjd7_|jjr|dSdS)N])rr?rrrUrdrrrdepart_citation_referenceIs z'ODFTranslator.depart_citation_referencecCszt|jtjjr t|jdur;|d}|||j j r6t |d}d|_ |j ddd|jfiddSd|_ dSdS)NrmrXrztext:reference-mark-startrRrr)rfr%rrr_rrrQrTrrrUr?rN)r!rrRel0rrr visit_labelNs      zODFTranslator.visit_labelcCstt|jtjjr dS|jdur8|jjr*|jddd|jfidt |j d}d|_ n|j j d7_ | dSdS)Nztext:reference-mark-endrRrrrXr) rfr%rrr_rrrrNrUrr?rU)r!rrrrr depart_label]s    zODFTranslator.depart_labelcCrrrrdrrrvisit_generatedkr^zODFTranslator.visit_generatedcCrrrrdrrrdepart_generatednr^zODFTranslator.depart_generatedcCstj|rdSdS)Nrr)r*r9exists)r!r9rrrcheck_file_existsqs zODFTranslator.check_file_existscCs&d|jvrE|jd}|dsD|dsD|tjs3t|\}}|r3tj|}|r3d|tj|f}||sD|j j d|fdSndS||j vrT|j |\}}nq|j d7_ tj|d}d|j |f}|dst|drz#t|}|} |tjdd d } | | | | j} | }Wnty|j j d |fYnw||f} ntj||f} |j| ||f|j |<|jr|j} n t|jd d |did} | }t|jt j!j"r |#||||\}}}}i}|$|||||\}}|dur||_%dSdS|$||||dS)Nurizhttp:zhttps:z%s%s%szCannot find image file %s.rzPictures/1%08x%swbF)deletezCan't open image url %s.rrrmr)&rCrr*seprget_source_liner9dirnamer rrrrrrrrrerrrcrrabspathrrTrrrUrrfr%rrfiguregenerate_figuregenerate_imager)r!rr docsourcelinerfilenamer imgfilerimgfile2 imgfilenamespecr0r r+el4el5rQr#el6widthrrr visit_imagewsz              zODFTranslator.visit_imagecCrrrrdrrr depart_imager^zODFTranslator.depart_imagec Csd}d}||jvrc|j|}|}z,|dr.|dkr td|d}t|d}d}n ||\}}W||fSW||fStyb}z|jj d||j||fWYd}~||fSd}~ww||fS)N%heightz!percentage not allowed for heightz %gY@z)Invalid %s for image: "%s". Error: "%s".) rCstripendswithrrstripr convert_to_cmrrr)r!rattrsizeunitexprrrget_image_width_heights6      z$ODFTranslator.get_image_width_heightcCs|}|drt|ddd}nR|dr$t|ddd}nB|dr4t|ddd}n2|d rDt|ddd }n"|d rTt|ddd }n|d rbt|dd}ntdd }||fS)zConvert various units to centimeters. Note that a call to this method should be wrapped in: try: except ValueError: pxN9v?ingRQ@ptgQ?pcg+@mmrcmzunknown unit type)r%r&rr)r!r*r+rrrr(s       zODFTranslator.convert_to_cmcCsd|jvr=|jd}zt|}Wnty&|jjd|jdfYnw|dkr7|jjd|fd}|d}|Sd}|S)NscalezInvalid scale for image: "%s"rz!scale out of range (%s), using 1.g{Gz?g?)rCintrrrr)r!rr6rrrget_image_scales(    zODFTranslator.get_image_scalecCsv||}||d\}}||d\}}d}tdurI||jvrI|j|\} } tj| d} | jd|}zt|Wnt yH||f}Ynwd} |dusS|dur| dur[t d|durj| j d}t |d }|dury| j d }t |d }|d kr|} | j d} t | d } | j d }t |d }| }| |}| || } | |}||9}||9}d |}d |}||fS) z=Return the image size in centimeters adjusted by image attrs.r r$)Hr9Nr dpiz4image size not fully specified and PIL not installedrr0rr#z%.2fcm)r8r-rrImagerinforiter TypeErrorrr*rget_page_width)r!rrr6r  width_unitr$rr:rr rfactor image_width image_height line_widthrrrget_image_scaled_width_heightsP             z+ODFTranslator.get_image_scaled_width_heightc Cs|}|d}d}|D]L}|d}|d}|d}|dus*|dus*|dur+q z||\}}||\}}||\}}WntyR|jjdYnw|||}q |dur`d}|S)z0Return the document's page width in centimeters.z.//{urn:oasis:names:tc:opendocument:xmlns:style:1.0}page-layout/{urn:oasis:names:tc:opendocument:xmlns:style:1.0}page-layout-propertiesNzG{urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0}page-widthzH{urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0}margin-leftzI{urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0}margin-rightz;Stylesheet file contains invalid page width or margin size.g{Gz.@)riterfindrr(rrrr) r!rrr r page_width margin_left margin_rightrrrrr?& s@ zODFTranslator.get_page_widthc Csd}|||\}}|jjD] }|jdkr|}q|jd7_|durWddddd} t|jd| td } d d d d d } t| d| td ddddddddd} t| d| td d|j} dt t } | d| dd} t|jd| td } i} d} |jj d}|rd|vrd} | rd| d<nd | d<t| d!| td | | dd d"} || d#<t|d$| d%}i} t|d&| d%}d'| di} t|d(| d%}||||fS))NrQrextrarCaptionStandard)z style:classrrrrrz0.0835in0r*)fo:margin-bottom fo:margin-topztext:line-numberztext:number-lineszstyle:paragraph-properties12ptitalicTimes Lucidasans1)z fo:font-sizez fo:font-stylezstyle:font-namezstyle:font-name-complexzstyle:font-size-asianzstyle:font-size-complexzstyle:font-style-asianzstyle:font-style-complexzstyle:text-propertiesrstframestyle%d graphics%drrrrrFrwrapTdynamic style:wraprstyle:graphic-properties)draw:style-name draw:nametext:anchor-type draw:z-index svg:width draw:framerz draw:text-boxrr)rEr%childrenrir7rrUrrnextIMAGE_NAME_COUNTERrrCr)r!rrr rrQr r$node1r#r0r draw_namerWrr+rrrrrrL s         zODFTranslator.generate_figurecCs|||\}}|jd7_d|j}|d|dd} t|jd| td} d} d} d|jvrH|jd} | D]}|d vrA|} q8|d vrG|} q8|dur^d d d d ddddddddddd} n|} | durh| | d<| durp| | d<d}|jd}|rd|vrd}|rd| d<nd | d<| |rd | d<t| d| tddt t }||dd} t |j tjrd | d!<nd | d!<|| d"<|| d#<t|d$| d%} t| d&d'|fd(d)d*d+d%| |fS),NrrTrrrVrralign)leftcenterright)topmiddlebottomrjrrzrect(0cm 0cm 0cm 0cm)z0%z100%r*standard)style:vertical-poszstyle:vertical-relzstyle:horizontal-relz style:mirrorzfo:clipzdraw:luminancez draw:contrastzdraw:redz draw:greenz draw:bluez draw:gammazdraw:color-inversionzdraw:image-opacityzdraw:color-modezstyle:horizontal-posrnFrrWTrXrYrZrUr!)r[r\r^zas-charr]r_z svg:heightr`rz draw:imagersimpleembedonLoad) xlink:href xlink:typez xlink:showz xlink:actuate)rErrrUrrrCrr is_in_tablerbrcrfr%r TextElement)r!rrr r frame_attrsr r$rr#r0halignvalignrfr\rWrrerrrr s         zODFTranslator.generate_imagecCs*|j}|rt|tjjrdS|j}|sdS)NTF)r%rfrrentry)r!rrdrrrrt szODFTranslator.is_in_tablecCsFt|jtjjr!|jd}|dd}||_|j|ddSdS)NrrrR) rfr%rrrrrrTrrrrr visit_legend s   zODFTranslator.visit_legendcCs:t|jtjjr|j|||dSdSr)rfr%rrrrrrUrdrrr depart_legend s   zODFTranslator.depart_legendcCs |jd7_|jd7_dSrrrrdrrrvisit_line_block zODFTranslator.visit_line_blockcCs |jd8_|jd8_dSrr|rdrrrdepart_line_block r~zODFTranslator.depart_line_blockcCs.d|j}t|jdd||id}||_dS)Nz lineblock%drrr)rrUrr)r!rr<r0rrr visit_line s   zODFTranslator.visit_linecCrvrrwrdrrr depart_line r'zODFTranslator.depart_linecCr)NrXrrhrrrsrrr visit_literal rzODFTranslator.visit_literalcCrvrrwrdrrrdepart_literal r'zODFTranslator.depart_literalcCsn|jdd}|r"|j}|D]}t|dd||id}qt|}nt|jd}d}|||j|dS)NrrrXrrr) rCrrrUrrrTrrT)r!rrrR inline_stylecountrrr visit_inline s   zODFTranslator.visit_inlinecCs$|j}t|D]}|q dSr)rrrrU)r!rrxrrr depart_inline- s   zODFTranslator.depart_inlinecCsLd}t|}|r|}t|}|St|}|r$|}t|d}|S)Nr)SPACES_PATTERNmatchr0r TABS_PATTERN)r!rrmatchobjpadrrr_calculate_code_block_padding2 s   z+ODFTranslator._calculate_code_block_paddingcsXtjj|dd}|dvrtd fdd td}n td fdd td}t|||}|S) NT)stripall)latextexrc ||Srrrrr(rrC r'z8ODFTranslator._add_syntax_highlighting..)escape_functioncrrrrr(rrrH r'r)pygmentslexersget_lexer_by_namerrsr highlight)r!insourcerlexerfmtr outsourcerr(r_add_syntax_highlighting? s  z&ODFTranslator._add_syntax_highlightingcCs t|j|}t|j|}|Sr) FILL_PAT1sub fill_func1 FILL_PAT2 fill_func2)r!rrrr fill_lineN szODFTranslator.fill_linecCs|d}dt|f}|S)Nrzr0rr!rspacesreplrrrrS s zODFTranslator.fill_func1cCs |d}dt|df}|S)Nrz rrrrrrrX s zODFTranslator.fill_func2cCst|jdkrd|df}nd|df}|}tr/|jjr/|dd}|||}nt |}| d}|dd krA|d=d g}g}|D]}| |}| d d}| |qHd |} || f} | | | d d |} | d} t| } | D]} |j | qdS)Nrz)%%srUrTrrr`rrmzIz zzr)rrrr7rrrrrrsrrrorTr:rarrr)r!rwrapper1rrlineslines1my_linesmy_line my_lines_str my_lines_str2rhr0rrrrvisit_literal_block] sD             z!ODFTranslator.visit_literal_blockcCrrrrdrrrdepart_literal_block r^z"ODFTranslator.depart_literal_blockcC |jjjd|d||dS)Nz"math" role not supported base_node)rrrrrdrrr visit_math  zODFTranslator.visit_mathcC||dSr)rrdrrr depart_math rzODFTranslator.depart_mathcCr)Nz"math" directive not supportedr)rrrrrdrrrvisit_math_block rzODFTranslator.visit_math_blockcCrr)rrdrrrdepart_math_block rzODFTranslator.depart_math_blockcCs>|jd}|jd}|dur|dur||j|<dSdSdS)Nrr)rCrr)r!rrrrrr visit_meta s  zODFTranslator.visit_metacCrrrrdrrr depart_meta r^zODFTranslator.depart_metac Csd}|jsd|_t|jd||ddtd}t|ddd d d td}t|jd|d |d ddtd}t|ddditd}t|jd|d |dddtd}t|ddditd}t|jd|d|dddtd}t|ddddd dddtd}t|dtd}t|jd|d|dddtd}t|ddddtd}t|jd|d|d ddtd}t|dddd d dd!td}t|jd|d|d"ddtd}t|ddddd dd!td}|jd#||||d$d%}t|d&d'|d |d id%}t|d&d'|d |did%}t|d(}t|d)}t|d*|d|dd+d,d%}t|d-d.d/id%}d0|_t|d*|d|dd+d,d%}t|d-d.d/id%}d1|_||dS)2NrxTrr>rrrstyle:table-propertiesz17.59cmrgr) style:width table:alignz style:shadowz%s.%%c)r table-columnstyle:table-column-propertiesstyle:column-widthz4.999cm)Bz12.587cm %s.%%c%%d)rrrstyle:table-cell-properties transparentz0.097cmz0.035cm solid #000000)fo:background-color fo:paddingfo:border-leftfo:border-right fo:border-topfo:border-bottomzstyle:background-imager)rr)rz fo:border)rrrrrrr)rr table:tablez table:nametable:style-namertable:table-columnrtable:table-header-rowstable:table-rowtable:table-cellstringrzoffice:value-typerrTable_20_HeadingOption Description)rrUrrrrNr?rT)r!r table_namerRr0r r+rrrrvisit_option_list s     zODFTranslator.visit_option_listcCrvrrwrdrrrdepart_option_list r'z ODFTranslator.depart_option_listcCs|d}||dS)NrrNrTrsrrrvisit_option_list_item rz$ODFTranslator.visit_option_list_itemcCrvrrwrdrrrdepart_option_list_item r'z%ODFTranslator.depart_option_list_itemcCs(|jdd|jddd}||dS)Nrz Table%d.A2rrr)rNrrTrsrrrvisit_option_group s  z ODFTranslator.visit_option_groupcCrvrrwrdrrrdepart_option_group r'z!ODFTranslator.depart_option_groupcCs |jdddid}||_dS)NrrTable_20_Contentsr)rNr7r?rsrrr visit_option szODFTranslator.visit_optioncCrrrrdrrr depart_option r^zODFTranslator.depart_optioncCrrrrdrrrvisit_option_string r^z!ODFTranslator.visit_option_stringcCrrrrdrrrdepart_option_string r^z"ODFTranslator.depart_option_stringcCrrrrdrrrvisit_option_argument" r^z#ODFTranslator.visit_option_argumentcCrrrrdrrrdepart_option_argument% r^z$ODFTranslator.depart_option_argumentcCs>|jdd|jddd}t|dddid}||_t) Nrz Table%d.B2rrrrrr)rNrrUr7r?rrrrrrvisit_description( s  zODFTranslator.visit_descriptioncCrrrrdrrrdepart_description2 r^z ODFTranslator.depart_descriptioncCs^d|_|jr |d}n|jr|d}n|jd}|jdd|id}||||dS)NTrar^rrrr)rrrQrrrNrOrT)r!rrRrrrrvisit_paragraph5 s    zODFTranslator.visit_paragraphcCsnd|_||jr|j|jd|j|jddS|jr5|j|jd|j|jddSdS)NFr) rrUrrrTrremoverrrdrrrdepart_paragraphC szODFTranslator.depart_paragraphcCrrrrdrrrvisit_problematicM r^zODFTranslator.visit_problematiccCrrrrdrrrdepart_problematicP r^z ODFTranslator.depart_problematicc Csd|jvrT|jd}|}d|vrT|}dddttD}d||f}|d}t |}t |dkrT|d}|j rF t|j rN t|j |t) Nrrr(cSsg|] \}}d||fqS)z%s="%s"r)rkvrrr Y s z+ODFTranslator.visit_raw..z%srr)rCrr7r:rWrrXrarrrrrrrTrr) r!rformats formatlistrawstrattrstr contentstrrr0rrr visit_rawS s*         zODFTranslator.visit_rawcCs|jrdS|jr dS dSr)rrrdrrr depart_rawi s zODFTranslator.depart_rawcCs|jjrLd|vr,|d}|jjr|dr||}|jdd|ddd}||n d|vrE|jjrD|d}|jd d|d d d}n|jj d |j rjt |j d krlt |j dtjjrn||j ddSdSdSdS)Nrefurizmailto:ztext:arro)rrrsrrrr?rz3References must have "refuri" or "refid" attribute.rr)rrrr cloak_mailtorNrTrrrrrrarfrr generatedr)r!rhrefrRrrrvisit_referenceq s@   zODFTranslator.visit_referencecCs$|jjrd|vr|dSdSdS)Nr)rrrUrdrrrdepart_reference s  zODFTranslator.depart_referencecCsT|d}|d}|r|d}|r|}t|jdd|id}|}|||_dS)Nrjrrrrr)rrrUrr7rar?)r!rrrclass1rRr?rrr visit_rubric s  zODFTranslator.visit_rubriccCrrrrdrrr depart_rubric r^zODFTranslator.depart_rubricrcCsV|jd7_|jd7_|jjr)|jdd|jd|jdd}||dSdSrr)r!rmove_idsrRrrr visit_section s zODFTranslator.visit_sectioncCrrrrdrrrdepart_section rzODFTranslator.depart_sectioncCr)NrXrrkrrrsrrr visit_strong s zODFTranslator.visit_strongcCrvrrwrdrrr depart_strong r'zODFTranslator.depart_strongcCrrrrdrrrvisit_substitution_definition r*z+ODFTranslator.visit_substitution_definitioncCrrrrdrrrdepart_substitution_definition r^z,ODFTranslator.depart_substitution_definitioncCrrrrdrrrvisit_system_message r^z"ODFTranslator.visit_system_messagecCrrrrdrrrdepart_system_message r^z#ODFTranslator.depart_system_messagecCsd}d}|d}|dur|D] }|tr|}nq|durM|j|}|durK|jjd|ft}|j|}|durK|jjd|ft}|St}|j|}|dure|jjd|ft}|S)Nrz,Can't find table style "%s". Using default.z=Can't find default table style "%s". Using built-in default.) rrrrrrrTABLENAMEDEFAULTBUILTIN_DEFAULT_TABLE_STYLE)r!r table_styler str_classes str_classrrrget_table_style sN      zODFTranslator.get_table_stylec Cs|jd7_||}dt}t|jd|d||jfddtd}|jdur6t|dd d d d tdnt|dd d d |jdtdt|jd|d||jddfddtd}|jj }|durf|j }nd|f}t|dd||||dtdd}|j D] } | j dkr| }nq~|dur|d|n t|jd|d||jf|d||jfdd} || ||_d|_dS)Nrz%s%%drrr>rrrrg0inz0.10in)rrOrNmargins)rrOrNrrrrz0.%03dcm solid #000000rz0.049cmrr2rlrrrg)rrrrUrrrrurtable_border_thicknessr+rarir7rQrrTcurrent_table_style table_width) r!rrrr0r  thickness line_style1r2rrrrr visit_table s           zODFTranslator.visit_tablecCs<tdtd}d|jf}|j}|d}||j|<|dS)Nrr%.4finr)rVrrrr#rU)r!rrJ attribvalr0r rrr depart_table0 s    zODFTranslator.depart_tablecCstdd|_dS)Nrr)rprrdrrr visit_tgroup8 rzODFTranslator.visit_tgroupcCrrrrdrrr depart_tgroup; r^zODFTranslator.depart_tgroupcCs|jd7_|dt|jt|jf}|dd}t|jd|ddtd}t|d d d |itd|jd d |id|j |7_ dS)Nrz %s%%d.%%scolwidthg(@rrrrrrrrrr) rrrrchrrUrrrNr)r!r colspec_namer#r0rrr visit_colspec> s(  zODFTranslator.visit_colspeccCrrrrdrrrdepart_colspecP r^zODFTranslator.depart_colspeccCs*|d}||d|_|jddS)NrTr)rNrTin_theadrrTrsrrr visit_theadS s  zODFTranslator.visit_theadcCs|d|_|jdSr)rUr(rrrdrrr depart_theadY szODFTranslator.depart_theadcCs&tdd|_|d}||dS)Nrrr)rprrNrTrsrrr visit_row^ s zODFTranslator.visit_rowcCrvrrwrdrrr depart_rowc r'zODFTranslator.depart_rowcCs|jd7_|dt|jddf}|dd}|dd}|dkr2d|df|d <|j|7_|d d}|dkrEd|df|d <|jd |d }||dS)Nrz %s%%d.%%c%%drrrmorecolsr%dztable:number-columns-spannedmorerowsztable:number-rows-spannedrr)rrrrrrNrT)r!r cellspec_namer#r-r/r0rrr visit_entryf s"   zODFTranslator.visit_entrycCrvrrwrdrrr depart_entryz r'zODFTranslator.depart_entrycCrrrrdrrr visit_tbody} r^zODFTranslator.visit_tbodycCrrrrdrrr depart_tbody r^zODFTranslator.depart_tbodycCs"d|vsd|vsd|vsdS dS)Nrrrefnamerrdrrr visit_target s zODFTranslator.visit_targetcCrrrrdrrr depart_target r^zODFTranslator.depart_targetr2cCst|jtjjrA|j}|dkr$|jjd|jjd| fd}|j dd|| d|fdd}| || |dSt|jtjjrlt|jd d | |id}| || }||_d |_| |dSdS) Nz4Heading/section levels greater than 7 not supported.z1 Reducing to heading level 7 for heading: "%s"rr.z heading%dtext:outline-levelrrrrT)rfr%rrsectionrrrrr7rNrrOrTrUrr2r)r!rr title_typerr0r?rrr visit_title s@   zODFTranslator.visit_titlecCs0t|jtjjst|jtjjr|dSdSr)rfr%rrr;rrUrdrrr depart_title s  zODFTranslator.depart_titlecCs|j||dddS)Nrp)r<)r=)r!rrrrrvisit_subtitle rzODFTranslator.visit_subtitlecCrr)r>rdrrrdepart_subtitle rzODFTranslator.depart_subtitlecCs0|jdd|did}|||_t)NrXrrir)rNrrar7r?rrrsrrrvisit_title_reference s  z#ODFTranslator.visit_title_referencecCrrrrdrrrdepart_title_reference r^z$ODFTranslator.depart_title_referencec CsltddD].}t|dd|f|d|fdd}t|dt|d t|d d d d dt|dqdS)Nr z$text:table-of-content-entry-templater.rr9rztext:index-entry-chapterztext:index-entry-textztext:index-entry-tab-stoprri)zstyle:leader-charz style:typeztext:index-entry-page-number)rrUr)r!r0rr rrr(generate_table_of_content_entry_template s    z6ODFTranslator.generate_table_of_content_entry_templatecCsJd}d}|jD] }t||r|}nq|dur|}|S|jj|}|S)Nrm)rarfr7rrZ)r!r class_type label_keyr\ title_noderrrrfind_title_label s   zODFTranslator.find_title_labelc Csd|jvrd|jdvr||tjjd}|jjrd|jdddddd}t|d d d id}t|d d did}||_ | |t|d}t|d}t|dd | did}||_ |j |_ ||_||n|d} |d} t| dd | did}||_ d|_dSd|jdvr|d} |d} t| dd | did}||tjjd}||_ dSd|jdvr|d} |d} t| dd | did}||tjjd}||_ dSdSdS)Nrcontentsztext:table-of-contentzTable of Contents1r"Sect1)rRztext:protectedrrztext:table-of-content-sourcer:10ztext:index-title-templaterContents_20_Headingtext:index-bodyztext:index-titlerzcontents-headingrgrSrXrkTabstract dedication)rCrHrrr2rrrNrUr?rDrrsave_current_elementrrTrQr) r!rr\r0r r+rrrrRrrr visit_topic s                    0zODFTranslator.visit_topiccCsVd|jvr'd|jdvr)|jjr||j||jn|dd|_dSdSdS)NrrIrgF) rCrrupdate_toc_page_numbersrrTrPrQrrdrrr depart_topic s   zODFTranslator.depart_topiccCs g}||d|||dSr)update_toc_collectupdate_toc_add_numbers)r!rR collectionrrrrR+ sz%ODFTranslator.update_toc_page_numberscCs<|||f|d7}|D]}|jdkr||||q dS)NrrM)rTr"rT)r!rRrrVchild_elrrrrT0 s z ODFTranslator.update_toc_collectcCs6|D]\}}|jdkr|jdkrt|d}d|_qdS)NrzTable of Contentsztext:tab9999)r"r?rUr)r!rVrr0r rrrrU7 s    z$ODFTranslator.update_toc_add_numberscCs|ddS)Nrg)rQrdrrrvisit_transition? rzODFTranslator.visit_transitioncCrrrrdrrrdepart_transitionB r^zODFTranslator.depart_transitioncCr)Nrgenerate_admonitionrdrrr visit_warningH rVzODFTranslator.visit_warningcCrrrrdrrrdepart_warningK rzODFTranslator.depart_warningcCr)N attentionr[rdrrrvisit_attentionN rVzODFTranslator.visit_attentioncCr)Ncautionr[rdrrr visit_cautionS rVzODFTranslator.visit_cautioncCr)Ndangerr[rdrrr visit_dangerX rVzODFTranslator.visit_dangercCr)Nerrorr[rdrrr visit_error] rVzODFTranslator.visit_errorcCr)Nhintr[rdrrr visit_hintb rVzODFTranslator.visit_hintcCr)N importantr[rdrrrvisit_importantg rVzODFTranslator.visit_importantcCr)Nnoter[rdrrr visit_notel rVzODFTranslator.visit_notecCr)Ntipr[rdrrr visit_tipq rVzODFTranslator.visit_tipcCsRd}|jD] }|jdkr|}q|dur |d}|r |d}||d|dS)Nr2rrgeneric)rarir7rr\)r!rr2rclasses1rrrvisit_admonitionv s   zODFTranslator.visit_admonitioncCszt|jdr|jj||}n|}t|jdd|d|fid}|r&||_nd|f|_|d|f}|j |dS)NrZrrz admon-%s-hdrrz%s!z admon-%s-body) hasattrrrZrrUrrr? capitalizerrT)r!rr\r2translated_labelr0rhrrrr\ s z!ODFTranslator.generate_admonitioncC |jdddid}||dS)NrXrzrststyle-subscriptrrrsrrrvisit_subscript zODFTranslator.visit_subscriptcCrvrrwrdrrrdepart_subscript r'zODFTranslator.depart_subscriptcCru)NrXrzrststyle-superscriptrrrsrrrvisit_superscript rwzODFTranslator.visit_superscriptcCrvrrwrdrrrdepart_superscript r'z ODFTranslator.depart_superscriptcCrrrrdrrrvisit_abbreviation r^z ODFTranslator.visit_abbreviationcCrrrrdrrrdepart_abbreviation r^z!ODFTranslator.depart_abbreviationcCrrrrdrrr visit_acronym r^zODFTranslator.visit_acronymcCrrrrdrrrdepart_acronym r^zODFTranslator.depart_acronymcCrrrrdrrr visit_sidebar r^zODFTranslator.visit_sidebarcCrrrrdrrrdepart_sidebar r^zODFTranslator.depart_sidebarrrr)r)rr2( rrrrrrrrrrrrrrrrrrrWr code_nonerr/r/compiler,rrrr7rr9r-r;rr.rMrNrQrOrTrUr]r_rarcrbrjrlrnrortrxr{r|r}r~rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr r r!r"r-r(r8rEr?rrrtrzr{r}rrrrrrrrrrrrrrvisit_doctest_blockdepart_doctest_blockrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr r r r r rrrrr r!r"r&r'r)r*r+r,r1r2r3r4r6r7r=r>r?r@rArBrDrHrQrSrRrTrUrYrZr]r^r`depart_attentionrbdepart_cautionrd depart_dangerrf depart_errorrh depart_hintrjdepart_importantrl depart_notern depart_tiprqdepart_admonitionr\rvrxryrzr{r|r}r~rrrrrrr2s9T   0 { &     ,    (>     + &L T                '        \                            ( ?                     <                 rc@seZdZddZdS)ReadercCs&tj|}|jjr |Sdd|DS)NcSsg|] }|tjur|qSr)r DanglingReferences)rirrrr s z)Reader.get_transforms..)r rget_transformsrr)r!rrrrr s zReader.get_transformsN)rrrrrrrrr s r)___doc__ __future__r __docformat__rar*os.pathrr xml.etreerrxml.domrrr/rD itertoolsweakrefr ImportErrorrrrrr r docutils.readersr docutils.transformsr rb configparserriorurllib.requestr urllib.errorrurllib2r)rrcrpygments.lexerspygmentsformatterrr SyntaxError PIL.Imagerr;objectWeakKeyDictionaryr rfrStyperrrrrrrrrrGENERATOR_DESCrCONTENT_NAMESPACE_DICTrrrrrr'r(rrrr&rUrOrVrirsrtrrrrrrrrrrsD                                                 0