Ë
    ¤2Úi ã                   ó’  — d dl Z d dlZe j                  j	                  ej                  j                  e«      «       d dlmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$  G d„ d«      Z% G d	„ d
«      Z&dddddddddddddddœZ' G d„ dejP                  «      Z) G d„ de)«      Z*y)é    N)Úhandler)ÚescapeÚ	quoteattr)ÚNode)Úload)ÚANIMNSÚCHARTNSÚCONFIGNSÚDCNSÚDR3DNSÚDRAWNSÚFONSÚFORMNSÚMATHNSÚMETANSÚNUMBERNSÚOFFICENSÚPRESENTATIONNSÚSCRIPTNSÚSMILNSÚSTYLENSÚSVGNSÚTABLENSÚTEXTNSÚXLINKNSc                   ój   — e 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„ Zd„ Zd„ Zd„ Zd„ Zy)Ú
StyleToCSSzÞ The purpose of the StyleToCSS class is to contain the rules to convert
        ODF styles to CSS2. Since it needs the generic fonts, it would probably
        make sense to also contain the Styles in a dict as well..
    c                 ó®  — i | _         i | _        i t        df| j                  “t        df| j
                  “t        df| j
                  “t        df| j
                  “t        df| j
                  “t        df| j
                  “t        df| j
                  “t        df| j
                  “t        d	f| j
                  “t        d
f| j
                  “t        df| j
                  “t        df| j
                  “t        df| j
                  “t        df| j
                  “t        df| j
                  “t        df| j
                  “t        df| j
                  “i t        df| j
                  “t        df| j
                  “t        df| j
                  “t        df| j
                  “t        df| j
                  “t        df| j
                  “t        df| j
                  “t        df| j
                  “t        df| j                  “t        df| j                  “t        df| j                  “t        df| j
                  “t        df| j                  “t        df| j                  “t        d f| j                  “t        d!f| j                  “t        d"f| j                  “¥t        d#f| j                   t        d$f| j"                  t        d%f| j                  i¥| _        y )&Nzfill-image-namezbackground-colorÚborderzborder-bottomzborder-leftzborder-rightz
border-topÚcolorúfont-familyú	font-sizez
font-stylezfont-variantzfont-weightzline-heightÚmarginzmargin-bottomúmargin-leftúmargin-rightz
margin-topú
min-heightÚpaddingzpadding-bottomzpadding-leftzpadding-rightzpadding-topz
page-widthzpage-heightú
text-alignztext-indentzborder-modelzcolumn-widthz	font-namezhorizontal-posztext-positionztext-line-through-styleztext-underline-styleÚwidth)ÚfontdictÚ
fillimagesr   Úc_drawfillimager   Úc_foÚc_page_widthÚc_page_heightÚc_text_alignr   Úc_border_modelr   Úc_widthÚc_fnÚc_hpÚc_text_positionÚc_text_line_through_styleÚc_text_underline_styleÚruleconversions©Úselfs    úD/var/www/html/acx/venv/lib/python3.12/site-packages/odf/odf2xhtml.pyÚ__init__zStyleToCSS.__init__?   s4  € àˆŒð ˆŒð' 
ÜÐ&Ð'¨×)=Ñ)=ð' 
äÐ%Ð&¨¯	©	ð' 
ô �)Ð˜dŸi™ið' 
ô Ð"Ð# T§Y¡Yð	' 
ô
 �.Ð! 4§9¡9ð' 
ô �/Ð" D§I¡Ið' 
ô �-Ð  $§)¡)ð' 
ô �(ˆO˜TŸY™Yð' 
ô �.Ð! 4§9¡9ð' 
ô �,Ð §¡ð' 
ô �-Ð  $§)¡)ð' 
ô �/Ð" D§I¡Ið' 
ô �.Ð! 4§9¡9ð' 
ô �.Ð! 4§9¡9ð' 
ô �)Ð˜dŸi™ið' 
ô  Ð"Ð# T§Y¡Yð!' 
ô" �.Ð! 4§9¡9ñ#' 
ô$ �/Ð" D§I¡Ið%' 
ô& �-Ð  $§)¡)ð'' 
ô( �-Ð  $§)¡)ð)' 
ô* �*Ð˜tŸy™yð+' 
ô, Ð#Ð$ d§i¡ið-' 
ô. �/Ð" D§I¡Ið/' 
ô0 Ð"Ð# T§Y¡Yð1' 
ô2 �.Ð! 4§9¡9ð3' 
ô4 �-Ð  $×"3Ñ"3ð5' 
ô6 �.Ð! 4×#5Ñ#5ð7' 
ô8 �-Ð  $×"3Ñ"3ð9' 
ô: �.Ð! 4§9¡9ð;' 
ô< �_Ð% t×':Ñ':ð=' 
ô> �_Ð%¨¯©ð?' 
ô@ �\Ð" D§I¡IðA' 
ôB Ð&Ð'¨¯©ðC' 
ôD Ð%Ð&¨×(<Ñ(<ñE' 
ôF Ð/Ð0°$×2PÑ2PÜÐ,Ð-¨t×/JÑ/JÜ�XÐ §¡ñK' 
ˆÕó    c                 óˆ   — d}|dk(  rd}n'|dk(  rd}n|dk(  rd}n|dk(  rd}n|dk(  rd}n|d	k(  rd}||f| j                   |<   y
)a’   It is possible that the HTML browser doesn't know how to
            show a particular font. Fortunately ODF provides generic fallbacks.
            Unfortunately they are not the same as CSS2.
            CSS2: serif, sans-serif, cursive, fantasy, monospace
            ODF: roman, swiss, modern, decorative, script, system
            This method put the font and fallback into a dictionary
        z
sans-serifÚromanÚserifÚswissÚmodernÚ	monospaceÚ
decorativeÚscriptÚsystemN)r*   )r:   ÚnameÚfamilyÚgenericÚhtmlgenerics        r;   Ú	save_fontzStyleToCSS.save_fonto   sd   € ð #ˆØ˜Ò¨w¡Ø˜Ò¨|¡Ø˜Ò °¡+Ø˜Ò$°L¡kØ˜Ò °¡+Ø˜Ò ° +Ø% {Ð3ˆ�‰�dÒr=   c                 ó.   — d| j                   |   z  |d<   y)zÂ Fill a figure with an image. Since CSS doesn't let you resize images
            this should really be implemented as an absolutely position <img>
            with a width and a height
        z	url('%s')zbackground-imageN)r+   ©r:   ÚrulesetÚsdictÚruleÚvals        r;   r,   zStyleToCSS.c_drawfillimage€   s   € ð
 %0°$·/±/À#Ñ2FÑ$FˆÐ Ò!r=   c                 ó   — |d   }|||<   y)z XSL formatting attributes é   N© )r:   rN   rO   rP   rQ   Úselectors         r;   r-   zStyleToCSS.c_fo‡   s   € à˜‘7ˆØˆˆhŠr=   c                 ó$   — |dk(  rd|d<   yd|d<   y)z Convert to CSS2 border model Ú
collapsingÚcollapsezborder-collapseÚseparateNrT   rM   s        r;   r1   zStyleToCSS.c_border_modelŒ   s    € à�,ÒØ&0ˆEÐ#Ò$à&0ˆEÐ#Ò$r=   c                 ó   — ||d<   y)z Set width of box r)   NrT   rM   s        r;   r2   zStyleToCSS.c_width“   s   € àˆˆgŠr=   c                 ó*   — |dk(  rd}|dk(  rd}||d<   y)z Text align ÚstartÚleftÚendÚrightr(   NrT   )r:   rN   rO   rP   Úaligns        r;   r0   zStyleToCSS.c_text_align—   s#   € à�GÒ V˜UØ�EŠ> 7˜5Ø#ˆˆlÒr=   c                 ó²   — |j                  t        df«      }|�| j                  |||«       | j                  j                  ||df«      \  }}|›d|›�|d<   y)zÀ Generate the CSS font family
            A generic font can be found in two ways. In a <style:font-face>
            element or as a font-family-generic attribute in text-properties.
        úfont-family-genericNr@   z, r!   )Úgetr   rK   r*   )r:   rN   rO   rP   Ú	fontstylerI   rH   rJ   s           r;   r3   zStyleToCSS.c_fn�   s]   € ð
 —+‘+œwÐ'<Ð=Ó?ˆØÐØ�N‰N˜9 i°Ô9Ø"Ÿm™m×/Ñ/°	¸IÀwÐ;OÓPÑˆ�Ú,2±KÐ@ˆˆmÒr=   c                 óª   — |j                  d«      }t        |«      dk(  r|d   dk7  r|d   |d<   |d   dk(  rd|d	<   y|d   d
k(  rd|d	<   y|d   |d	<   y)a   Text position. This is used e.g. to make superscript and subscript
            This attribute can have one or two values.

            The first value must be present and specifies the vertical
            text position as a percentage that relates to the current font
            height or it takes one of the values sub or super. Negative
            percentages or the sub value place the text below the
            baseline. Positive percentages or the super value place
            the text above the baseline. If sub or super is specified,
            the application can choose an appropriate text position.

            The second value is optional and specifies the font height
            as a percentage that relates to the current font-height. If
            this value is not specified, an appropriate font height is
            used. Although this value may change the font height that
            is displayed, it never changes the current font height that
            is used for additional calculations.
        ú é   r   z0%rS   r"   Úsuperz33%zvertical-alignÚsubz-33%N)ÚsplitÚlen)r:   rN   rO   rP   ÚtpÚtextposs         r;   r5   zStyleToCSS.c_text_position¨   ss   € ð& —(‘(˜3“-ˆÜˆw‹<˜1Ò ¨¡¨tÒ!3à!(¨¡ˆE�+ÑØ�1‰:˜Ò Ø&+ˆEÐ"Ò#Ø�Q‰Z˜5Ò Ø&,ˆEÐ"Ò#à&-¨a¡jˆEÐ"Ò#r=   c                 ód  — |j                  t        dfd«      }|dk(  r
d|d<   d|d<   |dv r*|dv rd	|d
<   y |dk(  rd|d<   d|d<   d|d	<   y d|d<   d|d<   y |dv r*|dv rd|d
<   y |dk(  rd|d<   d|d<   d|d<   y d|d<   d|d<   y |dv r)|dv rd|d
<   y d|d<   t        df|v r|t        df   |d<   y y y )NÚwrapÚparallelÚcenterÚautor$   r%   )r_   Úoutside)r]   rp   Údynamicr_   Úfloatzrun-throughÚabsoluteÚpositionÚ0ÚtopÚ0cm)r]   Úinside)r_   rp   rt   r]   )z	from-leftzfrom-inside)r_   rp   ÚrelativeÚx)rc   r   r   )r:   rN   rO   rP   Úhposro   s         r;   r4   zStyleToCSS.c_hpÆ   s*  € ð �{‰{œG FÐ+¨JÓ7ˆà�8ÒØ#)ˆE�-Ñ Ø$*ˆE�.Ñ!ð Ð&Ñ&ØÐ6Ñ6Ø!(��g’Ø˜Ò&Ø$.��jÑ!Ø"��e‘Ø!$��g’à'-��mÑ$Ø(-��nÒ%ØÐ'Ñ'ØÐ7Ñ7Ø!'��g’Ø˜Ò&Ø$.��jÑ!Ø"��e‘Ø #��f’à',��mÑ$Ø(.��nÒ%ØÐ1Ñ1ØÐ-Ñ-Ø!'��g’à$.��jÑ!Ü˜#�; 'Ñ)Ø$+¬U°3¨KÑ$8�E˜&’Mð *ð 2r=   c                 ó   — ||d<   y)zt Set width of box
            HTML doesn't really have a page-width. It is always 100% of the browser width
        r)   NrT   rM   s        r;   r.   zStyleToCSS.c_page_widthð   s   € ð ˆˆgŠr=   c                 ó    — |r|dk7  rd|d<   yyy)ú| Set underline decoration
            HTML doesn't really have a page-width. It is always 100% of the browser width
        ÚnoneÚ	underlineútext-decorationNrT   rM   s        r;   r7   z!StyleToCSS.c_text_underline_styleö   s   € ñ �3˜&’=Ø'2ˆEÐ#Ò$ð !ˆ3r=   c                 ó    — |r|dk7  rd|d<   yyy)r�   r‚   zline-throughr„   NrT   rM   s        r;   r6   z$StyleToCSS.c_text_line_through_styleý   s   € ñ �3˜&’=Ø'5ˆEÐ#Ò$ð !ˆ3r=   c                 ó   — ||d<   y)z Set height of box ÚheightNrT   rM   s        r;   r/   zStyleToCSS.c_page_height  s   € àˆˆhŠr=   c                 óh  ‡ — i }g }|j                  «       D ]K  \  }}|d   dk(  r	|||d   <   Œ‰ j                  j                  |d«      }|sŒ6|j                  |||||g«       ŒM t	        ˆ fd„|«      D ]  }|\  }}}}} |||||«       Œ t	        ˆ fd„|«      D ]  }|\  }}}}} |||||«       Œ |S )zj Rule is a tuple of (namespace, name). If the namespace is '' then
            it is already CSS2
        r   Ú rS   Nc                 ó(   •— | d   ‰j                   k7  S ©Nr   ©r4   ©r}   r:   s    €r;   ú<lambda>z+StyleToCSS.convert_styles.<locals>.<lambda>  ó   ø€  ! A¡$¨$¯)©)Ñ"3€ r=   c                 ó(   •— | d   ‰j                   k(  S r‹   rŒ   r�   s    €r;   rŽ   z+StyleToCSS.convert_styles.<locals>.<lambda>  r�   r=   )Úitemsr8   rc   ÚappendÚfilter)r:   rN   rO   Ú
proceduresrP   rQ   ÚmethodÚps   `       r;   Úconvert_styleszStyleToCSS.convert_styles  sî   ø€ ð ˆØˆ
ØŸ™›ò 	G‰HˆD�Ø�A‰w˜"Š}Ø!$��d˜1‘g‘ØØ×)Ñ)×-Ñ-¨d°DÓ:ˆFÚØ×!Ñ! 6¨7°E¸4ÀÐ"EÕFð	Gô Ó3°ZÓ@ò 	.ˆAØ01Ñ-ˆF�G˜U D¨#Ù�7˜E 4¨Õ-ð	.ô Ó3°ZÓ@ò 	.ˆAØ01Ñ-ˆF�G˜U D¨#Ù�7˜E 4¨Õ-ð	.ð ˆr=   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r<   rK   r,   r-   r1   r2   r0   r3   r5   r4   r.   r7   r6   r/   r—   rT   r=   r;   r   r   9   sV   „ ñò
.
ò`4ò"Gòò
1òò$ò	Aò1ò<(9òTò3ò6òór=   r   c                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTagStackc                 ó   — g | _         y ©N©Ústackr9   s    r;   r<   zTagStack.__init__#  s	   € Øˆ�
r=   c                 ó>   — | j                   j                  ||f«       y rŸ   )r¡   r’   ©r:   ÚtagÚattrss      r;   ÚpushzTagStack.push&  s   € Ø�
‰
×Ñ˜C ˜<Õ)r=   c                 ó:   — | j                   j                  «       }|S rŸ   )r¡   Úpop©r:   Úitems     r;   r¨   zTagStack.pop)  s   € Ø�z‰z�~‰~ÓˆØˆr=   c                 ó*   — | j                   d   }|d   S )NéÿÿÿÿrS   r    r©   s     r;   ÚstackparentzTagStack.stackparent-  s   € Ø�z‰z˜"‰~ˆØ�A‰wˆr=   c                 óB   — | j                   D ]  \  }}||v sŒ||   c S  y)z% Find a tag with the given attribute Nr    )r:   Úattrr¤   r¥   s       r;   Ú	rfindattrzTagStack.rfindattr1  s/   € àŸ*™*ò 	#‰JˆC�Ø�uŠ}Ø˜T‘{Ò"ð	#ð r=   c                 óH   — d}| j                   D ]  \  }}||k(  sŒ|dz   }Œ |S )Nr   rS   r    )r:   r¤   ÚcÚttagÚtattrss        r;   Ú
count_tagszTagStack.count_tags7  s2   € ØˆØ ŸJ™Jò 	&‰LˆD�&Ø�s‹{  A¡™Að	&àˆr=   N)	r˜   r™   rš   r<   r¦   r¨   r­   r°   rµ   rT   r=   r;   r�   r�   "  s    „ òò*òòòór=   r�   ÚemÚciteÚstrongÚvarÚdfnÚttÚh1Úh2Úh3Úh4Úh5Úh6ÚaddressÚpre)z
S-Emphasisz
S-CitationzS-Strong_20_Emphasisz
S-VariablezS-Definitionz
S-TeletypezP-Heading_20_1zP-Heading_20_2zP-Heading_20_3zP-Heading_20_4zP-Heading_20_5zP-Heading_20_6zP-AddresseezP-Preformatted_20_Textc                   ó  — e Zd ZdZd�d„Zd„ Zd„ Zd�d„Zd„ Zd	„ Z	d
„ Z
d„ Zi dfd„Zd‘d„Zi f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„ 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(„ Z(d)„ Z)d*„ Z*d+„ Z+d,„ Z,d-„ Z-d.Z.d/„ Z/d0„ Z0d1„ Z1d2„ Z2d3„ Z3d4„ Z4d5„ Z5d6„ Z6d7„ Z7d8„ Z8d9„ Z9d:„ Z:d;„ Z;d<„ Z<d=d>d?d@dAdBdCdDdEdFdGœ
Z=dH„ Z>dI„ Z?dJ„ Z@dK„ ZAdL„ ZBdM„ ZCdN„ ZDdO„ ZEdP„ ZFdQ„ ZGdR„ ZHdS„ ZIdT„ ZJdUdVdWdXdYdZd[d\d]d^d_œ
ZKd`„ ZLda„ ZMdb„ ZNdc„ ZOdd„ ZPde„ ZQdf„ ZRdg„ ZSdh„ ZTdi„ ZUdj„ ZVdk„ ZWdl„ ZXdm„ ZYdn„ ZZdo„ Z[dp„ Z\dq„ Z]dr„ Z^ds„ Z_dt„ Z`du„ Zadv„ Zbdw„ Zcdx„ Zddy„ Zedz„ Zfd{„ Zgd|„ Zhd}„ Zid~„ Zjd„ Zkd€„ Zld�„ Zmd‚„ Zndƒ„ Zod„„ Zpd…„ Zqd†„ Zrd‡„ Zsdˆ„ Ztd‰„ ZudŠ„ Zvd‹„ ZwdŒ„ Zxd�„ Zyd’dŽ„Zzy)“Ú	ODF2XHTMLú4 The ODF2XHTML parses an ODF file and produces XHTMLFc                 óÖ  — || _         i t        df| j                  | j                  f“t        df| j                  | j                  f“t        df| j                  | j
                  f“t        df| j                  | j                  f“t        df| j                  | j                  f“t        df| j                  | j                  f“t        df| j                  | j                  f“t        df| j                  d f“t        d	f| j                  d f“t        d
f| j                  d f“t        df| j                  d f“t        df| j                   d f“t        df| j"                  | j$                  f“t        df| j&                  | j(                  f“t*        df| j                  | j                  f“t*        df| j                  | j                  f“t*        df| j                  | j                  f“i t*        df| j                  | j                  f“t,        df| j                  d f“t,        df| j                  d f“t,        df| j                  d f“t,        df| j                  d f“t,        df| j                  d f“t.        df| j                  d f“t.        df| j0                  d f“t.        df| j2                  | j4                  f“t.        df| j2                  | j4                  f“t.        df| j                  d f“t.        df| j6                  d f“t.        df| j8                  d f“t.        df| j:                  | j<                  f“t.        d f| j>                  | j@                  f“t.        d!f| jB                  d f“t.        d"f| jD                  | jF                  f“¥i t.        d#f| j                  d f“t.        d$f| j                  d f“tH        d%f| j                  d f“tJ        d&f| j                  d f“tJ        d'f| jL                  | jN                  f“tJ        d(f| jP                  d f“tJ        d)f| jR                  d f“tJ        d*f| jP                  d f“tJ        d+f| j                  d f“tJ        d,f| jT                  d f“tJ        d-f| jP                  d f“tJ        d.f| jV                  | jX                  f“tJ        d/f| jP                  d f“tJ        d0f| jZ                  | j\                  f“tJ        d1f| jP                  d f“tJ        d2f| jP                  d f“tJ        d3f| jP                  d f“¥i tJ        d4f| jP                  d f“t^        d5f| j                  d f“t`        d6f| j                  d f“t`        d7f| jb                  | jd                  f“t`        d8f| jf                  d f“t`        d9f| jh                  | jj                  f“t`        d:f| jl                  | jn                  f“tp        d;f| jr                  | jt                  f“tp        d<f| jv                  | jx                  f“tp        d=f| j                  d f“tp        d>f| jv                  | jx                  f“tp        d?f| jz                  d f“tp        d@f| jz                  d f“tp        dAf| j|                  | jt                  f“tp        dBf| j|                  d f“tp        dCf| j~                  | j€                  f“tp        dDf| jv                  | jx                  f“¥i tp        dEf| j‚                  d f“tp        dFf| j                  d f“tp        dGf| j„                  | j†                  f“tp        dHf| jˆ                  | jŠ                  f“tp        dIf| jŒ                  | jŽ                  f“tp        dJf| j�                  | j’                  f“tp        dKfdL“tp        dMf| j”                  d f“tp        dNf| j–                  | j˜                  f“tp        dOfd | jš                  f“tp        dPf| j                  d f“tp        dQf| jv                  | jx                  f“tp        dRf| jœ                  | jž                  f“tp        dSf| j                   d f“tp        dTf| j¢                  | j¤                  f“tp        dUf| j¦                  d f“tp        dVf| jv                  | jx                  f“¥tp        dWf| jv                  | jx                  ftp        dXf| jv                  | jx                  fi¥| _T        |r| j«                  «        | j­                  «        y )YNÚtitleÚlanguageÚcreatorÚdescriptionÚdatezcustom-shapeÚframeÚimageú
fill-imageú	layer-setÚobjectú
object-oleÚpageútext-boxzcreation-dateÚ	generatorzinitial-creatorÚkeywordúboolean-styleúcurrency-styleú
date-styleúnumber-styleú
text-styleÚ
annotationzautomatic-stylesÚdocumentúdocument-contentÚformszmaster-stylesÚmetaÚpresentationÚspreadsheetÚstylesÚtextÚscriptsÚsettingsÚnoteszdefault-page-layoutzdefault-stylezdrawing-page-propertiesz	font-facezgraphic-propertieszhandout-masterzmaster-pagezpage-layout-propertieszpage-layoutzparagraph-propertiesÚstyleztable-cell-propertiesztable-column-propertiesztable-propertiesztext-propertiesÚdescúcovered-table-cellú
table-cellútable-columnú	table-rowÚtableÚaúalphabetical-index-sourceúbibliography-configurationúbibliography-sourceÚbookmarkzbookmark-startzbookmark-refzbookmark-ref-startÚhúillustration-index-sourceú
line-breakúlinenumbering-configurationÚlistú	list-itemúlist-level-style-bulletúlist-level-style-numberú
list-style©NNÚnoteú	note-bodyúnote-citationúnotes-configurationúobject-index-sourcer–   ÚsÚspanÚtabútable-index-sourceútable-of-content-sourceúuser-index-source)WÚgenerate_cssr   Ús_processcontÚ
e_dc_titleÚe_dc_contentlanguageÚe_dc_creatorÚe_dc_metatagr   Ús_custom_shapeÚe_custom_shapeÚs_draw_frameÚe_draw_frameÚs_draw_imageÚs_draw_fill_imageÚs_ignorexmlÚs_draw_objectÚs_draw_object_oleÚs_draw_pageÚe_draw_pageÚs_draw_textboxÚe_draw_textboxr   r   r   Ús_office_automatic_stylesÚs_office_document_contentÚe_office_document_contentÚs_office_master_stylesÚs_ignorecontÚs_office_presentationÚe_office_presentationÚs_office_spreadsheetÚe_office_spreadsheetÚs_office_stylesÚs_office_textÚe_office_textr   r   Ús_style_default_styleÚe_style_default_styleÚs_style_handle_propertiesÚs_style_font_faceÚs_style_master_pageÚs_style_page_layoutÚe_style_page_layoutÚs_style_styleÚe_style_styler   r   Ús_table_table_cellÚe_table_table_cellÚs_table_table_columnÚs_table_table_rowÚe_table_table_rowÚs_table_tableÚe_table_tabler   Ús_text_aÚe_text_aÚs_text_x_sourceÚe_text_x_sourceÚs_text_bookmarkÚs_text_bookmark_refÚs_text_hÚe_text_hÚs_text_line_breakÚs_text_listÚe_text_listÚs_text_list_itemÚe_text_list_itemÚs_text_list_level_style_bulletÚe_text_list_level_style_bulletÚs_text_list_level_style_numberÚe_text_list_level_style_numberÚs_text_noteÚs_text_note_bodyÚe_text_note_bodyÚe_text_note_citationÚs_text_pÚe_text_pÚs_text_sÚs_text_spanÚe_text_spanÚ
s_text_tabÚelementsÚset_embedableÚ_resetobject)r:   r	  Ú	embedables      r;   r<   zODF2XHTML.__init__\  s]  € à(ˆÔð_
Ü	ˆwˆ˜$×,Ñ,¨d¯o©oÐ>ð_
ä	ˆzÐ˜T×/Ñ/°×1JÑ1JÐKð_
ô 
ˆyÐ˜D×.Ñ.°×0AÑ0AÐBð_
ô 
ˆ}Ð × 2Ñ 2°D×4EÑ4EÐFð	_
ô
 
ˆvˆ˜×+Ñ+¨T×->Ñ->Ð?ð_
ô 
�Ð  4×#6Ñ#6¸×8KÑ8KÐ"Lð_
ô 
�Ð˜D×-Ñ-¨t×/@Ñ/@ÐAð_
ô 
�Ð˜D×-Ñ-¨tÐ4ð_
ô 
�Ð ×!7Ñ!7¸Ð >ð_
ô 
�Ð˜t×/Ñ/°Ð6ð_
ô 
�Ð˜T×/Ñ/°Ð6ð_
ô 
�Ð ×!7Ñ!7¸Ð >ð_
ô 
�Ð˜4×+Ñ+¨T×-=Ñ-=Ð>ð_
ô 
�Ð˜t×2Ñ2°D×4GÑ4GÐHð_
ô 
�Ð! 4×#5Ñ#5°t×7HÑ7HÐ"Ið_
ô  
�Ð˜t×1Ñ1°4×3DÑ3DÐEð!_
ô" 
Ð"Ð# d×&8Ñ&8¸$×:KÑ:KÐ%Lñ#_
ô$ 
�Ð˜d×0Ñ0°$×2CÑ2CÐDð%_
ô& 
�?Ð# T×%5Ñ%5°tÐ$<ð'_
ô( 
Ð#Ð$ d×&6Ñ&6¸Ð%=ð)_
ô* 
�<Ð  $×"2Ñ"2°DÐ!9ð+_
ô, 
�>Ð" D×$4Ñ$4°dÐ#;ð-_
ô. 
�<Ð  $×"2Ñ"2°DÐ!9ð/_
ô0 
�<Ð  $×"2Ñ"2°DÐ!9ð1_
ô2 
Ð%Ð&¨×(FÑ(FÈÐ'Mð3_
ô4 
�:Ð × >Ñ >À×@^Ñ@^Ð_ð5_
ô6 
Ð%Ð&¨×(FÑ(FÈ×HfÑHfÐ'gð7_
ô8 
�7Ð˜T×-Ñ-¨tÐ4ð9_
ô: 
�?Ð# T×%@Ñ%@À$Ð$Gð;_
ô< 
�6Ð˜D×-Ñ-¨tÐ4ð=_
ô> 
�>Ð" D×$>Ñ$>À×@ZÑ@ZÐ#[ð?_
ô@ 
�=Ð! 4×#<Ñ#<¸d×>WÑ>WÐ"XðA_
ôB 
�8Ð˜d×2Ñ2°DÐ9ðC_
ôD 
�6Ð˜D×.Ñ.°×0BÑ0BÐCòE_
ôF 
�9Ð˜t×/Ñ/°Ð6ðG_
ôH 
�:Ð × 0Ñ 0°$Ð7ðI_
ôJ 
˜Ð! 4×#3Ñ#3°TÐ":ðK_
ôN 
Ð'Ð(¨$×*:Ñ*:¸DÐ)AðO_
ôP 
�/Ð" D×$>Ñ$>À×@ZÑ@ZÐ#[ðQ_
ôR 
Ð+Ð,¨d×.LÑ.LÈdÐ-SðS_
ôT 
�+Ð × 6Ñ 6¸Ð=ðU_
ôZ 
Ð&Ð'¨×)GÑ)GÈÐ(Nð[_
ô\ 
Ð"Ð# T×%5Ñ%5°tÐ$<ð]_
ôd 
�-Ð  $×":Ñ":¸DÐ!Aðe_
ôf 
Ð*Ð+¨T×-KÑ-KÈTÐ,Rðg_
ôh 
�-Ð  $×":Ñ":¸D×<TÑ<TÐ!Uði_
ôl 
Ð(Ð)¨4×+IÑ+IÈ4Ð*Pðm_
ôn 
�'Ð˜D×.Ñ.°×0BÑ0BÐCðo_
ôp 
Ð)Ð*¨D×,JÑ,JÈDÐ+Qðq_
ôr 
Ð+Ð,¨d×.LÑ.LÈdÐ-Sðs_
ôt 
Ð$Ð% t×'EÑ'EÀtÐ&Lòu_
ôv 
Ð#Ð$ d×&DÑ&DÀdÐ%Kðw_
ôx 
�ˆ˜$×*Ñ*¨DÐ1ðy_
ôz 
Ð&Ð'¨$×*:Ñ*:¸DÐ)Að{_
ô| 
�,Ð $×"9Ñ"9¸4×;RÑ;RÐ!Sð}_
ô~ 
�.Ð! D×$=Ñ$=¸tÐ#Dð_
ô@ 
�+Ð ×!7Ñ!7¸×9OÑ9OÐ PðA_
ôB 
�'Ð˜T×/Ñ/°×1CÑ1CÐDðC_
ôD 
�ˆ˜Ÿ™ t§}¡}Ð5ðE_
ôF 
Ð,Ð-¨t×/CÑ/CÀT×EYÑEYÐ.ZðG_
ôH 
Ð-Ð.°×0@Ñ0@À$Ð/GðI_
ôJ 
Ð&Ð'¨×)=Ñ)=¸t×?SÑ?SÐ(TðK_
ôL 
�Ð˜t×3Ñ3°TÐ:ðM_
ôN 
Ð!Ð" T×%9Ñ%9¸4Ð$@ðO_
ôP 
�Ð  4×#;Ñ#;¸T¿]¹]Ð"KðQ_
ôR 
Ð%Ð&¨×)AÑ)AÀ4Ð(HðS_
ôT 
�ˆ˜Ÿ™ t§}¡}Ð5ðU_
ôV 
Ð,Ð-¨t×/CÑ/CÀT×EYÑEYÐ.ZòW_
ôX 
�Ð × 6Ñ 6¸Ð=ðY_
ôZ 
Ð.Ð/°×1AÑ1AÀ4Ð0Hð[_
ô\ 
�Ð˜$×*Ñ*¨D×,<Ñ,<Ð=ð]_
ô^ 
�Ð˜t×4Ñ4°d×6KÑ6KÐLð__
ô` 
Ð*Ð+¨T×-PÑ-PÐRV×RuÑRuÐ,vða_
ôb 
Ð*Ð+¨T×-PÑ-PÐRV×RuÑRuÐ,vðc_
ôd 
�Ð˜|ðe_
ôf 
�Ð˜$×*Ñ*¨DÐ1ðg_
ôh 
�Ð˜t×4Ñ4°d×6KÑ6KÐLði_
ôj 
�Ð! 4¨×)BÑ)BÐ"Cðk_
ôl 
Ð&Ð'¨×)9Ñ)9¸4Ð(@ðm_
ôn 
Ð&Ð'¨×)=Ñ)=¸t×?SÑ?SÐ(Tðo_
ôp 
�ˆ˜Ÿ™ t§}¡}Ð5ðq_
ôr 
�ˆ˜Ÿ™ tÐ,ðs_
ôt 
�Ð˜4×+Ñ+¨T×-=Ñ-=Ð>ðu_
ôv 
�ˆ˜$Ÿ/™/¨4Ð0ðw_
ôx 
Ð%Ð&¨×(<Ñ(<¸d×>RÑ>RÐ'Sñy_
ôz 
Ð*Ð+¨T×-AÑ-AÀ4×CWÑCWÐ,XÜ	Ð$Ð% t×';Ñ';¸T×=QÑ=QÐ&Rñ}_
ˆŒñ@ Ø×ÑÔ Ø×ÑÕr=   c                 ó   — d| _         y)z% Tell the parser to not generate CSS FN)r	  r9   s    r;   Ú	set_plainzODF2XHTML.set_plainÃ  s
   € à!ˆÕr=   c                 ó¬   — d| j                   t        df<   d| j                   t        df<   d| j                   t        df<   d| j                   t        df<   y)z? Tells the converter to only output the parts inside the <body>rý   rä   râ   rá   rÞ   N)rS  r   r9   s    r;   rT  zODF2XHTML.set_embedableÇ  sO   € à-8ˆ�‰”x Ð)Ñ*Ø4?ˆ�‰”x Ð0Ñ1Ø5@ˆ�‰”x Ð1Ñ2Ø9Dˆ�‰”xÐ!4Ð5Ò6r=   Nc                 ó¦   — d| _         || _        |r#| j                  j                  d|›d|›d�«       y| j                  j                  d|z  «       y)zm Add a link to an external style file.
            Also turns of the embedding of styles in the HTML
        Fz-<link rel="stylesheet" type="text/css" href="z	" media="z"/>
z3<link rel="stylesheet" type="text/css" href="%s"/>
N)Úuse_internal_cssÚstylefilenameÚmetatagsr’   )r:   r\  Úmedias      r;   Úadd_style_filezODF2XHTML.add_style_fileÏ  sI   € ð !&ˆÔØ*ˆÔÙØ�M‰M× Ò ÒfsÒtyÐ!zÕ{à�M‰M× Ñ Ð!WÐ[hÑ!iÕjr=   c                 ó.   — i | _         d| _        d| _        y )Nr   r‰   )ÚnotedictÚcurrentnoteÚnotebodyr9   s    r;   Ú_resetfootnoteszODF2XHTML._resetfootnotesÚ  s   € àˆŒØˆÔØˆ�r=   c                 ó‚  — g | _         | j                  | _        d| _        d| _        d| _        d| _        g | _        t        «       | _	        g | _
        g | _        d| _        d| _        i | _        g d¢| _        d| _        t#        «       | _        i | _        g | _        i | _        d | _        | j/                  «        g | _        y )Nr‰   T)r   r   r   r   r   r   r   r   r   r   r   )ÚlinesÚ_wlinesÚ_wfuncÚxmlfilerÈ   rÉ   rÊ   Údatar�   ÚtagstackÚ	htmlstackÚpstackÚprocesselemÚprocesscontÚ	listtypesÚheadinglevelsr[  r   ÚcsÚanchorsÚ
stylestackÚ	styledictÚcurrentstylerd  r]  r9   s    r;   rU  zODF2XHTML._resetobjectà  s²   € ØˆŒ
Ø—l‘lˆŒØˆŒØˆŒ
ØˆŒØˆŒØˆŒ	Ü ›
ˆŒØˆŒØˆŒØˆÔØˆÔØˆŒÚ6ˆÔØ $ˆÔÜ“,ˆŒØˆŒð ˆŒØˆŒØ ˆÔà×ÑÔð ˆ�r=   c                 ó2   — |dk7  r| j                  |«       y y ©Nr‰   )rh  ©r:   r  s     r;   ÚwriteoutzODF2XHTML.writeoutþ  s   € Ø�Š7Ø�K‰K˜�Nð r=   c                 óz   — dj                  | j                  «      }|dk7  r| j                  t        |«      «       y y rx  )Újoinrj  rz  r   )r:   Úds     r;   Ú	writedatazODF2XHTML.writedata  s0   € Ø�G‰G�D—I‘IÓˆØ�Š7Ø�M‰Mœ& ›)Õ$ð r=   c                 ót  — | j                   j                  |||f«       g }|j                  «       D ]$  \  }}|j                  |›dt        |«      ›�«       Œ& t	        |«      dk(  r| j                  d|z  «       n'| j                  d|›ddj                  |«      ›d�«       |dk(  r| j                  d«       y	y	)
z Create an open HTML tag ú=r   z<%s>ú<rf   ú>Tú
N)rl  r’   r‘   r   rk   rz  r|  )r:   r¤   r¥   Úblockrï   ÚkeyrQ   s          r;   ÚopentagzODF2XHTML.opentag  sš   € à�‰×Ñ˜s 5¨Ð/Ô0ØˆØ—{‘{“}ò 	:‰GˆC�Ø�H‰H¢C¬°3¬Ð8Õ9ð	:äˆq‹6�QŠ;Ø�M‰M˜& 3™,Õ'à�MŠM¢s¨C¯H©H°Q­KÐ8Ô9Ø�DŠ=Ø�M‰M˜$Õð r=   c                 óŽ   — | j                   j                  «        | j                  d|z  «       |dk(  r| j                  d«       yy)z Close an open HTML tag z</%s>Trƒ  N)rl  r¨   rz  )r:   r¤   r„  s      r;   ÚclosetagzODF2XHTML.closetag  s:   € à�‰×ÑÔØ�‰�g ‘mÔ$Ø�DŠ=Ø�M‰M˜$Õð r=   c                 óÄ   — g }|j                  «       D ]$  \  }}|j                  |›dt        |«      ›�«       Œ& | j                  d|›ddj	                  |«      ›d�«       y )Nr€  r�  rf   ú/>
)r‘   r’   r   rz  r|  )r:   r¤   r¥   rï   r…  rQ   s         r;   ÚemptytagzODF2XHTML.emptytag  sN   € ØˆØ—{‘{“}ò 	:‰GˆC�Ø�H‰H¢C¬°3¬Ð8Õ9ð	:à�Š¢c¨3¯8©8°A­;Ð7Õ8r=   c                 ón   — | j                   r)| j                  r| j                  j                  |«       y y y rŸ   )rn  ro  rj  r’   )r:   rj  s     r;   Ú
characterszODF2XHTML.characters$  s-   € Ø×Ò × 0Ò 0Ø�I‰I×Ñ˜TÕ"ð !1Ðr=   c                 óD  — | j                   j                  | j                  | j                  f«       | j                  rG| j                  j                  |d«      d   }|r| j                  |||«       n| j                  ||«       | j                  j                  ||«       y )Nrý   r   )
rm  r’   rn  ro  rS  rc   Úhandle_starttagÚunknown_starttagrk  r¦   )r:   r¤   Úqnamer¥   r•   s        r;   ÚstartElementNSzODF2XHTML.startElementNS(  s‚   € Ø�‰×Ñ˜T×-Ñ-¨t×/?Ñ/?Ð@ÔBØ×ÒØ—]‘]×&Ñ& s¨LÓ:¸1Ñ=ˆFÙØ×$Ñ$ S¨&°%Õ8à×%Ñ% c¨%Ô0Ø�‰×Ñ˜C Õ(r=   c                 ó2  — | j                   j                  «       \  }}| j                  rG| j                  j	                  |d«      d   }|r| j                  |||«       n| j                  ||«       | j                  j                  «       \  | _        | _        y )Nrý   rS   )	rk  r¨   rn  rS  rc   Úhandle_endtagÚunknown_endtagrm  ro  )r:   r¤   r‘  Ústagr¥   r•   s         r;   ÚendElementNSzODF2XHTML.endElementNS2  s|   € Ø—m‘m×'Ñ'Ó)‰ˆˆeØ×ÒØ—]‘]×&Ñ& s¨LÓ:¸1Ñ=ˆFÙØ×"Ñ" 3¨¨vÕ6à×#Ñ# C¨Ô/Ø-1¯[©[¯_©_Ó->Ñ*ˆÔ˜$Õ*r=   c                 ó   —  |||«       y rŸ   rT   )r:   r¤   r•   r¥   s       r;   r�  zODF2XHTML.handle_starttag=  s   € Ùˆs�5Õr=   c                 ó   —  |||«       y rŸ   rT   )r:   r¤   r¥   r•   s       r;   r”  zODF2XHTML.handle_endtag@  s   € Ùˆs�EÕr=   c                  ó   — y rŸ   rT   r£   s      r;   r�  zODF2XHTML.unknown_starttagC  ó   € Ør=   c                  ó   — y rŸ   rT   r£   s      r;   r•  zODF2XHTML.unknown_endtagF  r›  r=   c                 ó   — d| _         y)zh Ignore this xml element and all children of it
            It will automatically stop ignoring
        FN)rn  r£   s      r;   r  zODF2XHTML.s_ignorexmlI  s   € ð !ˆÕr=   c                 ó   — d| _         y)z  Stop processing the text nodes FN©ro  r£   s      r;   r   zODF2XHTML.s_ignorecontO  s
   € à ˆÕr=   c                 ó   — d| _         y)z! Start processing the text nodes TNrŸ  r£   s      r;   r
  zODF2XHTML.s_processcontS  s
   € àˆÕr=   c                 óZ   — |j                  t        dfd«      }|j                  dd«      }|S )z) Generate a class name from a style name ú
style-namer‰   ú.Ú_)rc   r   Úreplace)r:   r¥   r²   s      r;   Ú	classnamezODF2XHTML.classnameW  s,   € à�I‰I”v˜lÐ+¨BÓ/ˆØ�I‰I�c˜#ÓˆØˆr=   c                 ó¤   — || j                   vr(dt        | j                   «      dz   z  | j                   |<   | j                   j                  |«      S )z+ Create a unique anchor id for a href name z
anchor%03drS   )rs  rk   rc   )r:   rG   s     r;   Ú
get_anchorzODF2XHTML.get_anchor]  sD   € à�t—|‘|Ñ#Ø!-´°T·\±\Ó1BÀQÑ1FÑ!GˆD�L‰L˜ÑØ�|‰|×Ñ Ó%Ð%r=   c                 ó   — g | _         y rŸ   )rj  r9   s    r;   Ú	purgedatazODF2XHTML.purgedataf  s	   € Øˆ�	r=   c                 óR   — dj                  | j                  «      | _        g | _        y)zD Get the title from the meta data and create a HTML <title>
        r‰   N)r|  rj  rÈ   r£   s      r;   r  zODF2XHTML.e_dc_titlen  s   € ð —W‘W˜TŸY™YÓ'ˆŒ
àˆ�	r=   c           
      ó    — | j                   j                  d|d   ›dt        dj                  | j                  «      «      ›d�«       g | _        y)z: Any other meta data is added as a <meta> element
        z<meta name="rS   z
" content=r‰   rŠ  N)r]  r’   r   r|  rj  r£   s      r;   r  zODF2XHTML.e_dc_metatagu  s>   € ð 	�‰×ÒÀÀQÃÌÐSU×SZÑSZÐ[_×[dÑ[dÓSeÕIfÐgÔhØˆ�	r=   c                 ó´   — dj                  | j                  «      | _        | j                  j	                  dt        | j                  «      z  «       g | _        y)zD Set the content language. Identifies the targeted audience
        r‰   z3<meta http-equiv="content-language" content="%s"/>
N)r|  rj  rÉ   r]  r’   r   r£   s      r;   r  zODF2XHTML.e_dc_contentlanguage{  sD   € ð Ÿ™ §	¡	Ó*ˆŒØ�‰×ÑÐSÔV\Ð]a×]jÑ]jÓVkÑkÔlØˆ�	r=   c                 ó´   — dj                  | j                  «      | _        | j                  j	                  dt        | j                  «      z  «       g | _        y)zC Set the content creator. Identifies the targeted audience
        r‰   z*<meta http-equiv="creator" content="%s"/>
N)r|  rj  rÊ   r]  r’   r   r£   s      r;   r  zODF2XHTML.e_dc_creator‚  sC   € ð —w‘w˜tŸy™yÓ)ˆŒØ�‰×ÑÐJÌVÐTX×T`ÑT`ÓMaÑaÔbØˆ�	r=   c                 ó`  — |j                  t        dfd«      }d}d|j                  t        dfd«      z   }|dk(  rd|j                  t        dfd«      z   }|j	                  dd	«      }|d
k(  rd}n|dk(  rd}n|dk(  rd}d}nd}t
        df|v r|dz   |t
        df   z   dz   }t
        df|v r|dz   |t
        df   z   dz   }t
        df|v r|dz   |t
        df   z   dz   }t
        df|v r|dz   |t
        df   z   dz   }| j                  r| j                  |||dœ«       y| j                  |«       y)zQ A <draw:custom-shape> is made into a <div> in HTML which is then styled
        úanchor-typeÚnotfoundÚdivúG-r¢  r‰   úPR-r£  r¤  Ú	paragraphúposition:absolute;Úcharúas-charzposition: absolute;r)   úwidth:ú;r‡   úheight:r}   úleft:Úyútop:©Úclassrè   N©rc   r   r   r   r¥  r   r	  r†  ©r:   r¤   r¥   Úanchor_typeÚhtmltagrG   rè   s          r;   r  zODF2XHTML.s_custom_shape‰  sf  € ð —i‘i¤¨Ð 6°zÓBˆØˆØ�e—i‘i¤&¨Ð!6¸Ó;Ñ;ˆØ�4Š<Ø˜5Ÿ9™9¤~°lÐ&CÀRÓHÑHˆDØ�|‰|˜C Ó$ˆØ˜+Ò%Ø(‰EØ˜FÒ"Ø(‰EØ˜IÒ%ØˆGØ‰Eà)ˆEÜ�'ˆ?˜UÑ"Ø˜HÑ$ u¬e°G¨_Ñ'=Ñ=ÀÑCˆEÜ�(Ð˜uÑ$Ø˜IÑ%¨´°hÐ/?Ñ)@Ñ@À3ÑFˆEÜ�#ˆ;˜%ÑØ˜G‘O u¬e°C¨[Ñ'9Ñ9¸CÑ?ˆEÜ�#ˆ;˜%ÑØ˜F‘N e¬U°3¨KÑ&8Ñ8¸3Ñ>ˆEØ×ÒØ�L‰L˜¨D¸5Ñ"AÕBà�L‰L˜Õ!r=   c                 ó&   — | j                  d«       y©z End the <draw:frame>
        r²  N©rˆ  r£   s      r;   r  zODF2XHTML.e_custom_shape¨  ó   € ð 	�‰�eÕr=   c                 ó`  — |j                  t        dfd«      }d}d|j                  t        dfd«      z   }|dk(  rd|j                  t        dfd«      z   }|j	                  dd	«      }|d
k(  rd}n|dk(  rd}n|dk(  rd}d}nd}t
        df|v r|dz   |t
        df   z   dz   }t
        df|v r|dz   |t
        df   z   dz   }t
        df|v r|dz   |t
        df   z   dz   }t
        df|v r|dz   |t
        df   z   dz   }| j                  r| j                  |||dœ«       y| j                  |«       y)zJ A <draw:frame> is made into a <div> in HTML which is then styled
        r°  r±  r²  r³  r¢  r‰   r´  r£  r¤  rµ  zposition:relative;r·  r¸  r¶  r)   r¹  rº  r‡   r»  r}   r¼  r½  r¾  r¿  NrÁ  rÂ  s          r;   r  zODF2XHTML.s_draw_frame­  sf  € ð —i‘i¤¨Ð 6°zÓBˆØˆØ�e—i‘i¤&¨Ð!6¸Ó;Ñ;ˆØ�4Š<Ø˜5Ÿ9™9¤~°lÐ&CÀRÓHÑHˆDØ�|‰|˜C Ó$ˆØ˜+Ò%Ø(‰EØ˜FÒ"Ø(‰EØ˜IÒ%ØˆGØ‰Eà(ˆEÜ�'ˆ?˜eÑ#Ø˜HÑ$ u¬e°G¨_Ñ'=Ñ=ÀÑCˆEÜ�(Ð˜uÑ$Ø˜IÑ%¨´°hÐ/?Ñ)@Ñ@À3ÑFˆEÜ�#ˆ;˜%ÑØ˜G‘O u¬e°C¨[Ñ'9Ñ9¸CÑ?ˆEÜ�#ˆ;˜%ÑØ˜F‘N e¬U°3¨KÑ&8Ñ8¸3Ñ>ˆEØ×ÒØ�L‰L˜¨D¸5Ñ"AÕBà�L‰L˜Õ!r=   c                 ó&   — | j                  d«       yrÆ  rÇ  r£   s      r;   r  zODF2XHTML.e_draw_frameÌ  rÈ  r=   c                 óž   — |j                  t        dfd«      }|t        df   }| j                  |«      }|| j                  j
                  |<   y )NrG   ÚNoNameÚhref)rc   r   r   Úrewritelinkrr  r+   )r:   r¤   r¥   rG   Úimghrefs        r;   r  zODF2XHTML.s_draw_fill_imageÑ  sI   € Ø�y‰yœ6 &˜/¨8Ó4ˆØœ Ð(Ñ)ˆØ×"Ñ" 7Ó+ˆØ#*ˆ�‰×Ñ˜4Ò r=   c                 ó   — |S )zh Intended to be overloaded if you don't store your pictures
            in a Pictures subfolder
        rT   )r:   rÏ  s     r;   rÎ  zODF2XHTML.rewritelink×  s	   € ð ˆr=   c                 óø   — | j                   j                  «       }|j                  t        df«      }|t        df   }| j                  |«      }d|dœ}| j                  r
|dk7  rd|d<   | j                  d|«       y	)
z2 A <draw:image> becomes an <img/> element
        r°  rÍ  r‰   )ÚaltÚsrcr·  zdisplay: block;rè   ÚimgN)rk  r­   rc   r   r   rÎ  r	  r‹  )r:   r¤   r¥   ÚparentrÃ  rÏ  Ú	htmlattrss          r;   r  zODF2XHTML.s_draw_imageÝ  s{   € ð —‘×*Ñ*Ó,ˆØ—j‘j¤&¨Ð!7Ó8ˆØœ Ð(Ñ)ˆØ×"Ñ" 7Ó+ˆØ WÑ.ˆ	Ø×ÒØ˜fÒ$Ø%6�	˜'Ñ"Ø�‰�e˜YÕ'r=   c                 ó¦   — |t         df   }| j                  j                  D ]-  }|j                  |k(  sŒ| j	                  |j
                  «       Œ/ y)z` A <draw:object> is embedded object in the document (e.g. spreadsheet in presentation).
        rÍ  N)r   rÝ   ÚchildobjectsÚfolderÚ	_walknodeÚtopnode)r:   r¤   r¥   Úobjhrefr²   s        r;   r  zODF2XHTML.s_draw_objectê  sJ   € ð œ Ð(Ñ)ˆð —‘×+Ñ+ò 	*ˆAØ�x‰x˜7Ó"Ø—‘˜qŸy™yÕ)ñ	*r=   c                 óš   — |t         df   }|r>|j                  «       dk(  r*dddœ}| j                  d|«       | j                  d|«       yyy)zU A <draw:object-ole> is embedded OLE object in the document (e.g. MS Graph).
        zclass-idz$00020803-0000-0000-c000-000000000046Úobject_ole_graphz	ole-graph)rG   rÀ  rï   N)r   Úlowerr†  rˆ  )r:   r¤   r¥   Úclass_idÚtagattrss        r;   r  zODF2XHTML.s_draw_object_oleû  sS   € ð œ& Ð,Ñ-ˆÙ˜Ÿ™Ó(Ð,RÒRØ 2¸KÑIˆHØ�L‰L˜˜hÔ'Ø�M‰M˜#˜xÕ(ð Sˆ8r=   c                 óÄ  — |j                  t        dfd«      }|j                  t        dfd«      }|j                  dd«      }|j                  t        dfd«      }|j                  dd«      }| j                  r| j	                  dd	d
|›d|›�i«       n| j	                  d«       | j	                  d«       | j                  t        |«      «       | j                  d«       y)zÜ A <draw:page> is a slide in a presentation. We use a <fieldset> element in HTML.
            Therefore if you convert a ODP file, you get a series of <fieldset>s.
            Override this for your own purpose.
        rG   rÌ  r¢  r‰   r£  r¤  zmaster-page-nameÚfieldsetrÀ  zDP-z MP-ÚlegendN)rc   r   r¥  r	  r†  rz  r   rˆ  )r:   r¤   r¥   rG   Ú	stylenameÚ
masterpages         r;   r  zODF2XHTML.s_draw_page  s¼   € ð
 �y‰yœ6 &˜/¨8Ó4ˆØ—I‘I¤ |Ð4°bÓ9ˆ	Ø×%Ñ% c¨#Ó.ˆ	Ø—Y‘Y¤Ð(:Ð ;¸BÓ?ˆ
Ø×'Ñ'¨¨CÓ0ˆ
Ø×ÒØ�L‰L˜¡gºyÉ*Ð.UÐ%WÕXà�L‰L˜Ô$Ø�‰�XÔØ�‰”f˜T“lÔ#Ø�‰�hÕr=   c                 ó&   — | j                  d«       y )Nrã  rÇ  r£   s      r;   r  zODF2XHTML.e_draw_page  s   € Ø�‰�jÕ!r=   c                 óf   — d}t         df|v r|dz   |t         df   z   dz   }| j                  d«       y )Nr‰   r&   zmin-height:rº  r²  )r   r†  )r:   r¤   r¥   rè   s       r;   r  zODF2XHTML.s_draw_textbox  s>   € ØˆÜ�Ð %Ñ'Ø˜MÑ)¨U´D¸Ð3FÑ-GÑGÈ#ÑMˆEØ�‰�UÕr=   c                 ó&   — | j                  d«       y)z! End the <draw:text-box>
        r²  NrÇ  r£   s      r;   r  zODF2XHTML.e_draw_textbox   rÈ  r=   c                 ól  — | j                  «        | j                  rd| j                  rX| j                  dddid«       | j	                  d«       | j                  «        | j	                  d«       | j                  d«       | j                  «        | j                  d«       | j                  dd¬	«       y )
Nrè   Útypeztext/cssTz/*<![CDATA[*/
z/*]]>*/
ÚheadÚbody©r„  )r~  r	  r[  r†  rz  Úgenerate_stylesheetrˆ  rª  r£   s      r;   Ú	html_bodyzODF2XHTML.html_body%  s‰   € Ø�‰ÔØ×Ò ×!6Ò!6Ø�L‰L˜ 6¨*Ð"5°tÔ<Ø�M‰MÐ+Ô,Ø×$Ñ$Ô&Ø�M‰M˜+Ô&Ø�M‰M˜'Ô"Ø�‰ÔØ�‰�fÔØ�‰�V 4ˆÕ(r=   z�
img { width: 100%; height: 100%; }
* { padding: 0; margin: 0;  background-color:white; }
body { margin: 0 1em; }
ol, ul { padding-left: 2em; }
c           	      óp  — | j                   D ]ð  }| j                  j                  |«      }d|v rS|d   | j                  v rB| j                  |d      j                  «       }|d= |j	                  «       D ]
  \  }}|||<   Œ |}d|v ri|d   | j                  v rX| j                  |d      j                  «       }|d= |j	                  «       D ]
  \  }}|||<   Œ |}d|v r|d   | j                  v rŒX|| j                  |<   Œò | j                  | j                  «       | j                   D ]�  }| j                  j                  |«      }| j                  j                  |«      }| j                  d|z  «       |j	                  «       D ]  \  }}| j                  d|›d|›d�«       Œ | j                  d«       Œ� y )Nú__style-familyú__parent-style-namez%s {
ú	z: z;
z}
)	rt  ru  rc   Úcopyr‘   rz  Údefault_stylesrr  r—   )r:   rG   rã   Úfamilystylerè   rQ   ÚparentstyleÚcss2s           r;   rï  zODF2XHTML.generate_stylesheet8  s½  € Ø—O‘Oò 	*ˆDØ—^‘^×'Ñ'¨Ó-ˆFà &Ñ(¨VÐ4DÑ-EÈÏÉÑ-WØ"Ÿn™n¨VÐ4DÑ-EÑF×KÑKÓM�ØÐ+Ð,Ø"(§,¡,£.ò -‘J�E˜3Ø),�K Ò&ð-à$�à'¨6Ñ1°fÐ=RÑ6SÐW[×WeÑWeÑ6eØ"Ÿn™n¨VÐ4IÑ-JÑK×PÑPÓR�ØÐ0Ð1Ø"(§,¡,£.ò -‘J�E˜3Ø),�K Ò&ð-à$�ð (¨6Ñ1°fÐ=RÑ6SÐW[×WeÑWeÒ6eð $*ˆD�N‰N˜4Ò ð!	*ð$ 	�‰�d×)Ñ)Ô*Ø—O‘Oò 	!ˆDØ—^‘^×'Ñ'¨Ó-ˆFØ—7‘7×)Ñ)¨&Ó1ˆDØ�M‰M˜( T™/Ô*Ø"Ÿj™j›lò =‘
��sØ—’ªu²cÐ:Õ<ð=à�M‰M˜%Õ ñ	!r=   c                 ó~  — | j                   dk(  ry | j                  r| j                  dddid«       n| j                  d«       t        d| j                   dz   «      D ]M  }| j                  |   }| j                  ddd	|z  i«       | j                  |d
   «       | j                  d«       ŒO | j                  d«       y )Nr   Úolrè   zborder-top: 1px solid blackTrS   ÚliÚidzfootnote-%drí  )rb  r	  r†  Úrangera  rz  rˆ  )r:   r…  rþ   s      r;   Úgenerate_footnoteszODF2XHTML.generate_footnotesT  s±   € Ø×Ñ˜qÒ ØØ×ÒØ�L‰L˜ Ð(EÐFÈÕMà�L‰L˜ÔÜ˜˜4×+Ñ+¨AÑ-Ó.ò 	 ˆCØ—=‘= Ñ%ˆDà�L‰L˜  m°cÑ&9Ð;Ô<ð �M‰M˜$˜v™,Ô'Ø�M‰M˜$Õð	 ð 	�‰�dÕr=   c                 ó@   — | j                   dk(  rd| _        y d| _        y )Nz
styles.xmlÚAr‰   )ri  Ú
autoprefixr£   s      r;   r  z#ODF2XHTML.s_office_automatic_stylesf  s   € Ø�<‰<˜<Ò'Ø!ˆD�Oà ˆD�Or=   c                 óT  — | j                  d«       | j                  d«       | j                  dddid«       | j                  dd¬«       | j                  d	d
ddœ«       | j                  D ]  }| j                  |«       Œ | j                  dt	        | j
                  «      z  «       y)z" First tag in the content.xml filez2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" z0"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
ÚhtmlÚxmlnszhttp://www.w3.org/1999/xhtmlTrì  rî  rà   zContent-Typeztext/html;charset=UTF-8)z
http-equivÚcontentz<title>%s</title>
N)rz  r†  r‹  r]  r   rÈ   )r:   r¤   r¥   Úmetalines       r;   r  z#ODF2XHTML.s_office_document_contentl  s�   € à�‰ÐJÔKØ�‰ÐIÔJØ�‰�V˜gÐ&DÐEÀtÔLØ�‰�V 4ˆÔ(Ø�‰�f¨^ÐG`ÑaÔbØŸ™ò 	$ˆHØ�M‰M˜(Õ#ð	$à�‰Ð+¬f°T·Z±ZÓ.@Ñ@ÕAr=   c                 ó&   — | j                  d«       y)z
 Last tag r  NrÇ  r£   s      r;   r  z#ODF2XHTML.e_office_document_contentw  s   € à�‰�fÕr=   c                  ó   — y)rf   NrT   r£   s      r;   r  z ODF2XHTML.s_office_master_styles{  s   � r=   c                 ó„   — t         dfdi| j                  d<   t         dfdi| j                  d<   | j                  ||«       y)z¼ For some odd reason, OpenOffice Impress doesn't define a default-style
            for the 'paragraph'. We therefore force a standard when we see
            it is a presentation
        r"   Ú24ptr–   rá   N)r   ru  rð  r£   s      r;   r!  zODF2XHTML.s_office_presentation~  sB   € ô
 !% \Ð2°GÐ=ˆ�‰�sÑÜ+/°Ð*=¸wÐ)Hˆ�‰�~Ñ&Ø�‰�s˜EÕ"r=   c                 óF   — | j                  «        | j                  d«       y ©Nrí  ©rÿ  rˆ  r£   s      r;   r"  zODF2XHTML.e_office_presentation‡  ó   € Ø×ÑÔ!Ø�‰�fÕr=   c                 ó(   — | j                  ||«       y rŸ   )rð  r£   s      r;   r#  zODF2XHTML.s_office_spreadsheet‹  s   € Ø�‰�s˜EÕ"r=   c                 óF   — | j                  «        | j                  d«       y r  r  r£   s      r;   r$  zODF2XHTML.e_office_spreadsheetŽ  r  r=   c                 ó   — d| _         y rx  )r  r£   s      r;   r%  zODF2XHTML.s_office_styles’  s	   € Øˆ�r=   c                 óV   — t         dfdi| j                  d<   | j                  ||«       y)z OpenDocument text ro   rp   rÍ   N)r   ru  rð  r£   s      r;   r&  zODF2XHTML.s_office_text•  s(   € ä%,¨VÐ$4°kÐ"Bˆ�‰�wÑØ�‰�s˜EÕ"r=   c                 óF   — | j                  «        | j                  d«       y r  r  r£   s      r;   r'  zODF2XHTML.e_office_textš  r  r=   c                 ól   — |j                  «       D ]!  \  }}|| j                  | j                     |<   Œ# y)zY Copy all attributes to a struct.
            We will later convert them to CSS2
        N)r‘   ru  rv  )r:   r¤   r¥   r…  r¯   s        r;   r*  z#ODF2XHTML.s_style_handle_propertiesž  s6   € ð Ÿ™›ò 	:‰HˆC�Ø59ˆD�N‰N˜4×,Ñ,Ñ-¨cÒ2ñ	:r=   rÍ   r–   rá   r  r²  rî   ÚtdÚcolÚtrÚgraphic)
rÍ   rµ  rá   rä   Úsectionrî   rë   rì   rí   r  c                 ó’   — |t         df   }| j                  j                  |d«      }|| _        i | j                  | j                  <   y)z8 A default style is like a style on an HTML tag
        rH   ÚunknownN)r   Ú	familymaprc   rv  ru  )r:   r¤   r¥   rH   Ú
htmlfamilys        r;   r(  zODF2XHTML.s_style_default_style«  sE   € ð œ Ð)Ñ*ˆØ—^‘^×'Ñ'¨¨yÓ9ˆ
Ø&ˆÔà,.ˆ�‰�t×(Ñ(Ò)r=   c                 ó   — d | _         y rŸ   ©rv  r£   s      r;   r)  zODF2XHTML.e_style_default_style´  s
   € Ø ˆÕr=   c                 óš   — |t         df   }|t        df   }|j                  t         dfd«      }| j                  j	                  |||«       y)aI   It is possible that the HTML browser doesn't know how to
            show a particular font. Luckily ODF provides generic fallbacks
            Unfortunately they are not the same as CSS2.
            CSS2: serif, sans-serif, cursive, fantasy, monospace
            ODF: roman, swiss, modern, decorative, script, system
        rG   r!   rb   r‰   N)r   r   rc   rr  rK   )r:   r¤   r¥   rG   rH   rI   s         r;   r+  zODF2XHTML.s_style_font_face·  sN   € ð ”g˜fÐ%Ñ&ˆØœ˜mÐ,Ñ-ˆØ—)‘)œgÐ&;Ð<¸RÓAˆØ�‰×Ñ˜$ ¨Õ0r=   c                 óL   — | j                  dddi«       | j                  «        y )Nr²  rý  Úfooter©r†  rª  r£   s      r;   Ús_style_footerzODF2XHTML.s_style_footerÃ  ó   € Ø�‰�U˜d 8Ð-Ô.Ø�‰Õr=   c                 óf   — | j                  «        | j                  d«       | j                  «        y ©Nr²  ©r~  rˆ  rª  r£   s      r;   Úe_style_footerzODF2XHTML.e_style_footerÇ  ó"   € Ø�‰ÔØ�‰�eÔØ�‰Õr=   c                 óŽ   — d| _         | j                  j                  | j                   «       i | j                  | j                   <   y )Nz@print #footer©rv  rt  r’   ru  r£   s      r;   Ús_style_footer_stylezODF2XHTML.s_style_footer_styleÌ  ó6   € Ø,ˆÔØ�‰×Ñ˜t×0Ñ0Ô1Ø,.ˆ�‰�t×(Ñ(Ò)r=   c                 óL   — | j                  dddi«       | j                  «        y )Nr²  rý  Úheaderr$  r£   s      r;   Ús_style_headerzODF2XHTML.s_style_headerÑ  r&  r=   c                 óf   — | j                  «        | j                  d«       | j                  «        y r(  r)  r£   s      r;   Úe_style_headerzODF2XHTML.e_style_headerÕ  r+  r=   c                 óŽ   — d| _         | j                  j                  | j                   «       i | j                  | j                   <   y )Nz@print #headerr-  r£   s      r;   Ús_style_header_stylezODF2XHTML.s_style_header_styleÚ  r/  r=   c                 óŽ   — d| _         | j                  j                  | j                   «       i | j                  | j                   <   y)zC Collect the formatting for the default page layout style.
        z@pageNr-  r£   s      r;   Ús_style_default_page_layoutz%ODF2XHTML.s_style_default_page_layoutß  s8   € ð $ˆÔØ�‰×Ñ˜t×0Ñ0Ô1Ø,.ˆ�‰�t×(Ñ(Ò)r=   c                 óÎ   — |t         df   }|j                  dd«      }d|z   | _        | j                  j	                  | j                  «       i | j
                  | j                  <   y)zö Collect the formatting for the page layout style.
            This won't work in CSS 2.1, as page identifiers are not allowed.
            It is legal in CSS3, but the rest of the application doesn't specify when to use what page layout
        rG   r£  r¤  ú.PL-N)r   r¥  rv  rt  r’   ru  )r:   r¤   r¥   rG   s       r;   r-  zODF2XHTML.s_style_page_layoutæ  s[   € ð
 ”g˜fÐ%Ñ&ˆØ�|‰|˜C Ó$ˆØ" T™MˆÔØ�‰×Ñ˜t×0Ñ0Ô1Ø,.ˆ�‰�t×(Ñ(Ò)r=   c                 ó   — d| _         y©z End this style
        Nr   r£   s      r;   r.  zODF2XHTML.e_style_page_layoutñ  ó   € ð !ˆÕr=   c                 ó  — |t         df   }|j                  dd«      }d|z   | _        | j                  j	                  | j                  «       ddi| j
                  | j                  <   |j                  t         dfd«      }|rsd	|z   }|| j
                  v rD| j
                  |   }|j                  «       D ]!  \  }}|| j
                  | j                     |<   Œ# n|| j
                  | j                     d
<   | j                  ||«       y)z; Collect the formatting for the page layout style.
        rG   r£  r¤  z.MP-)r‰   rw   r|   zpage-layout-nameNr:  ró  )	r   r¥  rv  rt  r’   ru  rc   r‘   r  )r:   r¤   r¥   rG   Ú
pagelayoutrã   rè   rQ   s           r;   r,  zODF2XHTML.s_style_master_pageö  sÿ   € ð ”g˜fÐ%Ñ&ˆØ�|‰|˜C Ó$ˆà" T™MˆÔØ�‰×Ñ˜t×0Ñ0Ô1Ø-<¸ZÐ,Hˆ�‰�t×(Ñ(Ñ)à—Y‘Y¤Ð);Ð <¸dÓCˆ
ÙØ *Ñ,ˆJØ˜TŸ^™^Ñ+ØŸ™¨
Ñ3�Ø"(§,¡,£.ò C‘J�E˜3Ø?B�D—N‘N 4×#4Ñ#4Ñ5°eÒ<ñCð LV�—‘˜t×0Ñ0Ñ1Ð2GÑHØ×Ñ˜˜eÕ$r=   ÚDPÚPÚPRÚSÚDÚTÚTDÚTCÚTRÚG)
zdrawing-pagerµ  rá   rä   r  rî   rë   rì   rí   r  c                 óZ  — |t         df   }|j                  dd«      }|t         df   }| j                  j                  |d«      }| j                  j                  |d«      }| j
                  ›|›d|›�}|j                  t         df«      }t        j                  |d|z   «      | _        | j                  j                  | j                  «       | j                  | j                  vri | j                  | j                  <   || j                  | j                     d	<   |r�|›d|›�}t        j                  |d|z   «      }|| j                  v rD| j                  |   }|j                  «       D ]!  \  }	}
|
| j                  | j                     |	<   Œ# y|| j                  | j                     d
<   yy)au   Collect the formatting for the style.
            Styles have scope. The same name can be used for both paragraph and
            character styles Since CSS has no scope we use a prefix. (Not elegant)
            In ODF a style can have a parent, these parents can be chained.
            We may not have encountered the parent yet, but if we have, we resolve it.
        rG   r£  r¤  rH   r  ÚXú-zparent-style-namerò  ró  N)r   r¥  r  rc   Ú_familyshortr  Úspecial_stylesrv  rt  r’   ru  r‘   )r:   r¤   r¥   rG   rH   r  ÚsfamilyrÕ  rã   rè   rQ   s              r;   r/  zODF2XHTML.s_style_style  s‹  € ð ”g˜fÐ%Ñ&ˆØ�|‰|˜C Ó$ˆØœ Ð)Ñ*ˆØ—^‘^×'Ñ'¨¨yÓ9ˆ
Ø×#Ñ#×'Ñ'¨¨sÓ3ˆØ ŸOšOªW±dÐ;ˆØ—‘œWÐ%8Ð9Ó;ˆÜ*×.Ñ.¨t°C¸±HÓ=ˆÔØ�‰×Ñ˜t×0Ñ0Ô1Ø×Ñ D§N¡NÑ2Ø02ˆD�N‰N˜4×,Ñ,Ñ-à>Hˆ�‰�t×(Ñ(Ñ)Ð*:Ñ;ñ Ú '©Ð0ˆFÜ#×'Ñ'¨°°F±
Ó;ˆFØ˜Ÿ™Ñ'ØŸ™¨Ñ/�Ø"(§,¡,£.ò C‘J�E˜3Ø?B�D—N‘N 4×#4Ñ#4Ñ5°eÒ<ñCð LR�—‘˜t×0Ñ0Ñ1Ð2GÒHð r=   c                 ó   — d| _         yr<  r   r£   s      r;   r0  zODF2XHTML.e_style_style1  r=  r=   c                 óæ   — |j                  t        dfd«      }|r6| j                  r*|j                  dd«      }| j	                  ddd|z  i«       n| j	                  d«       | j                  «        y)z Start a table
        r¢  Nr£  r¤  rî   rÀ  zT-%s)rc   r   r	  r¥  r†  rª  )r:   r¤   r¥   r²   s       r;   r6  zODF2XHTML.s_table_table6  sa   € ð �I‰Iœ Ð-¨tÓ4ˆÙ�×"Ò"Ø—	‘	˜#˜cÓ"ˆAØ�L‰L˜ 7¨F°Q©JÐ!8Õ9à�L‰L˜Ô!Ø�‰Õr=   c                 óf   — | j                  «        | j                  d«       | j                  «        y)z End a table
        rî   Nr)  r£   s      r;   r7  zODF2XHTML.e_table_tableA  s$   € ð 	�‰ÔØ�‰�gÔØ�‰Õr=   c                 ó&  — i }|j                  t        df«      }|r||d<   |j                  t        df«      }|r||d<   |j                  t        df«      }|rd|j                  dd«      z  |d	<   | j                  d
|«       | j	                  «        y)z Start a table cell znumber-rows-spannedÚrowspanznumber-columns-spannedÚcolspanr¢  zTD-%sr£  r¤  rÀ  r  N©rc   r   r¥  r†  rª  )r:   r¤   r¥   rÖ  rT  rU  r²   s          r;   r1  zODF2XHTML.s_table_table_cellH  s“   € ð ˆ	Ø—)‘)œgÐ&;Ð<Ó>ˆÙØ#*ˆI�iÑ Ø—)‘)œgÐ&>Ð?ÓAˆÙØ#*ˆI�iÑ à�I‰Iœ Ð-Ó/ˆÙØ!(¨1¯9©9°S¸Ó+=Ñ!=ˆI�gÑØ�‰�T˜9Ô%Ø�‰Õr=   c                 óf   — | j                  «        | j                  d«       | j                  «        y)z End a table cell r  Nr)  r£   s      r;   r2  zODF2XHTML.e_table_table_cellZ  ó"   € à�‰ÔØ�‰�dÔØ�‰Õr=   c                 ó  — |j                  t        dfd«      }t        |j                  t        dfd«      «      }i }|rd|j                  dd«      z  |d<   t	        |«      D ]  }| j                  d	|«       Œ | j                  «        y)
z Start a table column r¢  Nznumber-columns-repeatedrS   zTC-%sr£  r¤  rÀ  r  )rc   r   Úintr¥  rþ  r‹  rª  )r:   r¤   r¥   r²   ÚrepeatedrÖ  r}   s          r;   r3  zODF2XHTML.s_table_table_column`  s   € à�I‰Iœ Ð-¨tÓ4ˆÜ�u—y‘y¤7Ð+DÐ"EÀqÓIÓJˆØˆ	ÙØ!(¨1¯9©9°S¸Ó+=Ñ!=ˆI�gÑÜ�x“ò 	,ˆAØ�M‰M˜% Õ+ð	,à�‰Õr=   c                 ó°   — |j                  t        dfd«      }i }|rd|j                  dd«      z  |d<   | j                  d|«       | j	                  «        y)z Start a table row r¢  NzTR-%sr£  r¤  rÀ  r  rV  )r:   r¤   r¥   r²   rÖ  s        r;   r4  zODF2XHTML.s_table_table_rowk  sS   € ð �I‰Iœ Ð-¨tÓ4ˆØˆ	ÙØ!(¨1¯9©9°S¸Ó+=Ñ!=ˆI�gÑØ�‰�T˜9Ô%Ø�‰Õr=   c                 óf   — | j                  «        | j                  d«       | j                  «        y)z End a table row r  Nr)  r£   s      r;   r5  zODF2XHTML.e_table_table_rowu  rX  r=   c                 óä   — | j                  «        |t        df   j                  d«      d   }|d   dk(  rd| j                  |dd «      z   }| j	                  dd|i«       | j                  «        y)z Anchors start rÍ  ú|r   ú#rS   Nrï   )r~  r   rj   r¨  r†  rª  )r:   r¤   r¥   rÍ  s       r;   r8  zODF2XHTML.s_text_a{  sk   € à�‰ÔØ”g˜fÐ%Ñ&×,Ñ,¨SÓ1°!Ñ4ˆØ�‰7�cŠ>Ø˜Ÿ™¨¨a¨b¨Ó2Ñ2ˆDØ�‰�S˜6 $˜-Ô(Ø�‰Õr=   c                 óh   — | j                  «        | j                  dd«       | j                  «        y)z% End an anchor or bookmark reference rï   FNr)  r£   s      r;   r9  zODF2XHTML.e_text_a„  s$   € à�‰ÔØ�‰�c˜5Ô!Ø�‰Õr=   c                 óÈ   — |t         df   }| j                  |«      }| j                  «        | j                  dd|i«       | j	                  dd«       | j                  «        y)z Bookmark definition rG   r  rý  FN)r   r¨  r~  r†  rˆ  rª  ©r:   r¤   r¥   rG   Úhtml_ids        r;   r<  zODF2XHTML.s_text_bookmarkŠ  sR   € à”f˜V�_Ñ%ˆØ—/‘/ $Ó'ˆØ�‰ÔØ�‰�V˜d 7˜^Ô,Ø�‰�f˜eÔ$Ø�‰Õr=   c                 óª   — |t         df   }d| j                  |«      z   }| j                  «        | j                  dd|i«       | j	                  «        y)z Bookmark reference zref-namer`  rï   rÍ  N)r   r¨  r~  r†  rª  rc  s        r;   r=  zODF2XHTML.s_text_bookmark_ref“  sK   € à”f˜ZÐ(Ñ)ˆØ˜Ÿ™¨Ó-Ñ-ˆØ�‰ÔØ�‰�S˜6 'Ð*Ô+Ø�‰Õr=   c                 ó¸  — t        |t        df   «      }|dkD  rd}|dk  rd}| j                  |   dz   | j                  |<   | j                  |«      }t	        |dz   d«      D ]  }d| j                  |<   Œ t
        j                  d|z   «      }|s| j                  s| j                  d|z  «       n| j                  d|z  dd	|z  i«       | j                  «        y
)z Headings start úoutline-levelé   rS   é
   r   úP-úh%srÀ  úP-%sN)
rZ  r   rq  r¦  rþ  rN  rc   r	  r†  rª  )r:   r¤   r¥   ÚlevelrG   r}   Úspecials          r;   r>  zODF2XHTML.s_text_h›  sØ   € ä�Eœ6 /Ð2Ñ3Ó4ˆØ�1Š9˜a�eØ�1Š9˜a�eØ$(×$6Ñ$6°uÑ$=ÀÑ$Aˆ×Ñ˜5Ñ!Ø�~‰~˜eÓ$ˆÜ�u˜q‘y Ó$ò 	&ˆAØ$%ˆD×Ñ˜qÒ!ð	&ä ×$Ñ$ T¨$¡YÓ/ˆÙ˜$×+Ò+Ø�L‰L˜ ™Õ'à�L‰L˜ ™¨°¸$±Ð(@ÔAØ�‰Õr=   c                 óì  — | j                  «        t        |t        df   «      }|dkD  rd}|dk  rd}| j                  d|dz    }dj	                  t        t        |«      «      }dj	                  | j                  «      }| j                  dk(  r|| _        | j                  |›d|›�«      }| j                  dd|i«       | j                  dd«       | j                  d	|z  «       | j                  «        y
)z— Headings end
            Side-effect: If there is no title in the metadata, then it is taken
            from the first heading of any level.
        rg  rh  rS   r£  r‰   rï   rý  Frk  N)r~  rZ  r   rq  r|  ÚmapÚstrrj  rÈ   r¨  r†  rˆ  rª  )r:   r¤   r¥   rm  ÚlevÚoutlineÚheadingÚanchors           r;   r?  zODF2XHTML.e_text_h«  sÓ   € ð
 	�‰ÔÜ�Eœ6 /Ð2Ñ3Ó4ˆØ�1Š9˜a�eØ�1Š9˜a�eØ× Ñ   5¨¡7Ð+ˆØ—(‘(œ3œs 3›<Ó)ˆØ—'‘'˜$Ÿ)™)Ó$ˆØ�:‰:˜Ò¨'˜TœZØ—‘ªW±gÐ!>Ó?ˆØ�‰�S˜4 ˜.Ô*Ø�‰�c˜5Ô!Ø�‰�e˜e‘mÔ$Ø�‰Õr=   c                 óf   — | j                  «        | j                  d«       | j                  «        y)z Force a line break (<br/>) ÚbrN)r~  r‹  rª  r£   s      r;   r@  zODF2XHTML.s_text_line_break¾  rX  r=   c                 óà  — |j                  t        df«      }| j                  j                  |«      dz   }|r|j	                  dd«      }n!| j                  j                  t        df«      }d||fz  }| j                  r2| j                  d| j                  j                  |d«      z  d|i«       n.| j                  d| j                  j                  |d«      z  «       | j                  «        y	)
z  Start a list (<ul> or <ol>)
            To know which level we're at, we have to count the number
            of <text:list> elements on the tagstack.
        r¢  rS   r£  r¤  ú%s_%dz%sÚulrÀ  N)
rc   r   rk  rµ   r¥  r°   r	  r†  rp  rª  ©r:   r¤   r¥   rG   rm  Ú
list_classs         r;   rA  zODF2XHTML.s_text_listÄ  sÊ   € ð
 �y‰yœ6 ,Ð/Ó1ˆØ—‘×(Ñ(¨Ó-°Ñ1ˆÙØ—<‘<  CÓ(‰Dð
 —=‘=×*Ñ*¬V°LÐ,AÓCˆDØ  e˜}Ñ,ˆ
Ø×ÒØ�L‰L˜ §¡× 2Ñ 2°:¸dÓ CÑCÀgÈzÐE[Õ\à�L‰L˜ §¡× 2Ñ 2°:¸dÓ CÑCÔDØ�‰Õr=   c                 ó~  — | j                  «        |j                  t        df«      }| j                  j	                  |«      dz   }|r|j                  dd«      }n!| j                  j                  t        df«      }d||fz  }| j                  | j                  j                  |d«      «       | j                  «        y)z End a list r¢  rS   r£  r¤  ry  rz  N)
r~  rc   r   rk  rµ   r¥  r°   rˆ  rp  rª  r{  s         r;   rB  zODF2XHTML.e_text_listÙ  s›   € à�‰ÔØ�y‰yœ6 ,Ð/Ó1ˆØ—‘×(Ñ(¨Ó-°Ñ1ˆÙØ—<‘<  CÓ(‰Dð
 —=‘=×*Ñ*¬V°LÐ,AÓCˆDØ  e˜}Ñ,ˆ
Ø�‰�d—n‘n×(Ñ(¨°DÓ9Ô:Ø�‰Õr=   c                 óF   — | j                  d«       | j                  «        y)z Start list item rü  Nr$  r£   s      r;   rC  zODF2XHTML.s_text_list_itemé  s   € à�‰�TÔØ�‰Õr=   c                 óf   — | j                  «        | j                  d«       | j                  «        y)z End list item rü  Nr)  r£   s      r;   rD  zODF2XHTML.e_text_list_itemî  rX  r=   c                 ó¾  — | j                   j                  t        df«      }|t        df   }| j                  | _        |›d|›�}d| j                  |<   d|j                  dd«      ›d|›�| _        | j                  j                  | j                  «       i | j                  | j                  <   t        |«      }d|dz     }|| j                  | j                     d<   y	)
z• CSS doesn't have the ability to set the glyph
            to a particular character, so we just go through
            the available glyphs
        rG   rm  r¤  rz  r£  )ÚsquareÚdiscÚcircleé   ©r‰   zlist-style-typeN)rk  r°   r   r   rv  Ú	prevstylerp  r¥  rt  r’   ru  rZ  )r:   r¤   r¥   rG   rm  r|  Úlisttypes          r;   rE  z(ODF2XHTML.s_text_list_level_style_bulletô  sÆ   € ð
 �}‰}×&Ñ&¬°Ð(8Ó:ˆØ”v˜gÐ&Ñ'ˆØ×*Ñ*ˆŒÚ $¡eÐ,ˆ
Ø%)ˆ�‰�zÒ"Ø)-¯©°c¸#Õ)>ÁÐFˆÔØ�‰×Ñ˜t×0Ñ0Ô1Ø,.ˆ�‰�t×(Ñ(Ñ)ä�E“
ˆØ/°¸±	Ñ:ˆØDLˆ�‰�t×(Ñ(Ñ)Ð*@ÒAr=   c                 ó*   — | j                   | _        | ` y rŸ   ©r†  rv  r£   s      r;   rF  z(ODF2XHTML.e_text_list_level_style_bullet  ó   € Ø ŸN™NˆÔØ‰Nr=   c                 ó   — | j                   j                  «       t        df   }|t        df   }|j	                  t        dfd«      }|›d|›�}| j
                  | _        d|j                  dd«      ›d|›�| _        d| j                  |<   | j                  j                  | j
                  «       i | j                  | j
                  <   |dk(  rd}n"|dk(  rd	}n|d
k(  rd}n|dk(  rd}n
|dk(  rd}nd}|| j                  | j
                     d<   y )NrG   rm  Ú1r¤  r£  rû  ÚdecimalÚIzupper-romanÚizlower-romanr  zupper-alpharï   zlower-alphar…  )rk  r­   r   r   rc   rv  r†  r¥  rp  rt  r’   ru  )r:   r¤   r¥   rG   rm  Ú
num_formatr|  r‡  s           r;   rG  z(ODF2XHTML.s_text_list_level_style_number
  s  € Ø�}‰}×(Ñ(Ó*¬G°FÐ+;Ñ<ˆØ”v˜gÐ&Ñ'ˆØ—Y‘Y¤¨Ð 0°Ó5ˆ
Ú $¡eÐ,ˆ
Ø×*Ñ*ˆ�Ø)-¯©°c¸#Õ)>ÁÐFˆÔØ%)ˆ�‰�zÑ"Ø�‰×Ñ˜t×0Ñ0Ô1Ø,.ˆ�‰�t×(Ñ(Ñ)Ø˜3Ò¨9¡Ø˜3Ò¨=¡Ø˜3Ò¨=¡Ø˜3Ò¨=¡Ø˜3Ò¨=¡Ø"ˆhØDLˆ�‰�t×(Ñ(Ñ)Ð*@ÒAr=   c                 ó*   — | j                   | _        | ` y rŸ   r‰  r£   s      r;   rH  z(ODF2XHTML.e_text_list_level_style_number  rŠ  r=   c                 ó¬   — | j                  «        | j                  «        | j                  dz   | _        i | j                  | j                  <   g | _        y )NrS   )r~  rª  rb  ra  rc  r£   s      r;   rI  zODF2XHTML.s_text_note   sD   € Ø�‰ÔØ�‰ÔØ×+Ñ+¨aÑ/ˆÔØ*,ˆ�‰�d×&Ñ&Ñ'Øˆ�r=   c                  ó   — y rŸ   rT   r£   s      r;   Úe_text_notezODF2XHTML.e_text_note'  r›  r=   c                 óF   — |dk7  r| j                   j                  |«       y y rx  )rc  r’   ry  s     r;   ÚcollectnotezODF2XHTML.collectnote*  s    € Ø�Š7Ø�M‰M× Ñ  Õ#ð r=   c                 óH   — | j                   | _        | j                  | _         y rŸ   )rh  Ú	_orgwfuncr–  r£   s      r;   rJ  zODF2XHTML.s_text_note_body.  s   € ØŸ™ˆŒØ×&Ñ&ˆ�r=   c                 ó¢   — | j                   | _        dj                  | j                  «      | j                  | j
                     d<   d| _        | ` y )Nr‰   rí  )r˜  rh  r|  rc  ra  rb  r£   s      r;   rK  zODF2XHTML.e_text_note_body2  s?   € Ø—n‘nˆŒØ24·'±'¸$¿-¹-Ó2Hˆ�‰�d×&Ñ&Ñ'¨Ñ/ØˆŒØ‰Nr=   c                 óÆ  — dj                  | j                  «      }|| j                  | j                     d<   | j	                  ddd| j                  z  i«       | j	                  d«       t
        j                  d   dk(  r| j                  | j                  «       n$| j                  t        | j                  «      «       | j                  d«       | j                  d«       y )	Nr‰   Úcitationrï   rÍ  z#footnote-%sÚsupr   r„  )
r|  rj  ra  rb  r†  ÚsysÚversion_inforz  Úunicoderˆ  )r:   r¤   r¥   Úmarks       r;   rL  zODF2XHTML.e_text_note_citation8  s­   € Ø�w‰w�t—y‘yÓ!ˆØ6:ˆ�‰�d×&Ñ&Ñ'¨
Ñ3Ø�‰�S˜6 >°D×4DÑ4DÑ#DÐFÔGØ�‰�UÔô ×Ñ˜AÑ Ò!Ø�M‰M˜$×*Ñ*Õ+à�M‰Mœ' $×"2Ñ"2Ó3Ô4Ø�‰�eÔØ�‰�cÕr=   c                 ó  — i }d}|j                  t        dfd«      }|rB|j                  dd«      }t        j                  d|z   «      }|€d}| j                  rd|z  |d<   | j                  ||«       | j                  «        y)	z Paragraph
        r–   r¢  Nr£  r¤  rj  rl  rÀ  )rc   r   r¥  rN  r	  r†  rª  )r:   r¤   r¥   rÖ  Ú
specialtagr²   s         r;   rM  zODF2XHTML.s_text_pG  s„   € ð ˆ	Øˆ
Ø�I‰Iœ˜|Ð,¨dÓ3ˆÙØ—	‘	˜#˜cÓ"ˆAÜ'×+Ñ+¨D°©FÓ3ˆJØÐ!Ø �
Ø×$Ò$Ø)/°!©�I˜gÑ&Ø�‰�Z Ô+Ø�‰Õr=   c                 óú   — d}|j                  t        dfd«      }|r.|j                  dd«      }t        j                  d|z   «      }|€d}| j	                  «        | j                  |«       | j                  «        y)z End Paragraph
        r–   r¢  Nr£  r¤  rj  )rc   r   r¥  rN  r~  rˆ  rª  )r:   r¤   r¥   r¢  r²   s        r;   rN  zODF2XHTML.e_text_pW  sp   € ð ˆ
Ø�I‰Iœ˜|Ð,¨dÓ3ˆÙØ—	‘	˜#˜cÓ"ˆAÜ'×+Ñ+¨D°©FÓ3ˆJØÐ!Ø �
Ø�‰ÔØ�‰�jÔ!Ø�‰Õr=   c                 óˆ   — |j                  t        dfd«      }t        t        |«      «      D ]  }| j	                  d«       Œ y)z¥ Generate a number of spaces. ODF has an element; HTML uses &nbsp;
            We use &#160; so we can send the output through an XML parser if we desire to
        r²   rŒ  z&#160;N)rc   r   rþ  rZ  rz  )r:   r¤   r¥   r²   r}   s        r;   rO  zODF2XHTML.s_text_se  s;   € ð �I‰Iœ˜s�| CÓ(ˆÜ”s˜1“v“ò 	$ˆAØ�M‰M˜(Õ#ñ	$r=   c                 ó   — | j                  «        |j                  t        dfd«      }i }|r@|j                  dd«      }t        j                  d|z   «      }|€| j
                  rd|z  |d<   | j                  d|«       | j                  «        y)	z� The <text:span> element matches the <span> element in HTML. It is
            typically used to properties of the text.
        r¢  Nr£  r¤  zS-zS-%srÀ  r  )r~  rc   r   r¥  rN  r	  r†  rª  )r:   r¤   r¥   r²   rÖ  rn  s         r;   rP  zODF2XHTML.s_text_spanm  s‚   € ð 	�‰ÔØ�I‰Iœ˜|Ð,¨dÓ3ˆØˆ	ÙØ—	‘	˜#˜cÓ"ˆAÜ$×(Ñ(¨¨a©Ó0ˆGØˆ 4×#4Ò#4Ø%+¨a¡Z�	˜'Ñ"Ø�‰�V˜YÔ'Ø�‰Õr=   c                 óh   — | j                  «        | j                  dd«       | j                  «        y)z End the <text:span> r  FNr)  r£   s      r;   rQ  zODF2XHTML.e_text_span|  s$   € à�‰ÔØ�‰�f˜eÔ$Ø�‰Õr=   c                 óf   — | j                  «        | j                  d«       | j                  «        y)z: Move to the next tabstop. We ignore this in HTML
        rf   N)r~  rz  rª  r£   s      r;   rR  zODF2XHTML.s_text_tab‚  s$   € ð 	�‰ÔØ�‰�cÔØ�‰Õr=   c                 óh   — | j                  «        | j                  «        | j                  ||«       y©zB Various indexes and tables of contents. We ignore those.
        N)r~  rª  r  r£   s      r;   r:  zODF2XHTML.s_text_x_source‰  s(   € ð 	�‰ÔØ�‰ÔØ×Ñ˜˜eÕ$r=   c                 óD   — | j                  «        | j                  «        yr©  )r~  rª  r£   s      r;   r;  zODF2XHTML.e_text_x_source�  s   € ð 	�‰ÔØ�‰Õr=   c                 ó  — t        |«      t        d«      k(  s)dt        |«      v sdt        |«      v sdt        |«      v sJ ‚g | _        | j                  | _        t        |«      | _        | j                  | j                  j                  «       y)zø
        Loads a document into the parser and parses it.
        The argument can either be a filename or a document in memory.
        @param odffile if the type is unicode string: name of a file; else
        it must be an open file type
        r‰   ÚrbÚBufferedReaderÚBytesION)	rë  Úreprrf  rg  rh  r   rÝ   rÚ  rÛ  )r:   Úodffiles     r;   r   zODF2XHTML.load�  sˆ   € ô �G‹}œd 3›iÒ'¨4´4¸³=Ñ+@ÐDTÔX\Ð]dÓXeÑDeÐjsÔw{ð  }Dó  xEñ  kEð  	Fð  EàˆŒ
Ø—l‘lˆŒÜ˜W›ˆŒØ�‰�t—}‘}×,Ñ,Õ-r=   c                 ó<  — |j                   t        j                  k(  ry| j                  |j                  |j
                  |j                  «       |j                  D ]  }| j                  |«       Œ | j                  |j                  |j
                  «       |j                   t        j                  k(  s|j                   t        j                  k(  rLt        j                  d   dk(  r| j                  t        |«      «       y | j                  t!        |«      «       y y )Nr   r„  )ÚnodeTyper   ÚELEMENT_NODEr’  r‘  ÚtagNameÚ
attributesÚ
childNodesrÚ  r—  Ú	TEXT_NODEÚCDATA_SECTION_NODEr�  rž  r�  rq  rŸ  )r:   Únoder²   s      r;   rÚ  zODF2XHTML._walknode«  sÃ   € Ø�=‰=œD×-Ñ-Ò-Ø×Ñ §
¡
¨D¯L©L¸$¿/¹/ÔJØ—_‘_ò "�Ø—‘˜qÕ!ð"à×Ñ˜dŸj™j¨$¯,©,Ô7Ø�=‰=œDŸN™NÒ*¨d¯m©m¼t×?VÑ?VÒ.VÜ×Ñ Ñ" AÒ%Ø—‘¤ D£	Õ*à—‘¤¨£Õ.ð	 /Wr=   c                 óú   — t        |«      t        d«      k(  s)dt        |«      v sdt        |«      v sdt        |«      v sJ ‚| j                  |«       | j                  «       }t        |«      t        d«      k(  sJ ‚|S )zÓ
        Load a file and return the XHTML
        @param odffile if the type is unicode string: name of a file; else
        it must be an open file type
        @return XHTML code as a a unicode string
        r‰   r¬  r­  r®  )rë  r¯  r   Úxhtml)r:   r°  Úresults      r;   Ú	odf2xhtmlzODF2XHTML.odf2xhtml¸  s‰   € ô �G‹}œd 3›iÒ'¨4´4¸³=Ñ+@ÐDTÔX\Ð]dÓXeÑDeÐjsÔw{ð  }Dó  xEñ  kEð  	Fð  Eð 	�	‰	�'Ôà�z‰z‹|ˆÜ�F‹|œT #›YÒ&Ð'Ð&Øˆr=   c                 óF   — |dk7  r| j                   j                  |«       y y rx  )rf  r’   ry  s     r;   rg  zODF2XHTML._wlinesÈ  s   € Ø�Š7�D—J‘J×%Ñ% aÕ(ˆ7r=   c                 ó8   — dj                  | j                  «      S )z Returns the xhtml
        r‰   )r|  rf  r9   s    r;   r»  zODF2XHTML.xhtmlË  s   € ð �w‰w�t—z‘zÓ"Ð"r=   c                 óF   — |dk7  r| j                   j                  |«       y y rx  )Ú	_csslinesr’   ry  s     r;   Ú	_writecsszODF2XHTML._writecssÐ  s   € Ø�Š7�D—N‘N×)Ñ)¨!Õ,ˆ7r=   c                  ó   — y rŸ   rT   ry  s     r;   Ú_writenothingzODF2XHTML._writenothingÓ  r›  r=   c                 ó²   — g | _         | j                  | _        | j                  «        dj	                  | j                   «      }| j
                  | _        | ` |S )z Returns the CSS content r‰   )rÁ  rÂ  rh  rï  r|  rg  )r:   Úress     r;   ÚcsszODF2XHTML.cssÖ  sG   € àˆŒØ—n‘nˆŒØ× Ñ Ô"Ø�g‰g�d—n‘nÓ%ˆØ—l‘lˆŒØˆNØˆ
r=   c                 óÔ   — |dk(  rt         j                  }n|r|dz   }t        |d«      }|j                  | j	                  «       j                  dd«      «       |j                  «        y)z¤ Save the HTML under the filename.
            If the filename is '-' then save to stdout
            We have the last style filename in self.stylefilename
        rL  z.htmlÚwzus-asciiÚxmlcharrefreplaceN)r�  ÚstdoutÚfileÚwriter»  ÚencodeÚclose)r:   Ú
outputfileÚ	addsuffixÚoutputfps       r;   ÚsavezODF2XHTML.saveà  sX   € ð
 ˜ÒÜ—z‘z‰HáØ'¨'Ñ1�
Ü˜J¨Ó,ˆHØ�‰�t—z‘z“|×*Ñ*¨:Ð6IÓJÔKØ�‰Õr=   ©TFrŸ   )T)F){r˜   r™   rš   r›   r<   rX  rT  r_  rd  rU  rz  r~  r†  rˆ  r‹  r�  r’  r—  r�  r”  r�  r•  r  r   r
  r¦  r¨  rª  r  r  r  r  r  r  r  r  r  rÎ  r  r  r  r  r  r  r  rð  rö  rï  rÿ  r  r  r  r  r!  r"  r#  r$  r%  r&  r'  r*  r  r(  r)  r+  r%  r*  r.  r2  r4  r6  r8  r-  r.  r,  rM  r/  r0  r6  r7  r1  r2  r3  r4  r5  r8  r9  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  r”  r–  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  r:  r;  r   rÚ  r½  rg  r»  rÂ  rÄ  rÇ  rÓ  rT   r=   r;   rÅ   rÅ   Y  s§  „ Ù>óeòN"òEó	kòòò<ò%ð
 "$¨5ó  ó ð #%ó 9ò#ò)ò?òòòòò!ò!ò òò&òòòòòò"ò>ò
"ò>ò
+òò(ò*ò")ò ò$"òòò

)ð€Nò!ò8ò$!ò	Bòòò#òò#òòò#ò
ò:ð !¨cÀ.Ø Ø T¸Ø 9ñ/€Iò
/ò!ò
1òòò
/ò
òò
/ò
/ò	/ò!ò
%ð, $(°SÈØ˜cØ 4¸Ø Sñ+€Lò
Rò@!ò
	òòò$ò	òòòòòòòò ò&òò*ò ò
òMò$òMò$òòò$ò'òòòò ò$òòòò%òò.ò
/òò )ò#ò
-òòôr=   rÅ   c                   ó   — e Zd ZdZdd„Zy)ÚODF2XHTMLembeddedrÆ   c                 óÊ	  — | j                  «        || _        || _        i t        df| j                  | j
                  f“t        df| j                  d f“t        df| j                  d f“t        df| j                  d f“t        df| j                  | j                  f“t        df| j                  d f“t        df| j                  d f“t        df| j                  | j                  f“t        d	f| j                  d f“t        d
f| j                  d f“t        df| j                  d f“t        df| j                  d f“t        df| j                  d f“t         df| j                  d f“t         df| j"                  d f“t         df| j                  d f“t$        df| j                  d f“i t&        df| j                  d f“t(        df| j                  d f“t(        df| j*                  | j,                  f“t(        df| j.                  d f“t(        df| j0                  | j2                  f“t(        df| j4                  | j6                  f“t8        df| j:                  | j<                  f“t8        df| j>                  | j@                  f“t8        df| j                  d f“t8        df| j>                  | j@                  f“t8        df| jB                  | jD                  f“t8        df| j>                  | j@                  f“t8        df| jF                  d f“t8        df| j                  d f“t8        d f| jH                  | jJ                  f“t8        d!f| jL                  | jN                  f“t8        d"f| jP                  | jR                  f“¥t8        d#f| jT                  | jV                  ft8        d$fd%t8        d&f| jX                  d ft8        d'f| jZ                  | j\                  ft8        d(fd | j^                  ft8        d)f| j                  d ft8        d*f| j>                  | j@                  ft8        d+f| j`                  | jb                  ft8        d,f| jd                  d ft8        d-f| jf                  | jh                  ft8        d.f| jj                  d ft8        d/f| j>                  | j@                  ft8        d0f| j>                  | j@                  ft8        d1f| j>                  | j@                  ft8        d2fd%i¥| _6        y )3NrÍ   rÎ   rÏ   rÐ   rÓ   rÑ   rÒ   rÔ   r×   rØ   rÙ   rÚ   rÛ   rß   rà   rå   rç   ré   rê   rë   rì   rí   rî   rï   rð   rñ   rò   rô   rõ   rö   r÷   rø   rù   rú   rû   rü   rý   rþ   rÿ   r   r  r  r–   r  r  r  r  r  r  zpage-number)7rU  rf  r	  r   r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   r   r1  r2  r3  r4  r5  r6  r7  r   r8  r9  r:  r;  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  )r:   rf  r	  rV  s       r;   r<   zODF2XHTMLembedded.__init__ò  sÖ  € Ø×ÑÔØˆŒ
ð )ˆÔðX
ô 
�Ð˜D×-Ñ-¨t×/@Ñ/@ÐAðX
ô 
�Ð˜D×-Ñ-¨tÐ4ðX
ô 
�Ð ×!7Ñ!7¸Ð >ðX
ô 
�Ð˜t×/Ñ/°Ð6ðX
ô 
�Ð˜4×+Ñ+¨T×-=Ñ-=Ð>ðX
ô 
�Ð˜T×/Ñ/°Ð6ðX
ô 
�Ð ×!7Ñ!7¸Ð >ðX
ô 
�Ð˜t×2Ñ2°D×4GÑ4GÐHðX
ô$ 
�?Ð# T×%5Ñ%5°tÐ$<ð%X
ô& 
Ð#Ð$ d×&6Ñ&6¸Ð%=ð'X
ô( 
�<Ð  $×"2Ñ"2°DÐ!9ð)X
ô* 
�>Ð" D×$4Ñ$4°dÐ#;ð+X
ô, 
�<Ð  $×"2Ñ"2°DÐ!9ð-X
ô2 
�7Ð˜T×-Ñ-¨tÐ4ð3X
ô6 
�6Ð˜D×-Ñ-¨tÐ4ð7X
ô@ 
�9Ð˜t×/Ñ/°Ð6ðAX
ôB 
˜Ð! 4×#3Ñ#3°TÐ":ñCX
ôp 
�ˆ˜$×*Ñ*¨DÐ1ðqX
ôr 
Ð&Ð'¨$×*:Ñ*:¸DÐ)AðsX
ôt 
�,Ð $×"9Ñ"9¸4×;RÑ;RÐ!SðuX
ôv 
�.Ð! D×$=Ñ$=¸tÐ#DðwX
ôx 
�+Ð ×!7Ñ!7¸×9OÑ9OÐ PðyX
ôz 
�'Ð˜T×/Ñ/°×1CÑ1CÐDð{X
ô| 
�ˆ˜Ÿ™ t§}¡}Ð5ð}X
ô~ 
Ð,Ð-¨t×/CÑ/CÀT×EYÑEYÐ.ZðX
ô@ 
Ð-Ð.°×0@Ñ0@À$Ð/GðAX
ôB 
Ð&Ð'¨×)=Ñ)=¸t×?SÑ?SÐ(TðCX
ôD 
�ˆ˜Ÿ™ t§}¡}Ð5ðEX
ôF 
Ð,Ð-¨t×/CÑ/CÀT×EYÑEYÐ.ZðGX
ôH 
�Ð × 6Ñ 6¸Ð=ðIX
ôJ 
Ð.Ð/°×1AÑ1AÀ4Ð0HðKX
ôL 
�Ð˜$×*Ñ*¨D×,<Ñ,<Ð=ðMX
ôN 
�Ð˜t×4Ñ4°d×6KÑ6KÐLðOX
ôP 
Ð*Ð+¨T×-PÑ-PÐRV×RuÑRuÐ,vñQX
ôR 
Ð*Ð+¨T×-PÑ-PÐRV×RuÑRuÐ,vÜ	�Ð˜|Ü	�Ð˜$×*Ñ*¨DÐ1Ü	�Ð˜t×4Ñ4°d×6KÑ6KÐLÜ	�Ð! 4¨×)BÑ)BÐ"CÜ	Ð&Ð'¨×)9Ñ)9¸4Ð(@Ü	Ð&Ð'¨×)=Ñ)=¸t×?SÑ?SÐ(TÜ	�ˆ˜Ÿ™ t§}¡}Ð5Ü	�ˆ˜Ÿ™ tÐ,Ü	�Ð˜4×+Ñ+¨T×-=Ñ-=Ð>Ü	�ˆ˜$Ÿ/™/¨4Ð0Ü	Ð%Ð&¨×(<Ñ(<¸d×>RÑ>RÐ'SÜ	Ð*Ð+¨T×-AÑ-AÀ4×CWÑCWÐ,XÜ	Ð$Ð% t×';Ñ';¸T×=QÑ=QÐ&RÜ	�Ð ñoX
ˆ�r=   NrÔ  )r˜   r™   rš   r›   r<   rT   r=   r;   rÖ  rÖ  ï  s   „ Ù>ô^
r=   rÖ  )+r�  Úos.pathÚosÚpathr’   ÚdirnameÚ__file__Úxml.saxr   Úxml.sax.saxutilsr   r   Úxml.domr   Úopendocumentr   Úodf.namespacesr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r�   rN  ÚContentHandlerrÅ   rÖ  rT   r=   r;   ú<module>rã     sÀ   ð÷0 Ø ‡�‡��—‘—‘ Ó)Ô *Ý ß .Ý å ÷3÷ 3÷ 3÷ 3÷ 3ó 3÷2fñ f÷Rñ ð8 ØØ"ØØØØØØØØØàð "ñ#€ô8S�×&Ñ&ô Sôl$a
˜	õ a
r=   