summaryrefslogtreecommitdiffstats
path: root/vendor/gitlab.com/golang-commonmark/markdown/html_inline.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/gitlab.com/golang-commonmark/markdown/html_inline.go')
-rw-r--r--vendor/gitlab.com/golang-commonmark/markdown/html_inline.go57
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
+}