Skip to content

Commit

Permalink
fix(ansi): reset uniseq grapheme state after
Browse files Browse the repository at this point in the history
We need to reset the grapheme state after encountering a non-printable
character or when we're not using uniseg for string width (ASCII
printables have a width of 1 cell).

Fixes: #122
Fixes: #123
Fixes: charmbracelet/lipgloss#332
  • Loading branch information
aymanbagabas committed Jul 12, 2024
1 parent d6ca306 commit f6f817d
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 0 deletions.
4 changes: 4 additions & 0 deletions ansi/width.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,10 @@ func StringWidth(s string) int {
continue
}
width++
fallthrough
default:
// Reset uniseg state when we're not in a printable state.
gstate = -1
}

pstate = state
Expand Down
1 change: 1 addition & 0 deletions ansi/width_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ var cases = []struct {
{"unicode", "\x1b[35m“box”\x1b[0m", "“box”", 5},
{"just_unicode", "Claire’s Boutique", "Claire’s Boutique", 17},
{"unclosed_ansi", "Hey, \x1b[7m\n猴", "Hey, \n猴", 7},
{"double_asian_runes", " 你\x1b[8m好.", " 你好.", 6},
}

func TestStrip(t *testing.T) {
Expand Down

0 comments on commit f6f817d

Please sign in to comment.