VBFjdZddlZddlZddlmZejdZejdZejdZejdZ ejd Z ejd Z ejd Z ejej d d ddze j d ddzdzej d ddzdze j d ddzdzdzdzdzej zdzZejdddDZdedejejeeffdZdedefdZdS)aA Terminal escape sequence patterns. This module provides regex patterns for matching terminal escape sequences. All patterns match sequences that begin with ESC (``\x1b``). Before calling re.match with these patterns, callers should first check that the character at the current position is ESC for optimal performance. N) _SGR_PATTERNz4\x1b\]66;([^;\x07\x1b]*);([^\x07\x1b]*)(\x07|\x1b\\)a\x1b\[[\x30-\x3f]*[\x20-\x2f]*[\x40-\x7e]|\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)|\x1b_[^\x1b\x07]*(?:\x07|\x1b\\)|\x1bP[^\x1b\x07]*(?:\x07|\x1b\\)|\x1b\^[^\x1b\x07]*(?:\x07|\x1b\\)|\x1b[()].|\x1b[\x20-\x2f]+[\x30-\x7e]|\x1b[\x40-\x5f]|\x1b[\x30-\x3f]|\x1b[\x60-\x7e]z \x1b\[(\d*)Cz \x1b\[(\d*)Dz \x1b\[(\d*)Gz\x1b\[(\d*)[CDG]z[\x08\r]|\x1b\[(\d*)[CDG](z(?P|z (?Pz(?Pz(?PzU\x1b\]66;(?P[^;\x07\x1b]*);(?P[^\x07\x1b]*)(?P\x07|\x1b\\)z(?P(?:z))c#"K|] }d|dV dS)z(?:)N).0_patterns FC:\PYTHON\_runtimes\venv\Lib\site-packages\wcwidth/escape_sequences.py r Ws>  8 8         )z\x1b\[\d+;\d+rz \x1b\[\d*Kz \x1b\[\d*Jz\x1b\[\d+;\d+Hz \x1b\[\d*Hz \x1b\[\d*Az \x1b\[\d*Bz \x1b\[\d*Pz \x1b\[\d*Mz \x1b\[\d*Lz \x1b\[\d*@z \x1b\[\d+Xz \x1b\[\d*Sz \x1b\[\d*Tz \x1b\[\d*dz\x1b\[\?1049[hl]z\x1b\[\?47[hl]z\x1b8z\x1bDz\x1bMz\x1bctextreturnc#rKd}t|}d}||kr||}|dkrl||kr|||dfVt||}|r-|dfV|}n |dfV|dz }|}n|dz }||k||kr||ddfVdSdS)a Iterate through text, yielding segments with sequence identification. This generator yields tuples of ``(segment, is_sequence)`` for each part of the input text, where ``is_sequence`` is ``True`` if the segment is a recognized terminal escape sequence. :param text: String to iterate through. :returns: Iterator of (segment, is_sequence) tuples. .. versionadded:: 0.3.0 Example:: >>> list(iter_sequences('hello')) [('hello', False)] >>> list(iter_sequences('\x1b[31mred')) [('\x1b[31m', True), ('red', False)] >>> list(iter_sequences('\x1b[1m\x1b[31m')) [('\x1b[1m', True), ('\x1b[31m', True)] rFTrN)lenZERO_WIDTH_PATTERNmatchgroupend)ridxtext_len segment_startcharrs r iter_sequencesrqs, C4yyHM ..Cy 6>>]""M#-.6666',,T377E {{}}d++++iikkTl"""qMM 1HC' ..,xMNN#U++++++ rcvd|vrtd|}td|S)a  Return text with all terminal escape sequences removed. Unknown or incomplete ESC sequences are preserved. :param text: String that may contain terminal escape sequences. :returns: The input text with all escape sequences stripped. .. versionadded:: 0.3.0 .. versionchanged:: 0.7.0 Inner text of OSC 66 (Text sizing protocol) is preserved. Example:: >>> strip_sequences('\x1b[31mred\x1b[0m') 'red' >>> strip_sequences('hello') 'hello' >>> strip_sequences('\x1b[1m\x1b[31mbold red\x1b[0m text') 'bold red text' >>> strip_sequences('\x1b]66;s=2;hello\x07') 'hello' >>> strip_sequences('\x1b]8;id=34;https://example.com\x1b\\[view]\x1b]8;;\x1b\\') '[view]' z]66;z\2)TEXT_SIZING_PATTERNsubr)rs r strip_sequencesr!s:6T"&&ud33  ! !"d + ++r)__doc__retyping sgr_statercompilerrCURSOR_RIGHT_SEQUENCECURSOR_LEFT_SEQUENCECURSOR_HPA_SEQUENCECURSOR_MOVEMENT_SEQUENCE_HORIZONTAL_CURSOR_MOVEMENTpatternreplace_SEQUENCE_CLASSIFYjoinINDETERMINATE_EFFECT_SEQUENCEstrIteratorTupleboolrr!r rr r5sb $#####!bj;  RZ2# ?33"rz/22!bj11 &2:&9:: )bj)EFF  RZ  &7;;   ' / /\1 E EF  ! ) 1 1#7H! L LM   ! ( 0 06H! L LM   e e   ! ! $6#= > AE E !+ HH  0   !!61,1,c4i1H!I1,1,1,1,h,#,#,,,,,,r