
    ijE                        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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_clamp_ambiguous_width)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       Z/home/ubuntu/.cache/pipx/cdb5059130eadca/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 t              dk(  rt        nfd}|t        |       nt        |t        |             }d}d}d}d}	d}
d}d}t        d   }t        d   }t        }||k  rg| |   }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}|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g|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>f       gaQ`>a r   r   F9.0.0r            T)isasciiisprintablelenr   r   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   wcswidthrE   =   s   H 	yT\\^(8(8(:4y,_=O)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_ )b }$r   c                   |+| j                         r| j                         rt        |       S t              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(  r7|dk\  r2|}!t%        |!|      }"|	rt%        |!|	      rd}"|"r
|d
k(  r|dz  }d}|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  }Mt.        d   |cxk  rt.        d   k  rn n|t(        v r|dz  }x ||      }%|%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&|t0        v rd}n|dk\  r ||t2              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/   r0   r1   r   r   r   narrowervs16_narrower
vs15_widerzeroernarrow_widernarrow_zeroerr   getr   r2   r   r   r	   r   r
   r   r   r   r   r   ))r3   r4   r5   r%   term_programterm_canonical	overrides	_narrower_vs16_narrower_vs15_wider_zeroer_narrow_wider_narrow_zeroer_grapheme_overridesr6   r   r7   r   r8   r9   r:   r;   cluster_starttotal_before_clusterr<   r=   r>   r?   r@   rA   cluster_endcluster
override_wbase_ucsvs15_narrowrB   rC   rD   flushed	candidatecluster_texts)      `                                     r   	wcstwidthrd      sS   J 	yT\\^(8(8(:4y,_=O &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a )d =A#5c2L,00>J%2Z?
  },  =(Kr   )r   strr   intr   rf   returnrf   )Nr"   r   )
r3   re   r4   Optional[int]r5   re   r%   rf   rg   rf   )Nr"   r   T)r3   re   r4   rh   r5   re   r%   rf   rP   z
bool | strrg   rf   )__doc__
__future__r   typingr   __lazy_modules__ r   r6   r   r	   
_constantsr
   r   r   r   r   r   r   r   
table_vs15r   
table_vs16r   table_graphemer   r   rE   rd   rG   r   r   <module>rr      s    4 "   '  1 1 1 , + +@ !	K
KK K 	K
 	K` !#s
ss s 	s
 s 	sr   