
    ^j8D                        d Z ddlmZ ddlmZ g d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mZmZ dd
lmZ ddlmZ ddlmZ ddZ	 	 	 d	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZy)z.This is a python implementation of wcswidth().    )annotations)Optional)zwcwidth._constantszwcwidth._wcwidthzwcwidth.bisearchzwcwidth.table_graphemezwcwidth.table_vs16   )table_grapheme_overrideswcwidth)bisearch)_EMOJI_ZWJ_SET_ISC_VIRAMA_SET_CATEGORY_MC_TABLE_FITZPATRICK_RANGE_REGIONAL_INDICATOR_SETresolve_terminalget_term_overrides)VS15_WIDE_TO_NARROW)VS16_NARROW_TO_WIDE)GRAPHEME_EXTENDc                   |dz   }||k  rCt        t        | |         t              r'|dz  }||k  rt        t        | |         t              r'||k  rt        | |         dk7  r	 |S |dz  }||k  rbt        | |         t        v rN|dz  }||k  rCt        t        | |         t              r'|dz  }||k  rt        t        | |         t              r'	 |S |S )z
    Scan forward from *start* (base character) to end of a ZWJ grapheme cluster.

    Follows the UAX #29 GB11 pattern (ExtPict Extend* ZWJ x ExtPict) chained repeatedly until no
    more ZWJ joins are found.
    r      )r	   ordr   r
   )textstartendidxs       J/opt/ringagent/.cad-venv/lib/python3.12/site-packages/wcwidth/_wcswidth.py_scan_zwj_cluster_endr      s     !)C
)T#YAq )T#YA )tCy>V# J 	q
 9T#Y>91HC)T#Y Iq )T#Y IJ3J    Nc                   |+| j                         r| j                         rt        |       S dk(  rt        nfd}|t        |       nt	        |t        |             }d}d}d}d}	d}
d}d}t
        d   }t        d   }t        }||k  re| |   }t        |      }|dk(  r"|r|dz  }n|dz   |k  r
d}
d}|d	z  }nd}|dz  }=|d
k(  r|dk\  r ||	|      rd	}d}|dz  }Z|dk(  r!|dk\  rt        |	|      r
|
d	k(  r|dz  }|dz  }|dkD  r|t        v rTd}|dz
  }|dk\  r8t        | |         t        v r$|dz  }|dz  }|dk\  rt        | |         t        v r$|d	z  dk(  r3|}	|dz  }t        d   |cxk  rt        d   k  rn n|	t        v r|dz  } ||      }|dk  ry|dkD  r|rd	}n|r||z  }|}n|}|}|}	|}
d}n&|t        v rd}n|dk\  r ||t              rd	}d}d}nd}|dz  }||k  re|r||z  }|S )a  
    Given a unicode string, return its printable length on a terminal.

    See :ref:`Specification` for details of cell measurement.

    This implementation differs from Markus Khun's original POSIX C implementation, in that this
    ``wcswidth()`` processes graphemes strings yielded by :func:`wcwidth.iter_graphemes` defined by
    `Unicode Standard Annex #29`_. POSIX wcswidth(3) is not grapheme-aware and does not measure many
    kinds of Emojis or complex scripts correctly.

    :param pwcs: Measure width of given unicode string.
    :param n: When ``n`` is None (default), return the length of the entire
        string, otherwise only the first ``n`` characters are measured.
    :param unicode_version: Ignored. Retained for backwards compatibility.

        .. deprecated:: 0.3.0
           Only the latest Unicode version is now shipped.

    :param ambiguous_width: Width to use for East Asian Ambiguous (A)
        characters. Default is ``1`` (narrow). Set to ``2`` for CJK contexts.
    :returns: The width, in cells, needed to display the first ``n`` characters
        of the unicode string ``pwcs``.  Returns ``-1`` for C0 and C1 control
        characters!

    .. _`Unicode Standard Annex #29`: https://www.unicode.org/reports/tr29/
    r   c                    t        | d      S Nautor   cambiguous_widths    r   <lambda>zwcswidth.<locals>.<lambda>c       gaQ`>a r   r   F9.0.0r            T)isasciiisprintablelenr   minr   r   r	   r   r   r   r
   r   r   )pwcsnunicode_versionr$   _wcwidthr   total_widthr   last_measured_idxlast_measured_ucslast_measured_wprev_was_viramacluster_widthvs16_nw_tablevs15_wn_table	_bisearchcharucs	ri_beforejws      `                 r   wcswidthrD   <   s   H 	yT\\^(8(8(:4y)Q.w4aHy#d)c!SY&7CK
COOM'0M'0MI
)Cy$i &=qq3"#"'q"'q &=.!3*M: ! "1HC &=.!3)=9oQR>Rq 1HC <--	!G1fT!W1H!HNIFA 1fT!W1H!H q=A%(+%1HC$Q'3G2DQ2GG'>9q TNq5q5 !}, ! ! # #O#OO#"O!#	#7I(JM "#O#Oq] )` }$r   c                   |+| j                         r| j                         rt        |       S t        |      }|rit	        |      }|j
                  }|j                  }|j                  }	|j                  }
|j                  }|j                  }t        j                  |      }nd}d}d}	d}
d}d}i }dk(  rt        nfd}|t        |       nt        |t        |             }d}d}d}d}d}d}d}d}d}t        d   }t         d   }t"        }||k  r| |   }t%        |      }|d	k(  rk|r|dz  }nb|dz   |k  rS|rG|dk\  rB|t&        v r:t)        | ||      }| || }|j                  |      } | || |z
  z  }d}d}d}d}d}|}td}d}|d
z  }nd}|dz  }|dk(  r$|dk\  r|r
 |||      rn |||      rd
}d}|dz  }|dk(  r5|dk\  r0|}!t#        |!|      }"|	rt#        |!|	      rd}"|"r
|d
k(  r|dz  }|dz  }|dkD  r|t*        v rUd}#|dz
  }$|$dk\  r8t%        | |$         t*        v r$|#dz  }#|$dz  }$|$dk\  rt%        | |$         t*        v r$|#d
z  dk(  r4|}|dz  }Kt,        d   |cxk  rt,        d   k  rn n|t&        v r|dz  }v ||      }%|%dk  ry|%d
k(  r|rt#        ||      rd}%n|%d
k(  r|
rt#        ||
      rd}%|%dk(  r|rt#        ||      rd
}%n|%dk(  r|rt#        ||      rd}%|%dkD  rv|rd
}nh|r`d}&|rN|dk\  rI| ||dz    }'|j                  |'      } | 
|| z   }d}&d}n)| || }(|j                  |(      } | || z   }n||z  }n||z  }|&s|%}|}|}n|%}|}|}|}|}|%}d}n&|t.        v rd}n|dk\  r ||t0              rd
}d}d}nd}|dz  }||k  r|r2|r+|dk\  r&| || }(|j                  |(      } | || z   }|S ||z  }|S ||z  }|S )a  
    Given a unicode string, return its printable length on a terminal given by ``term_program``.

    See :ref:`Specification` for details of cell measurement.

    Unlike :func:`wcswidth`, this function applies per-terminal correction tables for
    emoji presentation and grapheme clusters.

    :param pwcs: Measure width of given unicode string.
    :param n: When ``n`` is None (default), return the length of the entire
        string, otherwise only the first ``n`` characters are measured.
    :param unicode_version: Ignored. Retained for backwards compatibility.
    :param ambiguous_width: Width to use for East Asian Ambiguous (A)
        characters. Default is ``1`` (narrow). Set to ``2`` for CJK contexts.
    :param term_program: Terminal software identifier for table correction.
        ``True`` (default) reads the ``TERM_PROGRAM`` or ``TERM`` environment
        variable for auto-detection.  ``False`` disables override lookup.
        Accepts a canonical terminal name matching :func:`list_term_programs`,
        such as from XTVERSION_, ENQ_, or ``TERM_PROGRAM``.

        .. versionadded:: 0.8.0
    :returns: The width, in cells, needed to display the first ``n`` characters
        of the unicode string ``pwcs``.  Returns ``-1`` for C0 and C1 control
        characters!
     r   c                    t        | d      S r    r   r"   s    r   r%   zwcstwidth.<locals>.<lambda>  r&   r   r   r'   r(   Fr)   r   r*   r+   r,   r-   T)r.   r/   r0   r   r   narrowervs16_narrower
vs15_widerzeroernarrow_widernarrow_zeroerr   getr   r1   r   r   r	   r   r
   r   r   r   r   r   ))r2   r3   r4   r$   term_programterm_canonical	overrides	_narrower_vs16_narrower_vs15_wider_zeroer_narrow_wider_narrow_zeroer_grapheme_overridesr5   r   r6   r   r7   r8   r9   r:   cluster_starttotal_before_clusterr;   r<   r=   r>   r?   r@   cluster_endcluster
override_wbase_ucsvs15_narrowrA   rB   rC   flushed	candidatecluster_texts)      `                                     r   	wcstwidthrc      sC   J 	yT\\^(8(8(:4y &l3N &~6	&&	"00**""!.."006::>J	  *Q.w4aHy#d)c!SY&7CK
C OOMM'0M'0MI
)Cy$i &=qq3'-2-?"7>OQT"UK"#4[AG!4!8!8!AJ!-#
_(DE,.),.)*+*/(*)  #$"'q"'q &=.!3),=~"N,m< ! "1HC &=.!3(H"8];Kx+>#!3q 1HC <--	!G1fT!W1H!HNIFA 1fT!W1H!H q=A%(+%1HC$Q'3G2DQ2GG'>9q TNq56iHS)$<A!VHS'$:A6mm(DA!V8C+HAq5 !&=A+= !%]37 ;I!4!8!8!CJ!-&:Z&G"&()'+M#'>%8%<%<\%J
%1*>*KK'=8K=0K$%M$'M+6( ! #'2$ # #O#OO#"O!#	#7I(JM "#O#Oq_ )b =A#5c2L,00>J%2Z?
  },  =(Kr   )r   strr   intr   re   returnre   )Nr!   r   )
r2   rd   r3   Optional[int]r4   rd   r$   re   rf   re   )Nr!   r   T)r2   rd   r3   rg   r4   rd   r$   re   rO   z
bool | strrf   re   )__doc__
__future__r   typingr   __lazy_modules__ r   r5   r   r	   
_constantsr
   r   r   r   r   r   r   
table_vs15r   
table_vs16r   table_graphemer   r   rD   rc   rF   r   r   <module>rq      s    4 "   '  - - - , + +@ !	H
HH H 	H
 	HZ !#p
pp p 	p
 p 	pr   