o
    e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   C/var/www/html/venv/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-leftg{Gz?)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   
?