summaryrefslogtreecommitdiff
path: root/teleirc/matterbridge/vendor/github.com/gomarkdown/markdown/parser/caption.go
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-11-02 15:27:18 +0800
committerMistivia <i@mistivia.com>2025-11-02 15:27:18 +0800
commite9c24f4af7ed56760f6db7941827d09f6db9020b (patch)
tree62128c43b883ce5e3148113350978755779bb5de /teleirc/matterbridge/vendor/github.com/gomarkdown/markdown/parser/caption.go
parent58d5e7cfda4781d8a57ec52aefd02983835c301a (diff)
add matterbridge
Diffstat (limited to 'teleirc/matterbridge/vendor/github.com/gomarkdown/markdown/parser/caption.go')
-rw-r--r--teleirc/matterbridge/vendor/github.com/gomarkdown/markdown/parser/caption.go70
1 files changed, 70 insertions, 0 deletions
diff --git a/teleirc/matterbridge/vendor/github.com/gomarkdown/markdown/parser/caption.go b/teleirc/matterbridge/vendor/github.com/gomarkdown/markdown/parser/caption.go
new file mode 100644
index 0000000..fe31711
--- /dev/null
+++ b/teleirc/matterbridge/vendor/github.com/gomarkdown/markdown/parser/caption.go
@@ -0,0 +1,70 @@
+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
+}