diff options
| author | Anhgelus Morhtuuzh <william@herges.fr> | 2025-10-02 19:52:38 +0200 |
|---|---|---|
| committer | Anhgelus Morhtuuzh <william@herges.fr> | 2025-10-02 19:52:38 +0200 |
| commit | 94dceb4f7c1740de9215b36ec183f93ca4337ee7 (patch) | |
| tree | 5ad184efb0b74dd3aa4da7585f88a3e3f6cb4ecc /markdown/ast_quote.go | |
| parent | 8b249c9ce8bd1c351daf80c6c9b095fb1bccafe2 (diff) | |
style(markdown): fix typo in package name
Diffstat (limited to 'markdown/ast_quote.go')
| -rw-r--r-- | markdown/ast_quote.go | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/markdown/ast_quote.go b/markdown/ast_quote.go new file mode 100644 index 0000000..3dfede1 --- /dev/null +++ b/markdown/ast_quote.go @@ -0,0 +1,81 @@ +package markdown + +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 +} |
