1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
package mardown
import (
"fmt"
"html/template"
"strings"
)
type astQuote struct {
quote []*astParagraph
source []*astParagraph
}
func (a *astQuote) Eval() (template.HTML, *ParseError) {
var quote template.HTML
for _, c := range a.quote {
ct, err := c.Eval()
if err != nil {
return "", err
}
quote += ct
}
quote = template.HTML(fmt.Sprintf("<blockquote>%s</blockquote>", trimSpace(quote)))
var source template.HTML
for _, c := range a.source {
ct, err := c.Eval()
if err != nil {
return "", err
}
source += ct
}
source = template.HTML(strings.TrimSpace(string(source)))
if len(source) > 0 {
return template.HTML(fmt.Sprintf(`<div class="quote">%s<p>%s</p></div>`, quote, source)), nil
}
return template.HTML(fmt.Sprintf(`<div class="quote">%s</div>`, quote)), nil
}
func quote(lxs *lexers) (*astQuote, *ParseError) {
tree := new(astQuote)
n := 0
quoteContinue := true
source := false
for lxs.Next() && n < 2 {
switch lxs.Current().Type {
case lexerBreak:
n += len(lxs.Current().Value)
quoteContinue = false
case lexerQuote:
n = 0
if source {
// because the code did not use it
lxs.Before()
return tree, nil
}
quoteContinue = true
case lexerLiteral, lexerModifier, lexerCode:
n = 0
if !quoteContinue {
source = true
}
p, err := paragraph(lxs, true)
if err != nil {
return nil, err
}
if !source {
tree.quote = append(tree.quote, p)
} else {
tree.source = append(tree.source, p)
}
n++
quoteContinue = false
default:
// because the code did not use it
lxs.Before()
return tree, nil
}
}
return tree, nil
}
|