Implement #+MACRO
This commit is contained in:
parent
2ab65d300a
commit
9f7e8a8fbd
9 changed files with 55 additions and 0 deletions
|
@ -54,6 +54,11 @@ type RegularLink struct {
|
|||
AutoLink bool
|
||||
}
|
||||
|
||||
type Macro struct {
|
||||
Name string
|
||||
Parameters []string
|
||||
}
|
||||
|
||||
var validURLCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;="
|
||||
var autolinkProtocols = regexp.MustCompile(`^(https?|ftp|file)$`)
|
||||
var imageExtensionRegexp = regexp.MustCompile(`^[.](png|gif|jpe?g|svg|tiff?)$`)
|
||||
|
@ -66,6 +71,7 @@ var statisticsTokenRegexp = regexp.MustCompile(`^\[(\d+/\d+|\d+%)\]`)
|
|||
var latexFragmentRegexp = regexp.MustCompile(`(?s)^\\begin{(\w+)}(.*)\\end{(\w+)}`)
|
||||
var inlineBlockRegexp = regexp.MustCompile(`src_(\w+)(\[(.*)\])?{(.*)}`)
|
||||
var inlineExportBlockRegexp = regexp.MustCompile(`@@(\w+):(.*?)@@`)
|
||||
var macroRegexp = regexp.MustCompile(`{{{(.*)\((.*)\)}}}`)
|
||||
|
||||
var timestampFormat = "2006-01-02 Mon 15:04"
|
||||
var datestampFormat = "2006-01-02 Mon"
|
||||
|
@ -94,6 +100,8 @@ func (d *Document) parseInline(input string) (nodes []Node) {
|
|||
consumed, node = d.parseEmphasis(input, current, true)
|
||||
case '[':
|
||||
consumed, node = d.parseOpeningBracket(input, current)
|
||||
case '{':
|
||||
consumed, node = d.parseMacro(input, current)
|
||||
case '<':
|
||||
consumed, node = d.parseTimestamp(input, current)
|
||||
case '\\':
|
||||
|
@ -238,6 +246,13 @@ func (d *Document) parseOpeningBracket(input string, start int) (int, Node) {
|
|||
return 0, nil
|
||||
}
|
||||
|
||||
func (d *Document) parseMacro(input string, start int) (int, Node) {
|
||||
if m := macroRegexp.FindStringSubmatch(input[start:]); m != nil {
|
||||
return len(m[0]), Macro{m[1], strings.Split(m[2], ",")}
|
||||
}
|
||||
return 0, nil
|
||||
}
|
||||
|
||||
func (d *Document) parseFootnoteReference(input string, start int) (int, Node) {
|
||||
if m := footnoteRegexp.FindStringSubmatch(input[start:]); m != nil {
|
||||
name, definition := m[1], m[3]
|
||||
|
@ -389,4 +404,5 @@ func (n InlineBlock) String() string { return orgWriter.WriteNodesAsString
|
|||
func (n LatexFragment) String() string { return orgWriter.WriteNodesAsString(n) }
|
||||
func (n FootnoteLink) String() string { return orgWriter.WriteNodesAsString(n) }
|
||||
func (n RegularLink) String() string { return orgWriter.WriteNodesAsString(n) }
|
||||
func (n Macro) String() string { return orgWriter.WriteNodesAsString(n) }
|
||||
func (n Timestamp) String() string { return orgWriter.WriteNodesAsString(n) }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue