o
    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 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_colorc              
   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 rD   V/var/www/html/optinet_system/venv/lib/python3.10/site-packages/weasyprint/draw/text.py	draw_text   s^   



rF   c              	   C   sp   |D ]3\}}}}}	}
|    | j||||	|  ||
 d || ||d W d   n1 s0w   Y  qdS )zDraw list of emojis.)ar    r!   r"   N)stacked	transformdraw)r7   r   rA   rB   rC   imagefontrG   r    r!   r"   rD   rD   rE   r3   M   s   
r3   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 rD   rD   ).0iclustersoffsetrD   rE   
<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   heightrB   )+r7   r8   r:   r;   matrixrg   rM   new_textlast_word_end
first_lineindex	utf8_textprevious_pango_fontrO   	x_advancerC   run
glyph_itemglyph_stringrw   rx   utf8_positions
pango_fontrL   r   rT   
glyph_infor   r   risekerning
utf8_slicesvg_datatreer^   childrK   rG   r    png_datapillow_imageimage_idr"   rD   rU   rE   r1   U   s.  








(









zr1   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#   )r7   r8   r9   r?   r=   r   rD   rD   rE   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   rF   r3   r1   r*   rD   rD   rD   rE   <module>   s     < 9