U
    ª6#^G  ã                   @   s–   d dl Z d dlZd dlZd dlmZ d dlT dddddd	g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   s$   g | ]}t |d   d |d  ‘qS ©r   ú:é   r   ©Ú.0Úitem© r   úP/var/www/html/UseVoiceDocker/env/lib/python3.8/site-packages/odf/odf2moinmoin.pyÚ
<listcomp>#   s     r   c                 C   s$   g | ]}t |d   d |d  ‘qS r   r   r   r   r   r   r   %   s     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   s"   |dkrd| _ n|dkrd| _ d S )Nr   TÚnormalF)r   ©r   Úvaluer   r   r   Ú	setItalic5   s    zTextProps.setItalicc                 C   s"   |dkrd| _ n|dkrd| _ d S )Nr   Tr   F)r   r   r   r   r   ÚsetBold;   s    zTextProps.setBoldc                 C   s
   || _ d S ©N)r   r   r   r   r   ÚsetFixedA   s    zTextProps.setFixedc                 C   s   |r|dkrd| _ d S ©NZnoneT)r   r   r   r   r   ÚsetUnderlinedD   s    zTextProps.setUnderlinedc                 C   s   |r|dkrd| _ d S r!   )r   r   r   r   r   ÚsetStrikethroughH   s    zTextProps.setStrikethroughc                 C   s¤   |d ks|dkrd S |  d¡}|d }| d¡dkr`|dkrJd| _d| _q |d	kr d| _d| _n@t|d | d¡… ƒ}|d
krŒd| _d| _n|dk r d| _d| _d S )NÚ ú r   ú%éÿÿÿÿÚsubFTÚsuperé
   iöÿÿÿ)ÚsplitÚfindr   r   Úint)r   r   ZposisizeZtextposZ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.   r0   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   s
   || _ d S r   )r:   r   r   r   r   ÚsetIndentedr   s    zParagraphProps.setIndentedc                 C   s
   || _ d S r   )r7   )r   Úlevelr   r   r   Ú
setHeadingu   s    zParagraphProps.setHeadingc                 C   s
   || _ d S r   )r9   r   r   r   r   ÚsetTitlex   s    zParagraphProps.setTitlec                 C   s
   || _ d S r   )r8   r   r   r   r   ÚsetCode{   s    zParagraphProps.setCodec                 C   s   dt | jƒ| jt | jƒf S )Nz[bq=%s, h=%d, code=%s])r/   r6   r7   r8   r   r   r   r   r0      s    
þzParagraphProps.__str__N)
r1   r2   r3   r4   r   r;   r=   r>   r?   r0   r   r   r   r   r5   g   s   r5   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   ‰   s    zListProperties.__init__c                 C   s
   || _ d S r   rA   r   r   r   r   Ú
setOrderedŒ   s    zListProperties.setOrderedN)r1   r2   r3   r4   r   rC   r   r   r   r   r@   †   s   r@   c                   @   sÆ   e Zd Zdd„ Zdd„ Zd0dd„Zd1d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d2d#d$„Zd%d&„ Zd'd(„ Zd)d*„ Zd3d+d,„Zd4d.d/„ZdS )5Ú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|< q`tD ]}| j| j|< qv| 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)Ú	footnotesZfootnoteCounterr   Ú
textStylesr5   Ú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ÚgetAttributerM   Úappend)r   ZfontDeclZfontFacer   r   r   ÚprocessFontDeclarations²   s    z$ODF2MoinMoin.processFontDeclarationsNc                 C   s¨   t ƒ }|r | j |d¡}|r |}| d¡}|s2|S |d }| | d¡¡ | | d¡¡ | | d¡¡ | | d¡¡ | 	| d¡¡ | d	¡| j
kr¤| 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   rJ   Úgetr`   r   ra   r   r"   r#   r.   rM   r    )r   ÚstyleÚparentÚ	textPropsZ
parentPropZtextPropZ
textPropElr   r   r   ÚextractTextProperties¼   s"    
 
z"ODF2MoinMoin.extractTextPropertiesc           	      C   sÖ   t ƒ }| d¡}| d¡rN|dd… }zt|ƒ}| |¡ W n   d}Y nX |dkr`| d¡ | d¡}|r¸|d }| d	¡}|r¸z&t|dd
… ƒ}|dkr¨| d¡ W n   Y nX |  	|¡}|j
rÒ| d¡ |S )z5 Extracts paragraph properties from a style element. r_   ZHeading_20_é   Nr   ZTitleTzstyle:paragraph-propertieszfo:margin-leftéþÿÿÿg{®Gáz„?)r5   ra   Ú
startswithr-   r=   r>   r`   Úfloatr;   rh   r   r?   )	r   re   rf   Ú	paraPropsÚnamer<   Z
paraPropElZ
leftMarginrg   r   r   r   ÚextractParagraphPropertiesÖ   s4    







z'ODF2MoinMoin.extractParagraphPropertiesc                 C   s~   |D ]t}|  d¡}|dkrq|  d¡}|  d¡}|dkrL|  ||¡| j|< q|dkr|  ||¡| j|< |  ||¡| j|< qdS )zI Runs through "style" elements extracting necessary information.
        r_   rE   zstyle:familyzstyle:parent-style-nameÚtextÚ	paragraphN)ra   rh   rJ   ro   rK   )r   ZstyleElementsre   rn   Úfamilyrf   r   r   r   ÚprocessStylesû   s    
 


ÿzODF2MoinMoin.processStylesc                 C   sV   |D ]L}|  d¡}tƒ }| ¡ rFdd„ |jD ƒ}t|ƒdkrF| d¡ || j|< qd S )Nr_   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)ra   r@   ZhasChildNodesÚ
childNodesÚlenrC   rL   )r   ZlistStyleElementsre   rn   Ú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¡}|rŽ|  |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ÚZipFileru   rv   ZminidomÚparseStringÚreadr`   rc   rs   r€   Úcontent)r   r]   ÚzipZ
styles_docZfontfacedeclsr   r   r   r\      s    

zODF2MoinMoin.loadc                 C   sj   |S ]Z}||  ¡ sL||d ksL|dksL||d   d¡rL||d   d¡s| d||  ¡ qd |¡S )z- Removes extra blank lines from code blocks. Ú
r   r   ú    r$   )r+   r}   ÚrangeÚstriprk   rb   Újoin)r   rp   ÚlinesÚbufferZnumLinesÚir   r   r   ÚcompressCodeBlocks4  s        ÿþzODF2MoinMoin.compressCodeBlocksc                 C   s   dS )Nr$   r   ©r   Únoder   r   r   rV   E  s    zODF2MoinMoin.do_nothingc                 C   sN   |  d¡}|r&|dd… dkr&d| S |rF|dd… dkrF|dd… }d| S )	z	
        ú
xlink:hrefNé   z./z%s
é	   z	Pictures/z[[Image(%s)]]
)ra   )r   r‘   Úlinkr   r   r   rQ   H  s    
zODF2MoinMoin.draw_imagec                 C   sH   |   |¡}| d¡}| ¡ | ¡ kr0d| ¡  S d| ¡ | ¡ f S d S )Nr’   z[%s] z[%s %s] )rP   ra   rŠ   )r   r‘   rp   r•   r   r   r   rR   S  s
    

zODF2MoinMoin.text_ac                 C   s   dS )Nz[[BR]]r   r   r   r   r   rY   \  s    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^)r`   r|   Ú	nodeValuerI   rb   rP   )r   r‘   ÚciteÚbodyr   r   r   rS   _  s    ÿÿzODF2MoinMoin.text_notec                 C   s,   zt | d¡ƒ}d| W S    Y dS X d S )Nztext:cr%   )r-   ra   )r   r‘   Únumr   r   r   rZ   g  s
    
zODF2MoinMoin.text_sc                 C   s   dS )Nrˆ   r   r   r   r   r   r[   n  s    zODF2MoinMoin.text_tabc                 C   sØ   |   |¡}| ¡ sdS | d¡}| j |tƒ ¡}|jrBd| d S g }|rª|jrZ| d¡ |j	rj| d¡ |j
rz| d¡ |jrŠ| d¡ |jrš| d¡ |jrª| d	¡ |d d … }| ¡  d
d |¡|d |¡f S )Nr$   útext:style-nameú`z''z'''Ú__z~~ú^z,,z%s%s%s)rP   rŠ   ra   rJ   rd   r   r   r   rb   r   r   r   r   r   Úreverser‹   )r   r‘   rp   Ú	styleNamere   ZmarkZrevmarkr   r   r   rX   q  s0    







zODF2MoinMoin.inline_markupr   c              	   C   sü   |j | _g }| d¡}| j |tƒ ¡}d}|jD ]À}| d| ¡ |d7 }|jrpt	|ƒ}d| d }| d¡ n
| d¡ dd	„ |jD ƒ}	|	D ]N}
|
j d
kr¾| d¡ | |  
|
|d ¡¡ n| |  |
|d ¡¡ |
j | _qŽ|j | _| d¡ q0d |¡S )Nrš   r   r%   r   z. z 1. z * c                 S   s   g | ]}|j d kr|‘qS ))útext:pútext:hú	text:list©ry   rz   r   r   r   r   ¢  s    
ÿz-ODF2MoinMoin.listToString.<locals>.<listcomp>r¢   r‡   é   r$   )ry   rO   ra   rL   rd   r@   r|   rb   rB   r/   ÚlistToStringÚparagraphToStringr‹   )r   ZlistElementÚindentr   rŸ   ÚpropsrŽ   r
   Únumberr   Úsubitemr   r   r   r¥     s.    





zODF2MoinMoin.listToStringc                 C   s†   |j | _g }|jD ]h}|j | _|j dkr8| |  |¡¡ |j dkr| d¡ |jD ]&}| |  |¡¡ | d¡ |j | _qRqd |¡S )z1 MoinMoin uses || to delimit table cells
        ztable:table-header-rowsztable:table-rowz
||z||r$   )ry   rO   r|   rb   ÚtableToStringrX   r‹   )r   Z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rL|  |¡}n6|jdkrb|  |¡}n |jdkrx|  |¡}n
|  |¡}|r2| |¡ q2| j	rÄ| d¡ | j	D ]\}}| d	||f ¡ q¨| d
¡ |  
d |¡¡S )zo Converts the document to a string.
            FIXME: Result from second call differs from first call
        zoffice:bodyr   c                 S   s   g | ]}|j d kr|‘qS ))rF   r    r¡   útext:sectionr¢   útable:tabler£   rz   r   r   r   r   Í  s    
ÿz)ODF2MoinMoin.toString.<locals>.<listcomp>r¢   r­   r®   z----z%s: %sr$   r‡   )r…   r`   r|   ry   r¥   rP   r«   r¦   rb   rI   r   r‹   )r   r˜   rp   r   Z
paragraphsrq   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r
|j	}|dkr\| |  
|¡¡ q
|dkr~|  |¡}|rÊ| |¡ q
|dkr˜| |  |¡¡ q
| j |¡}|r¸| ||ƒ¡ q
| d| d ¡ q
d |¡S )N)rH   rG   )r    r¡   r¢   z {z} r$   )r|   rt   ru   rv   rw   Z	TEXT_NODErb   r–   rx   ry   rP   r¦   r¥   rT   rd   r‹   )r   Úelementr   r‘   r^   rp   Úmethodr   r   r   rP   è  s&    

zODF2MoinMoin.textToStringc           	      C   sþ   t ƒ }| d¡}| j ||¡}|  |¡}|r:|js:| ¡ }|jdkrV| jdkrVd| }|j| _|j	rvd| _
d| d S | d¡}|rÄt|ƒ}| j
rš|d7 }|dkrÖd| d	 | d	 d|  d S n|jrÖd
| d S |jrì| j||ddS | j||dS d S )Nrš   r    r‡   r   z= z =
ztext:outline-levelú=r%   z{{{
z
}}}
T)r§   r6   )r§   )r5   ra   rK   rd   rX   r8   rŠ   ry   rO   r9   rN   r-   r:   ÚwrapParagraph)	r   rq   r§   ZdummyParaPropsZ
style_namerm   rp   Zoutlinelevelr<   r   r   r   r¦     s0    



 "zODF2MoinMoin.paragraphToStringFc                 C   s‚   d}g }d}|r|  d¡ d |¡| S ]N}||| kr\|  dd|  ¡ |rX|  d¡ d}|  |d ¡ |t|ƒ7 }q(d |¡S )Nr   é2   z  r$   r‡   r%   )rb   r‹   r+   r}   )r   rp   r§   r6   Úcounterr   ZLIMITÚtokenr   r   r   r³   -  s    

zODF2MoinMoin.wrapParagraph)N)N)r   )r   )r   F)r1   r2   r3   r   rc   rh   ro   rs   r€   r\   r   rV   rQ   rR   rY   rS   rZ   r[   rX   r¥   r«   r¯   rP   r¦   r³   r   r   r   r   rD   ‘   s,   


%	
 $
'rD   )Úsysr   Zxml.dom.minidomru   Zodf.namespacesr   Zodf.elementtypesZempty_elementsrU   Zinline_elementsrW   r   r5   r@   ÚobjectrD   r   r   r   r   Ú<module>   s    ùø
?