+
    	im                         R t ^ RIt^ RIHt ^ RIt^RIHtHtHt ^RI	H
t
HtH	t	HtHtHt ^RIHtHt R tRR lt ! R R	4      tR
 tRR ltRR ltR tR tR tR tR tR tR tR tR# )z!Decide where to break text lines.N)inf)
LST_TO_ISOPANGO_DIRECTIONPANGO_WRAP_MODE)
FROM_UNITSTO_UNITSffigobjectpangounicode_to_char_p)font_featuresget_font_descriptionc                B   \         P                  ! R4      p\        P                  ! V \         P                  V4       VP
                  \        ,          pVP                  \        ,          p\         P                  ! V4       VR,          R8w  d   W1R,          ,          pW43# )zkGet logical width and height of the given ``line``.

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

PangoRectangle *letter_spacingnormal)	r   newr
   pango_layout_line_get_extentsNULLwidthr   heightrelease)linestylelogical_extentsr   r   s   &&   `/Users/agent/.openclaw/workspace/venv/lib/python3.14/site-packages/weasyprint/text/line_break.py	line_sizer      sy     gg01O	''chhH!!J.E##j0FKK (*'((=    c                 6   V P                   pV'       d"   V\        VP                  4       4      ,          pMV'       d   \        P                  ! VP
                  R4       VP                  4       RV P                  4       p	V'       d   V	P                  R4      p	VP                  V	4       VP                  4       w  r
V e   V P                   M^ p\        W4      w  r\        P                  ! VP
                  4      \        ,          pVP                  4        W(W;W3# )   N )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_metricsr6      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                   V   a  ] tR t^9t o RtRR ltR tR tRR ltR t	R t
R	 tR
tV tR# )Layoutz2Object holding PangoLayout-related cdata pointers.Nc                @    W n         V P                  V4       W0n        R # N)justification_spacingsetup	max_width)selfr   r;   r=   s   &&&&r   __init__Layout.__init__;   s    %:"

5"r   c                   Wn         ^ V n        VP                  P                  p\        P
                  ! \        P                  ! V4      \        P                  4      p\        P                  ! VR4       \        P                  ! V\        VR,          ,          4       VR,          R8w  d@   \        \        P                  ! VR,          P!                  4       VR,          4      4      w  rEM@VR,          '       d   \        VR,          4      w  rEMRp\        P"                  ! 4       V n        V'       d<   \        P&                  ! X4      V n        \        P(                  ! W0P$                  4       \+        VR,          \,        4      '       d   Q R4       h\/        V4      p\        P
                  ! \        P0                  ! V4      \        P                  4      V n        \        P4                  ! V P2                  R4       \        P6                  ! V P2                  V4       VR	,          pVR
8w  Ed   \        P
                  ! \        P8                  ! W6V P$                  4      \        P:                  4      p\<        \        P>                  ! V4      ,          V n         \<        \        PB                  ! V4      ,          V n"        \<        \        PF                  ! V4      ,          V n$        \<        \        PJ                  ! V4      ,          V n&        \<        \        PN                  ! V4      ,          V n(        MRV n         RV n"        RV n$        \S        VR,          VR,          VR,          VR,          VR,          VR,          VR,          VR,          4      p	V	'       d   RPU                  R V	PW                  4        4       4      PY                  4       p	VP                  PR                  P[                  V	\        P\                  ! V	4      4      p
\        P^                  ! 4       p\        P`                  ! W4       \        Pb                  ! V P2                  V4       R# R# )    F	directionfont_language_overrider   langN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   "   T F  w  rV R V 2x  K  	  R# 5i)r    N ).0keyvalues   &  r   	<genexpr>Layout.setup.<locals>.<genexpr>}   s"       E3CZS3%q 3Cs   )2r   first_line_directionfont_configfont_mapr   gcr
   pango_font_map_create_contextr	   g_object_unref'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>   r   r[   pango_contextlang_prE   font_descriptiontext_decorationmetricsfeaturesattr	attr_lists   &&          r   r<   Layout.setup@   s^   
$%!$$--//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  $$22==%<<XFHD113I((9--dkk9E r   c                    \         P                  ! V P                  ^ 4      p\         P                  ! V P                  ^4      pV\        P                  8X  d   RMVP
                  pVP                  V n        W3# rB   N)r
   pango_layout_get_line_readonlyr&   r   r   start_indexresolved_dirrY   )r>   r-   second_lineindexs   &   r   r*   Layout.get_first_line   s]    99$++qI
::4;;J#sxx/[5L5L$.$;$;!  r   c                
  a VP                  R 4      pVR8w  d   VRV^,            pWn        \        V4      w  r\        P                  ! V P
                  VR4       V P                  R,          pV'       d   WPP                  ,          pV P                  R,          pVR8X  d   ^ pV P                  R,          R9   pV P                  '       Ed   V'       g   V'       g
   V'       Ed   \        P                  ! V P
                  4      oS\        P                  8X  d9   \        P                  ! \        P                  ! 4       \        P                  4      oV3R lpV'       d*   \        V\        ,          4      pV! ^ \!        V4      V4       V'       d   VR8X  dA   RV n        \        V P                  4      w  r\        P                  ! V P
                  VR4       \        V\        ,          V,           4      p	^ \!        V4      ^,
          3p
\"        P$                  ! R	P'                  4       V4       FI  p^VP)                  4       V
9   ,           pV! VP)                  4       VP+                  4       W,          4       KK  	  V'       dF   \        P,                  ! R
4      p^ \!        V4      uVn        Vn        \        P2                  ! SV4       \        P4                  ! V P
                  S4       RV9   d   V P7                  4        R# R# )
Nword_spacingr   r   overflow_wrapc                 ~   < \         P                  ! V4      pWuVn        Vn        \         P                  ! SV4       R # 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    ​u    | F   	r!   )anywhere
break-word)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   s:   		$B;q>D	,T2##DKKr:zz.1 666L$45X%N JJ'+EE 	 999,.MM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 P                  R ,          \        4      '       d   \        V P                  V P                  4      pVP                  RV P                  R ,          ,          4       VP                  4       w  r#\        W P                  4      w  rC\        V4      pM&\        V P                  R ,          P                  4      p\        P                  ! \        P                  ! ^R\        P                  T;'       g    ^4      \        P                  4      p\        P                   ! V P"                  V4       R# )tab_sizer    TN)rg   r   r   r8   r;   r)   r*   r   roundrV   r   r\   r
   "pango_tab_array_new_with_positionsPANGO_TAB_LEFTpango_tab_array_freepango_layout_set_tabsr&   )r>   r&   r   r4   r   arrays   &     r   r   Layout.set_tabs   s    djj,c22DJJ(B(BCFOOC$**Z"889++-GD zz2HE%LE

:.445E444--uzz;&&( 	##DKK7r   c                    V = V =V =R # r:   )r&   rd   r   )r>   s   &r   r,   Layout.deactivate   s    K
r   c                b    V P                  V4       V P                  V P                  R R7       R# )T)r   N)r<   r)   r.   )r>   r   s   &&r   
reactivateLayout.reactivate   s"    

5dii.r   )ro   rY   r;   rd   r&   r=   rs   rw   r   r.   rq   ru   r   F)__name__
__module____qualname____firstlineno____doc__r?   r<   r*   r)   r   r,   r   __static_attributes____classdictcell__)__classdict__s   @r   r8   r8   9   s4     <#
DFL!=~8 3/ /r   r8   c           	         \        WV4      pVR,          R9   pVeO   V'       dG   VR8  d@   \        P                  ! VP                  \	        \        ^ V4      \        ,          4      4       VP                  V 4       V# )z=Return an opaque Pango layout with default Pango line-breaks.white_spacer   zpre-wrappre-linei    )r8   r
   r%   r&   r   maxr   r)   )r.   r   contextr=   r;   r&   	text_wraps   &&&&&  r   create_layoutr      se    E)<F m$(JJIy7/B$$V]]CAy8IH8T4UV
OODMr   c                   ^RI Hp VR,          R9   pVR,          R9   p	Tp
V'       g   Rp^pT pVEeQ   V\        8w  EdE   VR,          '       Ed5   VR,          V,          V8  d&   V P                  R4      pVR8w  d   V RV^,            pM"V R\	        W1R,          ,          V,          4       p\        WW#V4      pVP                  4       w  ppVf.   W8w  d(   T pVP                  V 4       VP                  4       w  ppMVP                  4       RV P                  4       pVV8w  d_   \        V4      ^,           \        V4      pp\        P                  ! VP                  \        P                  4      VV p\!        V4      e   Tp M \        WW*V4      pVP                  4       w  ppVf   \#        WVVW4      # \%        W4      w  ppVf   VV8:  d   \#        WVVW4      # VV8:  d8   V P                  4       pVRV P                  4       pVVR P                  4       pMRpT pVV8X  d   RpMy\        P                  ! VP                  \        P                  4      p\        V4      ^,           \        V4      ppVVV p\!        V4      pVe   V\        V4      ^,           ,          pVRV P'                  R4      pV'       d   V	'       d   TT;'       g    R,          R8X  d   VV,           pVP                  V4       VP                  4       w  ppVfj   V'       d/   \        VP                  4       4      ^,           p\#        WVVW4      # VP(                  ^,           pV\        V P                  4       4      8  d   RpMV'       d   \#        WVVW4      # VR,          pVR,          ;'       d    \*        P,                  ! VR,          4      pVR	,          w  p p!p"R
p#Rp$R
;p%p&VR8w  d   V$VV,           9   p&VR8X  d   V'       d   Tp'\/        VV4      ;p('       d   V'RV( p'^ p)V''       d   \1        V'V4      p*V*'       dj   V*w  p+p,V'V+V, pV,V+,
          V 8  dB   \%        W4      w  ppVV,
          p-V! VR,          W4      p.V-V.8  g   V-^ 8  d   Rp%V)V+,          p)MV'V,R p'V)V,,          p)K   V&'       d|   VP3                  V$4      '       d   RTpp\4        P6                  ! V$V4       U/u. uF  p/V/P9                  4       NK  	  p0p/V0P;                  4        V0 U1u. uF  p1VRV1^,            NK  	  p2p1MV%'       d   VV!V"V 3p3VP<                  P?                  V34      p4V4f)   \*        P@                  ! VV!V"R7      p4V4VP<                  V3&   VRX) p5V4PC                  V4       UUu. uF  w  ppV5V,           NK  	  p2ppM. p2V2'       EdO   V2 F  p6VV6,           pVVR,          ,           p7\        V7WVV4      p8V8P                  4       w  p9p:\%        V9V4      w  p;pVV;,
          p<V:RJ ;'       d    V<^ 8  ;'       g    V6V2R,          8H  p#V#'       g   K  T8pT9p\        VP                  4       4      p M	  V#'       g   V'       g   Rp#VP                  X74       \        PD                  ! VP                  R4       VP                  4       w  pp\        XP                  4       4      pV \        V4      ,          V$8X  d!   V\        V$P                  4       4      ,          pV#'       g   VP3                  V$4      '       dq   Rp#VVR,          ,           p7VP                  V74       \        PD                  ! VP                  R4       VP                  4       w  pp\        VP                  4       4      pVR,          p=\%        W4      w  ppVV,
          p-VR,          R8H  ;'       g,    T;'       d"    V=R8H  ;'       g    V=R8H  ;'       d    V'       * p>V-^ 8  d   V>'       d   R
p#VP                  V 4       \        PD                  ! VP                  \	        V\F        ,          4      4       \        PH                  ! VP                  \J        R,          4       VP                  4       w  pp:T:;'       g    VP(                  pV\        V P                  4       4      8  d   Rp\#        WVVWV#VR,          4      # u up/i u up1i u uppi )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

)
percentager   N	font_sizer     hyphensrE   hyphenate_limit_charsF   ­rH   autohyphenate_limit_zoneT)rE   leftrighthyphenate_characterr   
word_breakz	break-allr   r   	WRAP_CHARr   )r   nowrapr   r!   )&layout.percentr   r   r   r   r   r*   r)   r$   r'   r#   r
   #pango_layout_get_log_attrs_readonlyr&   r   r   get_next_break_pointr6   r   r(   r"   pyphenlanguage_fallbackget_next_break_point_from_textget_next_word_boundariesendswithr   r   r   reversedictionariesra   Pypheniterater%   r   pango_layout_set_wrapr   )?r.   r   r   r=   r;   is_line_startminimumr   r   r0   original_max_widthratio
short_textspace_indexr&   r-   resume_indexr3   r   r   text_end_log_attrsfirst_line_widthr4   encoded_textsecond_line_textbreak_point	log_attrssecond_line_log_attrs	next_wordnew_first_line_textr   rE   totalr   r   r1   soft_hyphenauto_hyphenationmanual_hyphenation	next_textnext_break_pointnext_text_indexnext_word_boundaries
start_word	stop_wordspace
limit_zoner   soft_hyphen_indexesidictionary_iterationsdictionary_key
dictionaryprevious_words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#: 
LJ$6 JOOD!'-'<'<'>$J )//1-<@GGIO*, 1A5s:s%*%N%NMM388&--23&8"'(:;G%D6KM#)#8#8#: 
L !flNK 	K#J6a 0I =!flN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'+	 "flNK 	K IG=DDV55eFmDD67E4JK,11)&(O>N,NN&T$	 >?OQU VVV!"3#34I #;It#L #(<%
I%j;	z)U2*3J*F'$a%(88E!+45u"IJz)UQY ,0(':5 &ij1	9,  ##K0002O-O'){{;@P'QS'QeEKKM'Q 	 S##%AT UATA!1$1Q3!7AT U	eU3))--n=
Dt5IJ3=G  0)*:?;5?5G5G	5R!T5RzucNU""5R 	 !T !#4O"1O"C#e,A&BB '&*EI%'J %/$=$=$?!NE&/&F# !!$88I$ P PQN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 	B A A+ @ @,.>>w;	 
 qyY
 	$$V]]C	H8L4MN##FMM?;3OP"113
E11
 1 13t{{}--L&,E/02 2iS !V!Ts   cccc                 l   \        V R ,          V R,          V R,          V R,          V R,          V R,          V R,          V R,          V R,          V R	,          V R
,          V R,          V R,          V R,          34      pV'       d1   V\        V R,          4      \        V R,          4      ,           ,          pV# )rF   
font_stylefont_stretchfont_weightrJ   rK   rL   rM   rN   rO   rP   font_variation_settingsrD   rE   r   line_height)rh   )r   include_sizerU   s   && r   _font_style_cache_keyr    s    
mlnm&'%&!"$%'('(%&'(&'f C  s5%&U=-A)BBBJr   c           	     .   V R,          ^ 8X  d   R# \        V RR7      pWP                  P                  9   d   V P                  P                  V,          # \        V 4      pVP	                  R4       VP                  4       w  r4\        VRVRRV R7      w     rEpV R	,          R
8X  d   WV3pWpP                  P                  V&   V# V R	,          w  rVR8X  d   WR,          ,          p	WW,
          ^,          ,           3pWpP                  P                  V&   V# )zReturn a tuple of the used value of ``line-height`` and the baseline.

The baseline is given from the top edge of line height.

r   T)r  r    r   NF)r/   r0   r   r  r   NUMBER)rB   rB   )r  rZ   strut_layoutsr8   r)   r*   r6   )
r   rU   r&   r   r4   text_heightr5   resulttype_r  s
   &         r   strutr%    s    [Q
D
9C
---  ..s33E]F
OOC##%GD(:b&De)M%Aq!QX]x'&/5'',}-E[))k&?1%DDDF+1##C(Mr   c                0   RRRRRRRR/P                  V4      pV'       g   Q hV P                  P                  V/ 4      p\        V 4      pWC9   d	   W4,          # V P	                  4       p R	V R
&   ^ V R&   RV R&   \        V 4      pVP                  V4       VP                  4       w  rg\        P                  ! R4      p\        P                  ! R4      p	\        P                  ! WhV	4       VR8X  d   VP                  ) \        ,          p
M6VR8X  d   V	P                  \        ,          p
MV	P                  \        ,          p
\        P                   ! V4       \        P                   ! V	4       \#        WR,          ,          ^4      ;'       g    RW4&   W4,          # )z.Return the font size ratio used by given unit.exxcapOicu   水ch0r   r   r   i  r   r   g      ?)ra   cacherz   r  copyr8   r)   r*   r   r   r
   r   yr   r   r   r   r   )r   unit	characterr.  	cache_keyr&   r   r4   ink_extentsr   measures   &&         r   character_ratior6  3  sZ   sE3eT3?CCDII9KK""4,E%e,I JJLE&E
E.E+E]F
OOI##%GD'',-Kgg01O	''?Kt|==.:-	e	!((:5!''*4KKKK  W['991=DDEr   c                    V'       d   \        V4      w  r!MR p\        P                  ! 4       pV'       d   \        P                  ! X4      pR F  pV P	                  VR4      p K  	  \        V 4      w  rV\        V 4      ^,           p\        P                  ! RV4      p\        P                  ! V\        V4      RXW4       V# )Nu   ​zPangoLogAttr[])u   ‪u   ‫u   ‬u   ‭u   ‮r!   )	r   r
   rc   re   replacer#   r   r   pango_get_log_attrs)	r.   rE   r   rd   chartext_pr   r"   r   s	   &&       r   get_log_attrsr<  Z  s    (.33533F;B||D(+ C*40FY]F(&1I	JXyBr   c                 Z    \        V 4       F  w  rVP                  '       g   K  Vu # 	  R # r:   )	enumerateis_line_break)r   r
  r   s   &  r   r   r   m  s$    Y'H (r   c                     V '       d   \        V 4      ^8  d   R# \        W4      p\        V 4      ^,           p\        V^V^,
           4      #    N)r#   r<  r   )r.   rE   r   r"   s   &&  r   r   r   s  s?    3t9q=d)IY]F	!F1H 566r   c                     \        W4      R J# r:   )r   )r.   rE   s   &&r   can_break_textrD  {  s    )$5TAAr   c                     V '       d   \        V 4      ^8  d   R# \        W4      p\        V4       F4  w  r4VP                  '       d   Tp XV3# VP                  '       g   K2  TpK6  	  R# rA  )r#   r<  r>  is_word_endis_word_boundary)r.   rE   r   r
  r   word_end
word_starts   &&     r   r   r     sf    3t9q=d)IY'H
 x	    J ( r   c                     V '       d   \        V 4      ^8  d   R# \        W4      p\        \        V4      RRR1,          4       F5  w  r4V'       g   K  VP                  '       g   K#  \        V 4      V,
          u # 	  R# )rB  Nr!   )r#   r<  r>  listrF  )r.   rE   r   r
  r   s   &&   r   get_last_word_endrL    sX    3t9q=d)IT)_TrT231!!!t9q=  4r   )FN)TFr   ) r   r   mathr   r   	constantsr   r   r   r   r   r   r	   r
   r   fontsr   r   r   r6   r8   r   r  r  r%  r6  r<  r   r   rD  r   rL  rS   r   r   <module>rP     sr    ' 	   C C M M 6 >8h/ h/VJ2Z,<$N&7B !r   