From 7b2b9d312791fcf6f49a350f6887a2019d2730f7 Mon Sep 17 00:00:00 2001 From: Anhgelus Morhtuuzh Date: Tue, 30 Sep 2025 22:35:31 +0200 Subject: feat(markdown): quote --- mardown/ast_quote.go | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 mardown/ast_quote.go (limited to 'mardown/ast_quote.go') diff --git a/mardown/ast_quote.go b/mardown/ast_quote.go new file mode 100644 index 0000000..9647500 --- /dev/null +++ b/mardown/ast_quote.go @@ -0,0 +1,80 @@ +package mardown + +import ( + "fmt" + "html/template" + "strings" +) + +type astQuote struct { + quote []*astParagraph + source []*astParagraph +} + +func (a *astQuote) Eval() (template.HTML, error) { + var quote template.HTML + for _, c := range a.quote { + ct, err := c.Eval() + if err != nil { + return "", err + } + quote += ct + } + quote = template.HTML(strings.TrimSpace(string(quote))) + quote = template.HTML(fmt.Sprintf("
%s
", 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))) + return template.HTML(fmt.Sprintf(`
%s

%s

`, quote, source)), nil +} + +func quote(lxs *lexers) (*astQuote, error) { + tree := new(astQuote) + n := 0 + quoteContinue := true + source := false + for lxs.Next() && n < 2 { + switch lxs.Current().Type { + case lexerBreak: + n++ + quoteContinue = false + case lexerQuote: + n = 0 + if source { + // because the code did not use it + lxs.current-- + return tree, nil + } + quoteContinue = true + case lexerLiteral, lexerModifier, lexerCode: + n = 0 + if !quoteContinue { + source = true + } + p, err := paragraph(lxs, true) + lxs.current-- // because we call the next twice here + 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.current-- + return tree, nil + } + } + return tree, nil +} -- cgit v1.2.3