- Remove unused footnote section title option - Move away from maintaining a list of footnotes in the document (only needed for html export, potential maintainance overhead when modifying the document) and rather only build it on export when required. - HTML export: Rename all footnotes to numbers (so we can support anonymous footnote references by assigning them a number) and export footnotes in order of reference, not definition. The implementation of this makes it natural to also stop exporting unused footnote definitions so we do that as well.
35 lines
994 B
Go
35 lines
994 B
Go
package org
|
|
|
|
import (
|
|
"regexp"
|
|
)
|
|
|
|
type FootnoteDefinition struct {
|
|
Name string
|
|
Children []Node
|
|
Inline bool
|
|
}
|
|
|
|
var footnoteDefinitionRegexp = regexp.MustCompile(`^\[fn:([\w-]+)\](\s+(.+)|\s*$)`)
|
|
|
|
func lexFootnoteDefinition(line string) (token, bool) {
|
|
if m := footnoteDefinitionRegexp.FindStringSubmatch(line); m != nil {
|
|
return token{"footnoteDefinition", 0, m[1], m}, true
|
|
}
|
|
return nilToken, false
|
|
}
|
|
|
|
func (d *Document) parseFootnoteDefinition(i int, parentStop stopFn) (int, Node) {
|
|
start, name := i, d.tokens[i].content
|
|
d.tokens[i] = tokenize(d.tokens[i].matches[2])
|
|
stop := func(d *Document, i int) bool {
|
|
return parentStop(d, i) ||
|
|
(isSecondBlankLine(d, i) && i > start+1) ||
|
|
d.tokens[i].kind == "headline" || d.tokens[i].kind == "footnoteDefinition"
|
|
}
|
|
consumed, nodes := d.parseMany(i, stop)
|
|
definition := FootnoteDefinition{name, nodes, false}
|
|
return consumed, definition
|
|
}
|
|
|
|
func (n FootnoteDefinition) String() string { return orgWriter.nodesAsString(n) }
|