mirror of
https://github.com/cwinfo/matterbridge.git
synced 2025-09-10 22:22:31 +00:00
.github
bridge
contrib
docker
gateway
hook
img
internal
matterclient
matterhook
vendor
github.com
42wim
Baozisoftware
Benau
Jeffail
Philipp15b
Rhymen
SevereCloud
apex
av-elier
blang
d5
davecgh
dustin
dyatlov
francoispqt
fsnotify
go-asn1-ber
go-telegram-bot-api
golang
golang-jwt
gomarkdown
markdown
ast
html
parser
aside.go
attribute.go
block.go
block_table.go
callout.go
caption.go
citation.go
esc.go
figures.go
include.go
inline.go
matter.go
options.go
parser.go
ref.go
.gitignore
LICENSE.txt
README.md
changes-from-blackfriday.md
codecov.yml
doc.go
fuzz.go
markdown.go
todo.md
google
gopackage
gorilla
harmony-development
hashicorp
jpillora
json-iterator
kettek
keybase
klauspost
kyokomi
labstack
lrstanley
magiconair
matrix-org
matterbridge
mattermost
mattn
mgutz
minio
missdeer
mitchellh
modern-go
monaco-io
mreiferson
mrexodia
nelsonken
paulrosania
pborman
pelletier
philhofer
pkg
pmezard
rickb777
rivo
rs
russross
saintfish
shazow
sirupsen
sizeofint
skip2
slack-go
spf13
stretchr
subosito
tinylib
valyala
vincent-petithory
vmihailenco
wiggin77
writeas
yaegashi
zfjagann
go.uber.org
golang.org
gomod.garykim.dev
google.golang.org
gopkg.in
layeh.com
modules.txt
version
.dockerignore
.fixmie.yml
.gitignore
.golangci.yaml
.goreleaser.yml
Dockerfile
LICENSE
README.md
changelog.md
go.mod
go.sum
matterbridge.go
matterbridge.toml.sample
matterbridge.toml.simple
tgs.Dockerfile
71 lines
1.3 KiB
Go
71 lines
1.3 KiB
Go
package parser
|
|
|
|
import (
|
|
"bytes"
|
|
)
|
|
|
|
// caption checks for a caption, it returns the caption data and a potential "headingID".
|
|
func (p *Parser) caption(data, caption []byte) ([]byte, string, int) {
|
|
if !bytes.HasPrefix(data, caption) {
|
|
return nil, "", 0
|
|
}
|
|
j := len(caption)
|
|
data = data[j:]
|
|
end := p.linesUntilEmpty(data)
|
|
|
|
data = data[:end]
|
|
|
|
id, start := captionID(data)
|
|
if id != "" {
|
|
return data[:start], id, end + j
|
|
}
|
|
|
|
return data, "", end + j
|
|
}
|
|
|
|
// linesUntilEmpty scans lines up to the first empty line.
|
|
func (p *Parser) linesUntilEmpty(data []byte) int {
|
|
line, i := 0, 0
|
|
|
|
for line < len(data) {
|
|
i++
|
|
|
|
// find the end of this line
|
|
for i < len(data) && data[i-1] != '\n' {
|
|
i++
|
|
}
|
|
|
|
if p.isEmpty(data[line:i]) == 0 {
|
|
line = i
|
|
continue
|
|
}
|
|
|
|
break
|
|
}
|
|
return i
|
|
}
|
|
|
|
// captionID checks if the caption *ends* in {#....}. If so the text after {# is taken to be
|
|
// the ID/anchor of the entire figure block.
|
|
func captionID(data []byte) (string, int) {
|
|
end := len(data)
|
|
|
|
j, k := 0, 0
|
|
// find start/end of heading id
|
|
for j = 0; j < end-1 && (data[j] != '{' || data[j+1] != '#'); j++ {
|
|
}
|
|
for k = j + 1; k < end && data[k] != '}'; k++ {
|
|
}
|
|
// remains must be whitespace.
|
|
for l := k + 1; l < end; l++ {
|
|
if !isSpace(data[l]) {
|
|
return "", 0
|
|
}
|
|
}
|
|
|
|
if j > 0 && k > 0 && j+2 < k {
|
|
return string(data[j+2 : k]), j
|
|
}
|
|
return "", 0
|
|
}
|