B
    ©‰Adºs  ã               @   s  d dl mZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlZd dlZd dlZe  d¡Z!e  d¡Z"e#ej$ej%ej&gƒZ'ej(gZ)G dd„ de*ƒZ+dS )é    )ÚOrderedDict)Údeepcopy)ÚCONTENT_TYPE)ÚRELATIONSHIP_TYPE)Úserialize_part_xml)ÚPackURI)ÚPart)Ú	parse_xml)Ú	CT_SectPr)ÚNumberingPart)ÚImageWrapper)ÚCustomProperties)ÚNS)ÚxpathNz([a-zA-Z/_-]+)([1-9][0-9]*)?zrId([0-9]*)c               @   s  e Zd Zdd„ Zdd„ ZdCdd„ZdDd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#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ ZdEd3d4„ZdFd5d6„Zd7d8„ Zd9d:„ Zd;d<„ Zd=d>„ Z d?d@„ Z!dAdB„ Z"d2S )GÚComposerc             C   s(   || _ |jj| _d| _|  ¡  d| _d S )NTF)ÚdocÚpartÚpackageÚpkgÚrestart_numberingÚreset_reference_mappingÚfirst_section_properties_added)Úselfr   © r   úF/var/www/html/venv/lib/python3.7/site-packages/docxcompose/composer.pyÚ__init__#   s
    
zComposer.__init__c             C   s   i | _ i | _tƒ | _d S )N)Únum_id_mappingÚanum_id_mappingÚsetÚ_numbering_restarted)r   r   r   r   r   -   s    z Composer.reset_reference_mappingTc             C   s   |   ¡ }| j|||d dS )zAppend the given document.)Úremove_property_fieldsN)Úappend_indexÚinsert)r   r   r    Úindexr   r   r   Úappend2   s    zComposer.appendc             C   s(  |   ¡  |r0t|ƒ}x| ¡ D ]}| |¡ qW |  |¡ x²|jjD ]¦}t|tƒrTqDt	|ƒ}| j
jj ||¡ |  |j| j
j|¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ |d7 }qDW |  |¡ |  ¡  |  ¡  |  ¡  |  |¡ |  |¡ dS )z-Insert the given document at the given index.é   N)r   r   ÚkeysZdissolve_fieldsÚ_create_style_id_mappingÚelementÚbodyÚ
isinstancer
   r   r   r"   Úadd_referenced_partsr   Ú
add_stylesÚadd_numberingsÚrestart_first_numberingÚ
add_imagesÚadd_diagramsÚ
add_shapesÚadd_footnotesÚ#remove_header_and_footer_referencesÚadd_styles_from_other_partsÚrenumber_bookmarksÚrenumber_docpr_idsÚrenumber_nvpicpr_idsÚfix_section_typesÚfix_header_and_footers)r   r#   r   r    ZcpropsÚnamer(   r   r   r   r"   7   s6    



zComposer.insertc             C   s   | j  |¡ d S )N)r   Úsave)r   Úfilenamer   r   r   r;   n   s    zComposer.savec             C   s6   | j jj d¡}|r(| j jj |d ¡S t| j jjƒS )Nzw:sectPrr   )r   r(   r)   r   r#   Úlen)r   Zsection_propsr   r   r   r!   q   s    zComposer.append_indexc       	      C   sh   t |dƒ}xX|D ]P}| dtd  ¡}|j| }|jtkr<q|  |||¡}| dtd  |j¡ qW d S )Nz.//*[@r:id]z{%s}idÚr)	r   Úgetr   ÚrelsÚreltypeÚ!REFERENCED_PARTS_IGNORED_RELTYPESÚadd_relationshipr   ÚrId)	r   Úsrc_partÚdst_partr(   Zrid_elementsZrid_elementÚridÚrelÚnew_relr   r   r   r+   w   s    



zComposer.add_referenced_partsc                sú   |j r"|j |j|j¡}|j| S |j}t |j¡ 	d¡‰ ‡ fdd„|j
 ¡ D ƒ}dd„ |D ƒ}x(tdt|ƒd ƒD ]}||krt|}P qtW tdˆ ||jjf ƒ}	t|	|j|j|j
ƒ}
|j |j|
¡}dd„ }x(t|j ¡ |d	D ]}|  ||
|¡ qàW |S )
z%Add relationship and it's target partr%   c                s*   g | ]"}|j  ˆ ¡rt |j ¡ d ¡‘qS )é   )ÚpartnameÚ
startswithÚFILENAME_IDX_REÚmatchÚgroup)Ú.0Úp)r:   r   r   ú
<listcomp>   s   z-Composer.add_relationship.<locals>.<listcomp>c             S   s   g | ]}|d k	rt |ƒ‘qS )N)Úint)rP   Úidxr   r   r   rR   ’   s    rJ   z%s%d.%sc             S   s   t  | j¡}t| d¡ƒS )Nr%   )Ú
RID_IDX_RErN   rD   rS   rO   )r>   rN   r   r   r   Úsort_key¢   s    z+Composer.add_relationship.<locals>.sort_key)Úkey)Zis_externalr@   Zget_or_add_ext_relrA   Z
target_refÚtarget_partrM   rN   rK   rO   r   Ú
iter_partsÚranger=   r   Úextr   Úcontent_typeÚblobZ
get_or_addÚsortedÚvaluesrC   )r   rE   rF   ZrelationshipÚnew_ridr   Zused_part_numbersÚnZnext_part_numberZnext_partnameZnew_partrI   rV   rH   r   )r:   r   rC      s.    


zComposer.add_relationshipc       
      C   sš   t |dƒ}xŠ|D ]‚}x|dtjfdtjfdtjfdtjffD ]T\}}| dtd |f ¡}|jj	| j
}| jj ||¡}	| dtd |f |	¡ q:W qW d S )Nz.//dgm:relIds[@r:dm]ÚdmÚloÚqsÚcsz{%s}%sr>   )r   ÚRTZDIAGRAM_DATAZDIAGRAM_LAYOUTZDIAGRAM_QUICK_STYLEZDIAGRAM_COLORSr?   r   r   r@   rX   r   Ú	relate_tor   )
r   r   r(   Zdgm_relsZdgm_relÚitemZrt_typeZdm_ridZdm_partr`   r   r   r   r0   «   s    

zComposer.add_diagramsc             C   sÚ   t |dƒ}xÊ|D ]Â}| dtd  ¡}|jj| j}| jj |j	¡}|dkrbt
|ƒ}| jj |¡}| jj |tj¡}	| dtd  |	¡ | dtd  ¡}|r|jj| }
|  d| jj|
¡}| dtd  |j¡ qW dS )z=Add images from the given document used in the given element.z%(.//a:blip|.//asvg:svgBlip)[@r:embed]z	{%s}embedr>   Nz{%s}link)r   r?   r   r   r@   rX   r   Úimage_partsÚ_get_by_sha1Úsha1r   Ú_add_image_partr   rg   rf   ÚIMAGEr   rC   rD   )r   r   r(   ZblipsZbliprG   Úimg_partÚnew_img_partÚimager`   rH   rI   r   r   r   r/   ¹   s     
zComposer.add_imagesc       
      C   s   t |dƒ}x€|D ]x}| dtd  ¡}|jj| j}| jj |j	¡}|d krbt
|ƒ}| jj |¡}| jj |tj¡}	| dtd  |	¡ qW d S )Nz.//v:shape/v:imagedataz{%s}idr>   )r   r?   r   r   r@   rX   r   ri   rj   rk   r   rl   r   rg   rf   rm   r   )
r   r   r(   ZshapesÚshaperG   rn   ro   rp   r`   r   r   r   r1   Ñ   s    

zComposer.add_shapesc             C   sÞ   |  dt¡}|sdS |jj tj¡}|  ¡ }t|j	ƒ}t
|ƒd }x~|D ]v}| dtd  ¡}	t|j	ƒ}t| d|	 t¡ƒ}
| |
¡ |
 dtd  t|ƒ¡ | dtd  t|ƒ¡ |d7 }qHW |  |||¡ t|ƒ|_dS )z@Add footnotes from the given document used in the given element.z.//w:footnoteReferenceNr%   z{%s}idÚwz.//w:footnote[@w:id="%s"])Úfindallr   r   r@   Úpart_with_reltyperf   Ú	FOOTNOTESÚfootnote_partr	   r]   r=   r?   r   Úfindr$   r   Ústrr+   r   Z_blob)r   r   r(   Zfootnotes_refsrv   Zmy_footnote_partZ	footnotesÚnext_idÚrefZid_Zfootnoter   r   r   r2   ß   s"    



zComposer.add_footnotesc             C   sš   y| j jj tj¡}W n~ tk
r”   tdƒ}tj	}t
j t
j t¡dd¡}t|dƒ}| ¡ }W dQ R X t|||| j jjƒ}| j j |tj¡ Y nX |S )z"The footnote part of the document.z/word/footnotes.xmlÚ	templateszfootnotes.xmlÚrbN)r   r   r@   rt   rf   ru   ÚKeyErrorr   ÚCTZWML_FOOTNOTESÚosÚpathÚjoinÚdirnameÚ__file__ÚopenÚreadr   r   rg   )r   rv   rK   r\   Úxml_pathÚfÚ	xml_bytesr   r   r   rv   ú   s    zComposer.footnote_partc             C   s"   || j kr|S | j | j | |¡S )N)Ú_style_id2nameÚ_style_name2idr?   )r   Ústyle_idr   r   r   Úmapped_style_id  s    
zComposer.mapped_style_idc             C   s*   dd„ |j D ƒ| _dd„ | jj D ƒ| _d S )Nc             S   s   i | ]}|j |j“qS r   )r:   r‹   )rP   Úsr   r   r   ú
<dictcomp>  s    z5Composer._create_style_id_mapping.<locals>.<dictcomp>c             S   s   i | ]}|j |j“qS r   )r‹   r:   )rP   r   r   r   r   rŽ     s    )Ústylesr‰   r   rŠ   )r   r   r   r   r   r'     s    z!Composer._create_style_id_mappingc          
   C   sP   xJt D ]B}yt|jj |¡jƒ}W n ttfk
r:   Y qX |  ||¡ qW d S )N)	ÚPART_RELTYPES_WITH_STYLESr	   r   r@   rt   r]   r}   Ú
ValueErrorr,   )r   r   rA   Úelr   r   r   r4     s    
z$Composer.add_styles_from_other_partsc             C   sÔ  dd„ | j jD ƒ}tt dd„ t|dƒD ƒ¡ƒ}xœ|D ]’}|  |¡}||krÚt|jj 	|¡ƒ}|dk	rØ| j jj 
|¡ |  ||¡ t|dƒ}|rØ|d }	|  |	¡}
|
|krØ|jj 	|	¡}|dk	rØ| j jj 
t|ƒ¡ n¢|jj 	|¡}|dk	r|t|dƒ}|r|t|jjjd	|d  ƒ}|r|| j jj 	|¡}t|dƒ}|r||  ¡ }t|jd	|d  ƒ}|r|t|d ƒ| jt|d ƒ< ||krº|dk	rºt|d
t|d ƒ}x|D ]}||_qªW dd„ | j jD ƒ}q8W dS )z=Add styles from the given document used in the given element.c             S   s   g | ]
}|j ‘qS r   )r‹   )rP   r   r   r   r   rR   #  s    z'Composer.add_styles.<locals>.<listcomp>c             S   s   g | ]
}|j ‘qS r   )Úval)rP   Úer   r   r   rR   %  s    z%.//w:tblStyle|.//w:pStyle|.//w:rStyleNz.//w:link/@w:valr   z.//w:numId/@w:valz..//w:num[@w:numId="%s"]/w:abstractNumId/@w:valzg.//w:tblStyle[@w:val="%(styleid)s"]|.//w:pStyle[@w:val="%(styleid)s"]|.//w:rStyle[@w:val="%(styleid)s"])Zstyleidc             S   s   g | ]
}|j ‘qS r   )r‹   )rP   r   r   r   r   rR   Z  s    )r   r   Úlistr   Úfromkeysr   rŒ   r   r(   Ú	get_by_idr$   r-   r   Únumbering_partrS   r   Údictr“   )r   r   r(   Zour_style_idsZused_style_idsr‹   Zour_style_idÚstyle_elementZlinked_style_idsZlinked_style_idZour_linked_style_idZour_linked_styleÚnum_idsZanum_idsZour_style_elementZour_num_idsr˜   Zour_anum_idsZstyle_elementsr’   r   r   r   r,   !  sZ    







zComposer.add_stylesc          
   C   s|  t dd„ t|dƒD ƒƒ}|s dS |  ¡ \}}|jj}x|D ]}|| jkrNq<|j d| ¡}|sdq<t|d ƒ}	||	_|| j|< |	 d¡d }
|
j	| j
kr2|j d|
j	 ¡}|s´q<t|d ƒ}|| j
|
j	< ||
_	|  d	td
  t|ƒ¡ | dt¡}|dk	r&|  dtd
  d tdt ¡  ƒ¡¡ |  |¡ n| j
|
j	 |
_	|  |	¡ q<W x(t|dƒD ]}| j |j	|j	¡|_	qZW dS )zAAdd numberings from the given document used in the given element.c             S   s   g | ]
}|j ‘qS r   )r“   )rP   ra   r   r   r   rR   _  s    z+Composer.add_numberings.<locals>.<listcomp>z
.//w:numIdNz.//w:num[@w:numId="%s"]r   z//w:abstractNumIdz'.//w:abstractNum[@w:abstractNumId="%s"]z{%s}abstractNumIdrr   z	.//w:nsidz{%s}valz{0:08X}i áõ)r   r   Ú_next_numbering_idsr   r˜   r   r(   r   ÚnumIdr“   r   r   rx   rw   ÚformatrS   ÚrandomÚ_insert_abstract_numÚ_insert_numr?   )r   r   r(   r›   Únext_num_idÚnext_anum_idZsrc_numbering_partÚnum_idÚresÚnum_elementÚanum_idÚanum_elementZnsidZ
num_id_refr   r   r   r-   \  sH    




zComposer.add_numberingsc             C   sh   |   ¡ }dd„ t|jdƒD ƒ}|r0t|ƒd }nd}dd„ t|jdƒD ƒ}|r\t|ƒd }nd}||fS )Nc             S   s   g | ]
}|j ‘qS r   )r   )rP   ra   r   r   r   rR   š  s    z0Composer._next_numbering_ids.<locals>.<listcomp>z.//w:numr%   c             S   s   g | ]}t |ƒ‘qS r   )rS   )rP   ra   r   r   r   rR   ¢  s    z!.//w:abstractNum/@w:abstractNumIdr   )r˜   r   r(   Úmax)r   r˜   Zcurrent_num_idsr¢   Zcurrent_anum_idsr£   r   r   r   rœ   •  s    zComposer._next_numbering_idsc             C   sH   |   ¡ }|j d¡}|r8|j |d ¡}|j ||¡ n|j |¡ d S )Nz.//w:numéÿÿÿÿ)r˜   r(   r   r#   r"   r$   )r   r(   r˜   ÚnumsZ	num_indexr   r   r   r¡   «  s    zComposer._insert_numc             C   s@   |   ¡ }|j d¡}|r*|j |d ¡}nd}|j ||¡ d S )Nz.//w:numr   )r˜   r(   r   r#   r"   )r   r(   r˜   r«   Z
anum_indexr   r   r   r    µ  s    zComposer._insert_abstract_numc             C   s2   x,| j  ¡ D ]\}}||kr|| j |< dS qW dS )z&Replace a mapped numId with a new one.N)r   Úitems)r   Zold_idZnew_idrW   Úvaluer   r   r   Ú_replace_mapped_num_idÀ  s    
zComposer._replace_mapped_num_idc             C   s¢   y| j jj tj¡}W n† tk
rœ   tdƒ}tj	}t
j t
j t¡dd¡}t|dƒ}| ¡ }W dQ R X t|ƒ}t|||| j jjƒ}| j j |tj¡ Y nX |S )z#The numbering part of the document.z/word/numbering.xmlr{   znumbering.xmlr|   N)r   r   r@   rt   rf   Z	NUMBERINGr}   r   r~   ZWML_NUMBERINGr   r€   r   r‚   rƒ   r„   r…   r	   r   r   rg   )r   r˜   rK   r\   r†   r‡   rˆ   r(   r   r   r   r˜   È  s    zComposer.numbering_partc             C   s¢  | j s
d S t|dƒ}|sd S |d }|| jkr2d S | jjj |¡}|d krNd S t|dƒ}|r`d S t|dƒ}|rx|d }nt|dƒ}|sŠd S |d }|  ¡ }	t|	jd| ƒ}
|
s²d S t|
d dƒd }t|	jd| ƒ}t|d d	ƒ}|rö|d d
kröd S t|
d ƒ}t	dƒ}| 
|¡ |  ¡ \}}||_|  |¡ t|d| ƒ}t|d dƒ}|rx|d }|jj}|  ||¡ ||j_nt	d| ƒ}|d  
|¡ | j |¡ d S )Nz.//w:pStyle/@w:valr   z.//w:outlineLvlz.//w:numPr/w:numId/@w:valz.//w:numId/@w:valz.//w:num[@w:numId="%s"]z.//w:abstractNumId/@w:valz'.//w:abstractNum[@w:abstractNumId="%s"]z%.//w:lvl[@w:ilvl="0"]/w:numFmt/@w:valZbulletz<w:lvlOverride xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" w:ilvl="0"><w:startOverride w:val="1"/></w:lvlOverride>z,.//w:pPr/w:pStyle[@w:val="%s"]/parent::w:pPrz
.//w:numPrz‚<w:numPr xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:ilvl w:val="0"/><w:numId w:val="%s"/></w:numPr>)r   r   r   r   r   r(   r—   r˜   r   r	   r$   rœ   r   r¡   r“   r®   Úadd)r   r   r(   r‹   rš   Zoutline_lvlZlocal_num_idr¤   Zstyle_num_idr˜   r¦   r§   r¨   Znum_fmtZnew_num_elementZlvl_overrider¢   r£   Zparagraph_propsZnum_prZprevious_num_idr   r   r   r.   Ú  sl    










z Composer.restart_first_numberingNc       	   	   C   sš   dd„ | j jj ¡ D ƒ}t|ƒd }td| ƒ}tj}|sptj	 
tj	 t¡dd¡}t|dƒ}| ¡ }W dQ R X t|||| j jjƒ}| j j |tj¡ |S )	z The header part of the document.c             S   s   g | ]}|j tjkr|‘qS r   )rA   rf   ÚHEADER)rP   rH   r   r   r   rR   $  s    z(Composer.header_part.<locals>.<listcomp>r%   z/word/header%s.xmlr{   z
header.xmlr|   N)r   r   r@   r_   r=   r   r~   Z
WML_HEADERr   r€   r   r‚   rƒ   r„   r…   r   r   rg   rf   r°   )	r   ÚcontentZheader_relsry   rK   r\   r†   r‡   Úheader_partr   r   r   r²   !  s    zComposer.header_partc       	   	   C   sš   dd„ | j jj ¡ D ƒ}t|ƒd }td| ƒ}tj}|sptj	 
tj	 t¡dd¡}t|dƒ}| ¡ }W dQ R X t|||| j jjƒ}| j j |tj¡ |S )	z The footer part of the document.c             S   s   g | ]}|j tjkr|‘qS r   )rA   rf   ÚFOOTER)rP   rH   r   r   r   rR   6  s    z(Composer.footer_part.<locals>.<listcomp>r%   z/word/footer%s.xmlr{   z
footer.xmlr|   N)r   r   r@   r_   r=   r   r~   Z
WML_FOOTERr   r€   r   r‚   rƒ   r„   r…   r   r   rg   rf   r³   )	r   r±   Zfooter_relsry   rK   r\   r†   r‡   Úfooter_partr   r   r   r´   3  s    zComposer.footer_partc             C   s*   t |dƒ}x|D ]}| ¡  |¡ qW d S )Nz).//w:headerReference|.//w:footerReference)r   Z	getparentÚremove)r   r   r(   Úrefsrz   r   r   r   r3   E  s    
z,Composer.remove_header_and_footer_referencesc             C   sˆ   t | jjjdƒ}d}x,|D ]$}| dtd  t|ƒ¡ |d7 }qW t | jjjdƒ}d}x,|D ]$}| dtd  t|ƒ¡ |d7 }q\W d S )Nz.//w:bookmarkStartr   z{%s}idrr   r%   z.//w:bookmarkEnd)r   r   r(   r)   r   r   rx   )r   Zbookmarks_startZbookmark_idÚbookmarkZbookmarks_endr   r   r   r5   K  s    

zComposer.renumber_bookmarksc             C   s‚   t | jjjdƒ}d}x|D ]}||_|d7 }qW dd„ | jjj ¡ D ƒ}x4|D ],}t |jdƒ}x|D ]}||_|d7 }qdW qNW d S )Nz.//wp:docPrr%   c             S   s$   g | ]}|j tjtjgkr|j‘qS r   )rA   rf   r°   r³   rX   )rP   rH   r   r   r   rR   a  s    z/Composer.renumber_docpr_ids.<locals>.<listcomp>)r   r   r(   r)   Úidr   r@   r_   )r   Zdoc_prsZ	doc_pr_idZdoc_prÚpartsr   r   r   r   r6   W  s    


zComposer.renumber_docpr_idsc             C   s‚   t | jjjdƒ}d}x|D ]}||_|d7 }qW dd„ | jjj ¡ D ƒ}x4|D ],}t |jdƒ}x|D ]}||_|d7 }qdW qNW d S )Nz.//pic:cNvPrr%   c             S   s$   g | ]}|j tjtjgkr|j‘qS r   )rA   rf   r°   r³   rX   )rP   rH   r   r   r   rR   t  s    z1Composer.renumber_nvpicpr_ids.<locals>.<listcomp>)r   r   r(   r)   r¸   r   r@   r_   )r   Zc_nv_prsZ
c_nv_pr_idZc_nv_prr¹   r   r   r   r   r7   j  s    


zComposer.renumber_nvpicpr_idsc             C   sj   t | jjƒdkst |jƒdkr"d S t | jjƒt |jƒ }| jjd j| jj| _|jd j| jjd _d S )Nr%   rª   )r=   r   ÚsectionsZ
start_type)r   r   Úfirst_new_section_idxr   r   r   r8   }  s
    	zComposer.fix_section_typesc             C   s2  | j r
dS t| jjƒdks(t|jƒdkr,dS t| jjƒt|jƒ }| jjd }| jj| }xHdD ]@}t||ƒ}|jsvq`t||ƒ}|j |j¡j	}|j 
|j|¡ q`W xHdD ]@}	t||	ƒ}
|
jsÀqªt||	ƒ}|
j |
j¡j	}|j |
j|¡ qªW |j}|j}| d¡}x"|D ]}| |¡ | |¡ q
W d| _ dS )aË  
        The master document usually only has one section, hence its section
        properties are defined directly in the body of the document and apply
        to the last section of the document. For all other sections but the
        last one, section properties are defined in the last paragraph of
        the section.
        Headers and footers are inherited from the previous section properties
        if they are not defined in a given section. If not defined in the first
        section, then blank headers and footers will be used., so we need to
        make sure to add the definition from the main template in the first
        section of the document if there are more than one sections.
        Nr%   rª   )ÚfooterZeven_page_footerZfirst_page_footer)ÚheaderZeven_page_headerZfirst_page_headerzw:pgNumTypeT)r   r=   r   rº   ÚgetattrZ_has_definitionZ_sectPrZget_footerReferenceZ_hdrftr_indexrD   Zadd_footerReferenceZget_headerReferenceZadd_headerReferencer   rµ   r$   )r   r   r»   Zlast_sectionZfirst_sectionZfooter_nameZfooter_mainZ
footer_secrG   Úheader_nameZheader_mainZ
header_secZlast_sect_prZfirst_sect_prZpg_num_typesZpg_num_typer   r   r   r9     s8    








zComposer.fix_header_and_footers)T)T)N)N)#Ú__name__Ú
__module__Ú__qualname__r   r   r$   r"   r;   r!   r+   rC   r0   r/   r1   r2   rv   rŒ   r'   r4   r,   r-   rœ   r¡   r    r®   r˜   r.   r²   r´   r3   r5   r6   r7   r8   r9   r   r   r   r   r   !   s@   


7
*	;9
G

r   ),Úcollectionsr   Úcopyr   Zdocx.opc.constantsr   r~   r   rf   Zdocx.opc.oxmlr   Zdocx.opc.packurir   Zdocx.opc.partr   Z	docx.oxmlr	   Zdocx.oxml.sectionr
   Zdocx.parts.numberingr   Zdocxcompose.imager   Zdocxcompose.propertiesr   Zdocxcompose.utilsr   r   Úos.pathr   rŸ   ÚreÚcompilerM   rU   r   rm   r°   r³   rB   ru   r   Úobjectr   r   r   r   r   Ú<module>   s0   


