
    eB1iG                        d dl Z d dlZd dlZd dlmZ d dl g deD  cg c]  } e| d       dz   | d   z    c} z   Ze	D  cg c]  } e| d       dz   | d   z    c} Z
 G d d      Z G d	 d
      Z G d d      Z G d de      Zyc c} w c c} w )    N)nsdict)*)zdraw:adraw:gz	draw:linezdraw:object-olezoffice:annotationzpresentation:noteszsvg:desc:   c                   @    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)	TextPropsz$ Holds properties for a text style. c                 f    d| _         d| _        d| _        d| _        d| _        d| _        d| _        y NF)italicboldfixed
underlinedstrikethroughsuperscript	subscriptselfs    C/var/www/html/venv/lib/python3.12/site-packages/odf/odf2moinmoin.py__init__zTextProps.__init__+   s5    	
"     c                 8    |dk(  rd| _         y |dk(  rd| _         y y )Nr   TnormalF)r   r   values     r   	setItaliczTextProps.setItalic5   s%    HDKhDK r   c                 8    |dk(  rd| _         y |dk(  rd| _         y y )Nr   Tr   F)r   r   s     r   setBoldzTextProps.setBold;   s$    F?DIhDI r   c                     || _         y N)r   r   s     r   setFixedzTextProps.setFixedA   	    
r   c                 $    |r|dk7  rd| _         y y y NnoneT)r   r   s     r   setUnderlinedzTextProps.setUnderlinedD   s    Uf_"DO %5r   c                 $    |r|dk7  rd| _         y y y r#   )r   r   s     r   setStrikethroughzTextProps.setStrikethroughH   s    Uf_!%D %5r   c                 D   ||dk(  ry |j                  d      }|d   }|j                  d      dk(  r)|dk(  rd| _        d| _        y |d	k(  rd| _        d| _        y y t	        |d |j                  d             }|d
kD  rd| _        d| _        y |dk  rd| _        d| _        y y )N  r   %subFTsuper
   i)splitfindr   r   int)r   r   posisizetextpositextposs        r   setPositionzTextProps.setPositionL   s    =ERK;;s#1+<<"%#( !%G##' !& $ 7#5GLL$567H"}#( !%C#' !&  r   c                     dt        | j                        dt        | j                        dt        | j                        dS )Nz[italic=z, bold=iz, fixed=])strr   r   r   r   s    r   __str__zTextProps.__str__a   s.    474D*-dii.*-djj/; 	;r   N)__name__
__module____qualname____doc__r   r   r   r    r%   r'   r6   r:    r   r   r   r   (   s-    . #&'*;r   r   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	ParagraphPropsz( Holds properties of a paragraph style. c                 J    d| _         d| _        d| _        d| _        d| _        y )NFr   )
blockquoteheadingLevelcodetitleindentedr   s    r   r   zParagraphProps.__init__j   s&    	
r   c                     || _         y r   )rG   r   s     r   setIndentedzParagraphProps.setIndentedr   s	    r   c                     || _         y r   )rD   )r   levels     r   
setHeadingzParagraphProps.setHeadingu   s
    !r   c                     || _         y r   )rF   r   s     r   setTitlezParagraphProps.setTitlex   r!   r   c                     || _         y r   )rE   r   s     r   setCodezParagraphProps.setCode{   s	    	r   c                 r    dt        | j                        | j                  t        | j                        fz  S )Nz[bq=%s, h=%d, code=%s])r9   rC   rD   rE   r   s    r   r:   zParagraphProps.__str__   s3    '3t+?+/+<+<+.tyy>+; ; 	;r   N)
r;   r<   r=   r>   r   rI   rL   rN   rP   r:   r?   r   r   rA   rA   g   s#    2";r   rA   c                       e Zd ZdZd Zd Zy)ListPropertiesz$ Holds properties for a list style. c                     d| _         y r
   orderedr   s    r   r   zListProperties.__init__   	    r   c                     || _         y r   rU   r   s     r   
setOrderedzListProperties.setOrdered   rW   r   N)r;   r<   r=   r>   r   rY   r?   r   r   rS   rS      s    .r   rS   c                       e Zd Zd Zd ZddZddZd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd ZddZd Zd Zd ZddZddZy)ODF2MoinMoinc                 x   g | _         d| _        dt               i| _        dt	               i| _        i | _        g | _        d| _        d | _	        | j                  | j                  | j                  | j                  | j                  | j                  d| _        t        D ]  }| j                   | j                  |<    t"        D ]  }| j$                  | j                  |<    | j&                  | j                  d<   | j(                  | j                  d<   | j*                  | j                  d<   | j-                  |       y )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tags      r   r   zODF2MoinMoin.__init__   s    %y{3 *N,<= ''((++;;nn
   	1C!%DMM#	1  	4C!%!3!3DMM#	4+/+?+?'("&++h$(MMj!		(r   c                     |j                  d      D ]A  }|j                  d      dk(  s| j                  j                  |j                  d             C y)z^ Extracts necessary font information from a font-declaration
            element.
            zstyle:font-facezstyle:font-pitchr   
style:nameN)getElementsByTagNamegetAttributerf   append)r   fontDeclfontFaces      r   processFontDeclarationsz$ODF2MoinMoin.processFontDeclarations   sR     !556GH 	LH$$%78GC&&x'<'<\'JK	Lr   Nc                 .   t               }|r | j                  j                  |d      }|r|}|j                  d      }|s|S |d   }|j	                  |j                  d             |j                  |j                  d             |j                  |j                  d             |j                  |j                  d             |j                  |j                  d             |j                  d	      | j                  v r|j                  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   rc   getrz   r   r{   r   r%   r'   r6   rf   r    )r   styleparent	textProps
parentProptextProp
textPropEls          r   extractTextPropertiesz"ODF2MoinMoin.extractTextProperties   s     K	,,VT:J%//0GH
)+]
J33ODE*112BCD
 7 78T UV"":#:#:;Z#[\j556KLM""#45Ht$r   c                    t               }|j                  d      }|j                  d      r"|dd }	 t        |      }|j	                  |       |dk(  r|j                  d       |j                  d      }|r=|d   }|j                  d	      }|r%	 t        |dd
       }|dkD  r|j                  d       | j                  |      }|j                  r|j                  d       |S #  d}Y xY w#  Y =xY w)z5 Extracts paragraph properties from a style element. ry   Heading_20_   Nr   TitleTzstyle:paragraph-propertieszfo:margin-leftg{Gz?)rA   r{   
startswithr2   rL   rN   rz   floatrI   r   r   rP   )	r   r   r   	paraPropsnamerK   
paraPropEl
leftMarginr   s	            r   extractParagraphPropertiesz'ODF2MoinMoin.extractParagraphProperties   s    #$	!!,/??=)IEE
$$U+ 7?t$//0LM
#AJ#001ABJ!&z#2!7J!D(!--d3 ..u5	??d#-s   C% $C. %C+.C2c                 V   |D ]  }|j                  d      }|dk(  r|j                  d      }|j                  d      }|dk(  r | j                  ||      | j                  |<   a|dk(  sg| j                  ||      | j                  |<   | j                  ||      | j                  |<    y)zI Runs through "style" elements extracting necessary information.
        ry   r]   zstyle:familyzstyle:parent-style-nametext	paragraphN)r{   r   rc   r   rd   )r   styleElementsr   r   familyr   s         r   processStyleszODF2MoinMoin.processStyles   s     # 	RE%%l3Dz!8''7F''(ABF(,(B(B5&(Q%;&!%!@!@!O $$T*(,(B(B5&(Q%	Rr   c                    |D ]  }|j                  d      }t               }|j                         rx|j                  D cg c]D  }|j                  t
        j                  j                  j                  k(  r|j                  dk(  r|F }}t        |      dkD  r|j                  d       || j                  |<    y c c}w )Nry   ztext:list-level-style-numberr   T)r{   rS   hasChildNodes
childNodesnodeTypexmldomNodeELEMENT_NODEtagNamelenrY   re   )r   listStyleElementsr   r   propelsubitemss          r   processListStyleszODF2MoinMoin.processListStyles  s    & 	)E%%l3D!#D""$).)9)9 G2sww||'@'@@'EE  G G x=1$OOD)$(DOOD!	)
Gs   A	B;c                    t        j                  |      }t        j                  j                  j                  |j                  d            }|j                  d      }|r| j                  |d          | j                  |j                  d             | j                  |j                  d             t        j                  j                  j                  |j                  d            | _        | j                  j                  d      }|r| j                  |d          | j                  | j                  j                  d             | j                  | j                  j                  d             y)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readrz   r   r   r   content)r   rv   zip
styles_docfontfacedeclss        r   ru   zODF2MoinMoin.load   s    ooh'WW__00,1GH
"778PQ((q)9::::=IJz>>?PQRww22388M3JK99:RS((q)9:4<<<<]KLt||@@ARSTr   c                     |S )z- Removes extra blank lines from code blocks. )r0   r   rangestripr   r|   join)r   r   linesbuffernumLinesis         r   compressCodeBlockszODF2MoinMoin.compressCodeBlocks4  s	     r   c                      y)Nr)   r?   r   nodes     r   ro   zODF2MoinMoin.do_nothingE  s    r   c                 j    |j                  d      }|r|dd dk(  rd|z  S |r|dd dk(  r|dd }d|z  S )	z	
        
xlink:hrefN   z./z%s
	   z	Pictures/z[[Image(%s)]]
)r{   )r   r   links      r   rj   zODF2MoinMoin.draw_imageH  sT       .D!H$D= D!H+8D 4''r   c                     | j                  |      }|j                  d      }|j                         |j                         k(  rd|j                         z  S d|j                         d|j                         dS )Nr   z[%s] [r*   z] )ri   r{   r   )r   r   r   r   s       r   rk   zODF2MoinMoin.text_aS  se      &  .::<4::<'TZZ\)) ( "&tzz|<<r   c                      y)Nz[[BR]]r?   r   s     r   rr   zODF2MoinMoin.text_line_break\  s    r   c                     |j                  d      d   j                  d   j                  }|j                  d      d   j                  d   }| j                  j	                  || j                  |      f       d|z  S )Nztext:note-citationr   ztext:note-bodyz^%s^)rz   r   	nodeValuera   r|   ri   )r   r   citebodys       r   rl   zODF2MoinMoin.text_note_  sz    ))*>?BZ##,9 	))*:;A>Z#tT%6%6t%<=>}r   c                 P    	 t        |j                  d            }d|z  S #  Y yxY w)Nztext:cr*   )r2   r{   )r   r   nums      r   rs   zODF2MoinMoin.text_sg  s/    	d''12Cs7N	s   ! %c                      y)Nz    r?   r   s     r   rt   zODF2MoinMoin.text_tabn  s    r   c                    | j                  |      }|j                         sy|j                  d      }| j                  j	                  |t                     }|j                  rd|z   dz   S g }|r|j                  r|j                  d       |j                  r|j                  d       |j                  r|j                  d       |j                  r|j                  d       |j                  r|j                  d       |j                  r|j                  d	       |d d  }|j                          dj                  |      |dj                  |      S )
Nr)   text:style-name`z''z'''__z~~^z,,)ri   r   r{   rc   r   r   r   r   r|   r   r   r   r   r   reverser   )r   r   r   	styleNamer   markrevmarks          r   rq   zODF2MoinMoin.inline_markupq  s     &zz|%%&78	##Iy{;;;:##||D!zzE"D!""D!  C D!q'774=$0@AAr   c           	      2   |j                   | _        g }|j                  d      }| j                  j	                  |t                     }d}|j                  D ](  }|j                  d|z         |dz  }|j                  r%t        |      }d|z   dz   }|j                  d       n|j                  d       |j                  D 	cg c]  }	|	j                   dv r|	 }
}	|
D ]|  }|j                   d	k(  r6|j                  d
       |j                  | j                  ||dz                n$|j                  | j                  ||dz                |j                   | _        ~ |j                   | _        |j                  d
       + dj                  |      S c c}	w )Nr   r   r*   r   z. z 1. z * )text:ptext:h	text:listr   
   r)   )r   rh   r{   re   r   rS   r   r|   rV   r9   listToStringparagraphToStringr   )r   listElementindentr   r   propsr   itemnumberr   r   subitems               r   r   zODF2MoinMoin.listToString  su   &..,,->?	##I~/?@** 	 DMM#f*%FA}}Qv,f%e$%)__ NrZZ+LL  NH N# 3??k1MM$'MM$"3"3GVAX"FGMM$"8"8&("KL#*?? 3  $||DMM$'	 * wwvNs   Fc                    |j                   | _        g }|j                  D ]  }|j                   | _        |j                   dk(  r |j                  | j	                  |             |j                   dk(  sS|j                  d       |j                  D ]D  }|j                  | j                  |             |j                  d       |j                   | _        F  dj                  |      S )z1 MoinMoin uses || to delimit table cells
        ztable:table-header-rowsztable:table-rowz
||z||r)   )r   rh   r   r|   tableToStringrq   r   )r   tableElementr   r   cells        r   r   zODF2MoinMoin.tableToString  s     (// ++ 		4D#||D||88d0067||00f% OO 4DMM$"4"4T":;MM$''+||D$4		4 wwvr   c                    | j                   j                  d      d   }|j                  d   }g }|j                  D cg c]  }|j                  dv r| }}|D ]  }|j                  dk(  r| j	                  |      }nS|j                  dk(  r| j                  |      }n2|j                  dk(  r| j                  |      }n| j                  |      }|sz|j                  |        | j                  r;|j                  d       | j                  D ]  \  }}|j                  |d|        |j                  d	       | j                  d
j                  |            S c c}w )zo Converts the document to a string.
            FIXME: Result from second call differs from first call
        zoffice:bodyr   )r^   r   r   text:sectionr   table:tabler   r   r   z----z: r)   r   )r   rz   r   r   r   ri   r   r   r|   ra   r   r   )r   r   r   r   r   
paragraphsr   r   s           r   toStringzODF2MoinMoin.toString  s[    ||00?Bq!#'?? ER (D D  E
 E $ 
	$I  K/((3""n4((3""m3)))4--i8d#
	$ >>MM&!"nn 7
d$567 	b&&tyy'8991Es   Ec                    g }|j                   D ]Q  }|j                  t        j                  j                  j
                  k(  r|j                  |j                         Q|j                  t        j                  j                  j                  k(  s|j                  }|dv r!|j                  | j                  |             |dv r&| j                  |      }|s|j                  |       |dk(  r"|j                  | j                  |             | j                  j                  |      }|r|j                   ||             ;|j                  d|z   dz          T dj                  |      S )N)r`   r_   )r   r   r   z {z} r)   )r   r   r   r   r   	TEXT_NODEr|   r   r   r   ri   r   r   rm   r   r   )r   elementr   r   rw   r   methods          r   ri   zODF2MoinMoin.textToString  s   && 	9D}} 6 66dnn-#'',,";";;ll99MM$"3"3D"9:0011$7Dd+K'MM$"3"3D"9:!]]..s3FfTl3dSj4&78-	90 wwvr   c                    t               }|j                  d      }| j                  j                  ||      }| j	                  |      }|r|j
                  s|j                         }|j                  dk(  r| j                  dk(  rd|z   }|j                  | _        |j                  rd| _
        d|z   dz   S |j                  d      }|r8t        |      }| j                  r|dz  }|dk\  r+d|z  d	z   |z   d	z   d|z  z   dz   S |j
                  rd
|z   dz   S |j                  r| j                  ||d      S | j                  ||      S )Nr   r   r   r   z= z =
ztext:outline-level=r*   z{{{
z
}}}
T)r   rC   )r   )rA   r{   rd   r   rq   rE   r   r   rh   rF   rg   r2   rG   wrapParagraph)	r   r   r   dummyParaProps
style_namer   r   outlinelevelrK   s	            r   r   zODF2MoinMoin.paragraphToString  sP   ')++,=>
((,,ZH	!!),Y^^::<D(T-=-=-I$;D$,,??DM$;'' --.BC%E}}eqjezU{S(4/#5eCdJJ^^T>I--%%dV$%OO %%dV%<<r   c                 \    d}g }d}|r|j                  d       dj                  |      |z   S )Nr   2   z  r)   )r|   r   r0   r   )r   r   r   rC   counterr   LIMITtokens           r   r   zODF2MoinMoin.wrapParagraph-  s3    MM$wwv%%r   r   )r   )r   F)r;   r<   r=   r   r   r   r   r   r   ru   r   ro   rj   rk   rr   rl   rs   rt   rq   r   r   r   ri   r   r   r?   r   r   r[   r[      sx    <L4"JR*) U("	(=B>@(!:H<$=Nr   r[   )sysr   xml.dom.minidomr   odf.namespacesr   odf.elementtypesempty_elementsrn   inline_elementsrp   r   rA   rS   objectr[   )r   s   0r   <module>r     s   . % $ !  /==dfT!Woc$q'!=> 9HHtAw#DG+H=; =;~; ;> r6 r] >Hs   B B
