
    Bh`                         S r SSKrSSKJr  SSKrSSKJrJrJr  SSK	J
r
JrJ	r	JrJrJrJr  SSKJrJr  S r SS	 jr " S
 S5      rS r SS jrS rS rS rS rS rg)z!Decide where to break text lines.    N)inf   )
LST_TO_ISOPANGO_DIRECTIONPANGO_WRAP_MODE)
FROM_UNITSTO_UNITSffigobjectpangopangoft2unicode_to_char_p)font_featuresget_font_descriptionc                    [         R                  " S5      n[        R                  " U [         R                  U5        UR
                  [        -  nUR                  [        -  n[         R                  " U5        US   S:w  a  X1S   -  nX44$ )zkGet logical width and height of the given ``line``.

``style`` is used to add letter spacing (if needed).

zPangoRectangle *letter_spacingnormal)	r
   newr   pango_layout_line_get_extentsNULLwidthr   heightrelease)linestylelogical_extentsr   r   s        L/var/www/html/env/lib/python3.13/site-packages/weasyprint/text/line_break.py	line_sizer      sy     gg01O	''chhH!!J.E##j0FKK (*'((=    c                    U R                   nU(       a  U[        UR                  5       5      -  nOU(       a  [        R                  " UR
                  S5        UR                  5       S U R                  5       n	U(       a  U	R                  S5      n	UR                  U	5        UR                  5       u  p
U b  U R                   OSn[        X5      u  p[        R                  " UR
                  5      [        -  nUR                  5         X(X;X4$ )N r   )lengthlenencoder   pango_layout_set_widthlayoutdecoderstripset_textget_first_liner   pango_layout_get_baseliner   
deactivate)
first_linetextr'   	resume_atspace_collapser   
hyphenatedhyphenation_characterr#   first_line_text_r   r   baselines                 r   first_line_metricsr7      s    F#+22455	 	$$V]]B7 ++-0779 -44S9O(--/
&0&<""!j0ME..v}}=
JH
9V==r   c                   N    \ rS rSrSr  SS jrS rS rSS jrS r	S	 r
S
 rSrg)Layout9   z2Object holding PangoLayout-related cdata pointers.Nc                 >    X0l         U R                  X5        X@l        g N)justification_spacingsetup	max_width)selfcontextr   r=   r?   s        r   __init__Layout.__init__;   s    %:"

7""r   c                 h   Xl         X l        SU l        Uc9  [        R                  " [
        R                  " 5       [        R                  5      nOUR                  R                  n[        R                  " [        R                  " U5      [        R                  5      n[        R                  " US5        [        R                  " U[        US      5        US   S:w  a7  [!        ["        R$                  " US   R'                  5       US   5      5      u  pVO7US   (       a  [!        US   5      u  pVOS n[        R(                  " 5       U l        U(       a;  [        R,                  " W5      U l        [        R.                  " X@R*                  5        [1        US   [2        5      (       a   S5       e[5        U5      n[        R                  " [        R6                  " U5      [        R                  5      U l        [        R:                  " U R8                  S5        [        R<                  " U R8                  U5        US	   nUS
:w  a  [        R                  " [        R>                  " XGU R*                  5      [        R@                  5      n	[B        [        RD                  " U	5      -  U l#        [B        [        RH                  " U	5      -  U l%        [B        [        RL                  " U	5      -  U l'        [B        [        RP                  " U	5      -  U l)        [B        [        RT                  " U	5      -  U l+        OS U l#        S U l%        S U l'        [Y        US   US   US   US   US   US   US   US   5      n
U
(       a  U(       a  SR[                  S U
R]                  5        5       5      R_                  5       n
URX                  Ra                  U
[        Rb                  " U
5      5      n[        Rd                  " 5       n[        Rf                  " X5        [        Rh                  " U R8                  U5        g g g )Nr   F	directionfont_language_overrider   langfont_familyzfont_family should be a listtext_decoration_linenonefont_kerningfont_variant_ligaturesfont_variant_positionfont_variant_capsfont_variant_numericfont_variant_alternatesfont_variant_east_asianfont_feature_settings,c              3   4   #    U  H  u  pU S U 3v   M     g7f)r"   N ).0keyvalues      r   	<genexpr>Layout.setup.<locals>.<genexpr>   s"       E3CZS3%q 3Cs   )5rA   r   first_line_directionr
   gcr   pango_ft2_font_map_newr   g_object_unreffont_configfont_mapr   pango_font_map_create_context'pango_context_set_round_glyph_positionspango_context_set_base_dirr   r   r   getlowerpango_language_get_defaultlanguagepango_language_from_stringpango_context_set_language
isinstancestrr   pango_layout_newr'   pango_layout_set_auto_dir!pango_layout_set_font_descriptionpango_context_get_metricspango_font_metrics_unrefr   pango_font_metrics_get_ascentascent)pango_font_metrics_get_underline_positionunderline_position-pango_font_metrics_get_strikethrough_positionstrikethrough_position*pango_font_metrics_get_underline_thicknessunderline_thickness.pango_font_metrics_get_strikethrough_thicknessstrikethrough_thicknessr   joinitemsr%   
setdefaultpango_attr_font_features_newpango_attr_list_newpango_attr_list_insertpango_layout_set_attributes)r@   rA   r   r`   pango_contextlang_prG   font_descriptiontext_decorationmetricsfeaturesattr	attr_lists                r   r>   Layout.setupA   s   
$%!?vv//173I3IKH **33H//9""$ 	55mUK((?5+=>	@ )*h6,Z^^./557./.1 2LFD 6],U6];LFDD!<<>DM!<<VDDM,,]MMJeM2C88 	,*	,8/6ff""=1""$ 	''U;//=MN 67f$ff//!T]]D..0G %33G<>DK&0??H'JD#*4CCGL+ND''1@@I(KD$+5DDWM,OD( DK&*D#*.D' .!5)A#B)*E2E,F()51J+K+,e4K.L	N
 xx  E3;>>3C E EEKVX  ((33%<<XFHD113I((9--dkk9E  8r   c                     [         R                  " U R                  S5      n[         R                  " U R                  S5      nU[        R                  :X  a  S OUR
                  nUR                  U l        X4$ )Nr   r   )r   pango_layout_get_line_readonlyr'   r
   r   start_indexresolved_dirr[   )r@   r.   second_lineindexs       r   r+   Layout.get_first_line   s]    99$++qI
::4;;J#sxx/[5L5L$.$;$;!  r   c                   ^ UR                  S5      nUS:w  a  US US-    nXl        [        U5      u  p[        R                  " U R
                  US5        U R                  S   nU(       a  XPR                  -  nU R                  S   nUS:X  a  SnU R                  S   S	;   nU R                  (       Ga  U(       d  U(       d  U(       Ga  [        R                  " U R
                  5      mT[        R                  :X  a8  [        R                  " [        R                  " 5       [        R                  5      mU4S
 jnU(       a%  [        U[        -  5      nU" S[!        U5      U5        U(       a  US:X  a@  SU l        [        U R                  5      u  p[        R                  " U R
                  US5        [        U[        -  U-   5      n	S[!        U5      S-
  4n
["        R$                  " SR'                  5       U5       HA  nSUR)                  5       U
;   -   nU" UR)                  5       UR+                  5       X-  5        MC     U(       aE  [        R,                  " S5      nS[!        U5      sUl        Ul        [        R2                  " TU5        [        R4                  " U R
                  T5        SU;   a  U R7                  5         g g )N
r!      word_spacingr   r   r   overflow_wrap)anywhere
break-wordc                 |   > [         R                  " U5      nXsUl        Ul        [         R                  " TU5        g r<   )r   pango_attr_letter_spacing_newr   	end_indexpango_attr_list_change)startendspacingr   r   s       r   add_attr!Layout.set_text.<locals>.add_attr   s2    ::7C380 $.,,Y=r       u    ​r   u    | F   	)findr/   r   r   pango_layout_set_textr'   r   r=   pango_layout_get_attributesr
   r   r\   r   pango_attr_list_unrefintr	   r$   refinditerr%   r   r   pango_attr_insert_hyphens_newr   r   r   r   set_tabs)r@   r/   justifyr   
bytestringr   r   word_breakingr   space_spacingboundary_positionsmatchfactorr   r   s                 @r   r*   Layout.set_text   s8   		$B;q>D	,T2##DKKr:zz.1 666L$45X%N JJ'+EE 	 999,.M99$++FICHH$FF--///1	>
 !$^h%>!?C
O^<% )DI'8'C$D//T2F #L8$;n$L M&'Z1)<%="[[):):)<jIE%++-3E"EFFU[[]EIIK9OP J ::5A34c*o0 $.,,Y=--dkk9E JMMO r   c           	      v   [        U R                  S   [        5      (       a  [        U R                  U R                  U R
                  5      nUR                  SU R                  S   -  5        UR                  5       u  p#[        X R                  5      u  pC[        U5      nO"[        U R                  S   R                  5      n[        R                  " [        R                  " SS[        R                  U=(       d    S5      [        R                   5      n[        R"                  " U R$                  U5        g )Ntab_sizer"   r   T)rj   r   r   r9   rA   r=   r*   r+   r   roundrX   r
   r\   r   "pango_tab_array_new_with_positionsPANGO_TAB_LEFTpango_tab_array_freepango_layout_set_tabsr'   )r@   r'   r   r5   r   arrays         r   r   Layout.set_tabs   s    djj,c22djj$*D*DFFOOC$**Z"889++-GD zz2HE%LE

:.445E444--uz;&&( 	##DKK7r   c                     U ? U ?U ?g r<   )r'   rg   r   )r@   s    r   r-   Layout.deactivate   s    K
r   c                 p    U R                  U R                  U5        U R                  U R                  SS9  g )NT)r   )r>   rA   r*   r/   )r@   r   s     r   
reactivateLayout.reactivate   s(    

4<<'dii.r   )rr   rA   r[   r=   rg   r'   r?   rv   rz   r   r/   rt   rx   )r   N)F)__name__
__module____qualname____firstlineno____doc__rB   r>   r+   r*   r   r-   r   __static_attributes__rU   r   r   r9   r9   9   s2    <=>#IFV!=~8"3/r   r9   c           	          [        X!XC5      nUS   S;   nUbH  U(       aA  US:  a;  [        R                  " UR                  [	        [        SU5      [        -  5      5        UR                  U 5        U$ )z=Return an opaque Pango layout with default Pango line-breaks.white_spacer   zpre-wrappre-linei    r   )r9   r   r&   r'   r   maxr	   r*   )r/   r   rA   r?   r=   r'   	text_wraps          r   create_layoutr      sf    G$9EF m$(JJIy7/B$$V]]CAy8IH8T4UV
OODMr   c                    US   S;   nUS   S;   nUn	U(       d  SnSn
U nUGb&  U[         :w  Ga  US   (       Ga  US   U
-  U:  a   U R                  S5      nUS:w  a  U SUS	-    nOU S[        X1S   -  U
-  5       n[        XX#U5      nUR	                  5       u  pUc+  X:w  a&  U nUR                  U 5        UR	                  5       u  pOUR                  5       SU R                  5       nUU:w  aY  [        U5      S
-   [        U5      nn[        R                  " UR                  [        R                  5      UU n[        U5      b  Un O[        XX)U5      nUR	                  5       u  pUc  [        XXX5      $ [!        X5      u  nnUc  UU::  a  [        XXX5      $ UU::  a7  U R                  5       nUSU R                  5       nUUS R                  5       nOSnU nUU:X  a  SnOl[        R                  " UR                  [        R                  5      n[        U5      S
-   [        U5      nnUUU n[        U5      nUb  U[        U5      S
-   -  nUSU R#                  S5      nU(       a  U(       a  UU=(       d    S   S:X  a  UU-   nUR                  U5        UR	                  5       u  pUc^  U(       a)  [        UR                  5       5      S
-   n[        XXX5      $ UR$                  S
-   nU[        U R                  5       5      :  a  SnOU(       a  [        XXX5      $ US   nUS   =(       a    [&        R(                  " US   5      nUS   u  nn n!Sn"Sn#S=n$n%US:w  a  U#UU-   ;   n%US:X  a  U(       a~  [+        UU5      n&U&(       ak  U&u  n'n(UU'U( nU(U'-
  U:  aX  [!        X5      u  nnUU-
  n)US   R,                  S:X  a  X1S   R.                  -  S-  n*OUS   R.                  n*U)U*:  d  U)S:  a  Sn$U%(       az  UR1                  U#5      (       a  SUnn[2        R4                  " U#U5       V+s/ s H  n+U+R7                  5       PM     n,n+U,R9                  5         U, V-s/ s H  n-USU-S
-    PM     n.n-Sn'OyU$(       ap  UU U!U4n/UR:                  R=                  U/5      n0U0c%  [&        R>                  " UU U!S9n0U0UR:                  U/'   U0RA                  U5       VVs/ s H  u  nnUPM
     n.nnO/ n.U.(       Ga2  U. H  n1UUSW' -   U1-   nUUS   -   n2[        U2XUU5      n3U3R	                  5       u  n4n5[!        U4U5      u  n6nUU6-
  n7U5SL =(       a    U7S:  =(       d    U1U.S   :H  n"U"(       d  Ms  U3nU4n[        UR                  5       5      n  O   U"(       d  U(       d  Sn"UR                  W25        [        RB                  " UR                  S5        UR	                  5       u  nn[        WR                  5       5      nU [        U5         U#:X  a  U[        U#R                  5       5      -  nU"(       d~  UR1                  U#5      (       ah  Sn"UUS   -   n2UR                  U25        [        RB                  " UR                  S5        UR	                  5       u  nn[        UR                  5       5      nUS   n8[!        X5      u  nnUU-
  n)US   S:H  =(       d(    U=(       a    U8S:H  =(       d    U8S:H  =(       a    U(       + n9U)S:  a  U9(       a  Sn"UR                  U 5        [        RB                  " UR                  [        U[D        -  5      5        [        RF                  " UR                  [H        S   5        UR	                  5       u  nn5U5=(       d    UR$                  nU[        U R                  5       5      :  a  Sn[        XXXU"US   5      $ s  sn+f s  sn-f s  snnf ) a|  Fit as much as possible in the available width for one line of text.

Return ``(layout, length, resume_index, width, height, baseline)``.

``layout``: a pango Layout with the first line
``length``: length in UTF-8 bytes of the first line
``resume_index``: The number of UTF-8 bytes to skip for the next line.
                  May be ``None`` if the whole text fits in one line.
                  This may be greater than ``length`` in case of preserved
                  newline characters.
``width``: width in pixels of the first line
``height``: height in pixels of the first line
``baseline``: baseline in pixels of the first line

r   r   )r   nowrapr   N   	font_sizer"   r!   r   r    hyphensrG   hyphenate_limit_charsF   ­rJ   autohyphenate_limit_zone%d   r   T)rG   leftrighthyphenate_characterr   
word_breakz	break-allr   r   	WRAP_CHAR)%r   r   r   r   r+   r*   r%   r(   r$   r   #pango_layout_get_log_attrs_readonlyr'   r
   r   get_next_break_pointr7   r   r)   r#   pyphenlanguage_fallbackget_next_word_boundariesunitrX   endswithr   r   r   reversedictionariesrd   Pypheniterater&   r	   pango_layout_set_wrapr   ):r/   r   rA   r?   r=   is_line_startminimumr   r1   original_max_widthratio
short_textspace_indexr'   r.   resume_indexr4   r   r   text_end_log_attrsfirst_line_widthr5   encoded_textsecond_line_textbreak_point	log_attrssecond_line_log_attrs	next_wordnew_first_line_textr   rG   totalr   r   r2   soft_hyphenauto_hyphenationmanual_hyphenationnext_word_boundaries
start_word	stop_wordspace
limit_zoner   soft_hyphen_indexesidictionary_iterationsdictionary_key
dictionaryfirst_word_parthyphenated_first_line_text
new_layoutnew_first_liner   new_first_line_width	new_spacer   	can_breaks:                                                             r   split_first_liner     s   $ m$(JJI=)-MMN"	 EJc!1eK6H6H %	1 ))C.Kb !.;q=1
 Js9[/A#AE#IJKJw3HJ#)#8#8#: 
J$6 JOOD!'-'<'<'>$J )//1-<@GGIO*, 1A5s:s%*%N%NMM388&--23&8"'(:;G%D6KM#)#8#8#: 
 !fNK 	K#J6a 0I =!fNK 	K 9${{}&}5<<>'6==? *$ ==fmmSXXV	)A-s:s )% 4*+@A"3/!33K +.55c:I.{/@bASH #2I"=OO/0'-'<'<'>$J#"#&':'A'A'C#Dq#HL-"&W W $.#4#4q#8L#s4;;='99'+	 "fNK 	K IG=DV55eFmDD67E4JK,11)&(O>N,NN&T78H$O$8!J	(I>I:%.&/
&B# !!$44/055<!*@$A$G$GG#M  "''=!>!D!DJ:% (,$  ##K0002O-O'){{;@P'QS'QeEKKM'Q 	 S##%AT UATA!1$1Q3!7AT U
	eU3))--n=
Dt5IJ3=G  0$.$6$6y$A!C$AjeSE$A 	 !C !#4O *-.   
 $e,A&BB '&*EI%'J %/$=$=$?!NE&/&F# !!$88I$ PQN/5J25N"N z#+
"#6#=#=#?@'  5* / JOO67((;"113MJ299;<LC()[8K$6$6$8 99/22;?? 
e$9:: 	#23$$V]]B7--/
A?1134 /*M#J6a((E 	l{* 	B A+ @,.>w;	 
 qyY
 	$$V]]C	H8L4MN##FMM?;3OP"113
E1
 1 13t{{}--L&E/02 2oS !V!Cs   3_#__c                 x   U(       a  [        U5      u  p!OS n[        R                  " 5       nU(       a  [        R                  " W5      nS H  nU R	                  US5      n M     [        U 5      u  pV[        U 5      S-   n[        R                  " SU5      n[        R                  " U[        U5      SWX5        U$ )N)u   ‪u   ‫u   ‬u   ‭u   ‮u   ​r   zPangoLogAttr[]r!   )	r   r   rf   rh   replacer$   r
   r   pango_get_log_attrs)	r/   rG   r   rg   chartext_pr   r#   r   s	            r   get_log_attrsr    s    (.33533F;B||D(+ C*40FY]F(&1I	JXyBr   c                 V    [        U 5       H  u  pUR                  (       d  M  Us  $    g r<   )	enumerateis_line_break)r   r  r   s      r   r   r     s$    Y'H (r   c                     U (       a  [        U 5      S:  a  g [        X5      n[        U 5      S-   n[        USUS-
   5      S L$ )Nr   r   )r$   r  r   )r/   rG   r   r#   s       r   can_break_textr    sD    3t9q=d)IY]F	!F1H 56dBBr   c                     U (       a  [        U 5      S:  a  g [        X5      n[        U5       H2  u  p4UR                  (       a  Un  WU4$ UR                  (       d  M0  UnM4     g )Nr   )r$   r  r  is_word_endis_word_boundary)r/   rG   r   r  r   word_end
word_starts          r   r   r     sc    3t9q=d)IY'H
 x	    J ( r   c                     U (       a  [        U 5      S:  a  g [        X5      n[        [        U5      S S S2   5       H/  u  p4U(       d  M  UR                  (       d  M!  [        U 5      U-
  s  $    g )Nr   r!   )r$   r  r  listr  )r/   rG   r   r  r   s        r   get_last_word_endr%  (  sX    3t9q=d)IT)_TrT231!!!t9q=  4r   )FN)TF)r   r   mathr   r   	constantsr   r   r   r
   r   r	   r   r   r   r   fontsr   r   r   r7   r9   r   r  r  r   r  r   r%  rU   r   r   <module>r)     sl    ' 	   C C W W W 6" GK>8o/ o/d 27|2~&C !r   