a
    ¥Q•h›,  ã                   @   s¼   d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	 ddl
mZ ddlmZmZmZ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„ Zdd„ Zdd„ Zdd„ ZdS )z
Draw text.é    )ÚBytesIO)ÚElementTree)ÚImageé   )ÚRasterImageÚSVGImage)ÚMatrix)Ú
FROM_UNITSÚTO_UNITSÚffiÚpango)Úget_hb_object_data)Úget_last_word_endé   )Ú	draw_line)Ú	get_color)Ústackedc              
   C   s  |j d sJ ‚|j d dkr dS |j d }t|j dƒ}d|v sFd|v rš|j d	 d
v r^|jj}n<|j d	 jdkrŽ|j d	 jd }|j d | }n|j d	 j}d|v rÊ|j|jj |d  }	t| |||	||ƒ d|v �rP|j d dkrî|jj	 }
n>|j d jdk�r |j d jd }|j d | }
n|j d j}
|j|
 |d  }	t| |||	||ƒ |j
|j|j  }}|  |j d ¡ |j |j ¡ |  ¡  t| |||td||d�ƒ}|  ¡  t| |j d |||ƒ d|v �rô|jj}|j|jj }	t| |||	||ƒ |j ¡  dS )z!Draw a textbox to a pydyf stream.Ú	font_sizeÚ
visibilityÚvisibleNÚtext_decoration_lineÚtext_decoration_colorÚ	underlineÚoverlineÚtext_decoration_thickness)Úautoz	from-fontú%éd   r   Útext_underline_offsetr   Úcoloréÿÿÿÿ)ÚdÚeÚfzline-through)Ústyler   Úpango_layoutÚunderline_thicknessÚunitÚvalueÚbaselineÚascentÚdraw_text_decorationÚunderline_positionÚ
position_xÚ
position_yÚ	set_colorÚ
reactivateÚ
begin_textÚdraw_first_liner   Úend_textÚdraw_emojisÚstrikethrough_thicknessÚstrikethrough_positionÚ
deactivate)ÚstreamÚtextboxÚoffset_xÚtext_overflowÚblock_ellipsisZtext_decoration_valuesr   Ú	thicknessÚratioÚoffset_yZunderline_offsetÚxÚyÚemojis© rC   úM/var/www/sistema_ama/venv/lib/python3.9/site-packages/weasyprint/draw/text.pyÚ	draw_text   s^    

ÿ
þ

þÿ
ÿrE   c              	   C   sp   |D ]f\}}}}}	}
t | ƒ�> | j||||	|  ||
 d� | | ||d¡ W d  ƒ q1 s`0    Y  qdS )zDraw list of emojis.)Úar!   r"   r#   N)r   Ú	transformÚdraw)r8   r   r@   rA   rB   ÚimageÚfontrF   r!   r"   r#   rC   rC   rD   r4   N   s    
r4   c           +   	      sX  |j  ¡ sg S |jd dk r g S t |jjd¡ |dksB|dk�r|jjdusRJ ‚|jj}t |jjt	|t
 ƒ¡ |dkrŽt |jjtj¡ n†|dkrœd}n|d	 d
ks¬J ‚|d }|jj }| |jd ¡�rt|dt|jd ƒ … |jd ƒ}|�r|d|… }|j || ¡ |j ¡ \}	}
|dk�r”|
�r”t|jj dt|ƒ … |jd ƒ}|du �rb�q”|jj d|… }|j || ¡ |j ¡ \}	}
�q,|jj  ¡ }| j|jŽ  d}d}d	}g }|	jd	 }|tjk�rJ|j}|j}|j}|j}|j}|jj‰|j‰ ‡ ‡fdd„t|ƒD ƒ}|jj j!d �r<| "d	ˆ|jj# ¡ n| $ˆ|jj# ¡ |jj j%}||k�rº|}|  &|¡\}}t '¡ dk �rŒ|jd }|�rœ|  (|¡ d}|  )|j*|j+�r´dn|¡ |d7 }t|ƒD �]T}|| }|j,}|j-j.}|tj/k�sþ|tj0@ �r|d| | › d�7 }�qÊ|j-j1| ‰|j-j2d }|�rÄ|d dk�rR|dd… }n|d7 }|  (|¡ |  3| ¡ d}ˆ�r‚ˆ › }||j+�ršd|d›d�nd|d›d�7 }|  (|¡ |  3d	¡ d}n4ˆ�rÜ|dˆ › d�7 }||j+�rî|d›n|d›7 }||j4v�r6t 5||| j6| j7¡ t8| j7j.d t9 | ƒ|j4|< t	|j4| ˆ |d t9 |  ƒ}|�rn|d|› d�7 }||j:v�r¤t;t<|||d … ƒŽ }||  =¡ |j:|< |j>�r^t?|j@d|ƒ} | �rtA B| ¡}!tA Cd¡}"tD|!ƒD ]}#|" $|#¡ |! E|#¡ �qÜ|! $|"¡ tAjF|!ddd|› �id� tG|!dd| ƒ}$|j4| d |jH |  }%}&| $|$||%|&|d	g¡ n¦|jI�rt?|jJd|ƒ}'|'�rtK LtM|'ƒ¡}(|j*› |› �})tN|(|)|'ƒ}$|j4| d }&|(j.|(jO |& }%t 5||| j6| j7¡ | j7jP }*|*t9 | | }*| $|$||%|&||*g¡ ||j4| ˆ | d 7 }�qÊ|d dk�r>|dd… }n|d7 }�qÆ|  (|¡ |S ) z;Draw the given ``textbox`` line to the document ``stream``.r   g�íµ ÷Æ°>TÚellipsisÚnoneNr   u   â€¦r   Ústringr   Úhyphenate_characterÚlangÚ c                    s   g | ]}ˆˆ |  ‘qS rC   rC   )Ú.0Úi©ZclustersÚoffsetrC   rD   Ú
<listcomp>š   ó    z#draw_first_line.<locals>.<listcomp>r   iÒ9  ú<ú>iè  r    Ú02xZ04xÚsvgÚdefsÚuseÚhrefz#glyph)ÚattribÚpng)QÚtextÚstripr$   r   Z&pango_layout_set_single_paragraph_moder%   ÚlayoutÚ	max_widthÚpango_layout_set_widthÚintr
   Zpango_layout_set_ellipsizeZPANGO_ELLIPSIZE_ENDÚendswithr   ÚlenÚset_textÚget_first_lineÚencodeÚset_text_matrixÚvaluesÚrunsr   ÚNULLÚdataÚnextÚglyphsÚ
num_glyphsÚitemrT   Zlog_clustersÚrangeZanalysisÚlevelÚinsertÚlengthÚappendrJ   Zadd_fontZpango_versionÚ	show_textÚset_font_sizeÚhashZbitmapÚglyphZgeometryÚwidthZPANGO_GLYPH_EMPTYZPANGO_GLYPH_UNKNOWN_FLAGZx_offsetZy_offsetÚset_text_riseÚwidthsZpango_font_get_glyph_extentsZink_rectZlogical_rectÚroundr	   ÚcmapÚsliceÚsortedÚdecoderZ   r   Zhb_facer   Ú
fromstringÚElementÚlistÚremoveÚ
SubElementr   Zupemr_   Zhb_fontr   Úopenr   r   ÚheightrA   )+r8   r9   r;   r<   Úmatrixrc   rK   Únew_textZlast_word_endÚ
first_lineÚindexZ	utf8_textZprevious_pango_fontrM   Ú	x_advancerB   ÚrunZ
glyph_itemZglyph_stringrq   rr   Zutf8_positionsÚ
pango_fontrJ   r   rR   Z
glyph_infor|   r}   ÚriseZkerningZ
utf8_sliceZsvg_dataÚtreer[   ÚchildrI   rF   r!   Úpng_dataÚpillow_imageÚimage_idr#   rC   rS   rD   r2   V   s(   
ÿ
ÿþ
þ





ÿ
(

ÿÿ
ÿ



ÿþ

r2   c              
   C   s8   t | |j|j| |j|j |j| ||jd ||ƒ	 dS )z?Draw text-decoration of ``textbox`` to a ``pdf.stream.Stream``.Útext_decoration_styleN)r   r-   r.   r}   r$   )r8   r9   r:   r?   r=   r   rC   rC   rD   r+     s
    ýr+   N)Ú__doc__Úior   Ú	xml.etreer   ÚPILr   Úimagesr   r   rŒ   r   Ztext.ffir	   r
   r   r   Ú
text.fontsr   Útext.line_breakr   Úborderr   r   r   Ústackr   rE   r4   r2   r+   rC   rC   rC   rD   Ú<module>   s    < 9