
^Q\G                 @   s   d  d l  Z  d  d l Z d  d l Z d  d l m Z d  d l Td d d d d d	 g d
 d   e D Z d d   e	 D Z
 Gd d   d  Z Gd d   d  Z Gd d   d  Z Gd 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   E/var/www/dbchiro/venv/lib/python3.4/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   r   r	   r
   %   s   	 c               @   sv   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   sC   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   s4   | d k r d |  _  n | d k r0 d |  _  n  d  S)Nr   TnormalF)r   )r   valuer   r   r	   	setItalic5   s    zTextProps.setItalicc             C   s4   | d k r d |  _  n | d k r0 d |  _  n  d  S)Nr   Tr   F)r   )r   r   r   r   r	   setBold;   s    zTextProps.setBoldc             C   s   | |  _  d  S)N)r   )r   r   r   r   r	   setFixedA   s    zTextProps.setFixedc             C   s"   | r | d k r d |  _  n  d  S)NnoneT)r   )r   r   r   r   r	   setUnderlinedD   s    zTextProps.setUnderlinedc             C   s"   | r | d k r d |  _  n  d  S)Nr   T)r   )r   r   r   r   r	   setStrikethroughH   s    zTextProps.setStrikethroughc             C   s   | d  k s | d k r d  S| j  d  } | d } | j d  d k r | d k rk d |  _ d |  _ q | d	 k r d |  _ d |  _ q na t | d  | j d    } | d
 k r d |  _ d |  _ n! | d k  r d |  _ d |  _ n  d  S)N  r   %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'   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   s1   d |  _  d |  _ d |  _ d |  _ d |  _ d  S)NFr   )
blockquoteheadingLevelcodetitleindented)r   r   r   r	   r   j   s
    				zParagraphProps.__init__c             C   s   | |  _  d  S)N)r3   )r   r   r   r   r	   setIndentedr   s    zParagraphProps.setIndentedc             C   s   | |  _  d  S)N)r0   )r   levelr   r   r	   
setHeadingu   s    zParagraphProps.setHeadingc             C   s   | |  _  d  S)N)r2   )r   r   r   r   r	   setTitlex   s    zParagraphProps.setTitlec             C   s   | |  _  d  S)N)r1   )r   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(   r/   r0   r1   )r   r   r   r	   r)      s    zParagraphProps.__str__N)
r*   r+   r,   r-   r   r4   r6   r7   r8   r)   r   r   r   r	   r.   g   s   r.   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)NF)ordered)r   r   r   r	   r      s    zListProperties.__init__c             C   s   | |  _  d  S)N)r:   )r   r   r   r   r	   
setOrdered   s    zListProperties.setOrderedN)r*   r+   r,   r-   r   r;   r   r   r   r	   r9      s   r9   c               @   s*  e  Z d  Z d d   Z d d   Z d d d  Z d 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 d  d!   Z d" d# d$  Z d% d&   Z d' d(   Z d) d*   Z d" d+ d,  Z d" d- d. d/  Z d S)0ODF2MoinMoinc             C   s$  g  |  _  d |  _ i t   d 6|  _ i t   d 6|  _ i  |  _ g  |  _ d |  _ d  |  _	 i |  j
 d 6|  j
 d 6|  j d 6|  j
 d 6|  j d 6|  j d 6|  _ x t D] } |  j |  j | <q Wx t D] } |  j |  j | <q W|  j |  j d	 <|  j |  j d
 <|  j |  j d <|  j |  d  S)Nr   Standardz	draw:pagez
draw:framez
draw:imagezdraw:text-boxztext:az	text:noteztext:line-breakztext:sztext:tab)	footnotesZfootnoteCounterr   
textStylesr.   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   sO   xH | j  d  D]7 } | j d  d k r |  j j | j d   q q Wd S)z^ Extracts necessary font information from a font-declaration
            element.
            zstyle:font-facezstyle:font-pitchr   z
style:nameN)getElementsByTagNamegetAttributerB   append)r   ZfontDeclZfontFacer   r   r	   processFontDeclarations   s    z$ODF2MoinMoin.processFontDeclarationsNc             C   s   t    } | r6 |  j j | d  } | r6 | } q6 n  | j d  } | sO | S| d } | j | j d   | j | j d   | j | j d   | j | j d   | j	 | j d   | j d	  |  j
 k r | j d
  n  | 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   r?   getrT   r   rU   r   r   r   r'   rB   r   )r   styleparent	textPropsZ
parentPropZtextPropZ
textPropElr   r   r	   extractTextProperties   s"    	 
z"ODF2MoinMoin.extractTextPropertiesc       	      C   s+  t    } | j d  } | j d  rh | d d  } y t |  } | j |  Wqh d } Yqh Xn  | d k r | j d  n  | j d  } | r | d } | j d	  } | r y6 t | d d   } | d k r | j d  n  Wq Yq Xq n  |  j	 |  } | j
 r'| j d  n  | S)z5 Extracts paragraph properties from a style element. z
style:nameZHeading_20_   Nr   ZTitleTzstyle:paragraph-propertieszfo:margin-left   g{Gz?)r.   rU   
startswithr&   r6   r7   rT   floatr4   r\   r   r8   )	r   rY   rZ   	paraPropsnamer5   Z
paraPropElZ
leftMarginr[   r   r   r	   extractParagraphProperties   s4    	
	z'ODF2MoinMoin.extractParagraphPropertiesc             C   s   x | D] } | j  d  } | d k r. q n  | j  d  } | j  d  } | d k rt |  j | |  |  j | <q | d k r |  j | |  |  j | <|  j | |  |  j | <q q Wd S)zI Runs through "style" elements extracting necessary information.
        z
style:namer=   zstyle:familyzstyle:parent-style-nametext	paragraphN)rU   r\   r?   rd   r@   )r   ZstyleElementsrY   rc   familyrZ   r   r   r	   processStyles   s     zODF2MoinMoin.processStylesc             C   s   xz | D]r } | j  d  } t   } | j   rl d d   | j D } t |  d k rl | j d  ql n  | |  j | <q Wd  S)Nz
style:namec             S   s=   g  |  ]3 } | 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)rU   r9   ZhasChildNodes
childNodeslenr;   rA   )r   ZlistStyleElementsrY   rc   propsubitemsr   r   r	   processListStyles  s    	zODF2MoinMoin.processListStylesc             C   s  t  j |  } t j j j | j d   } | j d  } | rV |  j | d  n  |  j	 | j d   |  j
 | j d   t j j j | j d   |  _ |  j j d  } | r |  j | d  n  |  j	 |  j j d   |  j
 |  j 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ZipFilerj   rk   ZminidomZparseStringreadrT   rW   rh   rt   content)r   rR   zipZ
styles_docZfontfacedeclsr   r   r	   rQ      s    !zODF2MoinMoin.loadc             C   s   | S| j  d  } g  } t |  } x t |  D]y } | | j   s | | d k s | d k s | | d j d  o | | d j d  r2 | j d | |  q2 q2 Wd j |  S)z- Removes extra blank lines from code blocks. 
r   r   z    r   )r$   rq   rangestripr`   rV   join)r   re   linesbufferZnumLinesir   r   r	   compressCodeBlocks4  s    ,zODF2MoinMoin.compressCodeBlocksc             C   s   d S)Nr   r   )r   noder   r   r	   rK   E  s    zODF2MoinMoin.do_nothingc             C   sj   | j  d  } | r3 | d d  d k r3 d | S| rb | d d  d k rb | d d  } n  d | S)	z	
        z
xlink:hrefNr^   z./z%s
	   z	Pictures/z[[Image(%s)]]
)rU   )r   r   linkr   r   r	   rF   H  s    zODF2MoinMoin.draw_imagec             C   sb   |  j  |  } | j d  } | j   | j   k rD d | j   Sd | j   | j   f Sd  S)Nz
xlink:hrefz[%s] z[%s %s] )rE   rU   r|   )r   r   re   r   r   r   r	   rG   S  s
    zODF2MoinMoin.text_ac             C   s   d S)Nz[[BR]]r   )r   r   r   r   r	   rN   \  s    zODF2MoinMoin.text_line_breakc             C   s^   | j  d  d j d j } | j  d  d j d } |  j j | |  j |  f  d | S)Nztext:note-citationr   ztext:note-bodyz^%s^)rT   rp   	nodeValuer>   rV   rE   )r   r   citebodyr   r   r	   rH   _  s    
zODF2MoinMoin.text_notec          	   C   s4   y! t  | j d   } d | SWn d SYn Xd  S)Nztext:cr   )r&   rU   )r   r   numr   r   r	   rO   g  s
    zODF2MoinMoin.text_sc             C   s   d S)Nz    r   )r   r   r   r   r	   rP   n  s    zODF2MoinMoin.text_tabc             C   s=  |  j  |  } | j   s d S| j d  } |  j j | t    } | j r[ d | d Sg  } | r | j r | j d  n  | j	 r | j d  n  | j
 r | j d  n  | j r | j d  n  | j r | j d  n  | j r | j d	  q n  | d  d   } | j   d
 d j |  | d j |  f S)Nr   ztext:style-name`z''z'''__z~~^z,,z%s%s%s)rE   r|   rU   r?   rX   r   r   r   rV   r   r   r   r   r   reverser}   )r   r   re   	styleNamerY   markZrevmarkr   r   r	   rM   q  s0    							
zODF2MoinMoin.inline_markupr   c             C   s`  | j  |  _ g  } | j d  } |  j j | t    } d } x| j D]} | j d |  | d 7} | j r t	 |  } d | d } | j d  n | j d  d d	   | j D }	 xs |	 D]k }
 |
 j  d
 k r	| j d  | j |  j
 |
 | d   n | j |  j |
 | d   |
 j  |  _ q W| j  |  _ | j d  qI Wd j |  S)Nztext:style-namer   r   r   z. z 1. z * c             S   s%   g  |  ] } | j  d k r |  q S)text:ptext:h	text:list)r   r   r   )rn   )r   ro   r   r   r	   r
     s   	 z-ODF2MoinMoin.listToString.<locals>.<listcomp>z	text:listrz      r   )rn   rD   rU   rA   rX   r9   rp   rV   r:   r(   listToStringparagraphToStringr}   )r   ZlistElementindentr   r   propsr   r   numberrs   subitemr   r   r	   r     s.    
	 zODF2MoinMoin.listToStringc             C   s   | j  |  _ g  } x | j D] } | j  |  _ | j  d k rV | j |  j |   n  | j  d k r | j d  xC | j D]5 } | j |  j |   | j d  | j  |  _ q| Wq q Wd j |  S)z1 MoinMoin uses || to delimit table cells
        ztable:table-header-rowsztable:table-rowz
||z||r   )rn   rD   rp   rV   tableToStringrM   r}   )r   ZtableElementr   r   Zcellr   r   r	   r     s    zODF2MoinMoin.tableToStringc             C   sE  |  j  j d  d } | j d } g  } d d   | j D } x | D] } | j d k rm |  j |  } nQ | j d k r |  j |  } n0 | j d k r |  j |  } n |  j |  } | rF | j |  qF qF W|  j	 r"| j d  x1 |  j	 D]# \ } } | j d	 | | f  q Wn  | j d
  |  j
 d j |   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)	draw:pagetext:ptext:htext:section	text:listtable:table)r   r   r   r   r   r   )rn   )r   ro   r   r   r	   r
     s   	 z)ODF2MoinMoin.toString.<locals>.<listcomp>z	text:listztext:sectionztable:tablez----z%s: %sr   rz   )rx   rT   rp   rn   r   rE   r   r   rV   r>   r   r}   )r   r   re   r   Z
paragraphsrf   r   r   r   r	   toString  s(    	zODF2MoinMoin.toStringc             C   s7  g  } x!| j  D]} | j t j j j k rA | j | j  q | j t j j j k r | j	 } | d	 k r | j |  j
 |   q&| d
 k r |  j |  } | r#| j |  q#q&| d k r | j |  j |   q&|  j j |  } | r| j | |   q&| j d | d  q q Wd j |  S)Ndraw:text-box
draw:frametext:ptext:hz	text:listz {z} r   )r   r   )r   r   )rp   ri   rj   rk   rl   Z	TEXT_NODErV   r   rm   rn   rE   r   r   rI   rX   r}   )r   elementr   r   rS   re   methodr   r   r	   rE     s&    	zODF2MoinMoin.textToStringc       	      C   sd  t    } | j d  } |  j j | |  } |  j |  } | r[ | j r[ | j   } n  | j d k r |  j d k r d | } n  | j |  _ | j	 r d |  _
 d | d S| j d  } | rt |  } |  j
 r | d 7} n  | d k r+d | d	 | d	 d | d Sn | j r+d
 | d S| j rM|  j | d | d d S|  j | d | Sd  S)Nztext:style-nameztext:prz   r   z= z =
ztext:outline-level=r   z{{{
z
}}}
r   r/   T)r.   rU   r@   rX   rM   r1   r|   rn   rD   r2   rC   r&   r3   wrapParagraph)	r   rf   r   ZdummyParaPropsZ
style_namerb   re   Zoutlinelevelr5   r   r   r	   r     s0    				 #		zODF2MoinMoin.paragraphToStringFc             C   s   d } g  } d } | r( | j  d  n  d j |  | Sxy | j   D]k } | | | k r | j  d d |  | r | j  d  n  d } n  | j  | d  | t |  7} qF Wd j |  S)Nr   2   z  r   rz   r   )rV   r}   r$   rq   )r   re   r   r/   counterr   ZLIMITtokenr   r   r	   r   -  s    	zODF2MoinMoin.wrapParagraph)r*   r+   r,   r   rW   r\   rd   rh   rt   rQ   r   rK   rF   rG   rN   rH   rO   rP   rM   r   r   r   rE   r   r   r   r   r   r	   r<      s,   
%	 $'r<   )sysru   Zxml.dom.minidomrj   Zodf.namespacesr   Zodf.elementtypesZempty_elementsrJ   Zinline_elementsrL   r   r.   r9   objectr<   r   r   r   r	   <module>   s   $
?