Ë
    £ëi»m  ã                   óÔ   — 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 ddlmZmZ d„ Z	 dd	„Z G d
„ d«      Zd„ Z	 dd„Zdd„Zd„ Z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Ú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).

    úPangoRectangle *Úletter_spacingÚnormal)	r
   Únewr   Úpango_layout_line_get_extentsÚNULLÚwidthr   ÚheightÚrelease)ÚlineÚstyleÚlogical_extentsr   r   s        úZ/var/www/html/chat/reports/venv/lib/python3.12/site-packages/weasyprint/text/line_break.pyÚ	line_sizer      s}   € ô —g‘gÐ0Ó1€OÜ	×'Ñ'¨¬c¯h©h¸ÔHØ×!Ñ!¤JÑ.€EØ×#Ñ#¤jÑ0€FÜ‡K�K�Ô ØÐÑ (Ò*Ø�Ð'Ñ(Ñ(ˆØ�&ˆ=Ðó    c                 ó  — | j                   }|r|t        |j                  «       «      z  }nŠ|rˆt        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Ñ4°SÓ9ˆOà�‰˜Ô(Ø×-Ñ-Ó/‰ˆ
�AØ&0Ð&<�×"Ò"À!ˆä˜j¨%Ó0�M€Eˆ6Ü×.Ñ.¨v¯}©}Ó=Ä
ÑJ€HØ
×ÑÔØ�6˜9 e¨V°XÐ=Ð=r   c                   ó>   — 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                 óB   — || _         | j                  |«       || _        y ©N)Újustification_spacingÚsetupÚ	max_width)Úselfr   r<   r>   s       r   Ú__init__zLayout.__init__;   s   € Ø%:ˆÔ"Ø�
‰
�5ÔØ"ˆ�r   c                 óš  — || _         d| _        |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$                  «       t+        |d   t,        «      rJ d«       ‚t/        |«      }t	        j
                  t        j0                  |«      t        j                  «      | _        t        j4                  | j2                  d«       t        j6                  | j2                  |«       |d	   }|d
k7  rét	        j
                  t        j8                  ||| j$                  «      t        j:                  «      }t<        t        j>                  |«      z  | _         t<        t        jB                  |«      z  | _"        t<        t        jF                  |«      z  | _$        t<        t        jJ                  |«      z  | _&        t<        t        jN                  |«      z  | _(        nd | _         d | _"        d | _$        tS        |d   |d   |d   |d   |d   |d   |d   |d   «      }	|	r¸djU                  d„ |	jW                  «       D «       «      jY                  «       }	|j                  jR                  j[                  |	t        j\                  |	«      «      }
t        j^                  «       }t        j`                  ||
«       t        jb                  | j2                  |«       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   ‚)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   rY   Úpango_contextÚlang_prD   Úfont_descriptionÚtext_decorationÚmetricsÚfeaturesÚattrÚ	attr_lists               r   r=   zLayout.setup@   sb  € ØˆŒ
Ø$%ˆÔ!à×$Ñ$×-Ñ-ˆÜŸ™Ü×/Ñ/°Ó9Ü×"Ñ"ó$ˆô 	×5Ñ5°mÀUÔKÜ×(Ñ(Øœ?¨5°Ñ+=Ñ>ô	@ð Ð)Ñ*¨hÒ6Ü,¬Z¯^©^ØÐ.Ñ/×5Ñ5Ó7ØÐ.Ñ/ó.1ó 2‰LˆF‘Dð �6Š]Ü,¨U°6©]Ó;‰LˆF‘DàˆDÜ!×<Ñ<Ó>ˆDŒMÙÜ!×<Ñ<¸VÓDˆDŒMÜ×,Ñ,¨]¸D¿M¹MÔJä˜e MÑ2´CÔ8ð 	,Ø*ó	,Ð8ä/°Ó6ÐÜ—f‘fÜ×"Ñ" =Ó1Ü×"Ñ"ó$ˆŒô 	×'Ñ'¨¯©°UÔ;Ü×/Ñ/°·±Ð=MÔNàÐ 6Ñ7ˆØ˜fÒ$Ü—f‘fÜ×/Ñ/Ø!Ð#3°T·]±]óDä×.Ñ.ó0ˆGô %Ü×3Ñ3°GÓ<ñ>ˆDŒKä&0Ü×?Ñ?ÀÓHñ'JˆDÔ#ä*4Ü×CÑCÀGÓLñ+NˆDÔ'ä'1Ü×@Ñ@ÀÓIñ(KˆDÔ$ä+5Ü×DÑDÀWÓMñ,OˆDÕ(ð ˆDŒKØ&*ˆDÔ#Ø*.ˆDÔ'ä Ø�.Ñ! 5Ð)AÑ#BØÐ)Ñ*¨EÐ2EÑ,FØÐ(Ñ)¨5Ð1JÑ+KØÐ+Ñ,¨eÐ4KÑ.Ló	Nˆñ
 Ø—x‘xñ  EØ3;·>±>Ó3Cô Eó EßEKÁVÃXð ð ×$Ñ$×2Ñ2×=Ñ=Øœ%×<Ñ<¸XÓFóHˆDä×1Ñ1Ó3ˆIÜ×(Ñ(¨°DÔ9Ü×-Ñ-¨d¯k©k¸9ÕEð r   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_dirrW   )r?   r.   Úsecond_lineÚindexs       r   r+   zLayout.get_first_line†   s_   € Ü×9Ñ9¸$¿+¹+ÀqÓIˆ
Ü×:Ñ:¸4¿;¹;ÈÓJˆØ#¤s§x¡xÒ/‘°[×5LÑ5LˆØ$.×$;Ñ$;ˆÔ!Ø˜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|�rÌt        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   rZ   rz   Ú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Ü×#Ñ# D§K¡K°°rÔ:à—z‘z .Ñ1ˆÙð ˜D×6Ñ6Ñ6ˆLàŸ™Ð$4Ñ5ˆØ˜XÒ%ØˆNð �J‰J�Ñ'Ð+EÐEð 	ð �9‹9™,©.ºMÜ×9Ñ9¸$¿+¹+ÓFˆIØœCŸH™HÒ$ÜŸF™FÜ×-Ñ-Ó/Ü×/Ñ/ó1�	ô>ñ
 Ü!$ ^´hÑ%>Ó!?�Ù˜œC 
›O¨^Ô<áØ Ò%à )�D”IÜ'8¸¿¹Ó'CÑ$�D˜*Ü×/Ñ/°·±¸TÀ2ÔFä # L´8Ñ$;¸nÑ$LÓ M�à&'¬¨Z«¸1Ñ)<Ð%=Ð"ÜŸ[™[¨×):Ñ):Ó)<¸jÓIò Q�EØ %§+¡+£-Ð3EÐ"EÑF�FÙ˜UŸ[™[›]¨E¯I©I«K¸À-Ñ9OÕPðQñ Ü×:Ñ:¸5ÓA�Ø34´c¸*³oÐ0�Ô  $¤.Ü×,Ñ,¨Y¸Ô=ä×-Ñ-¨d¯k©k¸9ÔEð �JÑØ�M‰M�Oð r   c           	      óL  — t        | j                  d   t        «      ryt        | 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)re   r   r    r9   r<   r*   r+   r   ÚroundrU   r
   rZ   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Û   € Ü�d—j‘j Ñ,¬cÔ2Ü˜DŸJ™J¨×(BÑ(BÓCˆFØ�O‰O˜C $§*¡*¨ZÑ"8Ñ8Ô9Ø×+Ñ+Ó-‰GˆD�!Ü   t§z¡zÓ2‰HˆE�1Ü˜%“L‰Eä˜Ÿ
™
 :Ñ.×4Ñ4Ó5ˆEä—‘Ü×4Ñ4Ø�4œ×-Ñ-¨uªz¸ó;ä×&Ñ&ó(ˆô 	×#Ñ# D§K¡K°Õ7r   c                 ó   — | ` | `| `y r;   )r'   rb   r   )r?   s    r   r-   zLayout.deactivateÜ   s   € ØˆK˜˜¨©
r   c                 ó`   — | j                  |«       | j                  | j                  d¬«       y )NT)r¥   )r=   r*   r/   )r?   r   s     r   Ú
reactivatezLayout.reactivateß   s"   € Ø�
‰
�5ÔØ�‰�d—i‘i¨ˆÕ.r   )r   N©F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r@   r=   r+   r*   r¤   r-   r¶   rR   r   r   r9   r9   9   s,   „ Ù<ó#ò
DFòL!ó=ò~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   Úcontextr>   r<   r'   Ú	text_wraps          r   Úcreate_layoutrÃ   ä   sh   € ä�EÐ0°)Ó<€Fð �mÑ$Ð(JÐJ€IØÐ¡¨y¸7Ò/BÜ×$Ñ$ V§]¡]´C¼¸A¸yÓ8IÌHÑ8TÓ4UÔVà
‡O�O�DÔØ€Mr   c                 ó¢  — ddl m} |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})|'rbt1        |'|«      }*|*rP|*\  }+},|'|+|, }|,|+z
  | k\  r3t%        ||«      \  }}||z
  }- ||d   ||«      }.|-|.kD  s|-dk  rd}%|)|+z  })n|'|,d }'|)|,z  })nn|'rŒb|&rl|j3                  |$«      rd|}}t5        j6                  |$|«      D �/cg c]  }/|/j9                  «       ‘Œ }0}/|0j;                  «        |0D �1cg c]
  }1|d|1dz    ‘Œ }2}1nz|%rv||!|"| f}3|j<                  j?                  |3«      }4|4€'t+        j@                  ||!|"¬«      }4|4|j<                  |3<   |d) }5|4jC                  |«      D ��cg c]
  \  }}|5|z   ‘Œ }2}}ng }2|2�r|2D ]{  }6||6z   }||d   z   }7t        |7||||«      }8|8j                  «       \  }9}:t%        |9|«      \  };}||;z
  }<|:du xr |<dk\  xs |6|2d
   k(  }#|#sŒ^|8}|9}t        |j                  «       «      } n |#sŽ|sŒd}#|j                  7«       t        jD                  |j                  d
«       |j                  «       \  }}t        j                  «       «      }| t        |«         |$k(  r|t        |$j                  «       «      z  }|#sx|j3                  |$«      rgd}#||d   z   }7|j                  |7«       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­|>r«d}#|j                  | «       t        jD                  |j                  t	        |tF        z  «      «       t        jH                  |j                  tJ        d   «       |j                  «       \  }}:|:xs |j(                  }|t        | j                  «       «      k\  rd}t#        || |||	||#|d   «      S c c}/w c c}1w 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�   )Ú
percentager½   r¾   )r   Únowrapr¿   Né   Ú	font_sizer"   r!   r   Ú ÚhyphensrD   Úhyphenate_limit_charsFõ   Â­rG   Úautor   Úhyphenate_limit_zoneT)rD   ÚleftÚrightÚhyphenate_characterr�   Ú
word_breakz	break-allr�   r‘   Ú	WRAP_CHAR)&Úlayout.percentrÅ   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Úendswithr¡   r¢   r–   ÚreverseÚdictionariesr_   ÚPyphenÚiterater&   r	   Úpango_layout_set_wrapr   )?r/   r   rÁ   r>   r<   Úis_line_startÚminimumrÅ   rÂ   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Ê   rD   Ú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ÐJ€IØ˜=Ñ)Ð-MÐM€Nà"ÐÙØˆ	ð €EØ€JØÑ ¬cÓ!1°e¸KÓ6Hð �Ñ Ñ%¨	Ò1ð Ÿ)™) C›.ˆKØ˜bÒ Ø! . ;¨q¡=Ð1‘
ð ÐJœs 9¨u°[Ñ/AÑ#AÀEÑ#IÓJÐKˆJÜØ˜˜w¨	Ð3HóJˆà#)×#8Ñ#8Ó#:Ñ ˆ
�LØÐ J°$Ò$6ð ˆJØ�O‰O˜DÔ!Ø'-×'<Ñ'<Ó'>Ñ$ˆJ™ð )×/Ñ/Ó1°-°<Ð@×GÑGÓIˆOØ *Ò,Ü  Ó1°AÑ5´s¸:³�s�Ü%*×%NÑ%NØ—M‘M¤3§8¡8ó&-Ø-2°3ð&8Ð"ä'Ð(:Ó;ÐGØ%‘DäØ�%˜Ð"4Ð6KóMˆà#)×#8Ñ#8Ó#:Ñ ˆ
�Lð Ðä!Ø˜˜f l°NÀEóKð 	Kä# J°Ó6ÑÐ�aØÐÐ 0°IÒ =ä!Ø˜˜f l°NÀEóKð 	Kð ˜9Ò$à—{‘{“}ˆØ& }¨Ð5×<Ñ<Ó>ˆØ'¨¨Ð6×=Ñ=Ó?Ñð ˆØÐØ˜*Ò$à‰ô ×=Ñ=¸f¿m¹mÌSÏXÉXÓVˆ	Ü˜Ó)¨AÑ-¬s°:«ˆsˆØ )¨%°Ð 4ÐÜ*Ð+@ÓAˆØÐ"Øœ3˜Ó/°!Ñ3Ñ3ˆKØ   +Ð.×5Ñ5°cÓ:€IÙÙÐ.¨{Ò/@¸bÑAÀSÒHð #2°IÑ"=ÐØ�O‰OÐ/Ô0Ø'-×'<Ñ'<Ó'>Ñ$ˆJ˜ØÐ#Ù"ä#&Ð':×'AÑ'AÓ'CÓ#DÀqÑ#H�LÜ-Ø" D¨&°,ÀÐPUóWð Wð $.×#4Ñ#4°qÑ#8�LØ#¤s¨4¯;©;«=Ó'9Ò9Ø'+™Ù	ô "Ø˜˜f l°NÀEóKð 	Kð �IÑ€GØ�‰=ÒDœV×5Ñ5°e¸F±mÓD€DØÐ6Ñ7Ñ€Eˆ4�Ø€JØ€Kà,1Ð1ÐÐ)à�&ÒØ(¨OÐ>NÑ,NÐNÐà�&Ò™Tà$ˆ	Ü >Ð?OÐQUÓ VÐVÐÐVØ!Ð"3Ð#3Ð4ˆIð ˆÙÜ#;¸IÀtÓ#LÐ Ù#à(<Ñ%�
˜IØ% j°Ð;�	Ø˜zÑ)¨UÒ2ä*3°JÀÓ*FÑ'Ð$ aØ%Ð(8Ñ8�EÙ!+ØÐ4Ñ5°u¸ió"I�Jà˜zÒ)¨U°QªYð ,0Ð(Ø'¨:Ñ5˜Øð & i jÐ1�	Ø 9Ñ,‘àò/ ñ: ð ×#Ñ# KÔ0à02°OÐ-ˆOä')§{¡{°;Ð@PÓ'QöSØ#ˆE�K‰K�MðSÐð Sà×#Ñ#Ô%ØATÖ U¸AÐ!1°$°1°Q±3Ò!7Ð UÐÑ UÙ	Ø  e¨UÐ3ˆØ×)Ñ)×-Ñ-¨nÓ=ˆ
ØÐÜŸ™¨D°tÀ5ÔIˆJØ3=ˆG× Ñ  Ñ0Ø)Ð*:¨?Ð;ˆà5?×5GÑ5GÈ	Ó5R÷!TÙ'1 u¨cˆN˜UÓ"ð!TÐò !Tð !#ÐâØ4ò 	ˆOØ"1°OÑ"CÐà# eÐ,AÑ&BÑBð 'ä&Ø*¨E°7¸IØ%ó'ˆJð %/×$=Ñ$=Ó$?Ñ!ˆN˜EÜ&/°ÀÓ&FÑ#Ð  !Ø!Ð$8Ñ8ˆIØ $˜ò PØ˜Q‘ÒN /Ð5JÈ2Ñ5NÑ"Nð âØ#�Ø+�
Ü"Ð#6×#=Ñ#=Ó#?Ó@�Ùð!	ñ$ ¡/ð ˆJØ�O‰OÐ6Ô7Ü×(Ñ(¨¯©¸Ô;Ø"×1Ñ1Ó3‰MˆJ˜ÜÐ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°;ð	 ð
 ˆq‚y‘Yàˆ
ð 	�‰˜ÔÜ×$Ñ$ V§]¡]´C¸	ÄHÑ8LÓ4MÔNÜ×#Ñ# F§M¡M´?À;Ñ3OÔPØ"×1Ñ1Ó3Ñˆ
�EØÒ1 
× 1Ñ 1ˆØœ3˜tŸ{™{›}Ó-Ò-ØˆLäØ�D˜& ,°ÀØ�EÐ/Ñ0ó2ð 2ùòiSùò !Vùó!Ts   Ï<]Ð)]Ò ]c                 óÐ   — t        | d   | d   | d   | d   | d   | d   | d   | d   | d	   | d
   | d   | d   | d   | d   f«      }|r |t        | d   «      t        | d   «      z   z  }|S )NrE   Ú
font_styleÚfont_stretchÚfont_weightrI   rJ   rK   rL   rM   rN   rO   Úfont_variation_settingsrC   rD   rÈ   Úline_height)rf   )r   Úinclude_sizerT   s      r   Ú_font_style_cache_keyr  ÿ  s¶   € Ü
ØˆmÑØˆlÑØˆnÑØˆmÑØÐ&Ñ'ØÐ%Ñ&ØÐ!Ñ"ØÐ$Ñ%ØÐ'Ñ(ØÐ'Ñ(ØÐ%Ñ&ØÐ'Ñ(ØÐ&Ñ'Øˆf‰ðó €Cñ  ØŒs�5˜Ñ%Ó&¬¨U°=Ñ-AÓ)BÑBÑBˆØ€Jr   c                 óæ  — | d   dk(  ryt        | d¬«      }|| j                  j                  v r| j                  j                  |   S t        | «      }|j	                  d«       |j                  «       \  }}t        |d|dd	| ¬
«      \  }}}}}}| d   dk(  r||f}|| j                  j                  |<   |S | d   \  }}	|dk(  r|	| d   z  }	|	||	|z
  dz  z   f}|| j                  j                  |<   |S )zˆReturn a tuple of the used value of ``line-height`` and the baseline.

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

    rÈ   r   )r   r   T)r  r"   rÉ   NF)r0   r1   r   r  r   ÚNUMBERr�   )r  rX   Ústrut_layoutsr9   r*   r+   r7   )
r   rT   r'   r   r5   Útext_heightr6   ÚresultÚtype_r  s
             r   Ústrutr    s#  € ð ˆ[Ñ˜QÒØä
 °DÔ
9€CØ
ˆe×Ñ×-Ñ-Ñ-Ø× Ñ ×.Ñ.¨sÑ3Ð3ä�E‹]€FØ
‡O�O�CÔØ×#Ñ#Ó%�G€Dˆ!Ü(:Øˆb�& D¸Àeô)MÑ%€A€qˆ!ˆQ�˜Xàˆ]Ñ˜xÒ'Ø˜hÐ&ˆØ/5ˆ×Ñ×'Ñ'¨Ñ,ØˆØ˜}Ñ-Ñ€Eˆ;Ø�ÒØ�u˜[Ñ)Ñ)ˆØ˜( k°KÑ&?À1Ñ%DÑDÐD€FØ+1€E×Ñ×#Ñ# CÑ(Ø€Mr   c                 óÐ  — dddddœj                  |«      }|sJ ‚| j                  j                  |i «      }t        | «      }||v r||   S | j	                  «       } d| d<   d| d	<   d
| d<   t        | «      }|j                  |«       |j                  «       \  }}t        j                  d«      }t        j                  d«      }	t        j                  |||	«       |dk(  r|j                   t        z  }
n,|dk(  r|	j                  t        z  }
n|	j                  t        z  }
t        j                   |«       t        j                   |	«       t#        |
| d   z  d«      xs d||<   ||   S )z.Return the font size ratio used by given unit.ÚxÚOu   æ°´Ú0)ÚexÚcapÚicÚchr   r   r   rŽ   iè  rÈ   r   r  r  é   g      à?)r_   Úcacherx   r  Úcopyr9   r*   r+   r
   r   r   r   Úyr   r   r   r   r®   )r   ÚunitÚ	characterr#  Ú	cache_keyr'   r   r5   Úink_extentsr   Úmeasures              r   Úcharacter_ratior+  3  s]  € à 3¨e¸3Ñ?×CÑCÀDÓI€IÙÐˆ9à�K‰K×"Ñ" 4¨Ó,€EÜ% eÓ,€IØ�EÑØ�YÑÐð �J‰J‹L€EØ&€EÐ
ÑØ€Eˆ.Ñà€Eˆ+Ñä�E‹]€FØ
‡O�O�IÔØ×#Ñ#Ó%�G€Dˆ!ä—'‘'Ð,Ó-€KÜ—g‘gÐ0Ó1€OÜ	×'Ñ'¨¨k¸?ÔKØˆt‚|Ø—=‘=�.¤:Ñ-‰Ø	�eÒ	Ø!×(Ñ(¬:Ñ5‰à!×'Ñ'¬*Ñ4ˆÜ‡K�K�ÔÜ‡K�K�Ô ô ˜W u¨[Ñ'9Ñ9¸1Ó=ÒDÀ€Eˆ)ÑØ�ÑÐr   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   ra   rc   Úreplacer$   r
   r   Úpango_get_log_attrs)	r/   rD   r~   rb   ÚcharÚtext_pr¦   r#   rí   s	            r   Úget_log_attrsr1  Z  s«   € ÙÜ(¨Ó.‰ˆ‘àˆÜ×3Ñ3Ó5ˆÙÜ×3Ñ3°FÓ;ˆàBò ,ˆØ�|‰|˜D (Ó+‰ð,ä*¨4Ó0Ñ€FˆJÜ�‹Y˜‰]€FÜ—‘Ð(¨&Ó1€IÜ	×ÑØ”�J“  X¨y¸&ôBàÐr   c                 óJ   — t        | «      D ]  \  }}|j                  sŒ|c S  y r;   )Ú	enumerateÚis_line_break)rí   rþ   rƒ   s      r   rÖ   rÖ   m  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$   r1  rÖ   )r/   rD   rí   r#   s       r   rÙ   rÙ   s  sA   € Ù”3�t“9˜q’=ØÜ˜d DÓ)€IÜ�‹Y˜‰]€FÜ 	¨!¨F°1©HÐ 5Ó6Ð6r   c                 ó   — t        | |«      d uS r;   )rÙ   )r/   rD   s     r   Úcan_break_textr7  {  s   € Ü)¨$°Ó5¸TÐAÐAr   c                 ó¨   — | rt        | «      dk  ry t        | |«      }t        |«      D ]'  \  }}|j                  r|} |fS |j                  sŒ&|}Œ) y )Nr�   )r$   r1  r3  Úis_word_endÚis_word_boundary)r/   rD   rí   rþ   rƒ   Úword_endÚ
word_starts          r   rÚ   rÚ     si   € Ù”3�t“9˜q’=ØÜ˜d DÓ)€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$   r1  r3  Úlistr9  )r/   rD   rí   rþ   rƒ   s        r   Úget_last_word_endr?  Ž  s\   € Ù”3�t“9˜q’=ØÜ˜d DÓ)€IÜœT )›_©T¨r¨TÑ2Ó3ò !‰ˆˆ4Ú�×!Ó!Ü�t“9˜q‘=Ò ñ!r   )FN)TFr·   ) r»   r¡   Úmathr   r×   Ú	constantsr   r   r   r
   r   r	   r   r   r   Úfontsr   r   r   r7   r9   rÃ   r
  r  r  r+  r1  rÖ   rÙ   r7  rÚ   r?  rR   r   r   ú<module>rC     s~   ðÙ 'ã 	Ý ã ç CÑ Cß M× Mß 6òð" GKó>÷8h/ñ h/òVð 27óJ2óZò,ò<$òNò&ò7òBò ó!r   