§
    ‹Ÿjæw  ã                  ó4  — d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	m
Z
 ddlmZ ddlmZ dd	lmZmZ dd
lmZmZmZmZmZ ddlmZmZ ddlmZmZmZ  G d„ dej        ¦  «        Z  G d„ de
¦  «        Z!d=d„Z"d>d$„Z#d?d)„Z$d@d.„Z%dAd3„Z&d@d4„Z'd5d6dd7d8dd9œdBd<„Z(dS )Cz*This is a python implementation of clip().é    )ÚannotationsN)Úislice)ÚLiteralÚCallableÚOptionalÚ
NamedTupleé   )Úwidth)Úiter_graphemes)Ú	HyperlinkÚHyperlinkParams)Ú_SGR_STATE_DEFAULTÚ	_SGRStateÚ_sgr_state_updateÚ_sgr_state_is_activeÚ_sgr_state_to_sequence)Ú
TextSizingÚTextSizingParams)Ú_SEQUENCE_CLASSIFYÚ_HORIZONTAL_CURSOR_MOVEMENTÚINDETERMINATE_EFFECT_SEQUENCEc                  óŠ   — e Zd ZdZ ej        ¦   «         Z ej        ¦   «         Z ej        ¦   «         Z ej        ¦   «         Z	dS )Ú_HyperlinkActionz.Outcome of processing an OSC 8 hyperlink unit.N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚenumÚautoÚNO_CLOSEÚEMPTYÚOUTSIDEÚVISIBLE© ó    úZ/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/wcwidth/_clip.pyr   r      sH   € € € € € Ø8Ð8àˆtŒy‰{Œ{€HØˆDŒI‰KŒK€EØˆdŒi‰kŒk€GØˆdŒi‰kŒk€G€G€Gr%   r   c                  ó€   — e Zd ZU dZded<   dZded<   dZded<   dZd	ed
<   dZd	ed<   dZ	d	ed<   dZ
ded<   dZded<   dS )Ú_HyperlinkResultzn
    Result of processing an OSC 8 hyperlink.

    Only the fields relevant to each action are populated.
    r   Úactionr   ÚintÚ	close_endÚinner_widthÚ ÚstrÚopen_seqÚclipped_innerÚ	close_seqÚclipped_widthÚ
hl_col_endN)r   r   r   r   Ú__annotations__r+   r,   r/   r0   r1   r2   r3   r$   r%   r&   r(   r(   "   s¡   € € € € € € ðð ð ÐÐÑØ€IÐÐÐÑØ€KÐÐÐÑØ€HÐÐÐÑØ€MÐÐÐÑØ€IÐÐÐÑØ€MÐÐÐÑØ€JÐÐÐÑÐÐr%   r(   Úresultr.   Úcaptured_styleúOptional[_SGRState]Úreturnc                ó^   — |�*t          |¦  «        x}r|| z   } t          |¦  «        r| dz  } | S )zà
    Apply SGR prefix/suffix around *result*.

    If an SGR state was captured at the first visible character, prefix the result with the
    corresponding SGR sequence and suffix with a reset if any styles are active.
    Nz[0m)r   r   )r5   r6   Úprefixs      r&   Ú_apply_sgr_wrapr;   3   sG   € ð Ð!Ý+¨NÑ;Ô;Ð;ˆ6ð 	%Ø˜f‘_ˆFÝ Ñ/Ô/ð 	 Ø�iÑˆFØ€Mr%   ÚtextÚstartr*   ÚendÚfillcharÚtabsizeÚambiguous_widthÚcontrol_codesú$Literal['parse', 'strict', 'ignore']Úparamsr   Ú	match_endÚcolc          
     óX  — t          j        | |¦  «        \  }
}|
|fdk    rt          t          j        ¦  «        S | ||
…         }t          ||||¬¦  «        }|dk    rt          t          j        |¬¦  «        S |	|z   }||k    s|	|k    rt          t          j        ||¬¦  «        S t          d||	z
  ¦  «        }||	z
  }t          ||||||d|¬¦  «        }t          ||||¬¦  «        }t          t          j
        |||                     ¦   «         ||                     ¦   «         ||¬¦  «        S )	zé
    Process an OSC 8 hyperlink unit.

    Finds the matching close sequence, measures the inner text width, and determines whether the
    hyperlink is empty, outside the clip window, or visible (requiring inner-text clipping).
    )éÿÿÿÿrH   )rB   r@   rA   r   )r+   )r+   r,   F)r?   r@   rA   Úpropagate_sgrrB   )r+   r,   r/   r0   r1   r2   r3   )r   Ú
find_closer(   r   r    r
   r!   r"   ÚmaxÚclipr#   Ú	make_openÚ
make_close)r<   r=   r>   r?   r@   rA   rB   rD   rE   rF   Úclose_startr+   Ú
inner_textr,   r3   Úinner_clip_startÚinner_clip_endr0   r2   s                      r&   Ú_process_hyperlinkrS   B   s‚  € õ( 'Ô1°$¸	ÑBÔBÑ€K�Ø�YÐ 8Ò+Ð+ÝÕ 0Ô 9Ñ:Ô:Ð:Ø�i Ð+Ô,€JÝØ -Ø¨ðñ ô €Kð
 �aÒÐÝÕ 0Ô 6À)ÐLÑLÔLÐLà�{Ñ"€Jà�UÒÐ˜c Sšj˜jÝÕ 0Ô 8ÀIØ,7ð9ñ 9ô 9ð 	9õ ˜1˜e c™kÑ*Ô*ÐØ˜3‘Y€NåØÐ$ nØ 7Ø'ØØ#ðñ ô €Mõ Ø ]Ø¨ðñ ô €Mõ
 ÝÔ ØØØ×!Ò!Ñ#Ô#Ø#Ø×#Ò#Ñ%Ô%Ø#Øð	ñ 	ô 	ð 	r%   Úcellsúdict[int, tuple[str, int]]Ú	sequencesúlist[tuple[int, int, str]]c                óž  — i }|D ]1\  }}}|                      |g ¦  «                             ||f¦  «         Œ2|                     ¦   «         D ]}	|	                     ¦   «          Œ| r!t	          |                      ¦   «         ¦  «        nd}
|r!t	          |                     ¦   «         ¦  «        nd}t	          |
|¦  «        }g }d}t          ||¦  «        }||k    r—|                     |d¦  «        D ]\  }}|                     |¦  «         Œ||k    r|dz  }ŒC|| v r&| |         \  }}|                     |¦  «         ||z  }n*||cxk    r|
k    rn n|                     |¦  «         |dz  }||k    °—t          |                     ¦   «         ¦  «        D ]+}||k    r#||         D ]\  }}|                     |¦  «         ŒŒ,d 	                    |¦  «        S )z»
    Reconstruct the output string from painter's algorithm state.

    Walks columns left-to-right, interleaving escape sequences and cell content, filling gaps with
    *fillchar*.
    rH   r   r$   r	   r-   )
Ú
setdefaultÚappendÚvaluesÚsortrK   ÚkeysÚminÚgetÚsortedÚjoin)rT   rV   r=   r>   r?   Úseqs_by_colÚcol_posÚorderÚseq_textÚentriesÚmax_cell_colÚmax_seq_colÚmax_colÚpartsÚwalk_colÚ	col_limitÚ_Ú	cell_textÚcell_wÚcs                       r&   Ú_reconstruct_painterrq   „   s#  € ð 57€KØ$-ð Fð FÑ ˆ�˜Ø×Ò˜w¨Ñ+Ô+×2Ò2°E¸8Ð3DÑEÔEÐEÐEØ×%Ò%Ñ'Ô'ð ð ˆØ�Š‰Œˆˆà(-Ð5•3�u—z’z‘|”|Ñ$Ô$Ð$°2€LØ-8Ð@•#�k×&Ò&Ñ(Ô(Ñ)Ô)Ð)¸b€KÝ�, Ñ,Ô,€Gà€EØ€HÝ�G˜SÑ!Ô!€IØ
�iÒ
Ð
à&Ÿ?š?¨8°RÑ8Ô8ð 	#ð 	#‰KˆAˆxØ�LŠL˜Ñ"Ô"Ð"Ð"à�sŠ?ˆ?Ø˜‰MˆHØà�uÐÐØ % h¤ÑˆI�vØ�LŠL˜Ñ#Ô#Ð#Ø˜ÑˆHˆHà˜Ð0Ð0Ò0Ð0 LÒ0Ð0Ð0Ð0Ð0Ø—’˜XÑ&Ô&Ð&Ø˜‰MˆHð! �iÒ
Ð
õ& �K×$Ò$Ñ&Ô&Ñ'Ô'ð 'ð 'ˆØˆyŠ=ˆ=Ø*¨1œ~ð 'ð '‘��8Ø—’˜XÑ&Ô&Ð&Ð&øà�7Š7�5‰>Œ>Ðr%   rI   ÚboolÚstrictútuple[str, Optional[_SGRState]]c               óœ
  ‡— g }	d}
d}d}|rt           nd}|t          | ¦  «        k     �r| |         }|
|k    r,|dvr(|��nø|                      d|dz   ¦  «        }|dk    r�n×|}ŒN|dk    �r]t          j        | |¦  «        }|s|	                     |¦  «         |dz  }Œ‡|                     d¦  «        �;|r9|�7t          ||                     ¦   «         ¦  «        }|                     ¦   «         }Œ×t          j
        |                     ¦   «         ¦  «        x}�r!t          | ||||||||                     ¦   «         |
¬¦
  «
        }|j        t          j        u r<|	                     |                     ¦   «         ¦  «         |                     ¦   «         }n¥|j        t          j        u r|j        }nŠ|j        t          j        u r|
|j        z  }
|j        }ne|	                     |j        ¦  «         |	                     |j        ¦  «         |	                     |j        ¦  «         |r|€|}|
|j        z  }
|j        }�Œ!|                     d	¦  «        x}��|                     d
¦  «        }|                     d¦  «        }|�|€J ‚t-          t/          j        ||¬¦  «        ||¦  «        }|                     |¦  «        }|
|k    r<|
|z   |k    r3|	                     |                     ¦   «         ¦  «         |r|€|}|
|z  }
nM|
|k     rB|
|z   |k    r9g Šdˆfd„}t7          ||
|||||¦  «        }
|	                     ‰¦  «         |r|€|}n|
|z  }
|                     ¦   «         }�ŒH|                     ¦   «         }|r)t;          j        |¦  «        rt=          d|› d|›�¦  «        ‚|	                     |¦  «         |                     ¦   «         }�Œ²|dk    rj|dk    rH|
||
|z  z
  z   }|
|k     r6||
cxk    r|k     rn n|	                     d¦  «         |r|€|}|
dz  }
|
|k     °6n|	                     d¦  «         |dz  }�Œ"t?          tA          | |¬¦  «        ¦  «        }tC          ||¬¦  «        }|dk    r&||
cxk    r|k     rn n�|	                     |¦  «         nz|
|k    r%|
|z   |k    r|	                     |¦  «         |r|€|}nO|
|k     rI|
|z   |k    r@|	                     |tE          ||
|z   ¦  «        tG          ||
¦  «        z
  z  ¦  «         |r|€|}|
|z  }
|t          |¦  «        z  }|t          | ¦  «        k     �°d $                    |	¦  «        |fS )z˜
    Clip text without cursor movement (simple append-to-output path).

    Returns ``(result, captured_style)``.  The caller applies SGR wrapping.
    r   Nz	úr	   rH   Ú
sgr_params©rD   rE   rF   Úts_metaÚts_textÚts_term©rB   Úsr.   Ú_wr*   Ú_colr8   ÚNonec                ó2   •— ‰                      | ¦  «         d S )N)rZ   )r}   r~   r   Úts_partss      €r&   Ú	_ts_writez_clip_simple.<locals>._ts_write'  s   ø€ Ø Ÿš¨Ñ*Ô*Ð*Ð*Ð*r%   ú*Indeterminate cursor sequence at position ú, ú	ú ©r=   ©rA   r-   )r}   r.   r~   r*   r   r*   r8   r€   )%r   ÚlenÚfindr   ÚmatchrZ   Úgroupr   r>   r   ÚparserS   r)   r   r    r!   r+   r"   r,   r/   r0   r1   r   r   Úfrom_paramsÚdisplay_widthÚmake_sequenceÚ_text_sizing_clipÚextendr   Ú
ValueErrorÚnextr   r
   r^   rK   ra   )r<   r=   r>   rI   rA   r?   r@   rs   rB   ÚoutputrF   Úidxr6   Úcurrent_styleÚcharÚnext_escÚmÚhl_stateÚrry   rz   r{   ÚtsÚts_widthrƒ   ÚseqÚnext_tabÚgraphemeÚ
grapheme_wr‚   s                                @r&   Ú_clip_simpler¤   »   s-  ø€ ð* €FØ
€CØ
€Cð +/€NØ*7ÐAÕ&Ð&¸T€Mà
•�D‘	”	Š/‰/Ø�CŒyˆð �#Š:ˆ:˜$ nÐ4Ð4ØÐ)Ùð
 —y’y ¨¨q©Ñ1Ô1ˆHØ˜2Š~ˆ~ÙØˆCØà�6Š>‰>Ý"Ô(¨¨sÑ3Ô3ˆAØð Ø—’˜dÑ#Ô#Ð#Ø�q‘�Øð �wŠw�|Ñ$Ô$Ð0°]Ð0À}ÐG`Ý 1°-ÀÇÂÁÄÑ KÔ K�Ø—e’e‘g”g�Øõ +Ô0°·²±´Ñ;Ô;Ð;ˆxñ Ý&Ø˜%  h°¸Ø!Ø#¨q¯uªu©w¬w¸Cðñ ô �ð
 ”8Õ/Ô8Ð8Ð8Ø—M’M !§'¢'¡)¤)Ñ,Ô,Ð,ØŸ%š%™'œ'�C�CØ”XÕ!1Ô!7Ð7Ð7Øœ+�C�CØ”XÕ!1Ô!9Ð9Ð9Ø˜1œ=Ñ(�CØœ+�C�Cà—M’M !¤*Ñ-Ô-Ð-Ø—M’M !¤/Ñ2Ô2Ð2Ø—M’M !¤+Ñ.Ô.Ð.Ø$ð 7¨Ð)?Ø)6˜Ø˜1œ=Ñ(�CØœ+�CÙð Ÿ7š7 9Ñ-Ô-Ð-�Ñ:ØŸ'š' )Ñ,Ô,�ØŸ'š' )Ñ,Ô,�ØÐ*¨wÐ/BÐ/BÐ/BÝÝ$Ô0°ÈÐVÑVÔVØ˜Wñ&ô &�ð ×+Ò+¨OÑ<Ô<�à˜%’<�< C¨(¡N°cÒ$9Ð$9Ø—M’M "×"2Ò"2Ñ"4Ô"4Ñ5Ô5Ð5Ø$ð 7¨Ð)?Ø)6˜Ø˜8‘O�C�CØ˜3’Y�Y 3¨¡>°EÒ#9Ð#9Ø*,�Hð+ð +ð +ð +ð +ð +å+Ø˜C ¨¨X°Ø!ñ#ô #�Cð —M’M (Ñ+Ô+Ð+Ø$ð 7¨Ð)?Ø)6˜øà˜8‘O�CØ—e’e‘g”g�Ùð —'’'‘)”)ˆCØð Õ7Ô=¸cÑBÔBð Ý ðÀð ð Øðð ñô ð ð �MŠM˜#ÑÔÐØ—%’%‘'”'ˆCÙà�4Š<ˆ<à˜Š{ˆ{Ø '¨S°7©]Ñ";Ñ<�Ø˜H’n�nØ Ð)Ð)Ò)Ð) cÒ)Ð)Ð)Ð)Ð)ØŸš cÑ*Ô*Ð*Ø(ð ;¨^Ð-CØ-:˜NØ˜1‘H�Cð ˜H’n�nøð —’˜dÑ#Ô#Ð#Ø�1‰HˆCÙå� t°3Ð7Ñ7Ô7Ñ8Ô8ˆÝ˜8°_ÐEÑEÔEˆ
ð ˜Š?ˆ?Ø˜Ð!Ð!Ò!Ð!˜cÒ!Ð!Ð!Ð!Ð!Ø—’˜hÑ'Ô'Ð'øØ�EŠ\ˆ\˜c JÑ.°#Ò5Ð5Ø�MŠM˜(Ñ#Ô#Ð#Øð / Ð!7Ø!.�øØ�3ŠYˆY˜3 Ñ+¨eÒ3Ð3Ø�MŠM˜(¥c¨#¨s°ZÑ/?Ñ&@Ô&@Å3ÀuÈcÁ?Ä?Ñ&RÑSÑTÔTÐTØð / Ð!7Ø!.�àˆzÑˆØ�s�8‰}Œ}ÑˆðG •�D‘	”	Š/‰/ðJ �7Š7�6‰?Œ?˜NÐ*Ð*r%   rž   r   Úwrite_cellsúCallable[[str, int, int], None]c                óœ  ‡ ‡‡‡— ‰                       |¦  «        }||k    r-||z   |k    r$ ‰‰                      ¦   «         ||¦  «         ||z   S ||k    s	||z   |k    r||z   S t          d||z
  ¦  «        }t          |||z   ¦  «        |z
  }	‰ j        j        Šg }
‰ j        j        dk    rŠt          t          ‰ j	        ¦  «        ‰ j        j        ¦  «        D ]}|
 
                    |‰f¦  «         Œt          ‰ j        j        t          |
¦  «        z
  ¦  «        D ]}|
 
                    d‰f¦  «         Œn@t          ‰ j	        ¦  «        D ]+}|
 
                    |t          ||¬¦  «        ‰z  f¦  «         Œ,g Šd
ˆˆˆ ˆfd„}||z   }d}|
D ]·\  }}||z   }||k    r|}Œ||	k    r n�t          ||	¦  «        t          ||¦  «        z
  }||k    r3|dk    r-‰s|t          ||¦  «        z   }‰ 
                    ||f¦  «         n@ ||¦  «         |t          ||¦  «        z   }t          |¦  «        D ]} ‰|d	||z   ¦  «         Œ|}Œ¸ ||¦  «         ||z   S )zÂ
    Emit tokens for a text-sizing (OSC 66) sequence, clipped to (start, end).

    Calls *write_cells(text, width, col)* for each emitted cell or sequence. Returns new column
    position.
    r   r-   r‰   Ú	flush_colr*   r8   r€   c                óÄ  •— ‰sd S d„ ‰D ¦   «         }t          d„ ‰D ¦   «         ¦  «        }t          ‰‰j        j        dk    rt	          |¦  «        nd‰j        j        ‰j        j        ‰j        j        ‰j        j        ¦  «        } ‰t          |d 
                    |¦  «        ‰j        ¦  «                             ¦   «         || ¦  «         ‰                     ¦   «          d S )Nc                ó   — g | ]
}|d          ‘ŒS )r   r$   ©Ú.0Úus     r&   ú
<listcomp>z4_text_sizing_clip.<locals>.flush.<locals>.<listcomp>”  s   € Ð-Ð-Ð-˜!��1”Ð-Ð-Ð-r%   c              3  ó&   K  — | ]}|d          V — ŒdS )r	   Nr$   r«   s     r&   ú	<genexpr>z3_text_sizing_clip.<locals>.flush.<locals>.<genexpr>•  s&   è è € Ð2Ð2˜q�a˜”dÐ2Ð2Ð2Ð2Ð2Ð2r%   r   r-   )Úsumr   rD   r
   rŠ   Ú	numeratorÚdenominatorÚvertical_alignÚhorizontal_alignr   ra   Ú
terminatorr‘   Úclear)r¨   ÚtextsÚtotal_wrD   Úpending_unitsÚscalerž   r¥   s       €€€€r&   Úflushz _text_sizing_clip.<locals>.flush‘  sé   ø€ Øð 	ØˆFØ-Ð-˜}Ð-Ñ-Ô-ˆÝÐ2Ð2 MÐ2Ñ2Ô2Ñ2Ô2ˆÝ!ØØœ)œ/¨AÒ-Ð-�C�‰JŒJˆJ°1ØŒIÔ ¤Ô!6ØŒIÔ$ b¤iÔ&@ñ	Bô Bˆð
 	ˆÝ�v˜rŸwšw u™~œ~¨r¬}Ñ=Ô=×KÒKÑMÔMØØñ	ô 	ð 	ð 	×ÒÑÔÐÐÐr%   r	   )r¨   r*   r8   r€   )r�   r‘   rK   r^   rD   r»   r
   r   r   r<   rZ   ÚrangerŠ   )rž   rF   r=   r>   r?   rA   r¥   rŸ   Ú	rel_startÚrel_endÚunitsÚgrm   r¼   Úflush_col_posÚunit_posÚ	unit_textÚunit_wÚunit_endÚoverlapÚ	abs_startÚirº   r»   s   `     `               @@r&   r’   r’   f  s÷  øøøø€ ð  ×Ò Ñ0Ô0€Hð ˆe‚|€|˜˜h™¨#Ò-Ð-Øˆ�B×$Ò$Ñ&Ô&¨°#Ñ6Ô6Ð6Ø�X‰~Ðà
ˆc‚z€z�S˜8‘^ uÒ,Ð,Ø�X‰~Ðõ �A�u˜s‘{Ñ#Ô#€IÝ�#�s˜X‘~Ñ&Ô&¨Ñ,€GØŒIŒO€Eà#%€EØ	„y„˜ÒÐÝ� r¤wÑ/Ô/°´´ÑAÔAð 	%ð 	%ˆAØ�LŠL˜!˜U˜Ñ$Ô$Ð$Ð$Ý�r”y”­¨U©¬Ñ3Ñ4Ô4ð 	&ð 	&ˆAØ�LŠL˜"˜e˜Ñ%Ô%Ð%Ð%ð	&õ   ¤Ñ(Ô(ð 	Qð 	QˆAØ�LŠL˜!�U 1°oÐFÑFÔFÈÑNÐOÑPÔPÐPÐPà+-€Mðð ð ð ð ð ð ð ð ð  ˜)‘O€MØ€HØ"ð ð Ñˆ	�6Ø˜fÑ$ˆØ�yÒ Ð ØˆHØØ�wÒÐØˆEå�h Ñ(Ô(­3¨x¸Ñ+CÔ+CÑCˆØ�fÒÐ ¨!¢ Ø ð ?Ø #¥c¨(°IÑ&>Ô&>Ñ >�Ø× Ò  )¨VÐ!4Ñ5Ô5Ð5Ð5àˆE�-Ñ Ô Ð Ø�c (¨IÑ6Ô6Ñ6ˆIÝ˜7‘^”^ð 8ð 8�Ø�˜H a¨°Q©Ñ7Ô7Ð7Ð7Øˆˆà	€Eˆ-ÑÔÐØ�‰>Ðr%   c               ó  ‡‡‡#‡$‡%‡&— i Š$t          ¦   «         Š&g }	d}
d}d}dŠ#‰rt          ndŠ%	 d&d'ˆ#ˆ$ˆ%ˆˆ&ˆfd„}|t          | ¦  «        k     �r'| |         }||k    r
‰#�|dk    r�n|dk    �rkt          j        | |¦  «        }|s)|	                     ||
|f¦  «         |
dz  }
‰r‰#€‰%Š#|dz  }Œs|                     d¦  «        �;‰r9‰%�7t          ‰%|                     ¦   «         ¦  «        Š%|                     ¦   «         }ŒÃt          j
        |                     ¦   «         ¦  «        x}�rEt          | ||‰|||||                     ¦   «         |¬¦
  «
        }|j        t          j        u rJ|	                     ||
|                     ¦   «         f¦  «         |
dz  }
‰r‰#€‰%Š#|                     ¦   «         }n»|j        t          j        u r|j        }n |j        t          j        u r||j        z  }|j        }n{|	                     ||
|j        f¦  «         |
dz  }
‰r‰#€‰%Š# ||j        |j        |d¬¦  «         ||j        z  }|	                     ||
|j        f¦  «         |
dz  }
|j        }|j        }�Œ1|                     d¦  «        x}�†|                     d¦  «        }|                     d¦  «        }|�|€J ‚t1          t3          j        ||¬¦  «        ||¦  «        }t7          ||||‰||¦  «        }‰r‰#€‰%Š#|                     ¦   «         }�ŒÎ|                     ¦   «         }|r)t9          j        |¦  «        rt;          d|› d|›�¦  «        ‚|                     d¦  «        x}�,|rt=          |¦  «        dz
  nd}|                     ¦   «         }�ŒP|                     d¦  «        x}�x|rt=          |¦  «        nd}||z   }||k     rB||k    r<t?          tA          ||¦  «        tC          ||¦  «        ¦  «        D ]} |‰d|¦  «         Œ|}|                     ¦   «         }�Œß|                     d¦  «        x}�]|rt=          |¦  «        nd}|r||k    rt;          d|› d|› d|› d �¦  «        ‚tA          d||z
  ¦  «        }|                     ¦   «         }�ŒS|	                     ||
|                     ¦   «         f¦  «         |
dz  }
‰r‰#€‰%Š#|                     ¦   «         }�Œž|d!k    r	d}|dz  }�Œ­|d"k    r|dk    r|dz  }|dz  }�ŒÅ|d#k    rj|dk    r:||||z  z
  z   }||k     r(||cxk    r|k     rn n |‰d|¦  «         |dz  }||k     °(n#|	                     ||
d#f¦  «         |
dz  }
‰r‰#€‰%Š#|dz  }�Œ5tE          tG          | |¬$¦  «        ¦  «        }tI          ||¬%¦  «        } | dk    r4||cxk    r|k     r&n n–|	                     ||
|f¦  «         |
dz  }
‰r‰#€‰%Š#nr||k    r|| z   |k    r ||| |¦  «         nU||k     rO|| z   |k    rFtA          ||¦  «        }!t?          tC          ||| z   ¦  «        |!z
  ¦  «        D ]}" |‰d|!|"z   ¦  «         Œ|| z  }|t          |¦  «        z  }|t          | ¦  «        k     �°'tK          ‰$|	||‰¦  «        ‰#fS )(z‘
    Clip text with cursor movement (painter's algorithm path).

    Returns ``(result, captured_style)``.  The caller applies SGR wrapping.
    r   NFr}   r.   Úwr*   Ú	write_colÚis_hyperlinkrr   r8   r€   c                ó   •— t          |¦  «        D ]¿}||z   }|dk    rE‰                     |dz
  d¦  «        d         dk    r"‰	df‰|dz
  <   ‰
                     |dz
  ¦  «         ‰                     |d¦  «        d         dk    r"‰	df‰|dz   <   ‰
                     |dz   ¦  «         ‰                     |d¦  «         ‰
                     |¦  «         ŒÀ| |f‰|<   |r*t          |¦  «        D ]}‰
                     ||z   ¦  «         Œ‰r‰€‰ŠdS dS dS )zIWrite *w* cells of text *s* at *write_col*, handling wide-char splitting.r   r	   )r-   r   é   N)r½   r_   ÚdiscardÚpopÚadd)r}   rË   rÌ   rÍ   ÚoffsetÚsrc_colr6   rT   r˜   r?   Úhyperlink_cellsrI   s         €€€€€€r&   Ú_write_cellsz#_clip_painter.<locals>._write_cellsá  sX  ø€ õ ˜A‘h”hð 		-ð 		-ˆFØ &Ñ(ˆGØ˜Š{ˆ{˜uŸyšy¨°1©°gÑ>Ô>¸qÔAÀQÒFÐFØ&.° ]��g ‘kÑ"Ø×'Ò'¨°!©Ñ4Ô4Ð4Ø�yŠy˜ 'Ñ*Ô*¨1Ô-°Ò2Ð2Ø&.° ]��g ‘kÑ"Ø×'Ò'¨°!©Ñ4Ô4Ð4Ø�IŠI�g˜tÑ$Ô$Ð$Ø×#Ò# GÑ,Ô,Ð,Ð,Ø˜q˜6ˆˆiÑØð 	8Ý ™(œ(ð 8ð 8�Ø×#Ò# I°Ñ$6Ñ7Ô7Ð7Ð7Øð 	+˜^Ð3Ø*ˆNˆNˆNð	+ð 	+Ð3Ð3r%   rv   r	   rw   rx   T)rÍ   ry   rz   r{   r|   r„   r…   Úhpa_nÚ
cforward_nÚcbackward_nz!Cursor left movement at position z would move z cells left from column z, exceeding string startúúr†   rˆ   r‰   )F)
r}   r.   rË   r*   rÌ   r*   rÍ   rr   r8   r€   )&Úsetr   rŠ   r   rŒ   rZ   r�   r   r>   r   rŽ   rS   r)   r   r    r!   r+   r"   r,   r/   r0   r2   r1   r3   r   r   r�   r’   r   r”   r*   r½   rK   r^   r•   r   r
   rq   )'r<   r=   r>   rI   rA   r?   r@   rs   rB   rV   Ú	seq_orderrF   r—   rÖ   r™   r›   rœ   r�   ry   rz   r{   rž   r    r×   rØ   Ú	n_forwardÚmove_endrÉ   rÙ   Ú
n_backwardr¡   r¢   r£   Ú
clip_startrÓ   r6   rT   r˜   rÕ   s'      ` `                             @@@@r&   Ú_clip_painterrâ   »  sa  øøøøøø€ ð* )+€EÝ #¡¤€OØ,.€IØ€Ià
€CØ
€Cð +/€NØ*7ÐAÕ&Ð&¸T€Mð +0ð+ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð* •�D‘	”	Š/‰/Ø�CŒyˆð �#Š:ˆ:˜.Ð4¸Àº¸Ùà�6Š>‰>Ý"Ô(¨¨sÑ3Ô3ˆAØð à× Ò  # y°$Ð!7Ñ8Ô8Ð8Ø˜Q‘�	Ø ð 3 ^Ð%;Ø%2�NØ�q‘�Øð �wŠw�|Ñ$Ô$Ð0°]Ð0À}ÐG`Ý 1°-ÀÇÂÁÄÑ KÔ K�Ø—e’e‘g”g�Øõ +Ô0°·²±´Ñ;Ô;Ð;ˆxñ Ý&Ø˜%  h°¸Ø!Ø#¨q¯uªu©w¬w¸Cðñ ô �ð
 ”8Õ/Ô8Ð8Ð8Ø×$Ò$ c¨9°a·g²g±i´iÐ%@ÑAÔAÐAØ ‘N�IØ$ð 7¨Ð)?Ø)6˜ØŸ%š%™'œ'�C�CØ”XÕ!1Ô!7Ð7Ð7Øœ+�C�CØ”XÕ!1Ô!9Ð9Ð9Ø˜1œ=Ñ(�CØœ+�C�Cà×$Ò$ c¨9°a´jÐ%AÑBÔBÐBØ ‘N�IØ$ð 7¨Ð)?Ø)6˜Ø �L ¤°!´/À3Ø.2ð4ñ 4ô 4ð 4à˜1œ?Ñ*�CØ×$Ò$ c¨9°a´kÐ%BÑCÔCÐCØ ‘N�IØœ,�CØœ+�CÙð Ÿ7š7 9Ñ-Ô-Ð-�Ð:ØŸ'š' )Ñ,Ô,�ØŸ'š' )Ñ,Ô,�ØÐ*¨wÐ/BÐ/BÐ/BÝÝ$Ô0°ÈÐVÑVÔVØ˜Wñ&ô &�õ (Ø˜˜U C¨°?Ø ñ"ô "�ð !ð 3 ^Ð%;Ø%2�NØ—e’e‘g”g�Ùð —'’'‘)”)ˆCØð Õ7Ô=¸cÑBÔBð Ý ðÀð ð Øðð ñô ð ð Ÿš Ñ)Ô)Ð)�Ð6Ø(-Ð4•c˜%‘j”j 1‘n�n°1�Ø—e’e‘g”g�Ùð  Ÿgšg lÑ3Ô3Ð3�
Ð@Ø/9Ð@�C 
™OœO˜O¸q�	Ø ™?�Ø˜’9�9 ¨EÒ!1Ð!1Ý"¥3 s¨E¡?¤?µC¸À#Ñ4FÔ4FÑGÔGð 5ð 5˜Ø$˜ X¨q°!Ñ4Ô4Ð4Ð4Ø�Ø—e’e‘g”g�Ùð  !Ÿwšw }Ñ5Ô5Ð5�ÐBØ1<ÐC�S Ñ-Ô-Ð-À!�
Øð ˜j¨3Ò.Ð.Ý$ð2¸Cð 2ð 2Ø%ð2ð 2Ø?Bð2ð 2ð 2ñô ð õ
 ˜!˜S :Ñ-Ñ.Ô.�Ø—e’e‘g”g�Ùð ×Ò˜c 9¨a¯gªg©i¬iÐ8Ñ9Ô9Ð9Ø˜‰NˆIØð / Ð!7Ø!.�Ø—%’%‘'”'ˆCÙð �4Š<ˆ<ØˆCØ�1‰HˆCÙð �6Š>ˆ>Ø�QŠwˆwØ�q‘�Ø�1‰HˆCÙð �4Š<ˆ<Ø˜Š{ˆ{Ø '¨S°7©]Ñ";Ñ<�Ø˜H’n�nØ Ð)Ð)Ò)Ð) cÒ)Ð)Ð)Ð)Ð)Ø$˜ X¨q°#Ñ6Ô6Ð6Ø˜1‘H�Cð ˜H’n�nøð
 × Ò  # y°$Ð!7Ñ8Ô8Ð8Ø˜Q‘�	Ø ð 3 ^Ð%;Ø%2�NØ�1‰HˆCÙõ � t°3Ð7Ñ7Ô7Ñ8Ô8ˆÝ˜8°_ÐEÑEÔEˆ
ð ˜Š?ˆ?Ø˜Ð!Ð!Ò!Ð!˜cÒ!Ð!Ð!Ð!Ð!Ø× Ò  # y°(Ð!;Ñ<Ô<Ð<Ø˜Q‘�	Ø ð 3 ^Ð%;Ø%2�NøØ�EŠ\ˆ\˜c JÑ.°#Ò5Ð5ØˆL˜ :¨sÑ3Ô3Ð3Ð3Ø�3ŠYˆY˜3 Ñ+¨eÒ3Ð3Ý˜U C™œˆJÝ¥ C¨¨zÑ)9Ñ :Ô :¸ZÑ GÑHÔHð ?ð ?�Ø�˜X q¨*°vÑ*=Ñ>Ô>Ð>Ð>àˆzÑˆØ�s�8‰}Œ}ÑˆðM •�D‘	”	Š/‰/õP    y°%¸¸hÑGÔGÈÐWÐWr%   r‡   é   TrŽ   )r?   r@   rA   rI   rB   Ú
overtypingrä   úOptional[bool]c               ó„  — t          |d¦  «        }||k    rdS |                      ¦   «         r|                      ¦   «         r
| ||…         S d| v }	|r|	sd}|€2|dk    o*d| v p&d| v p"|	o t          t	          j        | ¦  «        ¦  «        }n
|r|dk    rd}|rt          nt          }
t           |
| |||||||d	k    |¬
¦	  «	        Ž S )uÑ  
    Clip text to display columns (start, end) while preserving all terminal sequences.

    This function extracts a substring based on visible column positions rather than
    character indices. Terminal escape sequences are preserved in the output since
    they have zero display width. If a wide character (width 2) is split at
    either boundary, it is replaced with ``fillchar``.

    TAB characters (``\t``) are expanded to spaces up to the next tab stop,
    controlled by the ``tabsize`` parameter. When cursor movement is detected,
    a "painter's algorithm" is used, cursor movements actively change the write
    position, allowing cursor-left and carriage return to overwrite previously
    written cells. It is assumed that ``text`` begins at column 0.

    **OSC 8 hyperlinks** are handled specially: the visible text inside a hyperlink
    is clipped to the requested column range, and the hyperlink is rebuilt around
    the clipped text.  Empty hyperlinks (those with no remaining visible text after
    clipping) are removed::

        >>> clip('\x1b]8;;http://example.com\x07Click This link\x1b]8;;\x07', 6, 10)
        '\x1b]8;;http://example.com\x07This\x1b]8;;\x07'

    :param text: String to clip, may contain terminal escape sequences.
    :param start: Absolute starting column (inclusive, 0-indexed).
    :param end: Absolute ending column (exclusive).
    :param fillchar: Character to use when a wide character must be split at
        a boundary (default space). Must have display width of 1.
    :param tabsize: Tab stop width (default 8). Set to 0 to pass tabs through
        as zero-width (preserved in output but don't advance column position).
    :param ambiguous_width: Width to use for East Asian Ambiguous (A)
        characters. Default is ``1`` (narrow). Set to ``2`` for CJK contexts.
    :param propagate_sgr: If True (default), SGR (terminal styling) sequences
        are propagated. The result begins with any active style at the start
        position and ends with a reset sequence if styles are active.
    :param control_codes: How to handle control characters and sequences:

        - ``'parse'`` (default): Track horizontal cursor movement and clip
          hyperlink text.  Cursor overwrite is always allowed, with best effort
          results; indeterminate sequences (home, clear, reset, etc.) are
          preserved as zero-width.
        - ``'strict'``: Like ``parse``, but raises :exc:`ValueError` on
          sequences with indeterminate effects (cursor home, clear screen,
          reset, vertical movement, etc.) matching :func:`width` behavior.
          Also raises on out-of-bounds horizontal cursor movement.
        - ``'ignore'``: All control characters are treated as zero-width.
          Cursor movement is not tracked (fastest path).

    :param overtyping: Whether to use the painter's algorithm for cursor
        movement (``\b`` backspace, ``\r`` carriage return, and CSI cursor
        left/right/position sequences).  When ``None`` (default), auto-detects
        by scanning for these characters in *text*.  Set to ``False`` for improved
        performance when the caller knows *text* contains no cursor movement
        characters.  Set to ``True`` to force the painter's algorithm (useful
        for testing).  Has no effect when ``control_codes='ignore'``.

    :returns: Substring of ``text`` spanning display columns (start, end),
        with all terminal sequences preserved and wide characters at boundaries
        replaced with ``fillchar``.

    :raises ValueError: If ``control_codes='strict'`` and an indeterminate-effect
        sequence or out-of-bounds cursor movement is encountered.

    SGR (terminal styling) sequences are propagated by default. The result
    begins with any active style and ends with a reset::

        >>> clip('\x1b[1;34mHello world\x1b[0m', 6, 11)
        '\x1b[1;34mworld\x1b[0m'

    Set ``propagate_sgr=False`` to disable this behavior.

    .. versionadded:: 0.3.0

    .. versionchanged:: 0.5.0
       Added ``propagate_sgr`` parameter (default True).

    .. versionchanged:: 0.7.0
       Added ``control_codes`` parameter (default 'parse').
       OSC 8 hyperlink-aware clipping.  OSC 66 text sizing protocol support.
       Added ``overtyping`` parameter (default None, auto-detect).

    Example::

        >>> clip('hello world', 0, 5)
        'hello'
        >>> clip('ä¸­æ–‡å­—', 0, 3)  # Wide char split at column 3
        'ä¸­ '
        >>> clip('a\tb', 0, 10)  # Tab expanded to spaces
        'a       b'
    r   r-   rv   FNÚignorerÛ   rÚ   rs   )	r<   r=   r>   rI   rA   r?   r@   rs   rB   )	rK   ÚisasciiÚisprintablerr   r   Úsearchrâ   r¤   r;   )r<   r=   r>   r?   r@   rA   rI   rB   rä   Úhas_escÚfn_clips              r&   rL   rL   ¡  s-  € õJ ��q‰MŒM€EØ
ˆe‚|€|Øˆrð ‡|‚|�~„~ð ˜$×*Ò*Ñ,Ô,ð Ø�E˜#�IŒÐð ˜ˆn€GØð ˜Wð Øˆð Ðð ˜XÒ%ð KØ�tˆ^ð J˜t t˜|ð JØÐH�$Õ:ÔAÀ$ÑGÔGÑHÔHð 	ˆ
ð
 
ð ˜¨Ò1Ð1Øˆ
Ø)Ð;�mˆm­|€Gå˜G˜GØØØØ#Ø'ØØØ Ò)Ø#ð
ñ 
ô 
ð 
ð 
r%   )r5   r.   r6   r7   r8   r.   )r<   r.   r=   r*   r>   r*   r?   r.   r@   r*   rA   r*   rB   rC   rD   r   rE   r*   rF   r*   r8   r(   )rT   rU   rV   rW   r=   r*   r>   r*   r?   r.   r8   r.   )r<   r.   r=   r*   r>   r*   rI   rr   rA   r*   r?   r.   r@   r*   rs   rr   rB   rC   r8   rt   )rž   r   rF   r*   r=   r*   r>   r*   r?   r.   rA   r*   r¥   r¦   r8   r*   )r<   r.   r=   r*   r>   r*   r?   r.   r@   r*   rA   r*   rI   rr   rB   rC   rä   rå   r8   r.   ))r   Ú
__future__r   r   Ú	itertoolsr   Útypingr   r   r   r   Ú_widthr
   r¢   r   Ú	hyperlinkr   r   Ú	sgr_stater   r   r   r   r   Útext_sizingr   r   Úescape_sequencesr   r   r   ÚEnumr   r(   r;   rS   rq   r¤   r’   râ   rL   r$   r%   r&   ú<module>rö      sU  ðØ 0Ð 0Ø "Ð "Ð "Ð "Ð "Ð "ð €€€Ø Ð Ð Ð Ð Ð à :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :ð Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1ð0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð
 6Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5ð>ð >ð >ð >ð >ð >ð >ð >ð >ð >ð
ð ð ð ð �t”yñ ô ð ðð ð ð ð �zñ ô ð ð"ð ð ð ð?ð ?ð ?ð ?ðD4ð 4ð 4ð 4ðnh+ð h+ð h+ð h+ðVRð Rð Rð RðjcXð cXð cXð cXðV ØØØØ:AØ!%ðHð Hð Hð Hð Hð Hð Hð Hr%   