blob: 023432ee98ee62c4ea9aa89953da617791bc71f9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
"""
Standalone functions used by the modules
"""
import string
from typing import Optional, List
from poezio.ui.consts import FORMAT_CHAR, FORMAT_CHARS
DIGITS = string.digits + '-'
def find_first_format_char(text: str,
chars: str = None) -> int:
to_find = chars or FORMAT_CHARS
pos = -1
for char in to_find:
p = text.find(char)
if p == -1:
continue
if pos == -1 or p < pos:
pos = p
return pos
def truncate_nick(nick: Optional[str], size=10) -> str:
if size < 1:
size = 1
if nick:
if len(nick) > size:
return nick[:size] + '…'
return nick
return ''
def parse_attrs(text: str, previous: Optional[List[str]] = None) -> List[str]:
next_attr_char = text.find(FORMAT_CHAR)
if previous:
attrs = previous
else:
attrs = []
while next_attr_char != -1 and text:
if next_attr_char + 1 < len(text):
attr_char = text[next_attr_char + 1].lower()
else:
attr_char = '\0'
if attr_char == 'o':
attrs = []
elif attr_char == 'u':
attrs.append('u')
elif attr_char == 'b':
attrs.append('b')
elif attr_char == 'i':
attrs.append('i')
if attr_char in DIGITS and attr_char:
color_str = text[next_attr_char + 1:text.find('}', next_attr_char)]
if color_str:
attrs.append(color_str + '}')
text = text[next_attr_char + len(color_str) + 2:]
else:
text = text[next_attr_char + 2:]
next_attr_char = text.find(FORMAT_CHAR)
return attrs
|