diff options
author | Wim <wim@42.be> | 2019-01-06 22:25:19 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-06 22:25:19 +0100 |
commit | 04567c765e92ad60c685c1b2fe7e77c46e065645 (patch) | |
tree | 34a587a6545c8e71e991e2a1551885faa0075738 /vendor/gitlab.com/golang-commonmark/markdown/html_inline.go | |
parent | 048158ad6db08cd714f39467fc0066ce41cfe6c5 (diff) | |
download | matterbridge-msglm-04567c765e92ad60c685c1b2fe7e77c46e065645.tar.gz matterbridge-msglm-04567c765e92ad60c685c1b2fe7e77c46e065645.tar.bz2 matterbridge-msglm-04567c765e92ad60c685c1b2fe7e77c46e065645.zip |
Add support for markdown to HTML conversion (matrix). Closes #663 (#670)
This uses our own gomatrix lib with the SendHTML function which
adds HTML to formatted_body in matrix.
golang-commonmark is used to convert markdown into valid HTML.
Diffstat (limited to 'vendor/gitlab.com/golang-commonmark/markdown/html_inline.go')
-rw-r--r-- | vendor/gitlab.com/golang-commonmark/markdown/html_inline.go | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/vendor/gitlab.com/golang-commonmark/markdown/html_inline.go b/vendor/gitlab.com/golang-commonmark/markdown/html_inline.go new file mode 100644 index 00000000..0de54b20 --- /dev/null +++ b/vendor/gitlab.com/golang-commonmark/markdown/html_inline.go @@ -0,0 +1,57 @@ +// Copyright 2015 The Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package markdown + +import "regexp" + +var ( + attrName = `[a-zA-Z_:][a-zA-Z0-9:._-]*` + unquoted = "[^\"'=<>`\\x00-\\x20]+" + singleQuoted = `'[^']*'` + doubleQuoted = `"[^"]*"` + attrValue = `(?:` + unquoted + `|` + singleQuoted + `|` + doubleQuoted + `)` + attribute = `(?:\s+` + attrName + `(?:\s*=\s*` + attrValue + `)?)` + openTag = `<[A-Za-z][A-Za-z0-9-]*` + attribute + `*\s*/?>` + closeTag = `</[A-Za-z][A-Za-z0-9-]*\s*>` + comment = `<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->` + processing = `<[?].*?[?]>` + declaration = `<![A-Z]+\s+[^>]*>` + cdata = `<!\[CDATA\[[\s\S]*?\]\]>` + rHTMLTag = regexp.MustCompile(`^(?:` + openTag + `|` + closeTag + `|` + comment + + `|` + processing + `|` + declaration + `|` + cdata + `)`) +) + +func htmlSecond(b byte) bool { + return b == '!' || b == '/' || b == '?' || isLetter(b) +} + +func ruleHTMLInline(s *StateInline, silent bool) bool { + if !s.Md.HTML { + return false + } + + pos := s.Pos + src := s.Src + if pos+2 >= s.PosMax || src[pos] != '<' { + return false + } + + if !htmlSecond(src[pos+1]) { + return false + } + + match := rHTMLTag.FindString(src[pos:]) + if match == "" { + return false + } + + if !silent { + s.PushToken(&HTMLInline{Content: match}) + } + + s.Pos += len(match) + + return true +} |