diff options
author | Tulir Asokan <tulir@maunium.net> | 2018-06-11 19:38:19 +0300 |
---|---|---|
committer | Tulir Asokan <tulir@maunium.net> | 2018-06-11 19:52:22 +0300 |
commit | 5e3994ce2cead6851d19a37dc6d76104f4152e7f (patch) | |
tree | 717b4fae98aa0110e7a0c98f52b81f9942639de0 /ui/messages/parser | |
parent | d2365602108d5464a0eb0795b933098429d04c37 (diff) |
Add font tag support and /rainbow command
Diffstat (limited to 'ui/messages/parser')
-rw-r--r-- | ui/messages/parser/htmlparser.go | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/ui/messages/parser/htmlparser.go b/ui/messages/parser/htmlparser.go index 98894fd..c8b000e 100644 --- a/ui/messages/parser/htmlparser.go +++ b/ui/messages/parser/htmlparser.go @@ -29,6 +29,7 @@ import ( "maunium.net/go/gomuks/ui/widget" "maunium.net/go/tcell" "strconv" + "github.com/lucasb-eyer/go-colorful" ) var matrixToURL = regexp.MustCompile("^(?:https?://)?(?:www\\.)?matrix\\.to/#/([#@!].*)") @@ -125,6 +126,26 @@ func (parser *htmlParser) basicFormatToTString(node *html.Node, stripLinebreak b return str } +func (parser *htmlParser) fontToTString(node *html.Node, stripLinebreak bool) tstring.TString { + str := parser.nodeToTagAwareTString(node.FirstChild, stripLinebreak) + hex := parser.getAttribute(node, "color") + if len(hex) == 0 { + return str + } + + color, err := colorful.Hex(hex) + if err != nil { + return str + } + + r, g, b := color.RGB255() + tcellColor := tcell.NewRGBColor(int32(r), int32(g), int32(b)) + str.AdjustStyleFull(func(style tcell.Style) tcell.Style { + return style.Foreground(tcellColor) + }) + return str +} + func (parser *htmlParser) headerToTString(node *html.Node, stripLinebreak bool) tstring.TString { children := parser.nodeToTStrings(node.FirstChild, stripLinebreak) length := int(node.Data[1] - '0') @@ -172,6 +193,8 @@ func (parser *htmlParser) tagToTString(node *html.Node, stripLinebreak bool) tst return tstring.NewTString("\n") case "b", "strong", "i", "em", "s", "del", "u", "ins": return parser.basicFormatToTString(node, stripLinebreak) + case "font": + return parser.fontToTString(node, stripLinebreak) case "a": return parser.linkToTString(node, stripLinebreak) case "p": |