From adee82100658dcdf7ad37372ac122ce1b5788cb6 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Fri, 13 Sep 2024 12:32:04 +0300 Subject: [PATCH] msgconv/matrixfmt: fix trimming space from whitespace-only string --- pkg/msgconv/matrixfmt/convert_test.go | 7 +++++++ pkg/msgconv/matrixfmt/html.go | 14 +++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/pkg/msgconv/matrixfmt/convert_test.go b/pkg/msgconv/matrixfmt/convert_test.go index 240ca98d..1ade3169 100644 --- a/pkg/msgconv/matrixfmt/convert_test.go +++ b/pkg/msgconv/matrixfmt/convert_test.go @@ -65,6 +65,13 @@ func TestParse_HTML(t *testing.T) { Length: 5, Value: signalfmt.StyleBold, }}}, + {name: "UnnecessaryWhitespace", in: " Hello , World!", out: "Hello, World!", ent: signalfmt.BodyRangeList{{ + Start: 0, + Length: 5, + Value: signalfmt.StyleBold, + }}}, + {name: "UnnecessaryWhitespaceParagraph", in: "

Hello

", out: "Hello"}, + {name: "EmptyParagraph", in: "

Hello

", out: "Hello"}, { name: "MultiBasic", in: "Hello, World!", diff --git a/pkg/msgconv/matrixfmt/html.go b/pkg/msgconv/matrixfmt/html.go index 1e3d249d..5c4a37f4 100644 --- a/pkg/msgconv/matrixfmt/html.go +++ b/pkg/msgconv/matrixfmt/html.go @@ -81,22 +81,26 @@ func (es *EntityString) TrimSpace() *EntityString { return nil } DebugLog("TRIMSPACE %q %+v\n", es.String, es.Entities) - var cutEnd, cutStart int - for cutStart = 0; cutStart < len(es.String); cutStart++ { + cutStart := 0 + for ; cutStart < len(es.String); cutStart++ { switch es.String[cutStart] { case '\t', '\n', '\v', '\f', '\r', ' ', 0x85, 0xA0: continue } break } - for cutEnd = len(es.String) - 1; cutEnd >= 0; cutEnd-- { - switch es.String[cutEnd] { + cutEnd := len(es.String) + for ; cutEnd > cutStart; cutEnd-- { + switch es.String[cutEnd-1] { case '\t', '\n', '\v', '\f', '\r', ' ', 0x85, 0xA0: continue } break } - cutEnd++ + if cutEnd == cutStart { + DebugLog(" -> EMPTY\n") + return NewEntityString("") + } if cutStart == 0 && cutEnd == len(es.String) { DebugLog(" -> NOOP\n") return es