Add support for ": example" elements
This commit is contained in:
parent
24ace5aa0e
commit
c012b0a533
8 changed files with 75 additions and 0 deletions
|
@ -49,6 +49,7 @@ var lexFns = []lexFn{
|
|||
lexHorizontalRule,
|
||||
lexKeywordOrComment,
|
||||
lexFootnoteDefinition,
|
||||
lexExample,
|
||||
lexText,
|
||||
}
|
||||
|
||||
|
@ -169,6 +170,8 @@ func (d *Document) parseOne(i int, stop stopFn) (consumed int, node Node) {
|
|||
consumed, node = d.parseBlock(i, stop)
|
||||
case "text":
|
||||
consumed, node = d.parseParagraph(i, stop)
|
||||
case "example":
|
||||
consumed, node = d.parseExample(i, stop)
|
||||
case "horizontalRule":
|
||||
consumed, node = d.parseHorizontalRule(i, stop)
|
||||
case "comment":
|
||||
|
|
26
org/example.go
Normal file
26
org/example.go
Normal file
|
@ -0,0 +1,26 @@
|
|||
package org
|
||||
|
||||
import (
|
||||
"regexp"
|
||||
)
|
||||
|
||||
type Example struct {
|
||||
Children []Node
|
||||
}
|
||||
|
||||
var exampleLineRegexp = regexp.MustCompile(`^(\s*): (.*)`)
|
||||
|
||||
func lexExample(line string) (token, bool) {
|
||||
if m := exampleLineRegexp.FindStringSubmatch(line); m != nil {
|
||||
return token{"example", len(m[1]), m[2], m}, true
|
||||
}
|
||||
return nilToken, false
|
||||
}
|
||||
|
||||
func (d *Document) parseExample(i int, parentStop stopFn) (int, Node) {
|
||||
example, start := Example{}, i
|
||||
for ; !parentStop(d, i) && d.tokens[i].kind == "example"; i++ {
|
||||
example.Children = append(example.Children, Text{d.tokens[i].content})
|
||||
}
|
||||
return i - start, example
|
||||
}
|
13
org/html.go
13
org/html.go
|
@ -88,6 +88,8 @@ func (w *HTMLWriter) writeNodes(ns ...Node) {
|
|||
|
||||
case Paragraph:
|
||||
w.writeParagraph(n)
|
||||
case Example:
|
||||
w.writeExample(n)
|
||||
case HorizontalRule:
|
||||
w.writeHorizontalRule(n)
|
||||
case Text:
|
||||
|
@ -264,6 +266,17 @@ func (w *HTMLWriter) writeParagraph(p Paragraph) {
|
|||
w.WriteString("\n</p>\n")
|
||||
}
|
||||
|
||||
func (w *HTMLWriter) writeExample(e Example) {
|
||||
w.WriteString(`<pre class="example">` + "\n")
|
||||
if len(e.Children) != 0 {
|
||||
for _, n := range e.Children {
|
||||
w.writeNodes(n)
|
||||
w.WriteString("\n")
|
||||
}
|
||||
}
|
||||
w.WriteString("\n</pre>\n")
|
||||
}
|
||||
|
||||
func (w *HTMLWriter) writeHorizontalRule(h HorizontalRule) {
|
||||
w.WriteString("<hr>\n")
|
||||
}
|
||||
|
|
10
org/org.go
10
org/org.go
|
@ -76,6 +76,8 @@ func (w *OrgWriter) writeNodes(ns ...Node) {
|
|||
|
||||
case Paragraph:
|
||||
w.writeParagraph(n)
|
||||
case Example:
|
||||
w.writeExample(n)
|
||||
case HorizontalRule:
|
||||
w.writeHorizontalRule(n)
|
||||
case Text:
|
||||
|
@ -171,6 +173,14 @@ func (w *OrgWriter) writeParagraph(p Paragraph) {
|
|||
w.WriteString("\n")
|
||||
}
|
||||
|
||||
func (w *OrgWriter) writeExample(e Example) {
|
||||
for _, n := range e.Children {
|
||||
w.WriteString(w.indent + ":" + " ")
|
||||
w.writeNodes(n)
|
||||
w.WriteString("\n")
|
||||
}
|
||||
}
|
||||
|
||||
func (w *OrgWriter) writeKeyword(k Keyword) {
|
||||
w.WriteString(w.indent + fmt.Sprintf("#+%s: %s\n", k.Key, k.Value))
|
||||
}
|
||||
|
|
8
org/testdata/blocks.html
vendored
8
org/testdata/blocks.html
vendored
|
@ -27,6 +27,14 @@ multiple lines including
|
|||
empty lines!
|
||||
|
||||
it also has multiple parameters
|
||||
|
||||
note that /inline/ *markup* ignored
|
||||
</pre>
|
||||
<pre class="example">
|
||||
examples like this
|
||||
are also supported
|
||||
note that /inline/ *markup* ignored
|
||||
|
||||
</pre>
|
||||
<blockquote>
|
||||
<p>
|
||||
|
|
6
org/testdata/blocks.org
vendored
6
org/testdata/blocks.org
vendored
|
@ -21,8 +21,14 @@ multiple lines including
|
|||
empty lines!
|
||||
|
||||
it also has multiple parameters
|
||||
|
||||
note that /inline/ *markup* ignored
|
||||
#+END_EXAMPLE
|
||||
|
||||
: examples like this
|
||||
: are also supported
|
||||
: note that /inline/ *markup* ignored
|
||||
|
||||
#+BEGIN_QUOTE
|
||||
Mongodb is *webscale*. (source: [[http://www.mongodb-is-web-scale.com/][mongodb-is-web-scale]])
|
||||
|
||||
|
|
6
org/testdata/lists.html
vendored
6
org/testdata/lists.html
vendored
|
@ -84,5 +84,11 @@ and text with an empty line in between as well!
|
|||
<p>
|
||||
unordered list item 4
|
||||
</p>
|
||||
<pre class="example">
|
||||
with an example
|
||||
|
||||
that spans multiple lines
|
||||
|
||||
</pre>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
3
org/testdata/lists.org
vendored
3
org/testdata/lists.org
vendored
|
@ -18,3 +18,6 @@
|
|||
|
||||
and text with an empty line in between as well!
|
||||
- unordered list item 4
|
||||
: with an example
|
||||
:
|
||||
: that spans multiple lines
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue