Fix line breaks with URLs in plaintext only messages

By making sure that there is always only one container and no empty text
Entities.
This commit is contained in:
Nicolas Peugnet 2022-11-01 17:33:40 +01:00
parent 99a5c7caed
commit 9fe2888017

View File

@ -384,25 +384,32 @@ var spaces = regexp.MustCompile("\\s+")
// textToHTMLEntity converts a plain text string into an HTML Entity while preserving newlines. // textToHTMLEntity converts a plain text string into an HTML Entity while preserving newlines.
func textToHTMLEntity(text string) Entity { func textToHTMLEntity(text string) Entity {
lines := strings.SplitAfter(text, "\n") if strings.Index(text, "\n") == -1 {
if len(lines) == 1 {
return NewTextEntity(text) return NewTextEntity(text)
} }
ent := &ContainerEntity{ return &ContainerEntity{
BaseEntity: &BaseEntity{Tag: "span"}, BaseEntity: &BaseEntity{Tag: "span"},
Children: textToHTMLEntities(text),
} }
}
func textToHTMLEntities(text string) []Entity {
lines := strings.SplitAfter(text, "\n")
entities := make([]Entity, 0, len(lines))
for _, line := range lines { for _, line := range lines {
line_len := len(line) line_len := len(line)
if line_len == 0 { if line_len == 0 {
continue continue
} }
if line[line_len-1:] == "\n" { if line == "\n" {
ent.Children = append(ent.Children, NewTextEntity(line[:line_len-1]), NewBreakEntity()) entities = append(entities, NewBreakEntity())
} else if line[line_len-1:] == "\n" {
entities = append(entities, NewTextEntity(line[:line_len-1]), NewBreakEntity())
} else { } else {
ent.Children = append(ent.Children, NewTextEntity(line)) entities = append(entities, NewTextEntity(line))
} }
} }
return ent return entities
} }
func TextToEntity(text string, eventID id.EventID, linkify bool) Entity { func TextToEntity(text string, eventID id.EventID, linkify bool) Entity {
@ -423,7 +430,7 @@ func TextToEntity(text string, eventID id.EventID, linkify bool) Entity {
for i, item := range indices { for i, item := range indices {
start, end := item[0], item[1] start, end := item[0], item[1]
if start > lastEnd { if start > lastEnd {
ent.Children = append(ent.Children, textToHTMLEntity(text[lastEnd:start])) ent.Children = append(ent.Children, textToHTMLEntities(text[lastEnd:start])...)
} }
link := text[start:end] link := text[start:end]
linkID := fmt.Sprintf("%s-%d", eventID, i) linkID := fmt.Sprintf("%s-%d", eventID, i)
@ -431,7 +438,7 @@ func TextToEntity(text string, eventID id.EventID, linkify bool) Entity {
lastEnd = end lastEnd = end
} }
if lastEnd < len(text) { if lastEnd < len(text) {
ent.Children = append(ent.Children, textToHTMLEntity(text[lastEnd:])) ent.Children = append(ent.Children, textToHTMLEntities(text[lastEnd:])...)
} }
return ent return ent
} }