
    ,g,                         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 Zd Zd Zd Zy)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                    |j                   d   sJ |j                   d   dk7  ry|j                   d   }t        |j                   d      }d|v sd|v r|j                   d	   d
v r|j                  j                  }nd|j                   d	   j                  dk(  r/|j                   d	   j
                  dz  }|j                   d   |z  }n|j                   d	   j
                  }d|v r9|j                  |j                  j                  z
  dz  z   }	t        | |||	||       d|v r|j                   d   dk(  r|j                  j                   }
nd|j                   d   j                  dk(  r/|j                   d   j
                  dz  }|j                   d   |z  }
n|j                   d   j
                  }
|j                  |
z   dz  z   }	t        | |||	||       |j                  |j                  |j                  z   }}| j                  |j                   d          |j                  j                  |j                          | j                          t        | |||t!        d||            }| j#                          t%        | |j                   d   |||       d|v rI|j                  j&                  }|j                  |j                  j(                  z
  }	t        | |||	||       |j                  j+                          y)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emojiss                 l/home/viktor/gitlab-persoonlijk/factuur-applicatie/venv/lib/python3.12/site-packages/weasyprint/draw/text.py	draw_textrH      s    ==%%% }}\"i/ %]]+AB%gmm5LM,,
>T0T==459NN,,@@I]]67<<CMM"=>DDsJEk2U:I&ABHHI++w33:::Y]J 	GXx!	# ,,==01V;!(!5!5!H!HH]]2388C?MM"9:@@3FE&}}[9EA&}}-DEKK##&66QFGXx!	#
 w11G4D4DDqA
W]]7+,##GMM2
qA8NPF
OO k2Aq&A //((@@	##g&:&:&Q&QQGXx<Q	S##%    c           	          |D ]O  \  }}}}}	}
t        |       5  | j                  ||||	|z  z   ||
z          |j                  | ||d       ddd       Q y# 1 sw Y   \xY w)zDraw list of emojis.)ar#   r$   r%   N)r   	transformdraw)r:   r   rD   rE   rF   imagefontrK   r#   r$   r%   s              rG   r6   r6   N   su    #) ;tQ1aV_ 	;qAQ]):a!eDJJvy)T:	; 	;;	; 	;s   3AA	c           	         |j                   j                         sg S |j                  d   dk  rg S t        j                  |j
                  j                  d       |dk(  s|dk7  rI|j
                  j                  J |j
                  j                  }t        j                  |j
                  j                  t        |t        z               |dk(  r9t        j                  |j
                  j                  t        j                         n|dk(  rd}n|d	   d
k(  sJ |d   }|j
                  j                   }|j                  |j                  d         r:t        |dt        |j                  d           |j                  d         }|r|d| }|j
                  j!                  ||z          |j
                  j#                         \  }	}
|dk7  r|
rt        |j
                  j                   dt                |j                  d         }|nW|j
                  j                   d| }|j
                  j!                  ||z          |j
                  j#                         \  }	}
|
r|j
                  j                   j%                         } | j&                  |j(                    d}d}d	}g }|	j*                  d	   }|t,        j.                  k7  r|j0                  }|j2                  }|j4                  }|j4                  }|j6                  }|j8                  j:                  }|j<                  }t?        |      D cg c]
  }|||   z    }}|j8                  j@                  jB                  dz  r*|jE                  d	||j8                  jF                  z          n(|jI                  ||j8                  jF                  z          |j8                  j@                  jJ                  }||k7  r{|}| jM                  |      \  }}t        jN                         dk  r|j                  d   }|r| jQ                  |       d}| jS                  |jT                  |jV                  rdn|       |dz  }t?        |      D ]/  }||   }|jX                  }|jZ                  j\                  }|t        j^                  k(  s|t        j`                  z  r|d| z   dz  }_|jZ                  jb                  z  }|jZ                  jd                  dz  }|r|d   dk(  r|dd }n|dz  }| jQ                  |       | jg                  |        d}|r|  }|jV                  rd|ddnd|ddz  }| jQ                  |       | jg                  d	       d}n#|r
|d|  dz  }|jV                  r|dn|dz  }||jh                  vret        jj                  ||| jl                  | jn                         tq        | jn                  j\                  dz  tr        z  |z        |jh                  |<   t        |jh                  |   |z   |dz  tr        z  |z  z
        } | r	|d|  dz  }||jt                  vr7tw        ty        |||dz           }!||!   j{                         |jt                  |<   |j|                  rt        |j                  d|      }"|"rt        j                  |"      }#t        j                  d      }$t        |#      D ]$  }%|$jI                  |%       |#j                  |%       & |#jI                  |$       t        j                  |#ddd| i       t        |#dd|       }&|jh                  |   dz  |j                  z  |z  x}'}(|jI                  |&||'|(|d	g       n|j                  rt        |j                  d|      })|)rt        j                  t        |)            }*|jT                   | }+t        |*|+|)      }&|jh                  |   dz  }(|*j\                  |*j                  z  |(z  }'t        jj                  ||| jl                  | jn                         | jn                  j                   },|,tr        z  |z  |z
  },|jI                  |&||'|(||,g       ||jh                  |   |z   | z
  dz  z  }2 |d   dk(  r|dd }n|dz  }|t,        j.                  k7  r| jQ                  |       |S c c}w )z;Draw the given ``textbox`` line to the document ``stream``.r   gư>TellipsisnoneNr   u   …r   stringr   hyphenate_characterlang 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itemoffsetlog_clustersrangeanalysislevelinsertlengthappendrO   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   upemr`   hb_fontr   openr   r   heightrE   )-r:   r;   r=   r>   matrixre   rQ   new_textlast_word_end
first_lineindex	utf8_textprevious_pango_fontrS   	x_advancerF   run
glyph_itemglyph_stringru   rv   rx   clustersiutf8_positions
pango_fontrO   r   
glyph_infor   r   risekerning
utf8_slicesvg_datatreer\   childrN   rK   r#   png_datapillow_imageimage_idr%   s-                                                rG   r4   r4   V   s    <<	}}[!D(		001E1E1L1LdS
"n&>##--999((22	$$  ''Y-A)B	DJ&,,$$++U-F-FH ' %a(H444)!, ++00H  /D!EF 1Hs7==1F#GHHIMM&)!+ !'7H  ))(X*=>,,;;=J-$$))/CM>:f%'M $++00-@H  ))(X*=> ' 4 4 C C EJ  $$))002IFFMM*FIF
//!
C
/XX
hh!(($$!,,
'',, 9>j8IJ1&8A;.JJ??##))A-!!!Vjoo.D.D%DE!!&:??+A+A"AB__--22
,,",$ooj9OD) ""$u,#MM+6	   (F  A)L#z" P	HAJ$$E''--E000E:::Aufy0133((11I=F&&//$6D":$#CR[FcMF  ($$dU+!'yFdkkAeC[*5+Q?OO  ($$Q'6'!n,FDKKU3Kc{K DKK'22v8K8KM%*''--4zAIM&OE" E"V+edlZ.G).SSUGAgYa.( DII%"F>!AaC+@$AB
#,Z#8#?#?#A		%  xx-dllE5I '11(;D&..v6D!%d +E*E*+ KK%**eVveW5E,FH$T4v>E KK.5		AIMMAMM5$1i"CD-dllE5I#(::gh.?#@L"&))UG4H'hIEE*T1A$**\-@-@@1DA66"E6??++-  ,,...AJ2Y>AMM5$1i"CD$++e,v5?4GGIaP	Hf ":CR[FcMFo /t VMc Ks   :cc                     t        | |j                  |j                  |z   |j                  |j                  z   |j                  |z   ||j                  d   ||	       y)z?Draw text-decoration of ``textbox`` to a ``pdf.stream.Stream``.text_decoration_styleN)r   r/   r0   r   r&   )r:   r;   r<   rB   r@   r!   s         rG   r-   r-     sU    ""G$6$6$AW]]*G,>,>,I7==!895(LrI   N)__doc__ior   	xml.etreer   PILr   imagesr   r   r   r	   text.ffir
   r   r   r   
text.fontsr   text.line_breakr   borderr   r!   r   stackr   rH   r6   r4   r-    rI   rG   <module>r      sD      !  *  7 7 + /   9&x;upLrI   