a
    [Xh,                     @   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_sizeZ
visibilityZvisibleNZtext_decoration_linetext_decoration_colorZ	underlineZoverlineZtext_decoration_thickness)autoz	from-font%d   r   Ztext_underline_offsetr   color)defzline-through)styler   pango_layoutZunderline_thicknessunitvalueZbaselineZascentdraw_text_decorationZunderline_position
position_x
position_yZ	set_colorZ
reactivateZ
begin_textdraw_first_liner   Zend_textdraw_emojisZstrikethrough_thicknessZstrikethrough_positionZ
deactivate)streamtextboxoffset_xtext_overflowblock_ellipsisZtext_decoration_valuesr   	thicknessZratiooffset_yZunderline_offsetxyemojis r0   Y/var/www/viveiro_mudafortebrasil/venv/lib/python3.9/site-packages/weasyprint/draw/text.py	draw_text   s^    





r2   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   Z	transformZdraw)r&   r   r-   r.   r/   imagefontr3   r   r   r   r0   r0   r1   r%   N   s    
r%   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rt|jjtj n|dkrd}n|d	 d
ksJ |d }|jj }||jd rt|dt|jd   |jd }|r|d| }|j||  |j \}	}
|dkr|
rt|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+rd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+rd|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rt;t<|||d   }|| = |j:|< |j>r^t?|j@d|} | rtAB| }!tACd}"tD|!D ]}#|"$|# |!E|# q|!$|" tAjF|!ddd| id tG|!dd| }$|j4| d |jH |  }%}&|$|$||%|&|d	g n|jIrt?|jJd|}'|'rtKLtM|'}(|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   Zhyphenate_characterlang c                    s   g | ]} |  qS r0   r0   ).0iZclustersoffsetr0   r1   
<listcomp>       z#draw_first_line.<locals>.<listcomp>r   i9  <>i  r   Z02xZ04xsvgdefsZusehrefz#glyph)attribpng)Qtextstripr   r   Z&pango_layout_set_single_paragraph_moder   Zlayout	max_widthZpango_layout_set_widthintr
   Zpango_layout_set_ellipsizeZPANGO_ELLIPSIZE_ENDendswithr   lenZset_textZget_first_lineencodeZset_text_matrixvaluesrunsr   ZNULLdatanextglyphs
num_glyphsitemr>   Zlog_clustersrangeZanalysislevelinsertlengthappendr5   Zadd_fontZpango_versionZ	show_textZset_font_sizehashZbitmapglyphZgeometrywidthZPANGO_GLYPH_EMPTYZPANGO_GLYPH_UNKNOWN_FLAGZx_offsetZy_offsetZset_text_riseZwidthsZpango_font_get_glyph_extentsZink_rectZlogical_rectroundr	   ZcmapslicesorteddecoderC   r   Zhb_facer   
fromstringElementlistremove
SubElementr   ZupemrG   Zhb_fontr   openr   r   heightr.   )+r&   r'   r)   r*   matrixrJ   r6   Znew_textZlast_word_end
first_lineindexZ	utf8_textZprevious_pango_fontr8   Z	x_advancer/   runZ
glyph_itemZglyph_stringrS   rT   Zutf8_positionsZ
pango_fontr5   r   r<   Z
glyph_infor\   r]   ZriseZkerningZ
utf8_sliceZsvg_datatreerD   childr4   r3   r   Zpng_dataZpillow_imageZimage_idr   r0   r=   r1   r$   V   s(   









(








r$   c              
   C   s8   t | |j|j| |j|j |j| ||jd ||	 dS )z?Draw text-decoration of ``textbox`` to a ``pdf.stream.Stream``.Ztext_decoration_styleN)r   r"   r#   r]   r   )r&   r'   r(   r,   r+   r   r0   r0   r1   r!     s
    r!   N)__doc__ior   Z	xml.etreer   ZPILr   Zimagesr   r   ri   r   Ztext.ffir	   r
   r   r   Z
text.fontsr   Ztext.line_breakr   Zborderr   r   r   stackr   r2   r%   r$   r!   r0   r0   r0   r1   <module>   s    < 9