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/image.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/image.go')
-rw-r--r-- | vendor/gitlab.com/golang-commonmark/markdown/image.go | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/vendor/gitlab.com/golang-commonmark/markdown/image.go b/vendor/gitlab.com/golang-commonmark/markdown/image.go new file mode 100644 index 00000000..7f2e67d3 --- /dev/null +++ b/vendor/gitlab.com/golang-commonmark/markdown/image.go @@ -0,0 +1,131 @@ +// 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 + +func ruleImage(s *StateInline, silent bool) bool { + pos := s.Pos + max := s.PosMax + + if pos+2 >= max { + return false + } + + src := s.Src + if src[pos] != '!' || src[pos+1] != '[' { + return false + } + + labelStart := pos + 2 + labelEnd := parseLinkLabel(s, pos+1, false) + if labelEnd < 0 { + return false + } + + var href, title, label string + oldPos := pos + pos = labelEnd + 1 + if pos < max && src[pos] == '(' { + pos++ + for pos < max { + b := src[pos] + if !byteIsSpace(b) && b != '\n' { + break + } + pos++ + } + if pos >= max { + return false + } + + start := pos + url, _, endpos, ok := parseLinkDestination(src, pos, s.PosMax) + if ok { + url = normalizeLink(url) + if validateLink(url) { + href = url + pos = endpos + } + } + + start = pos + for pos < max { + b := src[pos] + if !byteIsSpace(b) && b != '\n' { + break + } + pos++ + } + if pos >= max { + return false + } + + title, _, endpos, ok = parseLinkTitle(src, pos, s.PosMax) + if pos < max && start != pos && ok { + pos = endpos + for pos < max { + b := src[pos] + if !byteIsSpace(b) && b != '\n' { + break + } + pos++ + } + } + + if pos >= max || src[pos] != ')' { + s.Pos = oldPos + return false + } + + pos++ + + } else { + if s.Env.References == nil { + return false + } + + if pos < max && src[pos] == '[' { + start := pos + 1 + pos = parseLinkLabel(s, pos, false) + if pos >= 0 { + label = src[start:pos] + pos++ + } else { + pos = labelEnd + 1 + } + } else { + pos = labelEnd + 1 + } + + if label == "" { + label = src[labelStart:labelEnd] + } + + ref, ok := s.Env.References[normalizeReference(label)] + if !ok { + s.Pos = oldPos + return false + } + + href = ref["href"] + title = ref["title"] + } + + if !silent { + content := src[labelStart:labelEnd] + + tokens := s.Md.Inline.Parse(content, s.Md, s.Env) + + s.PushToken(&Image{ + Src: href, + Title: title, + Tokens: tokens, + }) + } + + s.Pos = pos + s.PosMax = max + + return true +} |