__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
import re
import unicodedata
import functools
from .types import CharBuffer, CharWidths
from .trace import trace
ANSI_ESCAPE_SEQUENCE = re.compile(r"\x1b\[[ -@]*[A-~]")
ZERO_WIDTH_BRACKET = re.compile(r"\x01.*?\x02")
ZERO_WIDTH_TRANS = str.maketrans({"\x01": "", "\x02": ""})
@functools.cache
def str_width(c: str) -> int:
if ord(c) < 128:
return 1
w = unicodedata.east_asian_width(c)
if w in ("N", "Na", "H", "A"):
return 1
return 2
def wlen(s: str) -> int:
if len(s) == 1 and s != "\x1a":
return str_width(s)
length = sum(str_width(i) for i in s)
# remove lengths of any escape sequences
sequence = ANSI_ESCAPE_SEQUENCE.findall(s)
ctrl_z_cnt = s.count("\x1a")
return length - sum(len(i) for i in sequence) + ctrl_z_cnt
def unbracket(s: str, including_content: bool = False) -> str:
r"""Return `s` with \001 and \002 characters removed.
If `including_content` is True, content between \001 and \002 is also
stripped.
"""
if including_content:
return ZERO_WIDTH_BRACKET.sub("", s)
return s.translate(ZERO_WIDTH_TRANS)
def disp_str(buffer: str) -> tuple[CharBuffer, CharWidths]:
r"""Decompose the input buffer into a printable variant.
Returns a tuple of two lists:
- the first list is the input buffer, character by character;
- the second list is the visible width of each character in the input
buffer.
Examples:
>>> utils.disp_str("a = 9")
(['a', ' ', '=', ' ', '9'], [1, 1, 1, 1, 1])
"""
chars: CharBuffer = []
char_widths: CharWidths = []
if not buffer:
return chars, char_widths
for c in buffer:
if c == "\x1a": # CTRL-Z on Windows
chars.append(c)
char_widths.append(2)
elif ord(c) < 128:
chars.append(c)
char_widths.append(1)
elif unicodedata.category(c).startswith("C"):
c = r"\u%04x" % ord(c)
chars.append(c)
char_widths.append(len(c))
else:
chars.append(c)
char_widths.append(str_width(c))
trace("disp_str({buffer}) = {s}, {b}", buffer=repr(buffer), s=chars, b=char_widths)
return chars, char_widths
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| __pycache__ | Folder | 0755 |
|
|
| __init__.py | File | 925 B | 0644 |
|
| __main__.py | File | 263 B | 0644 |
|
| _minimal_curses.py | File | 1.8 KB | 0644 |
|
| _threading_handler.py | File | 2.12 KB | 0644 |
|
| commands.py | File | 11.91 KB | 0644 |
|
| completing_reader.py | File | 9.81 KB | 0644 |
|
| console.py | File | 6.71 KB | 0644 |
|
| curses.py | File | 1.21 KB | 0644 |
|
| fancy_termios.py | File | 2.11 KB | 0644 |
|
| historical_reader.py | File | 12.93 KB | 0644 |
|
| input.py | File | 3.69 KB | 0644 |
|
| keymap.py | File | 6.31 KB | 0644 |
|
| main.py | File | 1.89 KB | 0644 |
|
| mypy.ini | File | 870 B | 0644 |
|
| pager.py | File | 5.68 KB | 0644 |
|
| reader.py | File | 27.06 KB | 0644 |
|
| readline.py | File | 19.75 KB | 0644 |
|
| simple_interact.py | File | 5.15 KB | 0644 |
|
| trace.py | File | 433 B | 0644 |
|
| types.py | File | 354 B | 0644 |
|
| unix_console.py | File | 24.88 KB | 0644 |
|
| unix_eventqueue.py | File | 4.92 KB | 0644 |
|
| utils.py | File | 2.18 KB | 0644 |
|
| windows_console.py | File | 19.05 KB | 0644 |
|