Skip to content

Commit 953bac3

Browse files
committed
🐛 fix styled Text display
1 parent f0f5470 commit 953bac3

File tree

3 files changed

+26
-4
lines changed

3 files changed

+26
-4
lines changed

src/nonebot_plugin_alconna/uniseg/message.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -615,7 +615,7 @@ def __init__(
615615
self.__iadd__(Text(message), _merge=False)
616616
elif isinstance(message, Iterable):
617617
for i in message:
618-
self.__iadd__(Text(i) if isinstance(i, str) else i)
618+
self.__iadd__(Text(i) if isinstance(i, str) else i, _merge=False)
619619
elif isinstance(message, Segment):
620620
self.__iadd__(message, _merge=False)
621621
self.__merge_text__()

src/nonebot_plugin_alconna/uniseg/segment.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -337,11 +337,14 @@ def __str__(self) -> str:
337337
scales = sorted(styles.keys(), key=lambda x: x[0])
338338
left = scales[0][0]
339339
result.append(text[:left])
340+
right = scales[0][1]
340341
for scale in scales:
342+
if scale[0] > right:
343+
result.append(text[right : scale[0]])
344+
right = scale[1]
341345
prefix = "".join(f"<{style}>" for style in styles[scale])
342346
suffix = "".join(f"</{style}>" for style in reversed(styles[scale]))
343347
result.append(prefix + text[scale[0] : scale[1]] + suffix)
344-
right = scales[-1][1]
345348
result.append(text[right:])
346349
text = "".join(result)
347350
pat = re.compile(r"</(\w+)(?<!/p)><\1>")
@@ -359,11 +362,15 @@ def __rich__(self):
359362
scales = sorted(styles.keys(), key=lambda x: x[0])
360363
left = scales[0][0]
361364
result.append(text[:left])
365+
right = scales[0][1]
362366
for scale in scales:
367+
if scale[0] > right:
368+
result.append("\033[0m")
369+
result.append(text[right : scale[0]])
370+
right = scale[1]
363371
prefix = ";".join(f"{STYLE_TYPE_MAP[style]}" for style in styles[scale])
364372
result.append(f"\033[{prefix}m{text[scale[0] : scale[1]]}")
365373
result.append("\033[0m")
366-
right = scales[-1][1]
367374
result.append(text[right:])
368375
return "".join(result)
369376

@@ -390,10 +397,13 @@ def style_split(self):
390397
left = scales[0][0]
391398
if left > 0:
392399
result.append(Text(text[:left]))
400+
right = scales[0][1]
393401
for scale in scales:
402+
if scale[0] > right:
403+
result.append(Text(text[right : scale[0]]))
394404
result.append(Text(text[scale[0] : scale[1]], {(scale[0] - left, scale[1] - left): styles[scale]}))
395405
left = scale[0]
396-
right = scales[-1][1]
406+
right = scale[1]
397407
if right < len(text):
398408
result.append(Text(text[right:]))
399409
return result

tests/test_uniseg.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,18 @@ def test_uniseg():
4343
assert pat1.first.validate(Video(url="foobar")(Text("foobar"))).value() == Text("foobar")
4444
assert pat1.first.validate(Other(FallbackSegment.text("foobar"))(Text("foobar"))).failed
4545

46+
text2 = (
47+
Text("[")
48+
+ Text("AAA").color("green")
49+
+ Text(" - ")
50+
+ Text("BB").color("blue")
51+
+ Text("]")
52+
+ Text("\n")
53+
+ Text("@Mr.Lee").color("yellow")
54+
+ Text("test")
55+
)
56+
assert str(text2) == "[<green>AAA</green> - <blue>BB</blue>]\n<yellow>@Mr.Lee</yellow>test"
57+
4658

4759
def test_unimsg():
4860
from nonebot_plugin_alconna.uniseg import FallbackSegment

0 commit comments

Comments
 (0)