§
    xÅj”  ã            	      óÖ  — U d Z ddlmZ ddlZddl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mZ ddlmZ ddlmZmZ ddl m!Z!m"Z"m#Z# de$d<   ej%         &                    dd¦  «        rdZ'n	 ddl(m)Z* e*Z'n# e+$ r dZ'Y nw xY w G d„ dej,        ¦  «        Z- G d„ de¦  «        Z.	 dGdHd„Z/dId-„Z0dJd2„Z1dKd6„Z2dLd;„Z3dKd<„Z4	 	 dMd>d?dd@dAddBdCœdNdF„Z)dS )Oz*This is a python implementation of clip().é    )ÚannotationsN)Úislice)ÚLiteralÚCallableÚOptionalÚ
NamedTupleé   )Úwidth)Úiter_graphemes)Ú	HyperlinkÚHyperlinkParams)Ú_SGR_PATTERNÚ_SGR_STATE_DEFAULTÚ	_SGRStateÚ_sgr_state_updateÚ_sgr_state_is_activeÚ_sgr_state_to_sequence)Ú_clamp_ambiguous_width)Ú
TextSizingÚTextSizingParams)Ú_SEQUENCE_CLASSIFYÚ_HORIZONTAL_CURSOR_MOVEMENTÚINDETERMINATE_EFFECT_SEQUENCEz&Optional[Callable[..., Optional[str]]]Ú_c_clipÚWCWIDTH_PYTHONÚ )Úclipc                  óŠ   — 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© ó    ú>C:\Projects\Historical\venv\Lib\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_widthr   ÚstrÚopen_seqÚclipped_innerÚ	close_seqÚclipped_widthÚ
hl_col_endN)r    r!   r"   r#   Ú__annotations__r1   r2   r4   r5   r6   r7   r8   r*   r+   r,   r.   r.   2   s¡   € € € € € € ðð ð ÐÐÑØ€IÐÐÐÑØ€KÐÐÐÑØ€HÐÐÐÑØ€MÐÐÐÑØ€IÐÐÐÑØ€MÐÐÐÑØ€JÐÐÐÑÐÐr+   r.   Úresultr3   Úcaptured_styleúOptional[_SGRState]Ú	end_styleÚreturnc                óf   — |�.t          |¦  «        x}r|| z   } t          |€|n|¦  «        r| dz  } | S )aZ  
    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 remain active at the end
    of the clipped region.

    *end_style* is the style in effect after the final SGR sequence emitted within the clip window,
    or ``None`` when no such sequence was emitted, the style at the first visible character is still
    in effect.  This matches :func:`wcwidth.propagate_sgr`, which decides the trailing reset by SGR
    state at the end of each line.
    Nz[0m)r   r   )r:   r;   r=   Úprefixs       r,   Ú_apply_sgr_wraprA   C   sP   € ð Ð!Ý+¨NÑ;Ô;Ð;ˆ6ð 	%Ø˜f‘_ˆFÝ°)Ð2C  ÈÑSÔSð 	 Ø�iÑˆFØ€Mr+   ÚtextÚstartr0   ÚendÚfillcharÚtabsizeÚambiguous_widthÚterm_programú
bool | strÚcontrol_codesú$Literal['parse', 'strict', 'ignore']Úparamsr   Ú	match_endÚcolc               ó^  — 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).
    )éÿÿÿÿrP   )rJ   rF   rG   rH   r   )r1   )r1   r2   F)rE   rF   rG   rH   Úpropagate_sgrrJ   )r1   r2   r4   r5   r6   r7   r8   )r   Ú
find_closer.   r   r&   r
   r'   r(   Úmaxr   r)   Ú	make_openÚ
make_close)rB   rC   rD   rE   rF   rG   rH   rJ   rL   rM   rN   Úclose_startr1   Ú
inner_textr2   r8   Úinner_clip_startÚinner_clip_endr5   r7   s                       r,   Ú_process_hyperlinkrZ   Y   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(| |         \  }}|                     |¦  «         ||pd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*.
    rP   r   r*   r	   r   )
Ú
setdefaultÚappendÚvaluesÚsortrS   ÚkeysÚminÚgetÚsortedÚjoin)r[   r]   rC   rD   rE   Ú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_painterrx   Ÿ   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+   rQ   Úboolú4tuple[str, Optional[_SGRState], Optional[_SGRState]]c               óÀ  ‡ — |dk    }	g }
d}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¦  «        �m|rk|�it          ||                     ¦   «         ¦  «        }|�/||k     r)|
                     |                     ¦   «         ¦  «         |}|                     ¦   «         }�Œ	t          j
        |                     ¦   «         ¦  «        x}�rft          | |||||||||                     ¦   «         |¬	¦  «        }|j        t          j        u r<|
                     |                     ¦   «         ¦  «         |                     ¦   «         }né|j        t          j        u r|j        }nÎ|j        t          j        u r||j        z  }|j        }n©|
                     |j        ¦  «         |
                     |j        ¦  «         |
                     |j        ¦  «         |r|€|}|rB|�@t-          j        |j        ¦  «        D ]&}t          ||                     ¦   «         ¦  «        }|}Œ'||j        z  }|j        }�Œ˜|                     d
¦  «        x}��|                     d¦  «        pd}|                     d¦  «        }|€J ‚t1          t3          j        ||¬¦  «        ||¦  «        }|                     |¦  «        }||k    r<||z   |k    r3|
                     |                     ¦   «         ¦  «         |r|€|}||z  }nN||k     rC||z   |k    r:g Š dˆ fd„}t;          ||||||||¦  «        }|
                     ‰ ¦  «         |r|€|}n||z  }|                     ¦   «         }�ŒÀ|                     ¦   «         }|	r)t?          j        |¦  «        rtA          d|› d|›�¦  «        ‚|
                     |¦  «         |                     ¦   «         }�Œ*|dk    rz|dk    rH||||z  z
  z   }||k     r6||cxk    r|k     rn n|
                     d¦  «         |r|€|}|dz  }||k     °6n%||cxk    r|k     rn n|
                     d¦  «         |dz  }�ŒªtC          tE          | |¬¦  «        ¦  «        }tG          |||¬¦  «        }|dk    r&||cxk    r|k     rn n�|
                     |¦  «         nz||k    r%||z   |k    r|
                     |¦  «         |r|€|}nO||k     rI||z   |k    r@|
                     |tI          |||z   ¦  «        tK          ||¦  «        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, end_style)``.  The caller applies SGR wrapping.
    Ústrictr   Nú	úr	   rP   Ú
sgr_params©rL   rM   rN   Úts_metaÚts_textr   Úts_term©rJ   Úsr3   Ú_wr0   Ú_colr>   ÚNonec                ó2   •— ‰                      | ¦  «         d S ©N)ra   )r…   r†   r‡   Úts_partss      €r,   Ú	_ts_writez_clip_simple.<locals>._ts_writeJ  s   ø€ Ø Ÿš¨Ñ*Ô*Ð*Ð*Ð*r+   ú*Indeterminate cursor sequence at position ú, ú	ú ©rC   ©rG   rH   )r…   r3   r†   r0   r‡   r0   r>   rˆ   )'r   ÚlenÚfindr   Úmatchra   Úgroupr   rD   r   ÚparserZ   r/   r   r&   r'   r1   r(   r2   r4   r5   r6   r   Úfinditerr   r   Úfrom_paramsÚdisplay_widthÚmake_sequenceÚ_text_sizing_clipÚextendr   Ú
ValueErrorÚnextr   r
   re   rS   rh   )!rB   rC   rD   rQ   rG   rH   rE   rF   rJ   r|   ÚoutputrN   Úidxr;   r=   Úcurrent_styleÚcharÚnext_escÚmÚhl_stateÚrÚsgr_mr�   r‚   rƒ   ÚtsÚts_widthrŒ   ÚseqÚnext_tabÚgraphemeÚ
grapheme_wr‹   s!                                   @r,   Ú_clip_simpler¯   Ö   sã  ø€ ð* ˜hÒ&€Fà€FØ
€CØ
€CØ*.€NØ%)€IØ*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�Ø!Ð-°#¸²)°)Ø—M’M !§'¢'¡)¤)Ñ,Ô,Ð,Ø -�IØ—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˜ð %ð 6¨Ð)BÝ%1Ô%:¸1¼?Ñ%KÔ%Kð 6ð 6˜EÝ,=¸mÈUÏ[Ê[É]Ì]Ñ,[Ô,[˜MØ(5˜I˜IØ˜1œ=Ñ(�CØœ+�CÙð Ÿ7š7 9Ñ-Ô-Ð-�Ñ:ØŸ'š' )Ñ,Ô,Ð2°�ØŸ'š' )Ñ,Ô,�ØÐ*Ð*Ð*ÝÝ$Ô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°_Ø(4ð6ñ 6ô 6ˆ
ð ˜Š?ˆ?Ø˜Ð!Ð!Ò!Ð!˜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‰}Œ}Ñˆðe •�D‘	”	Š/‰/ðh �7Š7�6‰?Œ?˜N¨IÐ5Ð5r+   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¦  «         ŒnAt          ‰ 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_colr0   r>   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   rL   r
   r“   Ú	numeratorÚdenominatorÚvertical_alignÚhorizontal_alignr   rh   Ú
terminatorr›   Úclear)r³   ÚtextsÚtotal_wrL   Ú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³   r0   r>   rˆ   )rš   r›   rS   re   rL   rÆ   r
   r   r   rB   ra   Úranger“   )r©   rN   rC   rD   rE   rG   rH   r°   rª   Ú	rel_startÚrel_endÚunitsÚgrt   rÇ   Úflush_col_posÚunit_posÚ	unit_textÚunit_wÚunit_endÚoverlapÚ	abs_startÚirÅ   rÆ   s   `      `               @@r,   rœ   rœ   ‹  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˜Ñ%Ô%Ð%Ð%ð	&õ   ¤Ñ(Ô(ð 	?ð 	?ˆAØ�LŠLØ•E˜!¨_Ø'3ð5ñ 5ô 5Ø7<ñ=ð >ñ?ô ?ð ?ð ?ð ,.€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               ó„  ‡‡‡(‡)‡*‡+‡,‡-— |dk    }	i Š)t          ¦   «         Š+g Š-dŠ,d}
d}dŠ(d}‰rt          ndŠ*d}	 d+d,ˆ(ˆ)ˆ*ˆˆ+ˆˆ,ˆ-fd„}|t          | ¦  «        k     �rQ| |         }|
|k    rÂ|dvr¾|�d|cxk    r|k     r�n n~t          |                      d¦  «        |                      d¦  «        |                      d¦  «        ¦  «        |k     rd}n-t          j        | |¦  «        }|€dn|                     ¦   «         }|dk     r(‰(��n¥|                      d|dz   ¦  «        }|dk    r�n„|}Œä|dk    �rÈt          j
        | |¦  «        }|s$‰-                     |
‰,|f¦  «         ‰,dz  Š,|dz  }�Œ&|                     d¦  «        �u‰rs‰*�qt          ‰*|                     ¦   «         ¦  «        Š*‰(�7|
|k     r1‰-                     |
‰,|                     ¦   «         f¦  «         ‰,dz  Š,‰*}|                     ¦   «         }�Œ°t          j        |                     ¦   «         ¦  «        x}�r~t!          | ||‰||||||                     ¦   «         |
¬¦  «        }|j        t$          j        u rD‰-                     |
‰,|                     ¦   «         f¦  «         ‰,dz  Š,|                     ¦   «         }nù|j        t$          j        u r|j        }nÞ|j        t$          j        u r|
|j        z  }
|j        }n¹‰-                     |
‰,|j        f¦  «         ‰,dz  Š, ||j        |j        |
d¬¦  «         |
|j        z  }
‰-                     |
‰,|j        f¦  «         ‰,dz  Š,‰rB‰*�@t9          j        |j        ¦  «        D ]&}t          ‰*|                     ¦   «         ¦  «        Š*‰*}Œ'|j        }
|j        }�ŒW|                     d¦  «        x}��|                     d¦  «        pd}|                     d¦  «        }|€J ‚t?          tA          j!        ||¬¦  «        ||¦  «        }tE          ||
||‰|||¦  «        }
|                     ¦   «         }�Œï|                     ¦   «         }|	r)tG          j
        |¦  «        rtI          d|› d|›�¦  «        ‚|                     d ¦  «        x}�,|rtK          |¦  «        dz
  nd}
|                     ¦   «         }�Œq|                     d!¦  «        x}�x|rtK          |¦  «        nd}|
|z   }|
|k     rB||k    r<tM          t          |
|¦  «        tO          ||¦  «        ¦  «        D ]} |‰d|¦  «         Œ|}
|                     ¦   «         }�Œ |                     d"¦  «        x} �W| rtK          | ¦  «        nd}!|	r|!|
k    rtI          d#|› d$|!› d%|
› d&�¦  «        ‚|
|!z  }
|
dk     rd}
|                     ¦   «         }�Œn‰-                     |
‰,|                     ¦   «         f¦  «         ‰,dz  Š,|                     ¦   «         }�Œ³|dk    r	d}
|dz  }�ŒÂ|dk    r|
dk    r|
dz  }
|dz  }�ŒÚ|d'k    r„|dk    rJ|
||
|z  z
  z   }"tM          t          |
|¦  «        tO          |"|¦  «        ¦  «        D ]}# |d(d|#¦  «         Œ|"}
n-||
cxk    r|k     r n n‰-                     |
‰,d'f¦  «         ‰,dz  Š,|dz  }�ŒdtQ          tS          | |¬)¦  «        ¦  «        }$tU          |$||¬*¦  «        }%|%dk    r.||
cxk    r|k     r n n�‰-                     |
‰,|$f¦  «         ‰,dz  Š,nr|
|k    r|
|%z   |k    r ||$|%|
¦  «         nU|
|k     rO|
|%z   |k    rFt          ||
¦  «        }&tM          tO          ||
|%z   ¦  «        |&z
  ¦  «        D ]}' |‰d|&|'z   ¦  «         Œ|
|%z  }
|t          |$¦  «        z  }|t          | ¦  «        k     �°QtW          ‰)‰-||‰¦  «        ‰(|fS )-zú
    Clip text, painting cells so that cursor movement can overwrite them.

    Text with no cursor movement to resolve is clipped by _clip_simple() instead.

    Returns ``(result, captured_style, end_style)``.  The caller applies SGR wrapping.
    r|   r   NFr…   r3   Úwr0   Ú	write_colÚis_hyperlinkry   r>   rˆ   c                óz  •— |dk    r'| r#‰                      |‰| f¦  «         ‰dz  Š‰r‰€‰ŠdS 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	   N)r   r   é   )ra   rÈ   rf   ÚdiscardÚpopÚadd)r…   rÖ   r×   rØ   ÚoffsetÚsrc_colr;   r[   r¢   rE   Úhyperlink_cellsrQ   Ú	seq_orderr]   s         €€€€€€€€r,   Ú_write_cellsz#_clip_painter.<locals>._write_cells  s¤  ø€ ð �Š6ˆ6àð 3Ø× Ò  )¨Y¸Ð!:Ñ;Ô;Ð;Ø˜Q‘�	Ø ð 3 ^Ð%;Ø%2�NØˆFÝ˜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+   r}   úúr~   rP   r	   r   r€   T)rØ   r�   r‚   r   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 startr�   r�   r‘   r’   )F)
r…   r3   rÖ   r0   r×   r0   rØ   ry   r>   rˆ   ),Úsetr   r“   rS   Úrfindr   ÚsearchrD   r”   r   r•   ra   r–   r   r   r—   rZ   r/   r   r&   r'   r1   r(   r2   r4   r5   r7   r6   r   r˜   r8   r   r   r™   rœ   r   rž   r0   rÈ   re   rŸ   r   r
   rx   ).rB   rC   rD   rQ   rG   rH   rE   rF   rJ   r|   rN   r¡   r=   Únext_movementrâ   r£   Úfoundr¤   r¥   r¦   r§   r¨   r�   r‚   rƒ   r©   r«   rå   ræ   Ú	n_forwardÚmove_endrÔ   rç   Ú
n_backwardr¬   Úfill_colr­   r®   Ú
clip_startrÞ   r;   r[   r¢   rà   rá   r]   s.      `  `                                 @@@@@@r,   Ú_clip_painterrò   ã  s†	  øøøøøøøø€ ð. ˜hÒ&€FØ(*€EÝ #¡¤€OØ,.€IØ€Ià
€CØ
€Cð +/€Nð &*€IØ*7ÐAÕ&Ð&¸T€Mà#'€Mð +0ð+ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð: •�D‘	”	Š/‰/Ø�CŒyˆð �#Š:ˆ:˜$ nÐ4Ð4àÐ$¨¨]Ð(@Ð(@Ò(@Ð(@¸SÒ(@Ð(@Ð(@Ð(@Ð(@å�t—z’z &Ñ)Ô)¨4¯:ª:°dÑ+;Ô+;¸T¿ZºZÈÑ=OÔ=OÑPÔPÐSVÒVÐVØ$&�M�Må7Ô>¸tÀSÑIÔI�EØ*/¨- B B¸U¿YºY¹[¼[�MØ˜qÒ Ð Ø!Ð-ÙØŸ9š9 V¨S°1©WÑ5Ô5�Ø˜r’>�>ÙØ�Øà�6Š>‰>Ý"Ô(¨¨sÑ3Ô3ˆAØð à× Ò  # y°$Ð!7Ñ8Ô8Ð8Ø˜Q‘�	Ø�q‘�Ùð �wŠw�|Ñ$Ô$Ð0°]Ð0À}ÐG`Ý 1°-ÀÇÂÁÄÑ KÔ K�Ø!Ð-°#¸²)°)Ø×$Ò$ c¨9°a·g²g±i´iÐ%@ÑAÔAÐAØ ‘N�IØ -�IØ—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ØŸ%š%™'œ'�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Ø �L ¤°!´/À3Ø.2ð4ñ 4ô 4ð 4à˜1œ?Ñ*�CØ×$Ò$ c¨9°a´kÐ%BÑCÔCÐCØ ‘N�Ið %ð 6¨Ð)BÝ%1Ô%:¸1¼?Ñ%KÔ%Kð 6ð 6˜EÝ,=¸mÈUÏ[Ê[É]Ì]Ñ,[Ô,[˜MØ(5˜I˜IØœ,�CØœ+�CÙð Ÿ7š7 9Ñ-Ô-Ð-�Ð:ØŸ'š' )Ñ,Ô,Ð2°�ØŸ'š' )Ñ,Ô,�ØÐ*Ð*Ð*ÝÝ$Ô0°ÈÐVÑVÔVØ˜Wñ&ô &�õ (Ø˜˜U C¨°?Ø Ø ñ"ô "�ð —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ñô ð ð
 �zÑ!�Ø˜’7�7Ø�CØ—e’e‘g”g�Ùð ×Ò˜c 9¨a¯gªg©i¬iÐ8Ñ9Ô9Ð9Ø˜‰NˆIØ—%’%‘'”'ˆCÙð �4Š<ˆ<ØˆCØ�1‰HˆCÙð �6Š>ˆ>Ø�QŠwˆwØ�q‘�Ø�1‰HˆCÙð �4Š<ˆ<Ø˜Š{ˆ{Ø '¨S°7©]Ñ";Ñ<�Ý %¥c¨#¨u¡o¤oµs¸8ÀSÑ7IÔ7IÑ JÔ Jð 3ð 3�HØ �L  a¨Ñ2Ô2Ð2Ð2Ø��Ø˜#Ð#Ð#Ò#Ð# Ò#Ð#Ð#Ð#Ð#Ø× Ò  # y°$Ð!7Ñ8Ô8Ð8Ø˜Q‘�	Ø�1‰HˆCÙõ � t°3Ð7Ñ7Ô7Ñ8Ô8ˆÝ˜8°_Ø(4ð6ñ 6ô 6ˆ
ð ˜Š?ˆ?Ø˜Ð!Ð!Ò!Ð!˜cÒ!Ð!Ð!Ð!Ð!Ø× Ò  # y°(Ð!;Ñ<Ô<Ð<Ø˜Q‘�	øØ�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‰}Œ}Ñˆðq •�D‘	”	Š/‰/õt ! ¨	°5¸#¸xÑHÔHØ˜Ið'ð 'r+   rP   r�   é   Tr—   F)rE   rF   rG   rQ   rJ   Ú
overtypingrH   rô   úOptional[bool]c               óÌ  — t          |d¦  «        }|dk     r$|dk    rt          d|› �¦  «        ‚t          j        }||k    rdS |                      ¦   «         r|                      ¦   «         r
| ||…         S t          �S|dk    rM|durI|dk    rCt          |¦  «        dk    r0|                     ¦   «         rt          | ||||||||	¬	¦	  «	        }
|
�|
S t          |¦  «        }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          t          | |||||	|||¬¦	  «	        Ž S t          t          | |||||	|||¬¦	  «	        Ž S )u÷  
    Clip text to display columns (start, end) while preserving all terminal sequences.

    This function extracts a substring using visible column positions. Terminal escape sequences
    are preserved in output. If a wide character (width of 2) is
    split at a 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 unless
    ``overtyping=False`` is set.  Cursor movement control codes are parsed for their effects instead
    of ignored.  For these operations, it is assumed that ``text`` begins at column 0.

    For text containing **OSC 8 hyperlinks**, the visible text inside a hyperlink is clipped to the
    requested column range and the hyperlink sequence is rebuilt::

        >>> 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), default ``0``.
    :param end: Absolute ending column (exclusive).  The default value, ``-1``,
        signifies "to the end of the line", clipping only from *start* without
        requiring the caller to measure the display width of *text*.
    :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, matching :func:`propagate_sgr`.  The result begins with
        any style active at the start position, retains any style changes
        occurring within the clipped region at their original position, and
        ends with a reset sequence if styles are active at the end position.
    :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'``.
    :param term_program: Terminal software identifier for table correction.
        ``False`` (default) disables override lookup.  ``True`` reads the
        ``TERM_PROGRAM`` or ``TERM`` environment variable for auto-detection.
        Accepts a canonical terminal name matching :func:`list_term_programs`,
        such as from XTVERSION_, ENQ_, or ``TERM_PROGRAM``.

        .. versionadded:: 0.8.0

    :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 ``end`` is negative and not ``-1``, or 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'
        >>> clip('\x1b[1mbold\x1b[m normal', 1, 9)
        '\x1b[1mold\x1b[m norm'

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

    .. note::

       Segmentation follows UAX #29 grapheme clusters. Tamil, Kannada and Sinhala may be clipped
       short of ``end`` and leave a bare virama at the boundary. Correct rendering of these
       languages is not specified by unicode.org standards, and no terminal emulator or editor
       handles them legibly, so this library function makes no attempt at accommodating them.

    .. 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).

    .. versionchanged:: 0.8.4
       ``start`` now defaults to ``0`` and ``end`` to ``-1``, meaning "to the
       end of the line"::

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

    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   rP   z5end must be -1 (to end of line) or non-negative, got r   Nr—   Tr	   )rE   rF   rG   rQ   rJ   rH   r~   FÚignorerã   rä   )	rB   rC   rD   rQ   rG   rH   rE   rF   rJ   )rS   rž   ÚsysÚmaxsizeÚisasciiÚisprintabler   r“   r   ry   r   rê   rA   rò   r¯   )rB   rC   rD   rE   rF   rG   rQ   rJ   rô   rH   r:   Úhas_escs               r,   r   r   í  s%  € õ| ��q‰MŒM€EØ
ˆQ‚w€wØ�"Š9ˆ9ÝØMÈÐMÐMñOô Oð Oõ ŒkˆØ
ˆe‚|€|Øˆrð ‡|‚|�~„~ð ˜$×*Ò*Ñ,Ô,ð Ø�E˜#�IŒÐõ 	ÐØ Ò(Ð(Ø $Ð&Ð&Ø˜!’�Ý�H‘” Ò"Ð" x×'7Ò'7Ñ'9Ô'9Ð"ÝØ�%˜ x¸Ø+¸=Ø'°lðDñ Dô Dˆð ÐØˆMå,¨_Ñ=Ô=€Oð ˜ˆn€GØð ˜Wð Øˆð Ðð ˜XÒ%ð KØ�tˆ^ð J˜t t˜|ð JØÐH�$Õ:ÔAÀ$ÑGÔGÑHÔHð 	ˆ
ð
 
ð ˜¨Ò1Ð1Øˆ
àð Ý¥ØØØØ'Ø+Ø%ØØØ'ð
!
ñ 
!
ô 
!
ð 
ð 
	õ �LØØØØ#Ø'Ø!ØØØ#ð
ñ 
ô 
ð 
ð 
r+   rŠ   )r:   r3   r;   r<   r=   r<   r>   r3   )rB   r3   rC   r0   rD   r0   rE   r3   rF   r0   rG   r0   rH   rI   rJ   rK   rL   r   rM   r0   rN   r0   r>   r.   )r[   r\   r]   r^   rC   r0   rD   r0   rE   r3   r>   r3   )rB   r3   rC   r0   rD   r0   rQ   ry   rG   r0   rH   rI   rE   r3   rF   r0   rJ   rK   r>   rz   )r©   r   rN   r0   rC   r0   rD   r0   rE   r3   rG   r0   rH   rI   r°   r±   r>   r0   )r   rP   )rB   r3   rC   r0   rD   r0   rE   r3   rF   r0   rG   r0   rQ   ry   rJ   rK   rô   rõ   rH   rI   r>   r3   )5r#   Ú
__future__r   Úosrø   r$   Ú	itertoolsr   Útypingr   r   r   r   Ú_widthr
   r­   r   Ú	hyperlinkr   r   Ú	sgr_stater   r   r   r   r   r   Ú
_constantsr   Útext_sizingr   r   Úescape_sequencesr   r   r   r9   Úenvironrf   r   Ú
_wcwidth_cr   Ú_c_clip_implÚImportErrorÚEnumr   r.   rA   rZ   rx   r¯   rœ   rò   r*   r+   r,   ú<module>r     s  ðØ 0Ð 0Ð 0Ø "Ð "Ð "Ð "Ð "Ð "ð 
€	€	€	Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ð Ð à :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :ð Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1ð0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð /Ð .Ð .Ð .Ð .Ð .Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5ð>ð >ð >ð >ð >ð >ð >ð >ð >ð >ð 0Ð /Ð /Ñ /Ø„:‡>‚>Ð" BÑ'Ô'ð 	Ø€G€Gðà4Ð4Ð4Ð4Ð4Ð4ð ˆˆøð ð ð ð Øˆˆˆðøøøðð ð ð ð �t”yñ ô ð ðð ð ð ð �zñ ô ð ð$ 6:ðð ð ð ð ð,Cð Cð Cð CðL4ð 4ð 4ð 4ðnr6ð r6ð r6ð r6ðjUð Uð Uð UðpG'ð G'ð G'ð G'ðX ØðCð
 ØØØØ:AØ!%Ø$ðCð Cð Cð Cð Cð Cð Cð Cs   ÂB ÂBÂB