Update utils.py

Added use_display_len to m_len, default to False so it won't change behavior for those using it.
Justify now properly handle wide character, by using the new use_display_len for m_len.
This commit is contained in:
Henry Hsiao 2024-06-28 23:41:50 +08:00 committed by GitHub
parent aeb0cf6854
commit a95587b056
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -290,8 +290,8 @@ def justify(text, width=None, align="l", indent=0, fillchar=" "):
# absolute mode - just crop or fill to width
abs_lines = []
for line in text.split("\n"):
nlen = m_len(line)
if m_len(line) < width:
nlen = m_len(line, True)
if m_len(line, True) < width:
line += sp * (width - nlen)
else:
line = crop(line, width=width, suffix="")
@ -306,7 +306,7 @@ def justify(text, width=None, align="l", indent=0, fillchar=" "):
for ip, paragraph in enumerate(paragraphs):
if ip > 0:
words.append(("\n", 0))
words.extend((word, m_len(word)) for word in paragraph.split())
words.extend((word, m_len(word, True)) for word in paragraph.split())
if not words:
# Just whitespace!
@ -2299,7 +2299,7 @@ def calledby(callerdepth=1):
return "\n".join(out[::-1])
def m_len(target):
def m_len(target, use_display_len=False):
"""
Provides length checking for strings with MXP patterns, and falls
back to normal len for other objects.
@ -2316,8 +2316,8 @@ def m_len(target):
from evennia.utils.ansi import ANSI_PARSER
if inherits_from(target, str) and "|lt" in target:
return len(ANSI_PARSER.strip_mxp(target))
return len(target)
return display_len(ANSI_PARSER.strip_mxp(target)) if use_display_len else len(ANSI_PARSER.strip_mxp(target))
return display_len(target) if use_display_len else len(target)
def display_len(target):