
    Mhc                         d Z ddlZddlmZ ddlZddlmZmZmZ ddl	m
Z
mZm	Z	mZmZmZmZ ddlmZmZ d Z	 dd	Z G d
 d      Zd Z	 ddZd Zd Zd Zd Zd Zd Zy)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                    t        j                  d      }t        j                  | t         j                  |       |j
                  t        z  }|j                  t        z  }t        j                  |       |d   dk7  r||d   z  }||fS )zsGet 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        r/var/www/pru.catia.catastroantioquia-mas.com/valormasv2/lib/python3.12/site-packages/weasyprint/text/line_break.py	line_sizer      s}     gg01O	''chhH!!J.E##j0FKK (*'((&=    c                    | j                   }|r|t        |j                               z  }n|rt        j                  |j
                  d       |j                         d | j                         }	|r|	j                  d      }	|j                  |	       |j                         \  } }
| | j                   nd}t        | |      \  }}t        j                  |j
                        t        z  }|j                          ||||||fS )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(--/
A&0&<""!j%0ME6..v}}=
JH
69eVX==r   c                   B    e Zd ZdZ	 	 d
dZd Zd ZddZd Zd Z	d	 Z
y)Layoutz2Object holding PangoLayout-related cdata pointers.Nc                 D    || _         | j                  ||       || _        y N)justification_spacingsetup	max_width)selfcontextr   r<   r>   s        r   __init__zLayout.__init__;   s    %:"

7E""r   c                    || _         || _        d| _        |7t        j                  t        j                         t        j                        }n|j                  j                  }t        j                  t        j                  |      t        j                        }t        j                  |d       t        j                  |t        |d             |d   dk7  r7t!        t#        j$                  |d   j'                         |d               \  }}n2|d   rt!        |d         \  }}nd }t        j(                         | _        |r:t        j,                        | _        t        j.                  || j*                         t1        |d   t2              rJ d       t5        |      }t        j                  t        j6                  |      t        j                        | _        t        j:                  | j8                  d       t        j<                  | j8                  |       |d	   }|d
k7  rt        j                  t        j>                  ||| j*                        t        j@                        }	tB        t        jD                  |	      z  | _#        tB        t        jH                  |	      z  | _%        tB        t        jL                  |	      z  | _'        tB        t        jP                  |	      z  | _)        tB        t        jT                  |	      z  | _+        nd | _#        d | _%        d | _'        tY        |d   |d   |d   |d   |d   |d   |d   |d         }
|
r|rdj[                  d |
j]                         D              j_                         }
|jX                  ja                  |
t        jb                  |
            }t        jd                         }t        jf                  ||       t        jh                  | j8                  |       y y y )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   0   K   | ]  \  }}| d |   yw)r"   N ).0keyvalues      r   	<genexpr>zLayout.setup.<locals>.<genexpr>   s&       E%/S%3%q  Es   )5r@   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?   r@   r   r]   pango_contextlang_prE   font_descriptiontext_decorationmetricsfeaturesattr	attr_lists                r   r=   z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,,]DMMJeM2C8 	,*	,8/6ff""=1""$ 	''U;//=MN 67f$ff//!#3T]]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((D9--dkk9E  8r   c                     t        j                  | j                  d      }t        j                  | j                  d      }|t        j                  k(  rd n|j
                  }|j                  | _        ||fS )Nr   r   )r   pango_layout_get_line_readonlyr'   r
   r   start_indexresolved_dirrX   )r?   r.   second_lineindexs       r   r+   zLayout.get_first_line   s_    99$++qI
::4;;J#sxx/[5L5L$.$;$;!5  r   c                 &   |j                  d      }|dk7  r|d |dz    }|| _        t        |      \  }}t        j                  | j
                  |d       | j                  d   }|r|| j                  z  }| j                  d   }|dk(  rd}| j                  d   d	v }| j                  r|s|s|rt        j                  | j
                        t        j                  k(  r6t        j                  t        j                         t        j                        fd
}|r%t        |t        z        } |dt!        |      |       |r|dk(  r@d| _        t        | j                        \  }}t        j                  | j
                  |d       t        |t        z  |z         }	dt!        |      dz
  f}
t#        j$                  dj'                         |      D ]@  }d|j)                         |
v z   } ||j)                         |j+                         ||	z         B |rCt        j,                  d      }dt!        |      c|_        |_        t        j2                  |       t        j4                  | j
                         d|v r| j7                          y y )N
r!      word_spacingr   r   r   overflow_wrap)anywhere
break-wordc                 z    t        j                  |      }| |c|_        |_        t        j                  |       y r;   )r   pango_attr_letter_spacing_newr   	end_indexpango_attr_list_change)startendspacingr   r   s       r   add_attrz!Layout.set_text.<locals>.add_attr   s4    ::7C38#0 $.,,Y=r       u    ​r   u    | F   	)findr/   r   r   pango_layout_set_textr'   r   r<   pango_layout_get_attributesr
   r   rY   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*   zLayout.set_text   sF   		$B;q>D	,T2j##DKKr:zz.1 D666L$45X%N JJ'+EE 	 99,.M99$++FICHH$FF--///1	>
 !$^h%>!?C
O^<% )DI'8'C$D*//T2F #L8$;n$L M&'Z1)<%="[[):):)<jI QE%++-3E"EFFU[[]EIIK-9OPQ ::5A34c*o0 $.,,Y=--dkk9E JMMO r   c           	      b   t        | j                  d   t              rt        | j                  | j                  | j
                        }|j                  d| j                  d   z         |j                         \  }}t        || j                        \  }}t        |      }n"t        | j                  d   j                        }t        j                  t        j                  ddt        j                  |xs d      t        j                         }t        j"                  | j$                  |       y )Ntab_sizer"   r   T)rg   r   r   r9   r@   r<   r*   r+   r   roundrV   r
   rY   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   zLayout.set_tabs   s    djj,c2djj$*D*DFFOOC$**Z"889++-GD! tzz2HE1%LE

:.445E444--uz;&&( 	##DKK7r   c                     | ` | `| `y r;   )r'   rd   r   )r?   s    r   r-   zLayout.deactivate   s    K
r   c                 v    | j                  | j                  |       | j                  | j                  d       y )NT)r   )r=   r@   r*   r/   )r?   r   s     r   
reactivatezLayout.reactivate   s(    

4<<'dii.r   )r   N)F)__name__
__module____qualname____doc__rA   r=   r+   r*   r   r-   r   rS   r   r   r9   r9   9   s2    <=>#IFV!=~8"3/r   r9   c           	          t        ||||      }|d   dv }|A|r?|dk  r:t        j                  |j                  t	        t        d|      t        z               |j                  |        |S )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   r@   r>   r<   r'   	text_wraps          r   create_layoutr      sj    GU$99EF m$(JJIy7/B$$V]]CAy8IH8T4UV
OODMr   c                    |d   dv }|d   dv }|}	|sd}d}
| }||t         k7  r|d   r|d   |
z  |kD  r| j                  d      }|dk7  r | d|d	z    }n| dt        ||d   z  |
z         }t        |||||      }|j	                         \  }}|,|| k7  r'| }|j                  |        |j	                         \  }}n|j                         d| j                         }||k7  rzt        |      d
z   t        |      }}t        j                  |j                  t        j                        || }t        |      %|} n"t        | |||	|      }|j	                         \  }}|t        || ||||      S t!        ||      \  }}|||k  rt        || ||||      S ||k  r7| j                         }|d| j                         }||d j                         }nd}| }||k(  rd}njt        j                  |j                  t        j                        }t        |      d
z   t        |      }}||| }t        |      }||t        |      d
z   z  }|d| j#                  d      }|r|r||xs d   dk(  r||z   }|j                  |       |j	                         \  }}|n|r,t        |j                               d
z   }t        || ||||      S |j$                  d
z   }|t        | j                               k\  rd}n|rt        || ||||      S |d   }|d   xr t'        j(                  |d         }|d   \  }} }!d}"d}#dx}$}%|dk7  r|#||z   v }%|dk(  r|r|}&t+        ||      x}'r|&d|' }&d}(|&rt-        |&|      })|)rz|)\  }*}+|&|*|+ }|+|*z
  |k\  r]t!        ||      \  }}||z
  },|d   j.                  dk(  r||d   j0                  z  dz  }-n|d   j0                  }-|,|-kD  s|,dk  rd}$|(|*z  }(n|&|+d }&|(|+z  }(nn|&r|%rl|j3                  |#      rd|}}t5        j6                  |#|      D .cg c]  }.|.j9                          }/}.|/j;                          |/D 0cg c]
  }0|d|0d
z     }1}0nz|$rv|| |!|f}2|j<                  j?                  |2      }3|3't'        j@                  || |!      }3|3|j<                  |2<   |d( }4|3jC                  |      D cg c]
  \  }}|4|z    }1}}ng }1|1r|1D ]{  }5||5z   }||d   z   }6t        |6||||      }7|7j	                         \  }8}9t!        |8|      \  }:}||:z
  };|9du xr |;dk\  xs |5|1d   k(  }"|"s^|7}|8}t        |j                               } n |"s|sd}"|j                  6       t        jD                  |j                  d       |j	                         \  }}t        j                               }| t        |         |#k(  r|t        |#j                               z  }|"sx|j3                  |#      rgd}"||d   z   }6|j                  |6       t        jD                  |j                  d       |j	                         \  }}t        |j                               }|d   }<t!        ||      \  }}||z
  },|d   dk(  xs |xr |<dk(  xs
 |<dk(  xr | }=|,dk  r|=rd}"|j                  |        t        jD                  |j                  t        |tF        z               t        jH                  |j                  tJ        d          |j	                         \  }}9|9xs |j$                  }|t        | j                               k\  rd}t        || |||||"|d         S c c}.w c c}0w c c}}w ) 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    hyphensrE   hyphenate_limit_charsF   ­rH   autor   hyphenate_limit_zone%d   T)rE   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_break_point_from_textget_next_word_boundariesunitrV   endswithr   r   r   reversedictionariesra   Pypheniterater&   r	   pango_layout_set_wrapr   )>r/   r   r@   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   rE   totalr   r   r2   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!1eK6H %	1 ))C.Kb !.;q=1
 Js9u[/A#AE#IJKJw	3HJ#)#8#8#: 
LJ$$6 JOOD!'-'<'<'>$J )//1-<@GGIO*, 1A5s:s%*%N%NMM388&--23&8"'(:;G%D%"46KM#)#8#8#: 
L !flNEK 	K#J6a 0I =!flNE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-"D&,PUW W $.#4#4q#8L#s4;;='99'+	 "flNEK 	K IG=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3499S@%.D(E(K(KKcQ # &++A%B%H%H
z)UQY ,0(':5 &ij1	9,5 @  ##K002O-O'){{;@P'QS#EKKMS S##%AT UA!1$1Q3!7 U U	eU3))--n=
Dt5IJ3=G  0)*:?;5?5G5G	5R!T'1ucNU"!T !T !#4 	O"1O"C#e,A&BB '&*E7I%'J %/$=$=$?!NE&/&F# !!$88I$ PQN/5J25N"N #+
"#6#=#=#?@!	$ / 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D&,E/02 2iS !V!Ts    ]%]*]/c                 ^   |rt        |      \  }}nd }t        j                         }|rt        j                        }dD ]  }| j	                  |d      }  t        |       \  }}t        |       dz   }t        j                  d|      }t        j                  |t        |      d||       |S )N)u   ‪u   ‫u   ‬u   ‭u   ‮u   ​r   zPangoLogAttr[]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    s    (.33533F;B ,||D(+,*40FJY]F(&1I	JXy&Br   c                 J    t        |       D ]  \  }}|j                  s|c S  y r;   )	enumerateis_line_break)r   r   r   s      r   r   r     s(    Y' 4Hr   c                 z    | rt        |       dk  ry t        | |      }t        |       dz   }t        |d|dz
         S )Nr   r   )r$   r  r   )r/   rE   r   r#   s       r   r   r      sA    3t9q=dD)IY]F	!F1H 566r   c                     t        | |      d uS r;   )r   )r/   rE   s     r   can_break_textr  (  s    )$5TAAr   c                     | rt        |       dk  ry t        | |      }t        |      D ]'  \  }}|j                  r|} |fS |j                  s&|}) y )Nr   )r$   r  r  is_word_endis_word_boundary)r/   rE   r   r   r   word_end
word_starts          r   r   r   ,  si    3t9q=dD)IY' 4H
 x	   J r   c                     | rt        |       dk  ry t        | |      }t        t        |      d d d         D ]$  \  }}|s	|j                  st        |       |z
  c S  y )Nr   r!   )r$   r  r  listr  )r/   rE   r   r   r   s        r   get_last_word_endr  ;  s\    3t9q=dD)IT)_TrT23 !4!!t9q= !r   )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   r  rS   r   r   <module>r#     sq    ' 	   C C W W W 6" GK>8o/ o/d 27K2\&7B !r   