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:
164
vendor/gitlab.com/golang-commonmark/markdown/helpers.go
generated
vendored
Normal file
164
vendor/gitlab.com/golang-commonmark/markdown/helpers.go
generated
vendored
Normal file
@@ -0,0 +1,164 @@
|
||||
// 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 parseLinkLabel(s *StateInline, start int, disableNested bool) int {
|
||||
src := s.Src
|
||||
labelEnd := -1
|
||||
max := s.PosMax
|
||||
oldPos := s.Pos
|
||||
|
||||
s.Pos = start + 1
|
||||
level := 1
|
||||
found := false
|
||||
|
||||
for s.Pos < max {
|
||||
marker := src[s.Pos]
|
||||
|
||||
if marker == ']' {
|
||||
level--
|
||||
if level == 0 {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
prevPos := s.Pos
|
||||
|
||||
s.Md.Inline.SkipToken(s)
|
||||
|
||||
if marker == '[' {
|
||||
if prevPos == s.Pos-1 {
|
||||
level++
|
||||
} else if disableNested {
|
||||
s.Pos = oldPos
|
||||
return -1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if found {
|
||||
labelEnd = s.Pos
|
||||
}
|
||||
|
||||
s.Pos = oldPos
|
||||
|
||||
return labelEnd
|
||||
}
|
||||
|
||||
func parseLinkDestination(s string, pos, max int) (url string, lines, endpos int, ok bool) {
|
||||
start := pos
|
||||
if pos < max && s[pos] == '<' {
|
||||
pos++
|
||||
for pos < max {
|
||||
b := s[pos]
|
||||
if b == '\n' || byteIsSpace(b) {
|
||||
return
|
||||
}
|
||||
if b == '>' {
|
||||
endpos = pos + 1
|
||||
url = unescapeAll(s[start+1 : pos])
|
||||
ok = true
|
||||
return
|
||||
}
|
||||
if b == '\\' && pos+1 < max {
|
||||
pos += 2
|
||||
continue
|
||||
}
|
||||
|
||||
pos++
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
level := 0
|
||||
for pos < max {
|
||||
b := s[pos]
|
||||
|
||||
if b == ' ' {
|
||||
break
|
||||
}
|
||||
|
||||
if b < 0x20 || b == 0x7f {
|
||||
break
|
||||
}
|
||||
|
||||
if b == '\\' && pos+1 < max {
|
||||
pos += 2
|
||||
continue
|
||||
}
|
||||
|
||||
if b == '(' {
|
||||
level++
|
||||
}
|
||||
|
||||
if b == ')' {
|
||||
if level == 0 {
|
||||
break
|
||||
}
|
||||
level--
|
||||
}
|
||||
|
||||
pos++
|
||||
}
|
||||
|
||||
if start == pos {
|
||||
return
|
||||
}
|
||||
if level != 0 {
|
||||
return
|
||||
}
|
||||
|
||||
url = unescapeAll(s[start:pos])
|
||||
endpos = pos
|
||||
ok = true
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func parseLinkTitle(s string, pos, max int) (title string, nlines, endpos int, ok bool) {
|
||||
lines := 0
|
||||
start := pos
|
||||
|
||||
if pos >= max {
|
||||
return
|
||||
}
|
||||
|
||||
marker := s[pos]
|
||||
|
||||
if marker != '"' && marker != '\'' && marker != '(' {
|
||||
return
|
||||
}
|
||||
|
||||
pos++
|
||||
|
||||
if marker == '(' {
|
||||
marker = ')'
|
||||
}
|
||||
|
||||
for pos < max {
|
||||
switch s[pos] {
|
||||
case marker:
|
||||
endpos = pos + 1
|
||||
nlines = lines
|
||||
title = unescapeAll(s[start+1 : pos])
|
||||
ok = true
|
||||
return
|
||||
case '\n':
|
||||
lines++
|
||||
case '\\':
|
||||
if pos+1 < max {
|
||||
pos++
|
||||
if s[pos] == '\n' {
|
||||
lines++
|
||||
}
|
||||
}
|
||||
}
|
||||
pos++
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user