aboutsummaryrefslogtreecommitdiff
path: root/markdown/ast_quote.go
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <william@herges.fr>2025-10-02 19:52:38 +0200
committerAnhgelus Morhtuuzh <william@herges.fr>2025-10-02 19:52:38 +0200
commit94dceb4f7c1740de9215b36ec183f93ca4337ee7 (patch)
tree5ad184efb0b74dd3aa4da7585f88a3e3f6cb4ecc /markdown/ast_quote.go
parent8b249c9ce8bd1c351daf80c6c9b095fb1bccafe2 (diff)
style(markdown): fix typo in package name
Diffstat (limited to 'markdown/ast_quote.go')
-rw-r--r--markdown/ast_quote.go81
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
+}