o
    öÇ\G  ã                   @   sŽ   d dl Z d dlZd dlZd dlmZ d dlT g d¢dd„ eD ƒ Zdd„ e	D ƒZ
G dd	„ d	ƒZG d
d„ dƒZG dd„ dƒZG dd„ deƒZdS )é    N©Únsdict)Ú*)zdraw:adraw:gz	draw:linezdraw:object-olezoffice:annotationzpresentation:noteszsvg:descc                 C   ó$   g | ]}t |d   d |d  ‘qS ©r   ú:é   r   ©Ú.0Úitem© r   úB/var/www/html/env/lib/python3.10/site-packages/odf/odf2moinmoin.pyÚ
<listcomp>#   ó   $ r   c                 C   r   r   r   r	   r   r   r   r   %   r   c                   @   sP   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S )Ú	TextPropsz$ Holds properties for a text style. c                 C   s.   d| _ d| _d| _d| _d| _d| _d| _d S ©NF)ÚitalicÚboldÚfixedÚ
underlinedÚstrikethroughÚsuperscriptÚ	subscript©Úselfr   r   r   Ú__init__+   s   
zTextProps.__init__c                 C   ó(   |dkr	d| _ d S |dkrd| _ d S d S )Nr   TÚnormalF)r   ©r   Úvaluer   r   r   Ú	setItalic5   ó
   

ÿzTextProps.setItalicc                 C   r   )Nr   Tr   F)r   r   r   r   r   ÚsetBold;   r!   zTextProps.setBoldc                 C   ó
   || _ d S ©N)r   r   r   r   r   ÚsetFixedA   ó   
zTextProps.setFixedc                 C   ó   |r|dkrd| _ d S d S d S ©NÚnoneT)r   r   r   r   r   ÚsetUnderlinedD   ó   
ÿzTextProps.setUnderlinedc                 C   r'   r(   )r   r   r   r   r   ÚsetStrikethroughH   r+   zTextProps.setStrikethroughc                 C   s²   |d u s|dkr
d S |  d¡}|d }| d¡dkr4|dkr&d| _d| _d S |d	kr2d| _d| _d S d S t|d | d¡… ƒ}|d
krKd| _d| _d S |dk rWd| _d| _d S d S )NÚ ú r   ú%éÿÿÿÿÚsubFTÚsuperé
   iöÿÿÿ)ÚsplitÚfindr   r   Úint)r   r   ÚposisizeÚtextposÚitextposr   r   r   ÚsetPositionL   s(   


þ

þzTextProps.setPositionc                 C   s    dt | jƒt | jƒt | jƒf S )Nz[italic=%s, bold=i%s, fixed=%s])Ústrr   r   r   r   r   r   r   Ú__str__a   s   
þzTextProps.__str__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r    r"   r%   r*   r,   r:   r<   r   r   r   r   r   (   s    
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S )ÚParagraphPropsz( Holds properties of a paragraph style. c                 C   s"   d| _ d| _d| _d| _d| _d S )NFr   )Ú
blockquoteÚheadingLevelÚcodeÚtitleÚindentedr   r   r   r   r   j   s
   
zParagraphProps.__init__c                 C   r#   r$   )rF   r   r   r   r   ÚsetIndentedr   r&   zParagraphProps.setIndentedc                 C   r#   r$   )rC   )r   Úlevelr   r   r   Ú
setHeadingu   r&   zParagraphProps.setHeadingc                 C   r#   r$   )rE   r   r   r   r   ÚsetTitlex   r&   zParagraphProps.setTitlec                 C   r#   r$   )rD   r   r   r   r   ÚsetCode{   r&   zParagraphProps.setCodec                 C   s   dt | jƒ| jt | jƒf S )Nz[bq=%s, h=%d, code=%s])r;   rB   rC   rD   r   r   r   r   r<      s   
þzParagraphProps.__str__N)
r=   r>   r?   r@   r   rG   rI   rJ   rK   r<   r   r   r   r   rA   g   s    rA   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚListPropertiesz$ Holds properties for a list style. c                 C   s
   d| _ d S r   ©Úorderedr   r   r   r   r   ‰   r&   zListProperties.__init__c                 C   r#   r$   rM   r   r   r   r   Ú
setOrderedŒ   r&   zListProperties.setOrderedN)r=   r>   r?   r@   r   rO   r   r   r   r   rL   †   s    rL   c                   @   sÆ   e Zd Zdd„ Zdd„ Zd0dd„Zd0d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d1d#d$„Zd%d&„ Zd'd(„ Zd)d*„ Zd1d+d,„Zd2d.d/„ZdS )3ÚODF2MoinMoinc                 C   sº   g | _ d| _dtƒ i| _dtƒ i| _i | _g | _d| _d | _	| j
| j
| j| j
| j| jdœ| _tD ]}| j| j|< q0tD ]}| j| j|< q;| j| jd< | j| jd< | j| jd< |  |¡ d S )Nr   ÚStandard)ú	draw:pageú
draw:framez
draw:imageúdraw:text-boxztext:az	text:noteztext:line-breakztext:sztext:tab)Ú	footnotesÚfootnoteCounterr   Ú
textStylesrA   ÚparagraphStylesÚ
listStylesÚ
fixedFontsÚhasTitleÚlastsegmentÚtextToStringÚ
draw_imageÚtext_aÚ	text_noteÚelementsÚIGNORED_TAGSÚ
do_nothingÚINLINE_TAGSÚinline_markupÚtext_line_breakÚtext_sÚtext_tabÚload)r   ÚfilepathÚtagr   r   r   r   ”   s.   úzODF2MoinMoin.__init__c                 C   s4   |  d¡D ]}| d¡dkr| j | d¡¡ qdS )z^ Extracts necessary font information from a font-declaration
            element.
            zstyle:font-facezstyle:font-pitchr   ú
style:nameN)ÚgetElementsByTagNameÚgetAttributerZ   Úappend)r   ÚfontDeclÚfontFacer   r   r   ÚprocessFontDeclarations²   s
   €þz$ODF2MoinMoin.processFontDeclarationsNc                 C   s¨   t ƒ }|r| j |d¡}|r|}| d¡}|s|S |d }| | d¡¡ | | d¡¡ | | d¡¡ | | d¡¡ | 	| d¡¡ | d	¡| j
v rR| d
¡ |S )z0 Extracts text properties from a style element. Nzstyle:text-propertiesr   zfo:font-stylezfo:font-weightzstyle:text-underline-stylezstyle:text-line-through-stylezstyle:text-positionzstyle:font-nameT)r   rW   Úgetrm   r    rn   r"   r*   r,   r:   rZ   r%   )r   ÚstyleÚparentÚ	textPropsÚ
parentPropÚtextPropÚ
textPropElr   r   r   ÚextractTextProperties¼   s    

z"ODF2MoinMoin.extractTextPropertiesc           	      C   sÎ   t ƒ }| d¡}| d¡r%|dd… }zt|ƒ}| |¡ W n   d}Y |dkr.| d¡ | d¡}|rX|d }| d	¡}|rXzt|dd
… ƒ}|dkrR| d¡ W n   Y |  	|¡}|j
re| d¡ |S )z5 Extracts paragraph properties from a style element. rl   ÚHeading_20_é   Nr   ÚTitleTzstyle:paragraph-propertieszfo:margin-leftéþÿÿÿg{®Gáz„?)rA   rn   Ú
startswithr6   rI   rJ   rm   ÚfloatrG   rz   r   rK   )	r   rt   ru   Ú	paraPropsÚnamerH   Ú
paraPropElÚ
leftMarginrv   r   r   r   ÚextractParagraphPropertiesÖ   s6   





€

z'ODF2MoinMoin.extractParagraphPropertiesc                 C   s~   |D ]:}|  d¡}|dkrq|  d¡}|  d¡}|dkr&|  ||¡| j|< q|dkr<|  ||¡| j|< |  ||¡| j|< qdS )zI Runs through "style" elements extracting necessary information.
        rl   rQ   zstyle:familyzstyle:parent-style-nameÚtextÚ	paragraphN)rn   rz   rW   r…   rX   )r   ÚstyleElementsrt   r‚   Úfamilyru   r   r   r   ÚprocessStylesû   s   




ÿ€ñzODF2MoinMoin.processStylesc                 C   sV   |D ]&}|  d¡}tƒ }| ¡ r#dd„ |jD ƒ}t|ƒdkr#| d¡ || j|< qd S )Nrl   c                 S   s*   g | ]}|j tjjjkr|jd kr|‘qS )ztext:list-level-style-number)ÚnodeTypeÚxmlÚdomÚNodeÚELEMENT_NODEÚtagName©r
   Úelr   r   r   r     s
    
þz2ODF2MoinMoin.processListStyles.<locals>.<listcomp>r   T)rn   rL   ÚhasChildNodesÚ
childNodesÚlenrO   rY   )r   ÚlistStyleElementsrt   r‚   ÚpropÚsubitemsr   r   r   ÚprocessListStyles  s   

õzODF2MoinMoin.processListStylesc                 C   s¶   t  |¡}tjj | d¡¡}| d¡}|r|  |d ¡ |  	| d¡¡ |  
| d¡¡ tjj | d¡¡| _| j d¡}|rG|  |d ¡ |  	| j d¡¡ |  
| j d¡¡ dS )z Loads an ODT file. z
styles.xmlzoffice:font-face-declsr   zstyle:styleztext:list-stylezcontent.xmlN)ÚzipfileÚZipFilerŒ   r�   ÚminidomÚparseStringÚreadrm   rr   rŠ   r™   Úcontent)r   rj   ÚzipÚ
styles_docÚfontfacedeclsr   r   r   ri      s   

zODF2MoinMoin.loadc                 C   s   |S )z- Removes extra blank lines from code blocks. )r4   r•   ÚrangeÚstripr   ro   Újoin)r   r†   ÚlinesÚbufferÚnumLinesÚir   r   r   ÚcompressCodeBlocks4  s   zODF2MoinMoin.compressCodeBlocksc                 C   ó   dS )Nr-   r   ©r   Únoder   r   r   rc   E  ó   zODF2MoinMoin.do_nothingc                 C   sN   |  d¡}|r|dd… dkrd| S |r#|dd… dkr#|dd… }d| S )	z	
        ú
xlink:hrefNé   z./z%s
é	   z	Pictures/z[[Image(%s)]]
)rn   )r   r­   Úlinkr   r   r   r^   H  s   
zODF2MoinMoin.draw_imagec                 C   sD   |   |¡}| d¡}| ¡ | ¡ krd| ¡  S d| ¡ | ¡ f S )Nr¯   z[%s] z[%s %s] )r]   rn   r¤   )r   r­   r†   r²   r   r   r   r_   S  s
   

zODF2MoinMoin.text_ac                 C   r«   )Nz[[BR]]r   r¬   r   r   r   rf   \  r®   zODF2MoinMoin.text_line_breakc                 C   sH   |  d¡d jd j}|  d¡d jd }| j ||  |¡f¡ d| S )Nztext:note-citationr   ztext:note-bodyz^%s^)rm   r”   Ú	nodeValuerU   ro   r]   )r   r­   ÚciteÚbodyr   r   r   r`   _  s   ÿÿÿzODF2MoinMoin.text_notec                 C   s&   zt | d¡ƒ}d| W S    Y dS )Nztext:cr.   )r6   rn   )r   r­   Únumr   r   r   rg   g  s
   
zODF2MoinMoin.text_sc                 C   r«   )Nz    r   r¬   r   r   r   rh   n  r®   zODF2MoinMoin.text_tabc                 C   sØ   |   |¡}| ¡ sdS | d¡}| j |tƒ ¡}|jr!d| d S g }|rU|jr-| d¡ |j	r5| d¡ |j
r=| d¡ |jrE| d¡ |jrM| d¡ |jrU| d	¡ |d d … }| ¡  d
d |¡|d |¡f S )Nr-   útext:style-nameú`z''z'''Ú__z~~ú^z,,z%s%s%s)r]   r¤   rn   rW   rs   r   r   r   ro   r   r   r   r   r   Úreverser¥   )r   r­   r†   Ú	styleNamert   ÚmarkÚrevmarkr   r   r   re   q  s0   







zODF2MoinMoin.inline_markupr   c              	   C   sü   |j | _g }| d¡}| j |tƒ ¡}d}|jD ]`}| d| ¡ |d7 }|jr8t	|ƒ}d| d }| d¡ n| d¡ dd	„ |jD ƒ}	|	D ]'}
|
j d
kr_| d¡ | |  
|
|d ¡¡ n| |  |
|d ¡¡ |
j | _qG|j | _| d¡ qd |¡S )Nr·   r   r.   r   z. z 1. z * c                 S   ó   g | ]	}|j d v r|‘qS ))útext:pútext:hú	text:list©r�   r‘   r   r   r   r   ¢  ó    
ÿz-ODF2MoinMoin.listToString.<locals>.<listcomp>rÂ   Ú
é   r-   )r�   r\   rn   rY   rs   rL   r”   ro   rN   r;   ÚlistToStringÚparagraphToStringr¥   )r   ÚlistElementÚindentr§   r¼   Úpropsr©   r   Únumberr˜   Úsubitemr   r   r   rÇ   �  s.   






zODF2MoinMoin.listToStringc                 C   s†   |j | _g }|jD ]4}|j | _|j dkr| |  |¡¡ |j dkr=| d¡ |jD ]}| |  |¡¡ | d¡ |j | _q)q	d |¡S )z1 MoinMoin uses || to delimit table cells
        ztable:table-header-rowsztable:table-rowz
||z||r-   )r�   r\   r”   ro   ÚtableToStringre   r¥   )r   ÚtableElementr§   r   Úcellr   r   r   rÎ   °  s   






€
zODF2MoinMoin.tableToStringc                 C   sÞ   | j  d¡d }|jd }g }dd„ |jD ƒ}|D ]/}|jdkr&|  |¡}n|jdkr1|  |¡}n|jdkr<|  |¡}n|  |¡}|rH| |¡ q| j	rb| d¡ | j	D ]\}}| d	||f ¡ qT| d
¡ |  
d |¡¡S )zo Converts the document to a string.
            FIXME: Result from second call differs from first call
        zoffice:bodyr   c                 S   r¿   ))rR   rÀ   rÁ   útext:sectionrÂ   útable:tablerÃ   r‘   r   r   r   r   Í  rÄ   z)ODF2MoinMoin.toString.<locals>.<listcomp>rÂ   rÑ   rÒ   z----z%s: %sr-   rÅ   )rŸ   rm   r”   r�   rÇ   r]   rÎ   rÈ   ro   rU   rª   r¥   )r   rµ   r†   r§   Ú
paragraphsr‡   r´   r   r   r   ÚtoStringÄ  s*   





€

zODF2MoinMoin.toStringc                 C   sÖ   g }|j D ]`}|jtjjjkr| |j¡ q|jtjjjkre|j	}|dv r.| |  
|¡¡ q|dv r?|  |¡}|r>| |¡ q|dkrL| |  |¡¡ q| j |¡}|r\| ||ƒ¡ q| d| d ¡ qd |¡S )N)rT   rS   )rÀ   rÁ   rÂ   z {z} r-   )r”   r‹   rŒ   r�   rŽ   Ú	TEXT_NODEro   r³   r�   r�   r]   rÈ   rÇ   ra   rs   r¥   )r   Úelementr§   r­   rk   r†   Úmethodr   r   r   r]   è  s*   


€€
zODF2MoinMoin.textToStringc           	      C   sú   t ƒ }| d¡}| j ||¡}|  |¡}|r|js| ¡ }|jdkr+| jdkr+d| }|j| _|j	r;d| _
d| d S | d¡}|rbt|ƒ}| j
rM|d7 }|dkrad| d	 | d	 d|  d S n	|jrkd
| d S |jrv| j||dd�S | j||d�S )Nr·   rÀ   rÅ   r   z= z =
ztext:outline-levelú=r.   z{{{
z
}}}
T)rÊ   rB   )rÊ   )rA   rn   rX   rs   re   rD   r¤   r�   r\   rE   r[   r6   rF   ÚwrapParagraph)	r   r‡   rÊ   ÚdummyParaPropsÚ
style_namer�   r†   ÚoutlinelevelrH   r   r   r   rÈ     s0   



 ÿzODF2MoinMoin.paragraphToStringFc                 C   s(   d}g }d}|r|  d¡ d |¡| S )Nr   é2   z  r-   )ro   r¥   r4   r•   )r   r†   rÊ   rB   Úcounterr§   ÚLIMITÚtokenr   r   r   rÙ   -  s   
zODF2MoinMoin.wrapParagraphr$   )r   )r   F)r=   r>   r?   r   rr   rz   r…   rŠ   r™   ri   rª   rc   r^   r_   rf   r`   rg   rh   re   rÇ   rÎ   rÔ   r]   rÈ   rÙ   r   r   r   r   rP   ‘   s.    


%	
 $
'rP   )Úsysrš   Úxml.dom.minidomrŒ   Úodf.namespacesr   Úodf.elementtypesÚempty_elementsrb   Úinline_elementsrd   r   rA   rL   ÚobjectrP   r   r   r   r   Ú<module>   s   ø
?