§
   Ã½éVŒuƒã                   ód   — d Z ddlZddlZdZddddœZdZi Zd	„ Zd
„ Zd„ Z	d„ Z
d„ Zd„ Zd„ Zdd„ZdS )u6  Predict how Kodi wraps text in Estuary fonts, to trim text to whole lines.

Kodi's textbox/label never ellipsize multi-line text and overflow their
height, so text that must fit N lines is trimmed here. Widths come from PIL
with the Estuary font file, scaled by factors calibrated against real Kodi
renders (scripts/dialog_harness, 2026-09-29): Kodi regular text measured
0.91-0.97x of PIL, bold ("*_title", synthetic emboldening) 1.07-1.11x. The
factors below are the conservative end, so predicted lines are never shorter
than Kodi's â€” trimmed text always fits.
é    Nz=special://xbmc/addons/skin.estuary/fonts/NotoSans-Regular.ttf)é   ç333333ï?é(   gš™™™™YB@)é    r   é/   g33333³E@)é-   gìQ¸…ëñ?éB   gš™™™™ÙN@)Úfont27Úfont32Úfont45_titleé   c                 óp  — | t           vr¡	 ddlm} |                     t	          j        t          ¦  «        t          |          d         ¦  «        t           | <   nS# t          $ rF}t          j
        d                     |¦  «        t          j        ¦  «         d t           | <   Y d }~nd }~ww xY wt           |          S )Nr   )Ú	ImageFontz;[plugin.video.milionar] text_fit: PIL font unavailable ({}))Ú_cacheÚPILr   ÚtruetypeÚxbmcvfsÚtranslatePathÚ
_FONT_FILEÚFONTSÚ	ExceptionÚxbmcÚlogÚformatÚ
LOGWARNING)Únamer   Úexcs      ú]/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/ui/text_fit.pyÚ	_pil_fontr      s»   € Ø•6ÐÐð	 Ø%Ð%Ð%Ð%Ð%Ð%Ø$×-Ò-­gÔ.CÅJÑ.OÔ.OÕQVÐW[ÔQ\Ð]^ÔQ_Ñ`Ô`�F�4‰LˆLøÝð 	 ð 	 ð 	 ÝŒHÐR×YÒYÐZ]Ñ^Ô^Õ`dÔ`oÑpÔpÐpØ�F�4‰LˆLˆLˆLˆLˆLøøøøð	 øøøõ �$Œ<Ðs   ‹AA Á
B(Á"<B#Â#B(c                 óÀ   — t           |         d         t           |         d         }}t          |¦  «        }|rt          || ¦  «        nt          | ¦  «        |z  dz  |z  S )Nr   é   gìQ¸…ëá?)r   r   Ú
_pil_widthÚlen)ÚtextÚ	font_nameÚsizeÚfactorÚfonts        r   Ú
text_widthr)   '   s[   € Ý˜Ô# AÔ&­¨iÔ(8¸Ô(;ˆ&€DÝ�YÑÔ€DØ&*ÐG�J�t˜TÑ"Ô"Ð"µ°D±	´	¸DÑ0@À4Ñ0GÈ6ÑQÐQó    c                 ó‚   — t          | d¦  «        r|                      |¦  «        S |                      |¦  «        d         S )z`Pixel width of text: getlength (Pillow 8+), getsize (older Pillow bundled with Kodi on Windows).Ú	getlengthr   )Úhasattrr,   Úgetsize)r(   r$   s     r   r"   r"   -   s=   € åˆt�[Ñ!Ô!ð $Ø�~Š~˜dÑ#Ô#Ð#Ø�<Š<˜ÑÔ˜aÔ Ð r*   c                 ó   — |t           z
  }g }| pd                     dd¦  «                             d¦  «        D �]}d}|                     ¦   «         D ]å}|s|n|dz   |z   }t          ||¦  «        |k    r|}Œ%|r|                     |¦  «         t          ||¦  «        |k    r“t          |¦  «        }	|	dk    rCt          |d|	…         |¦  «        |k    r'|	dz  }	|	dk    rt          |d|	…         |¦  «        |k    °'|                     |d|	…         ¦  «         ||	d…         }t          ||¦  «        |k    °“|}Œæ|                     |¦  «         �Œ|S )zPLines as Kodi would break them (word wrap, over-long words split by characters).Ú z[CR]ú
ú r!   N)Ú
_SAFETY_PXÚreplaceÚsplitr)   Úappendr#   )
r$   r%   ÚwidthÚlimitÚlinesÚ	paragraphÚlineÚwordÚ	candidateÚcuts
             r   Úwrapr?   4   s„  € à•JÑ€EØ€EØ�j˜b×)Ò)¨&°$Ñ7Ô7×=Ò=¸dÑCÔCð ñ ˆ	ØˆØ—O’OÑ%Ô%ð 	ð 	ˆDØ$(Ð?˜˜¨d°S©j¸4Ñ.?ˆIÝ˜) YÑ/Ô/°5Ò8Ð8Ø �ØØð #Ø—’˜TÑ"Ô"Ð"Ý˜T 9Ñ-Ô-°Ò5Ð5Ý˜$‘i”i�Ø˜A’g�g¥*¨T°$°3°$¬Z¸Ñ"CÔ"CÀeÒ"KÐ"KØ˜1‘H�Cð ˜A’g�g¥*¨T°$°3°$¬Z¸Ñ"CÔ"CÀeÒ"KÐ"Kà—’˜T $ 3 $œZÑ(Ô(Ð(Ø˜C˜D˜D”z�õ ˜T 9Ñ-Ô-°Ò5Ð5ð ˆDˆDØ�Š�TÑÔÐÑØ€Lr*   c                 ón   — | pd                      ¦   «         rt          t          | ||¦  «        ¦  «        ndS )Nr0   r   )Ústripr#   r?   )r$   r%   r7   s      r   Ú
line_countrB   L   s6   € Ø15°¸×0BÒ0BÑ0DÔ0DÐK�3�t�D˜) UÑ+Ô+Ñ,Ô,Ð,È!ÐKr*   c                 ó”   — | dk    rdS t           |         d         t           |         d         }}t          ||| dz
  z  z   dz   ¦  «        S )zJHeight of an auto-height textbox with `lines` lines (skin px, rounded up).r   é   é   r!   g+‡ÙÎ÷ï?©r   Úint)r9   r%   ÚfirstÚsteps       r   Úblock_heightrJ   P   sN   € à�‚z€zØˆqÝ˜	Ô" 1Ô%¥u¨YÔ'7¸Ô':ˆ4€EÝˆu�t˜u q™yÑ)Ñ)¨EÑ1Ñ2Ô2Ð2r*   c                 óŽ   — t           |         d         t           |         d         }}| |k     rdS dt          | |z
  |z  ¦  «        z   S )NrD   rE   r   r!   rF   )Úheightr%   rH   rI   s       r   Úlines_for_heightrM   X   sI   € Ý˜	Ô" 1Ô%¥u¨YÔ'7¸Ô':ˆ4€EØ�‚~€~ØˆqØ�s�F˜U‘N tÑ+Ñ,Ô,Ñ,Ð,r*   õ   â€¦c                 óL  — d                      | pd                     ¦   «         ¦  «        } |dk    rdS t          | ||¦  «        }t          |¦  «        |k    r| S |d|…         }|d         }|t          z
  }|r€t          |                     d¦  «        |z   |¦  «        |k    rVd|v r|                     dd¦  «        d         n	|dd…         }|r*t          |                     d¦  «        |z   |¦  «        |k    °V|                     d¦  «        |z   |d<   d                      |¦  «        S )zTTrim text at a word boundary so it wraps to at most max_lines, ending with ellipsis.r2   r0   r   Néÿÿÿÿu	    .,;:â€“-r!   )Újoinr5   r?   r#   r3   r)   ÚrstripÚrsplit)	r$   r%   r7   Ú	max_linesÚellipsisr9   ÚkeptÚlastr8   s	            r   ÚfitrX   _   s0  € à�8Š8�T�Z˜R×&Ò&Ñ(Ô(Ñ)Ô)€DØ�A‚~€~ØˆrÝ��y %Ñ(Ô(€EÝ
ˆ5�z„z�YÒÐØˆØ��)�Ô€DØ�Œ8€DØ•JÑ€EØ
ð D•:˜dŸkšk¨+Ñ6Ô6¸ÑAÀ9ÑMÔMÐPUÒUÐUØ),°¨¨ˆt�{Š{˜3 Ñ"Ô" 1Ô%Ð%¸$¸sÀ¸s¼)ˆð ð D•:˜dŸkšk¨+Ñ6Ô6¸ÑAÀ9ÑMÔMÐPUÒUÐUà�{Š{˜;Ñ'Ô'¨(Ñ2€Dˆ�HØ�8Š8�D‰>Œ>Ðr*   )rN   )Ú__doc__r   r   r   r   r3   r   r   r)   r"   r?   rB   rJ   rM   rX   © r*   r   ú<module>r[      sØ   ðð	ð 	ð €€€Ø €€€àL€
ð $Ø#Ø(ð	ð 	€ð
 €
Ø	€ðð ð ðRð Rð Rð!ð !ð !ðð ð ð0Lð Lð Lð3ð 3ð 3ð-ð -ð -ðð ð ð ð ð r*   