a
    Qh,                     @   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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   hyphenate_characterlang c                    s   g | ]} |  qS rC   rC   ).0iZclustersoffsetrC   rD   
<listcomp>       z#draw_first_line.<locals>.<listcomp>r   i9  <>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