
    i9                        d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl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mZ ddlmZ ddlmZmZmZmZmZ dZ e!"                    ddd#                    d  e$dd          D                       dz   d#                    d  e$dd          D                       z             Z%d!de!de&de&fdZ'ddddde!ded         de&de&de&f
dZ(d S )"z8This is a high-level width() supporting terminal output.    )Literal   wcwidth)bisearch)wcswidth)_EMOJI_ZWJ_SET_ISC_VIRAMA_SET_CATEGORY_MC_TABLE_FITZPATRICK_RANGE_REGIONAL_INDICATOR_SET)VS16_NARROW_TO_WIDE)
TextSizingTextSizingParams)ILLEGAL_CTRLVERTICAL_CTRLHORIZONTAL_CTRLZERO_WIDTH_CTRL)ISC_CONSONANT)_SEQUENCE_CLASSIFYTEXT_SIZING_PATTERNCURSOR_MOVEMENT_SEQUENCEINDETERMINATE_EFFECT_SEQUENCEstrip_sequences    c              #   4   K   | ]}t          |          V  d S Nchr.0cs     U/home/piyush/.hermes/hermes-agent/venv/lib/python3.11/site-packages/wcwidth/_width.py	<genexpr>r%       (      ..qCFF......        c              #   4   K   | ]}t          |          V  d S r   r   r!   s     r$   r%   r%   "   r&   r'         textambiguous_widthreturnc                 n    t          t          |                               t                    |          S )z
    Fast path for width() with control_codes='ignore'.

    Strips escape sequences and control characters, then measures remaining text.
    )r.   )r   r   	translate_CONTROL_CHAR_TABLE)r-   r.   s     r$   _width_ignored_codesr3   &   s8     ''(;<<'   r'   parse   )control_codestabsizer.   r6   )r4   strictignorer7   c          	         |                                  r#|                                 rt          |           S |dk    rRt          |           t          k    r:d| vr6d| vr2d| vr.d| vs(t	          j        |           st          j        |           sd}|dk    rt          |           S |dk    }d}d}d}t          |           }d	k    rt          nfd
}	d}
d}d}d}||k     r| |         }|dk    rt          j
        | |          }|s|d	z  }n|                                }|r)t          j
        |          rt          d| d|          |                    d          x}2|rt          |          nd	}|rt          d| d|d          |d	z
  }n|                    d          x}||rt          |          nd	z  }n|                    d          x}H|rt          |          nd	}|r||k    rt          d| d| d| d          t          d||z
            }n|                    d          x}m|                    d          }|                    d          }||J t!          t#          j        ||          ||          }||                              z  }|                                }d}
d}t          ||          }|t*          v r0|r#t          dt-          |          dd |           |d	z  }d}
d}0|t.          v r0|r#t          d!t-          |          dd |           |d	z  }d}
d}i|t0          v rb|dk    r|dk    r||||z  z
  z  }n/|dk    r|dk    r|d	z  }n|dk    r|rt          d"| d#          d}t          ||          }|d	z  }d}
d}|t2          v r|d	z  }d}
d}t-          |          }|d$k    r"|r|d	z  }n|d	z   |k     rd}|d%z  }nd}|d	z  }|d&k    rR|
dk    rLt5          t-          | |
                   t6          d'                   r|d	z  }t          ||          }d}
|d	z  }w|d(k    r|t8          v rhd}|d	z
  }|dk    rHt-          | |                   t8          v r,|d	z  }|d	z  }|dk    rt-          | |                   t8          v ,|d%z  d	k    r	|}|d	z  }n6t:          d         |cxk    rt:          d	         k    rn n|t<          v r|d	z  }$|r$t5          |t>                    r|}
|}d}d)}|d	z  }J |	|          }|dk    r%|r|d	z  }d}||z  }t          ||          }|}
|}d}n@|
dk    r1t5          |t@                    r|d	z  }t          ||          }d}
d}d}n	|tB          v }|d	z  }||k     |r|d	z  }t          ||          }|S )*uw  
    Return printable width of text containing many kinds of control codes and sequences.

    Unlike :func:`wcswidth`, this function handles most control characters and many popular terminal
    output sequences.  Never returns -1.

    :param text: String to measure.
    :param control_codes: How to handle control characters and sequences:

        - ``'parse'`` (default): Track horizontal cursor movement like BS ``\b``, CR ``\r``, TAB
          ``\t``, cursor left and right movement sequences.  Vertical movement (LF, VT, FF) and
          indeterminate terminal sequences are zero-width. OSC 66 Kitty Text Sizing protocol, OSC 8
          Hyperlink, and many other kinds of output sequences are parsed for displayed measurements.
        - ``'strict'``: Like parse, but raises :exc:`ValueError` on control characters with
          indeterminate results of the screen or cursor, like clear or vertical movement. Generally,
          these should be handled with a virtual terminal emulator (like 'pyte').
        - ``'ignore'``: All C0 and C1 control characters and escape sequences are measured as
          width 0. This is the fastest measurement for text already filtered or known not to contain
          any kinds of control codes or sequences. TAB ``\t`` is zero-width; to ensure
          tab expansion, pre-process text using :func:`str.expandtabs`.

    :param tabsize: Tab stop width for ``'parse'`` and ``'strict'`` modes. Default is 8.
        Must be positive. Has no effect when ``control_codes='ignore'``.
    :param ambiguous_width: Width to use for East Asian Ambiguous (A)
        characters. Default is ``1`` (narrow). Set to ``2`` for CJK contexts.
    :returns: Maximum cursor position reached, "extent", accounting for cursor movement sequences
        present in ``text`` according to given parameters.  This represents the rightmost column the
        cursor reaches.  Always a non-negative integer.

    :raises ValueError: If ``control_codes='strict'`` and control characters with indeterminate
        effects, such as vertical movement or clear sequences are encountered, or on unexpected
        C0 or C1 control code. Also raised when ``control_codes`` is not one of the valid values.

    .. versionadded:: 0.3.0

    .. versionchanged:: 0.7.0
       Expanded strict-mode to raise :exc:`ValueError` when cursor-left movement
       (CSI D) would move beyond the beginning of the string. Previously, cursor-left
       was silently clamped to column 0 in all modes.

       Support horizontal cursor sequences (``cub``, ``cuf``, ``hpa``). Cursor-left (``cub``) or
       backspace (``\b``) now overwrites text.  ``column_address`` (``hpa``) and carriage return
       (``\r``) are now parsed, and some values conditionally raise ``ValueError`` when
       ``control_codes='parse'``.

    Examples::

        >>> width('hello')
        5
        >>> width('コンニチハ')
        10
        >>> width('\x1b[31mred\x1b[0m')
        3
        >>> width('\x1b[31mred\x1b[0m', control_codes='ignore')  # same result (ignored)
        3
        >>> width('123\b4')     # backspace overwrites previous cell (outputs '124')
        3
        >>> width('abc\t')      # tab caused cursor to move to column 8
        8
        >>> width('1\x1b[10C')  # '1' + cursor right 10, cursor ends on column 11
        11
        >>> width('1\x1b[10C', control_codes='ignore')   # faster but wrong in this case
        1
    r4   	r9   r8   r   r   c                 &    t          | d          S )Nautor   )r#   r.   s    r$   <lambda>zwidth.<locals>.<lambda>   s    gaQ`>a>a r'   Fz*Indeterminate cursor sequence at position z, hpa_nNz.Indeterminate horizontal position at position z (absolute column unknown)
cforward_ncbackward_nz!Cursor left movement at position z would move z cells left from column z, exceeding string startts_metats_textts_term)r6   zIllegal control character z#xz at position zVertical movement character z-Horizontal movement character \r at position z: indeterminate starting columni      i  z9.0.0i  T)"isasciiisprintablelen_WIDTH_FAST_PATH_MIN_LENr   searchr   r3   r   r   matchgroupr   
ValueErrorintmaxr   r   from_paramsdisplay_widthendr   ordr   r   r   r   r   r   r   r	   r   r   r
   )r-   r6   r7   r.   r8   current_col
max_extentidxtext_len_wcwidthlast_measured_idxlast_measured_ucslast_was_viramaconjunct_pendingcharmseqrD   
target_colrE   rF   
n_backwardrG   rH   rI   	text_sizeucs	ri_beforejws      `                          r$   widthrl   2   s   Z ||~~ $**,, 4yy CII0H$H$HtD 0 0T5E5E T!!,3D99 "+2488 " !)   #D/:::h&F KJ
C4yyH
 *Q..ww4a4a4a4aH O
..Cy 6>>"(s33A (qggii b;A#FF b$%`RU%`%`Y\%`%`aaa WWW---E:/4!;U!J (AS A A"A A A   #-q.KK$%GGL$9$99jFj#G3z???aGKK%&WW]%;%;;kH5@!G[!1!1!1aJ *{":":(6 6 6)6 6CN6 6 6  
 #&az)A"B"BKK!"!3!33g@ggi00Gggi00G".73F3FF *(4WMZZZ!* !*I  9#:#:?#K#KKKeegg " "Z55J < ` !^c$ii!^!^!^Y\!^!^___1HC " "=   b !`D		!`!`!`[^!`!`aaa1HC " " ?""t||!w+*?@@??1$K $8 8 8 8    Z55J1HC " " ?""1HC " " $ii &== qq8##"'q"'q &==.!33D!23446I'6RSS :q  [99
 "1HC <<---	!G1ffT!W1H!H!HNIFA 1ffT!W1H!H!H q=A%%(+%1HC & %Q'3GGGG2DQ2GGGGGG'>99q  	x];; 	 # ##O#1HC HTNNq55 )q #( 1KZ55J # ##OO!##6H(I(I#1KZ55J "#O$!_4OqQ ..T  2q[11
r'   N)r   ))__doc__typingr   r]   r   r   	_wcswidthr   
_constantsr	   r
   r   r   r   
table_vs16r   text_sizingr   r   r6   r   r   r   r   table_graphemer   escape_sequencesr   r   r   r   r   rN   str	maketransjoinranger2   rS   r3   rl    r'   r$   <module>rz      sk   > >                        2 2 2 2 2 2 2 2 2 2 2 2 2 2
 , + + + + + 5 5 5 5 5 5 5 5 X X X X X X X X X X X X ) ) ) ) ) )0 0 0 0 0 0 0 0 0 0 0 0 0 0   mmBGG..EE$--.....
GG..EE$--...../  	 	s 	S 	 	 	 	 	 ;Ba a a
a 67a 	a
 a 	a a a a a ar'   