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,
!
",
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