From 887e2e232abec4e7cd9f8d19631f6ae5b14a0181 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Tue, 9 Apr 2019 00:59:56 +0300 Subject: Fix non-syntax-highlighted code block newline rendering --- ui/messages/parser/htmlparser.go | 37 +++++++++++++------------------------ 1 file changed, 13 insertions(+), 24 deletions(-) (limited to 'ui/messages/parser') diff --git a/ui/messages/parser/htmlparser.go b/ui/messages/parser/htmlparser.go index e658c61..6e218df 100644 --- a/ui/messages/parser/htmlparser.go +++ b/ui/messages/parser/htmlparser.go @@ -221,7 +221,7 @@ func styleEntryToStyle(se chroma.StyleEntry) tcell.Style { } func (parser *htmlParser) syntaxHighlight(text, language string) messages.HTMLEntity { - lexer := lexers.Get(language) + lexer := lexers.Get(strings.ToLower(language)) if lexer == nil { return nil } @@ -229,7 +229,9 @@ func (parser *htmlParser) syntaxHighlight(text, language string) messages.HTMLEn if err != nil { return nil } + // TODO allow changing theme style := styles.SolarizedDark + tokens := iter.Tokens() children := make([]messages.HTMLEntity, len(tokens)) for i, token := range tokens { @@ -245,39 +247,26 @@ func (parser *htmlParser) syntaxHighlight(text, language string) messages.HTMLEn } } } - return &messages.BaseHTMLEntity{ - Tag: "pre", - Block: true, - Children: children, - } + return messages.NewCodeBlockEntity(children, styleEntryToStyle(style.Get(chroma.Background))) } func (parser *htmlParser) codeblockToEntity(node *html.Node) messages.HTMLEntity { - entity := &messages.BaseHTMLEntity{ - Tag: "pre", - Block: true, - } + lang := "plaintext" // TODO allow disabling syntax highlighting if node.FirstChild.Type == html.ElementNode && node.FirstChild.Data == "code" { - text := (&messages.BaseHTMLEntity{ - Children: parser.nodeToEntities(node.FirstChild.FirstChild, false), - }).PlainText() - attr := parser.getAttribute(node.FirstChild, "class") - var lang string + node = node.FirstChild + attr := parser.getAttribute(node, "class") for _, class := range strings.Split(attr, " ") { if strings.HasPrefix(class, "language-") { lang = class[len("language-"):] break } } - if len(lang) != 0 { - if parsed := parser.syntaxHighlight(text, lang); parsed != nil { - return parsed - } - } } - entity.Children = parser.nodeToEntities(node.FirstChild, false) - return entity + text := (&messages.BaseHTMLEntity{ + Children: parser.nodeToEntities(node.FirstChild, false), + }).PlainText() + return parser.syntaxHighlight(text, lang) } func (parser *htmlParser) tagNodeToEntity(node *html.Node, stripLinebreak bool) messages.HTMLEntity { @@ -311,7 +300,7 @@ func (parser *htmlParser) singleNodeToEntity(node *html.Node, stripLinebreak boo switch node.Type { case html.TextNode: if stripLinebreak { - node.Data = strings.Replace(node.Data, "\n", "", -1) + node.Data = strings.ReplaceAll(node.Data, "\n", "") } return &messages.BaseHTMLEntity{ Tag: "text", @@ -372,7 +361,7 @@ func ParseHTMLMessage(room *rooms.Room, evt *mautrix.Event, senderDisplayname st Tag: "emote", Children: []messages.HTMLEntity{ messages.NewHTMLTextEntity("* "), - messages.NewHTMLTextEntity("* ").AdjustStyle(AdjustStyleTextColor(widget.GetHashColor(evt.Sender))), + messages.NewHTMLTextEntity(senderDisplayname).AdjustStyle(AdjustStyleTextColor(widget.GetHashColor(evt.Sender))), messages.NewHTMLTextEntity(" "), root, }, -- cgit v1.2.3