diff --git a/rich/cells.py b/rich/cells.py index 15fe7b65cd..8a03791ecd 100644 --- a/rich/cells.py +++ b/rich/cells.py @@ -140,7 +140,10 @@ def _cell_len(text: str, unicode_version: str) -> int: for character in iter_characters: if character in SPECIAL: if character == "\u200d": - next(iter_characters) + try: + next(iter_characters) + except StopIteration: + break elif last_measured_character: total_width += last_measured_character in cell_table.narrow_to_wide last_measured_character = None diff --git a/tests/test_zwj_cell_len.py b/tests/test_zwj_cell_len.py new file mode 100644 index 0000000000..3c40fabfa7 --- /dev/null +++ b/tests/test_zwj_cell_len.py @@ -0,0 +1,8 @@ +from rich.cells import cell_len + + +def test_cell_len_zwj_does_not_raise() -> None: + cell_len("\u200d") + cell_len("a\u200d") + cell_len("a\u200d\n b") + cell_len("a\u200d b(")