summaryrefslogtreecommitdiffstats
path: root/vendor/gitlab.com/golang-commonmark/markdown/plugins.go
diff options
context:
space:
mode:
authorWim <wim@42.be>2019-01-06 22:25:19 +0100
committerGitHub <noreply@github.com>2019-01-06 22:25:19 +0100
commit04567c765e92ad60c685c1b2fe7e77c46e065645 (patch)
tree34a587a6545c8e71e991e2a1551885faa0075738 /vendor/gitlab.com/golang-commonmark/markdown/plugins.go
parent048158ad6db08cd714f39467fc0066ce41cfe6c5 (diff)
downloadmatterbridge-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/plugins.go')
-rw-r--r--vendor/gitlab.com/golang-commonmark/markdown/plugins.go158
1 files changed, 158 insertions, 0 deletions
diff --git a/vendor/gitlab.com/golang-commonmark/markdown/plugins.go b/vendor/gitlab.com/golang-commonmark/markdown/plugins.go
new file mode 100644
index 00000000..5ba818cd
--- /dev/null
+++ b/vendor/gitlab.com/golang-commonmark/markdown/plugins.go
@@ -0,0 +1,158 @@
+// 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 "sort"
+
+type registeredCoreRule struct {
+ id int
+ rule CoreRule
+}
+
+var registeredCoreRules []registeredCoreRule
+
+type registeredBlockRule struct {
+ id int
+ rule BlockRule
+ terminates []int
+}
+
+var registeredBlockRules []registeredBlockRule
+
+type registeredInlineRule struct {
+ id int
+ rule InlineRule
+}
+
+var registeredInlineRules []registeredInlineRule
+
+type registeredPostprocessRule struct {
+ id int
+ rule PostprocessRule
+}
+
+var registeredPostprocessRules []registeredPostprocessRule
+
+func indexInt(a []int, n int) int {
+ for i, m := range a {
+ if m == n {
+ return i
+ }
+ }
+ return -1
+}
+
+func RegisterCoreRule(id int, rule CoreRule) {
+ registeredCoreRules = append(registeredCoreRules, registeredCoreRule{
+ id: id,
+ rule: rule,
+ })
+ sort.Slice(registeredCoreRules, func(i, j int) bool {
+ return registeredCoreRules[i].id < registeredCoreRules[j].id
+ })
+
+ coreRules = coreRules[:0]
+ for _, r := range registeredCoreRules {
+ coreRules = append(coreRules, r.rule)
+ }
+}
+
+func RegisterBlockRule(id int, rule BlockRule, terminates []int) {
+ registeredBlockRules = append(registeredBlockRules, registeredBlockRule{
+ id: id,
+ rule: rule,
+ terminates: terminates,
+ })
+ sort.Slice(registeredBlockRules, func(i, j int) bool {
+ return registeredBlockRules[i].id < registeredBlockRules[j].id
+ })
+
+ blockRules = blockRules[:0]
+ blockquoteTerminatedBy = blockquoteTerminatedBy[:0]
+ listTerminatedBy = listTerminatedBy[:0]
+ referenceTerminatedBy = referenceTerminatedBy[:0]
+ paragraphTerminatedBy = paragraphTerminatedBy[:0]
+ for _, r := range registeredBlockRules {
+ blockRules = append(blockRules, r.rule)
+ if indexInt(r.terminates, 400) != -1 {
+ blockquoteTerminatedBy = append(blockquoteTerminatedBy, r.rule)
+ }
+ if indexInt(r.terminates, 600) != -1 {
+ listTerminatedBy = append(listTerminatedBy, r.rule)
+ }
+ if indexInt(r.terminates, 700) != -1 {
+ referenceTerminatedBy = append(referenceTerminatedBy, r.rule)
+ }
+ if indexInt(r.terminates, 1100) != -1 {
+ paragraphTerminatedBy = append(paragraphTerminatedBy, r.rule)
+ }
+ }
+}
+
+func RegisterInlineRule(id int, rule InlineRule) {
+ registeredInlineRules = append(registeredInlineRules, registeredInlineRule{
+ id: id,
+ rule: rule,
+ })
+ sort.Slice(registeredInlineRules, func(i, j int) bool {
+ return registeredInlineRules[i].id < registeredInlineRules[j].id
+ })
+
+ inlineRules = inlineRules[:0]
+ for _, r := range registeredInlineRules {
+ inlineRules = append(inlineRules, r.rule)
+ }
+}
+
+func RegisterPostprocessRule(id int, rule PostprocessRule) {
+ registeredPostprocessRules = append(registeredPostprocessRules, registeredPostprocessRule{
+ id: id,
+ rule: rule,
+ })
+ sort.Slice(registeredPostprocessRules, func(i, j int) bool {
+ return registeredPostprocessRules[i].id < registeredPostprocessRules[j].id
+ })
+
+ postprocessRules = postprocessRules[:0]
+ for _, r := range registeredPostprocessRules {
+ postprocessRules = append(postprocessRules, r.rule)
+ }
+}
+
+func init() {
+ RegisterCoreRule(100, ruleInline)
+ RegisterCoreRule(200, ruleLinkify)
+ RegisterCoreRule(300, ruleReplacements)
+ RegisterCoreRule(400, ruleSmartQuotes)
+
+ RegisterBlockRule(100, ruleTable, []int{1100, 700})
+ RegisterBlockRule(200, ruleCode, nil)
+ RegisterBlockRule(300, ruleFence, []int{1100, 700, 400, 600})
+ RegisterBlockRule(400, ruleBlockQuote, []int{1100, 700, 400, 600})
+ RegisterBlockRule(500, ruleHR, []int{1100, 700, 400, 600})
+ RegisterBlockRule(600, ruleList, []int{1100, 700, 400})
+ RegisterBlockRule(700, ruleReference, nil)
+ RegisterBlockRule(800, ruleHeading, []int{1100, 700, 400})
+ RegisterBlockRule(900, ruleLHeading, nil)
+ RegisterBlockRule(1000, ruleHTMLBlock, []int{1100, 700, 400})
+ RegisterBlockRule(1100, ruleParagraph, nil)
+
+ RegisterInlineRule(100, ruleText)
+ RegisterInlineRule(200, ruleNewline)
+ RegisterInlineRule(300, ruleEscape)
+ RegisterInlineRule(400, ruleBackticks)
+ RegisterInlineRule(500, ruleStrikeThrough)
+ RegisterInlineRule(600, ruleEmphasis)
+ RegisterInlineRule(700, ruleLink)
+ RegisterInlineRule(800, ruleImage)
+ RegisterInlineRule(900, ruleAutolink)
+ RegisterInlineRule(1000, ruleHTMLInline)
+ RegisterInlineRule(1100, ruleEntity)
+
+ RegisterPostprocessRule(100, ruleBalancePairs)
+ RegisterPostprocessRule(200, ruleStrikethroughPostprocess)
+ RegisterPostprocessRule(300, ruleEmphasisPostprocess)
+ RegisterPostprocessRule(400, ruleTextCollapse)
+}