fix word_wrap; adjust tests for new double wide policy

This commit is contained in:
scgbckbone 2025-06-04 15:39:16 +02:00
parent 0dc88cc55b
commit ac472ab669
2 changed files with 18 additions and 24 deletions

View File

@ -472,32 +472,26 @@ def word_wrap(ln, w):
while True:
# ln_len considers DOUBLE_WIDTH chars
ln_len = 0
idx = 0
sp = None
for idx, ch in enumerate(ln):
if ch == ' ':
# split point on space if possible
sp = idx
if ln_len < w:
ln_len += 1
if ch in DOUBLE_WIDE:
ln_len += 1
if ch in DOUBLE_WIDE:
ln_len += 1
else:
if ln_len == w:
if ch in ".,:;":
# boundary of allowed width
# if one of .,:; is last -> allow one more character
# even if only half visible on Mk4
# on Q it's OK as (CHARS_W-1) is used as w
sp = None
idx += 1
else:
# Q: double wide char was last
# put on next line
if ln_len > w:
# if one of .,:; is last -> allow one more character
# even if only half visible on Mk4
# on Q it's OK as (CHARS_W-1) is used as w
if ch in ".,:;":
idx += 1
sp = None
idx -= 1
break
else:
yield ln
return
@ -519,7 +513,7 @@ def word_wrap(ln, w):
# bad-break the line
sp = nsp = idx
if ln[nsp:nsp+1] == ' ':
if ln[sp:nsp+1] == " ":
nsp += 1
else:
# split on found space

View File

@ -284,13 +284,13 @@ DOUBLE_W = ['⋯', '✔', '✓', '→', '←', '↦', '◉', '◯', '◌', '※'
@pytest.mark.parametrize('txt, target', [
('Disk, press \x0e to share via NFC, \x11 to share', ['Disk, press \x0e to share via NFC,', '\x11 to share']),
((KEY_NFC * 17)+".", [KEY_NFC * 17, '.']),
((KEY_NFC * 17)+(17*KEY_QR), [KEY_NFC * 17, KEY_QR * 17]),
((KEY_NFC * 17)+" "+(17*KEY_QR), [KEY_NFC * 17, KEY_QR * 17]),
((KEY_NFC * 17)+".", [KEY_NFC * 16, KEY_NFC + '.']),
((KEY_NFC * 17)+(17*KEY_QR), [KEY_NFC * 16, KEY_NFC +(KEY_QR * 15), 2 * KEY_QR]),
((KEY_NFC * 17)+" "+(17*KEY_QR), [KEY_NFC * 16, KEY_NFC, KEY_QR * 16, KEY_QR]),
((KEY_NFC * 16)+".", [(KEY_NFC * 16)+'.']),
(f"Use {KEY_NFC}, or {KEY_F1}, {KEY_F2}, {KEY_F3}, or or or {KEY_F4}", [f"Use {KEY_NFC}, or {KEY_F1}, {KEY_F2}, {KEY_F3}, or or or {KEY_F4}"]),
("".join(DOUBLE_W), ["".join(DOUBLE_W[:17]), "".join(DOUBLE_W[17:])]),
("".join(6*DOUBLE_W), ["".join(6*DOUBLE_W)[i:i + 17] for i in range(0, len(6*DOUBLE_W), 17)]),
(f"Use {KEY_NFC}, or {KEY_F1}, {KEY_F2}, {KEY_F3}, or or or {KEY_F4}", [f"Use {KEY_NFC}, or {KEY_F1}, {KEY_F2}, {KEY_F3}, or or or", f"{KEY_F4}"]),
("".join(DOUBLE_W), ["".join(DOUBLE_W[:16]), "".join(DOUBLE_W[16:])]),
("".join(6*DOUBLE_W), ["".join(6*DOUBLE_W)[i:i + 16] for i in range(0, len(6*DOUBLE_W), 16)]),
])
def test_word_wrap_double_wide(only_q1, txt, target, sim_exec):
width = 33 # check shared/ux.py CHAR_PER_W