forked from lug/matterbridge
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.
This commit is contained in:
131
vendor/gitlab.com/golang-commonmark/markdown/image.go
generated
vendored
Normal file
131
vendor/gitlab.com/golang-commonmark/markdown/image.go
generated
vendored
Normal file
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user