U
    >Ke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   ú4/tmp/pip-unpacked-wheel-awqfhqe2/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 ©NÚ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/   r1   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   )r8   )r   Úlevelr   r   r   Ú
setHeadingu   s    zParagraphProps.setHeadingc                 C   s
   || _ d S r   )r:   r   r   r   r   ÚsetTitlex   s    zParagraphProps.setTitlec                 C   s
   || _ d S r   )r9   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])r0   r7   r8   r9   r   r   r   r   r1      s    
þzParagraphProps.__str__N)
r2   r3   r4   r5   r   r<   r>   r?   r@   r1   r   r   r   r   r6   g   s   r6   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   rB   r   r   r   r   Ú
setOrderedŒ   s    zListProperties.setOrderedN)r2   r3   r4   r5   r   rD   r   r   r   r   rA   †   s   rA   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   Ú
textStylesr6   Ú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ÚgetAttributerN   Ú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   rK   Úgetra   r   rb   r   r#   r$   r/   rN   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„?)r6   rb   Ú
startswithr.   r>   r?   ra   Úfloatr<   ri   r   r@   )	r   rf   rg   Ú	paraPropsÚnamer=   Z
paraPropElZ
leftMarginrh   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`   rF   zstyle:familyzstyle:parent-style-nameÚtextÚ	paragraphN)rb   ri   rK   rp   rL   )r   ZstyleElementsrf   ro   Úfamilyrg   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)rb   rA   ZhasChildNodesÚ
childNodesÚlenrD   rM   )r   ZlistStyleElementsrf   ro   Ú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ÚZipFilerv   rw   ÚminidomÚparseStringÚreadra   rd   rt   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Ústriprl   rc   Újoin)r   rq   ÚlinesÚbufferZnumLinesÚir   r   r   ÚcompressCodeBlocks4  s        ÿþzODF2MoinMoin.compressCodeBlocksc                 C   s   dS )Nr%   r   ©r   Únoder   r   r   rW   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)]]
)rb   )r   r“   Úlinkr   r   r   rR   H  s    
zODF2MoinMoin.draw_imagec                 C   sH   |   |¡}| d¡}| ¡ | ¡ kr0d| ¡  S d| ¡ | ¡ f S d S )Nr”   z[%s] z[%s %s] )rQ   rb   rŒ   )r   r“   rq   r—   r   r   r   rS   S  s
    

zODF2MoinMoin.text_ac                 C   s   dS )Nz[[BR]]r   r’   r   r   r   rZ   \  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^)ra   r}   Ú	nodeValuerJ   rc   rQ   )r   r“   ÚciteÚbodyr   r   r   rT   _  s    ÿÿzODF2MoinMoin.text_notec                 C   s,   zt | d¡ƒ}d| W S    Y dS X d S )Nztext:cr&   )r.   rb   )r   r“   Únumr   r   r   r[   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)rQ   rŒ   rb   rK   re   r   r   r   rc   r   r   r   r   r   Úreverser   )r   r“   rq   Ú	styleNamerf   ÚmarkZrevmarkr   r   r   rY   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©rz   r{   r   r   r   r   ¢  s    
ÿz-ODF2MoinMoin.listToString.<locals>.<listcomp>r¥   r‰   é   r%   )rz   rP   rb   rM   re   rA   r}   rc   rC   r0   Ú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%   )rz   rP   r}   rc   ÚtableToStringrY   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 ))rG   r£   r¤   útext:sectionr¥   útable:tabler¦   r{   r   r   r   r   Í  s    
ÿz)ODF2MoinMoin.toString.<locals>.<listcomp>r¥   r°   r±   z----z%s: %sr%   r‰   )r‡   ra   r}   rz   r¨   rQ   r®   r©   rc   rJ   r‘   r   )r   rš   rq   r   Z
paragraphsrr   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)rI   rH   )r£   r¤   r¥   z {z} r%   )r}   ru   rv   rw   rx   Z	TEXT_NODErc   r˜   ry   rz   rQ   r©   r¨   rU   re   r   )r   Úelementr   r“   r_   rq   Úmethodr   r   r   rQ   è  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ª   r7   )rª   )r6   rb   rL   re   rY   r9   rŒ   rz   rP   r:   rO   r.   r;   ÚwrapParagraph)	r   rr   rª   ZdummyParaPropsZ
style_namern   rq   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&   )rc   r   r,   r~   )r   rq   rª   r7   Úcounterr   ZLIMITÚtokenr   r   r   r¶   -  s    

zODF2MoinMoin.wrapParagraph)N)N)r   )r   )r   F)r2   r3   r4   r   rd   ri   rp   rt   r   r]   r‘   rW   rR   rS   rZ   rT   r[   r\   rY   r¨   r®   r²   rQ   r©   r¶   r   r   r   r   rE   ‘   s,   


%	
 $
'rE   )Úsysr‚   Zxml.dom.minidomrv   Zodf.namespacesr   Zodf.elementtypesZempty_elementsrV   Zinline_elementsrX   r   r6   rA   ÚobjectrE   r   r   r   r   Ú<module>   s    ùø
?