o
    Zh0h,                     @   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 s#d|v rM|j d	 d
v r/|jj}n|j d	 jdkrG|j d	 jd }|j d | }n|j d	 j}d|v re|j|jj |d  }	t| |||	|| d|v r|j d dkrv|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_ellipsistext_decoration_valuesr   	thicknessratiooffset_yunderline_offsetxyemojis rE   J/var/www/html/rh/venv/lib/python3.10/site-packages/weasyprint/draw/text.py	draw_text   s^   



rG   c              	   C   sp   |D ]3\}}}}}	}
t |  | j||||	|  ||
 d || ||d W d   n1 s0w   Y  qdS )zDraw list of emojis.)ar!   r"   r#   N)r   	transformdraw)r8   r   rB   rC   rD   imagefontrH   r!   r"   r#   rE   rE   rF   r4   N   s   
r4   c           +   	      sP  |j  sg S |jd dk rg S t|jjd |dks |dkr|jjdus(J |jj}t|jjt	|t
  |dkrFt|jjtj nA|dkrMd}n|d	 d
ksUJ |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 rn|jj d| }|j||  |j \}	}
|
s|jj  }| j|j  d}d}d	}g }|	jd	 }|tjkr!|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rV|}| &|\}}t' dk r?|jd }|rG| (| d}| )|j*|j+rSdn| |d7 }t|D ]}|| }|j,}|j-j.}|tj/ksx|tj0@ r|d| |  d7 }q^|j-j1| |j-j2d }|r|d dkr|dd }n|d7 }| (| | 3|  d}r  }||j+rd|ddnd|dd7 }| (| | 3d	 d}nr|d  d7 }||j+r|dn|d7 }||j4vrt5||| j6| j7 t8| j7j.d t9 | |j4|< t	|j4|  |d t9 |  }|r0|d| d7 }||j:vrKt;t<|||d   }|| = |j:|< |j>rt?|j@d|} | rtAB| }!tACd}"tD|!D ]}#|"$|# |!E|# qg|!$|" tAjF|!ddd| id tG|!dd| }$|j4| d |jH |  }%}&|$|$||%|&|d	g nS|jIrt?|jJd|}'|'rtKLtM|'}(|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 }|tjks| (| |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 rE   rE   ).0iclustersoffsetrE   rF   
<listcomp>   s    z#draw_first_line.<locals>.<listcomp>r   i9  <>i  r    02x04xsvgdefsusehrefz#glyph)attribpng)Qtextstripr$   r   &pango_layout_set_single_paragraph_moder%   layout	max_widthpango_layout_set_widthintr
   pango_layout_set_ellipsizePANGO_ELLIPSIZE_ENDendswithr   lenset_textget_first_lineencodeset_text_matrixvaluesrunsr   NULLdatanextglyphs
num_glyphsitemrW   log_clustersrangeanalysislevelinsertlengthappendrL   add_fontpango_version	show_textset_font_sizehashbitmapglyphgeometrywidthPANGO_GLYPH_EMPTYPANGO_GLYPH_UNKNOWN_FLAGx_offsety_offsetset_text_risewidthspango_font_get_glyph_extentsink_rectlogical_rectroundr	   cmapslicesorteddecoder]   r   hb_facer   
fromstringElementlistremove
SubElementr   upemrb   hb_fontr   openr   r   heightrC   )+r8   r9   r;   r<   matrixrg   rM   new_textlast_word_end
first_lineindex	utf8_textprevious_pango_fontrO   	x_advancerD   run
glyph_itemglyph_stringrw   rx   utf8_positions
pango_fontrL   r   rT   
glyph_infor   r   risekerning
utf8_slicesvg_datatreer^   childrK   rH   r!   png_datapillow_imageimage_idr#   rE   rU   rF   r2   V   s.  








(









z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   rE   rE   rF   r+     s
   r+   N)__doc__ior   	xml.etreer   PILr   imagesr   r   r   r   text.ffir	   r
   r   r   
text.fontsr   text.line_breakr   borderr   r   r   stackr   rG   r4   r2   r+   rE   rE   rE   rF   <module>   s"    < 9