B
    j@5\'V  ã               @   sä  d dl mZ d dlmZ d dlmZ yd dlmZmZmZ W n  e	k
r\   e
ZeZeZY nX d dlmZ ddlT dZejd	ejd
ejdejdejdiZejdejdejdejdiZejdejdejdiZejdejdej diZ!ej"dej#dej$dej%dej&diZ'e(j)de(j*de(j+de(j,de(j-de(j.d e(j/d!e(j0d"e(j1d#e(j2d$e(j3d%e(j4d&iZ5ej6d'ej7d(ej8d)ej9d*ej:d+iZ;e<j=d,e<j>d-e<j?d.e<j@d/e<jAd0e<jBd1e<jCd2iZDeEjFd3eEjGd4eEjHd5eEjId6eEjJd7iZKG d8d9„ d9eƒZLG d:d;„ d;eƒZMd<S )=é    )Úabsolute_import)Úrange)Úobject)Ú
StringTypeÚListTypeÚ	TupleType)Údeepcopyé   )Ú*iÐ  ZqlZqrZqcZqjZqdÚ ZtqrZtqcZtqdecZtrqlZtrqrZtrqcZ	clvertalcZ	clvertalbZcltxtbrlZcltxbtlrZ	cltxlrtbvZ	cltxtbrlvZbghorizZbgvertZbgfdiagZbgbdiagZbgcrossZbgdcrossZ	bgdkhorizZbgdkvertZ	bgdkfdiagZ	bgdkbdiagZ	bgdkcrossZ
bgdkdcrossZtldotZtlhyphZtlulZtlthZtleqZbrdrsZbrdrthZbrdrshZbrdrdbZbrdrdotZbrdrdashZbrdrhairZsbknoneZsbkcolZsbkpageZsbkevenZsbkoddc                   s6   e Zd Z‡ fdd„Zd
dd„Zdd„ Zdd	„ Z‡  ZS )ÚSettingsc                s    t t| ƒ ¡  t t| ƒj| _d S )N)Úsuperr   Ú__init__ÚappendÚ_append)Úself)Ú	__class__© ú-lib/python3.7/site-packages/PyRTF/Renderer.pyr   J   s    zSettings.__init__Nc             C   sJ   |dk	r"|dkr"|rF|   | |¡ n$|r<|dkr4|}n|| }|   |¡ d S )Nr   )FNr   T)r   )r   ÚvalueÚmaskÚfallbackr   r   r   r   N   s     zSettings.appendc             C   s   | rdd  | ¡ S dS )Nz\%sú\r   )Újoin)r   r   r   r   ÚJoinZ   s     zSettings.Joinc             C   s   |   ¡ S )N)r   )r   r   r   r   Ú__repr__^   s    zSettings.__repr__)NN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   Ú__classcell__r   r   )r   r   r   I   s   
r   c               @   sÆ   e Zd Zd2dd„Zdd„ Zd3dd„Zd	d
„ Zd4dd„Zd5d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d6d&d'„Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ ZdS )7ÚRendererNc             C   s   i | _ i | _|| _d S )N)Zcharacter_style_mapÚparagraph_style_mapÚWriteCustomElement)r   Zwrite_custom_element_callbackr   r   r   r   b   s    zRenderer.__init__c             C   sˆ   |rd}d}d}d}nd}d}d}d}|  |jj|¡ |  |jj|¡ |jrV|  |¡ |jrt|  |jd	¡ |  d
¡ |  |j||¡ d S )Nzpgwsxn%szpghsxn%sZ	lndscpsxnZsxnzpaperw%szpaperh%sÚ	landscaper   zpgnstarts%sZ
pgnrestart)r   ZPaperÚWidthZHeightZ	LandscapeZFirstPageNumberÚ_RendMarginsPropertySetZMargins)r   ÚsectionÚsettingsÚ
in_sectionZpaper_width_codeZpaper_height_coder#   Zmargin_suffixr   r   r   Ú_RendPagePropertiesj   s"    

zRenderer._RendPagePropertiesr   c             C   sj   |sd S |  |j|d ¡ |  t |jd¡¡ |  | j |jd¡|d ¡ |  | j |jd¡|d ¡ d S )Nz	shading%sFzcfpat%szcbpat%s)r   ÚShadingÚShadingPatternMapÚgetÚPatternÚ_colour_mapZ
ForegroundZ
Background)r   Zshading_propsr'   Úprefixr   r   r   Ú_RendShadingPropertySet‡   s     z Renderer._RendShadingPropertySetc             C   sL   |  t|j ¡ |  |jd¡ |  | j |jd¡d¡ |  |jpBdd¡ d S )Nzbrdrw%sFzbrdrcf%szbrsp%s)r   ÚBorderStyleMapÚStyler$   r.   r,   ÚColourZSpacing)r   Z
edge_propsr'   r   r   r   Ú_RendBorderPropertySet   s    zRenderer._RendBorderPropertySetc             C   s”   |sd S |j r*| |d ¡ |  |j |¡ |jrL| |d ¡ |  |j|¡ |jrn| |d ¡ |  |j|¡ |jr| |d ¡ |  |j|¡ d S )NZbrdrtZbrdrlZbrdrbZbrdrr)ÚTopr   r4   ÚLeftÚBottomÚRight)r   Zframe_propsr'   Ú
tag_prefixr   r   r   Ú_RendFramePropertySet–   s     zRenderer._RendFramePropertySetc             C   sd   |sd S |  |jd| d ¡ |  |jd| d ¡ |  |jd| d ¡ |  |jd| d ¡ d S )NZmargtz%sZmarglZmargbZmargr)r   r5   r6   r7   r8   )r   Zmargin_propsr'   Úsuffixr   r   r   r%   ©   s     z Renderer._RendMarginsPropertySetc             C   sò   |sd S |  t|j ¡ |  |jd¡ |  |jd¡ d}xN|jD ]D}|  t|j ¡ |  t |j	d¡¡ ||j
prt7 }|  d| ¡ q@W |  |jd¡ |  |jd¡ |  |jd¡ |  |jd	¡ |jrî|jdk rà|  |jd
¡ n|  |jd¡ d S )Nzsb%szsa%sr   r   ztx%sZpagebbzfi%szli%szri%szsl%s\slmult0zsl%s\slmult1)r   ÚParagraphAlignmentMapÚ	AlignmentZSpaceBeforeZ
SpaceAfterZTabsÚTabAlignmentMapÚTabLeaderMapr,   ZLeaderr$   ÚDEFAULT_TAB_WIDTHZPageBreakBeforeZFirstLineIndentZ
LeftIndentZRightIndentZSpaceBetweenLines)r   Zparagraph_propsr'   ÚwidthZtabr   r   r   Ú_RendParagraphPropertySet±   s&     
z"Renderer._RendParagraphPropertySetc             C   sþ   |sd S |j r| |j d¡ | |jd¡ | |jd¡ | |jd¡ | |jd¡ | |jd¡ | |jd¡ | | j 	|j
d¡d	¡ | |jd
¡ | | j 	|jd¡d¡ |jrú|j}| d¡ | t|j ¡ | |jd¡ | | j 	|jd¡d¡ d S )Nz	expndtw%sÚbÚiZulZuldZuldbZulwFzf%szfs%szcf%sZchbrdrzbrdrw%szbrdrcf%s)Z	Expansionr   ZBoldZItalicZ	UnderlineZDottedUnderlineZDoubleUnderlineZWordUnderlineÚ	_font_mapr,   ZFontZSizer.   r3   ÚFramer1   r2   r$   )r   Z
text_propsr'   Úframer   r   r   Ú_RendTextPropertySetÍ   s&     
zRenderer._RendTextPropertySetc             C   sÊ   || _ || _|  ¡  |  ¡  |  ¡  |  ¡  tƒ }| j| j jd |dd |  	t
|ƒ¡ t|jƒdkr~| j|jd ddd n2x0t|jƒD ]"\}}|dk}d}|  |||¡ qŠW |  	d¡ | `| ` | `d S )Nr   F)r(   r	   T)Úis_firstÚ
add_headerÚ})Ú_docÚ_foutÚ_WriteDocumentÚ_WriteColoursÚ_WriteFontsÚ_WriteStyleSheetr   r)   ZSectionsÚ_writeÚreprÚlenÚ_WriteSectionÚ	enumerateÚ_CurrentStyle)r   ZdocumentZfoutr'   Zsection_idxr&   rI   rJ   r   r   r   ÚWriteë   s&    

zRenderer.Writec             G   s   |r|| }| j  |¡ d S )N)rM   Úwrite)r   ÚdataÚparamsr   r   r   rR   	  s     zRenderer._writec             C   s    t ƒ }t | jj¡st‚t | jj¡s*t‚t | jj¡s<t‚t | jj¡sNt‚| 	| jjd¡ | 	| jjd¡ | 	| jjd¡ | 	| jjd¡ |  
d| ¡ d S )Nz	deflang%sz
viewkind%szviewzk%szviewscale%sz {\rtf1\ansi\ansicpg1252\deff0%s
)r   Z	LanguagesZIsValidrL   ZDefaultLanguageÚAssertionErrorZViewKindZViewZoomKindZ	ViewScaler   rR   )r   r'   r   r   r   rN      s    zRenderer._WriteDocumentc             C   sb   |   d¡ i | _d}x>| jjjD ]0}|   d|j|j|j¡ |d | j|< |d7 }q W |   d¡ d S )Nz{\colortbl ;r   z\red%s\green%s\blue%s;r	   z}
)rR   r.   rL   Ú
StyleSheetZColoursZRedZGreenZBlue)r   ÚoffsetZcolourr   r   r   rO   /  s    
zRenderer._WriteColoursc             C   s¤   |   d¡ i | _d}x€| jjjD ]r}d}d}d}|jr@d|j }|jrPd|j }|jrbd|jj }|   d||j	||j
||j|¡ || j|< |d7 }q W |   d	¡ d S )
Nz	{\fonttblr   r   z\fprq%sz{\*\panose %s}z{\*\falt %s}z{\f%s\f%s%s\fcharset%s%s %s%s;}r	   z}
)rR   rE   rL   r]   ZFontsZPitchZPanoseZ	AlternateÚNameZFamilyZCharacterSet)r   r^   ZfontZpitchZpanoseZ	alternater   r   r   rP   :  s0    
 
 
 
zRenderer._WriteFontsc       	      C   s$  |   d¡ i }x"t| jjjƒD ]\}}|||< qW i | _xÐt| jjjƒD ]¾\}}|dkr^|}n
|   d¡ tƒ }|  |j|¡ |  	|j
|¡ |  |j|¡ |  |jj|¡ |  |jj|¡ d| |jd¡ }d| |jd¡ }d||f }|   d||||j¡ || j|< qHW | j| | _|   d¡ d S )	Nz{\stylesheetr   Ú
z\sbasedon%sz\snext%sz\s%s%sz{%s%s%s %s;}z}
)rR   rV   rL   r]   ZParagraphStylesr!   r   rB   ÚParagraphPropertySetr:   ZFramePropertySetr0   ÚShadingPropertySetrH   Z	TextStyleZTextPropertySetr,   ZBasedOnZNextr_   rW   )	r   Z
offset_mapÚidxZstyleÚdefaultr'   Zbased_onÚnextZinlnr   r   r   rQ   U  s,    

zRenderer._WriteStyleSheetc                sÌ   ‡ fdd„}t ƒ }|s | d¡ | d¡ |rN| t|j ¡ ˆ j||dd | |jd¡ | |jd¡ ˆ  t|ƒ¡ |j	s„|j
r¦ˆ  d	¡ ||j	d
ƒ ||j
dƒ ||jdƒ ||jdƒ ˆ  |¡ d S )Nc                s.   | sg } ˆ   d| ¡ ˆ  | ¡ ˆ   d¡ d S )Nz{\%sz}
)rR   Ú_WriteElements)ZhfZrtfword)r   r   r   ÚWriteHFƒ  s
     
z'Renderer._WriteSection.<locals>.WriteHFZsectZsectdT)r(   z	headery%sz	footery%sz\titlepgZheaderfZfooterfÚheaderZfooter)r   r   ÚSectionBreakTypeMapZ	BreakTyper)   ZHeaderYZFooterYrR   rS   ZFirstHeaderZFirstFooterZHeaderZFooterrf   )r   r&   rI   rJ   rg   r'   r   )r   r   rU     s$    


zRenderer._WriteSectionc             C   s¢   d}x˜|D ]}|   |¡ d}|j}|tkr6|  |¡ q
|tkrJ|  |¡ q
|tkrb|  t|ƒ¡ q
|ttgkrz|  	|¡ q
| j
rŽ|  
| |¡ q
td| ƒ‚q
W d S )Nr   r`   z,Don't know how to handle elements of type %s)rR   r   Ú	ParagraphÚWriteParagraphElementÚTableÚWriteTableElementr   ÚRawCodeZImageÚWriteRawCoder"   Ú	Exception)r   ÚelementsZnew_lineÚelementZclssr   r   r   rf   ³  s     

zRenderer._WriteElementsú\parÚ{rK   c             C   s  t ƒ }|  |j|¡ |  |j|¡ |  |j|¡ | j |j	| j
¡| _
|  d||| j
|f ¡ x®|D ]¦}t|tƒr||  |¡ qbt|tƒr”|  |j¡ qbt|tƒrª|  |¡ qbt|tƒrÀ|  |¡ qb|tkrÔ|  d¡ qb|tkrè|  d¡ qb| jrü|  | |¡ qbtd| ƒ‚qbW |  || ¡ d S )Nz%s\pard\plain%s %s%s z\tab z\line zDon't know how to handle %s)r   rB   Ú
Propertiesr:   rF   r0   r*   r!   r,   r2   rW   rR   Ú
isinstancer   rn   ÚDataZTextÚWriteTextElementZInlineÚWriteInlineElementÚTABÚLINEr"   rp   )r   Zparagraph_elemr9   Ú
tag_suffixÚopeningÚclosingÚ	overridesrr   r   r   r   rk   Ð  s.    




zRenderer.WriteParagraphElementc             C   s   |   |j¡ d S )N)rR   rw   )r   Zraw_elemr   r   r   ro   ÿ  s    zRenderer.WriteRawCodec             C   sŽ   t ƒ }|  |j|¡ |  |j|d¡ |r:|  dt|ƒ ¡ t|jt	ƒrX|  |jpRd¡ n$|jt
krn|  d¡ n|  | |j¡ |rŠ|  d¡ d S )NÚchz{%s r   z\tab rK   )r   rH   ru   r0   r*   rR   rS   rv   rw   r   rz   r"   )r   Z	text_elemr   r   r   r   rx     s     
 zRenderer.WriteTextElementc             C   s¼   t ƒ }|  |j|¡ |  |j|d¡ |r:|  dt|ƒ ¡ xn|D ]f}t|tƒrZ|  |¡ q@t|t	ƒrr|  |j
¡ q@|tkr†|  d¡ q@|tkrš|  d¡ q@|  | |¡ q@W |r¸|  d¡ d S )Nr€   z{%s z\tab z\line rK   )r   rH   ru   r0   r*   rR   rS   rv   r   rn   rw   rz   r{   r"   )r   Zinline_elemr   rr   r   r   r   ry     s"     


 zRenderer.WriteInlineElementc             C   s   |   |p
d¡ d S )Nr   )rR   )r   Útextr   r   r   Ú	WriteText3  s    zRenderer.WriteTextc          
   C   sF  dg|j  }x2|jD ]&\}}|jp(d}g }d}x8|D ]0}| |t|jd ||j … ƒ ¡ ||j7 }q8W |  d¡ tƒ }	|	 |j	pˆdd¡ |	 t
|j ¡ |	 |d¡ |	 |jd¡ |jpÀd}
xÈt|ƒD ]¼\}}|  |j|	d¡ |jsü|jr|| s|	 d	¡ d
||< n|jr$|	 d¡ nd||< x*t|d ||j d ƒD ]}d||< qFW |	 t|j ¡ |	 t|j ¡ |	 || d¡ qÌW |  t|	ƒ¡ x˜|D ]}t|ƒr$t|ƒd }x\t|ƒD ]P\}}t|tƒràt|ƒ}||kr | j|ddddd n| j|dddd qÄW |  d¡ n
|  d¡ q W |  d¡ qW d S )NFr   z{\trowdél   ztrgaph%sztrrh%sztrleft%sZclZclvmgfTZclvmrgr	   zcellx%sz\intblr   )r9   r|   r}   r~   )r9   r}   r~   z\cellz\pard\intbl\cellz\row}
)ZColumnCountZRowsZ
LeftOffsetr   ÚsumZColumnWidthsZSpanrR   r   ZGapBetweenCellsÚTableAlignmentMapr=   rV   r:   rF   ZStartVerticalMergeZVerticalMerger   ÚCellAlignmentMapÚCellFlowMapZFlowrS   rT   rv   r   rj   rk   )r   Z
table_elemZvmergeZheightZcellsr^   ZcellxZcell_idxZcellr'   rA   rc   Z
vmerge_idxZlast_idxZelement_idxrr   r   r   r   rm   6  sR    

"






zRenderer.WriteTableElement)N)r   )r   )r   )r   rs   rt   rK   )r   r   r   r   r)   r0   r4   r:   r%   rB   rH   rX   rR   rN   rO   rP   rQ   rU   rf   rk   ro   rx   ry   r‚   rm   r   r   r   r   r    a   s,   

	

,2
/r    N)NZ
__future__r   Úbuiltinsr   r   Útypesr   r   r   ÚImportErrorÚstrÚlistÚtupleÚcopyr   ZElementsr@   ra   ZLEFTZRIGHTZCENTERZJUSTIFYZ
DISTRIBUTEr<   ZTabPropertySetZDECIMALr>   rl   r…   ZCellZ	ALIGN_TOPZALIGN_CENTERZALIGN_BOTTOMr†   Z
FLOW_LR_TBZ
FLOW_RL_TBZ
FLOW_LR_BTZFLOW_VERTICAL_LR_TBZFLOW_VERTICAL_TB_RLr‡   rb   Z
HORIZONTALZVERTICALZFORWARD_DIAGONALZBACKWARD_DIAGONALZVERTICAL_CROSSZDIAGONAL_CROSSZDARK_HORIZONTALZDARK_VERTICALZDARK_FORWARD_DIAGONALZDARK_BACKWARD_DIAGONALZDARK_VERTICAL_CROSSZDARK_DIAGONAL_CROSSr+   ZDOTSZHYPHENSZ	UNDERLINEZ
THICK_LINEZ
EQUAL_SIGNr?   ZBorderPropertySetZSINGLEZDOUBLEZSHADOWEDZDOUBLEDZDOTTEDZDASHEDZHAIRLINEr1   ZSectionZNONEZCOLUMNZPAGEZEVENZODDri   r   r    r   r   r   r   Ú<module>   s|   









