mirror of
https://github.com/jackyzha0/quartz.git
synced 2025-12-25 13:54:05 -06:00
144 lines
4.3 KiB
Go
144 lines
4.3 KiB
Go
package extension
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/yuin/goldmark"
|
|
gast "github.com/yuin/goldmark/ast"
|
|
"github.com/yuin/goldmark/parser"
|
|
"github.com/yuin/goldmark/renderer/html"
|
|
"github.com/yuin/goldmark/testutil"
|
|
"github.com/yuin/goldmark/text"
|
|
"github.com/yuin/goldmark/util"
|
|
)
|
|
|
|
func TestFootnote(t *testing.T) {
|
|
markdown := goldmark.New(
|
|
goldmark.WithRendererOptions(
|
|
html.WithUnsafe(),
|
|
),
|
|
goldmark.WithExtensions(
|
|
Footnote,
|
|
),
|
|
)
|
|
testutil.DoTestCaseFile(markdown, "_test/footnote.txt", t, testutil.ParseCliCaseArg()...)
|
|
}
|
|
|
|
type footnoteID struct {
|
|
}
|
|
|
|
func (a *footnoteID) Transform(node *gast.Document, reader text.Reader, pc parser.Context) {
|
|
node.Meta()["footnote-prefix"] = "article12-"
|
|
}
|
|
|
|
func TestFootnoteOptions(t *testing.T) {
|
|
markdown := goldmark.New(
|
|
goldmark.WithRendererOptions(
|
|
html.WithUnsafe(),
|
|
),
|
|
goldmark.WithExtensions(
|
|
NewFootnote(
|
|
WithFootnoteIDPrefix([]byte("article12-")),
|
|
WithFootnoteLinkClass([]byte("link-class")),
|
|
WithFootnoteBacklinkClass([]byte("backlink-class")),
|
|
WithFootnoteLinkTitle([]byte("link-title-%%-^^")),
|
|
WithFootnoteBacklinkTitle([]byte("backlink-title")),
|
|
WithFootnoteBacklinkHTML([]byte("^")),
|
|
),
|
|
),
|
|
)
|
|
|
|
testutil.DoTestCase(
|
|
markdown,
|
|
testutil.MarkdownTestCase{
|
|
No: 1,
|
|
Description: "Footnote with options",
|
|
Markdown: `That's some text with a footnote.[^1]
|
|
|
|
Same footnote.[^1]
|
|
|
|
Another one.[^2]
|
|
|
|
[^1]: And that's the footnote.
|
|
[^2]: Another footnote.
|
|
`,
|
|
Expected: `<p>That's some text with a footnote.<sup id="article12-fnref:1"><a href="#article12-fn:1" class="link-class" title="link-title-2-1" role="doc-noteref">1</a></sup></p>
|
|
<p>Same footnote.<sup id="article12-fnref:1"><a href="#article12-fn:1" class="link-class" title="link-title-2-1" role="doc-noteref">1</a></sup></p>
|
|
<p>Another one.<sup id="article12-fnref:2"><a href="#article12-fn:2" class="link-class" title="link-title-1-2" role="doc-noteref">2</a></sup></p>
|
|
<section class="footnotes" role="doc-endnotes">
|
|
<hr>
|
|
<ol>
|
|
<li id="article12-fn:1" role="doc-endnote">
|
|
<p>And that's the footnote. <a href="#article12-fnref:1" class="backlink-class" title="backlink-title" role="doc-backlink">^</a></p>
|
|
</li>
|
|
<li id="article12-fn:2" role="doc-endnote">
|
|
<p>Another footnote. <a href="#article12-fnref:2" class="backlink-class" title="backlink-title" role="doc-backlink">^</a></p>
|
|
</li>
|
|
</ol>
|
|
</section>
|
|
`,
|
|
},
|
|
t,
|
|
)
|
|
|
|
markdown = goldmark.New(
|
|
goldmark.WithParserOptions(
|
|
parser.WithASTTransformers(
|
|
util.Prioritized(&footnoteID{}, 100),
|
|
),
|
|
),
|
|
goldmark.WithRendererOptions(
|
|
html.WithUnsafe(),
|
|
),
|
|
goldmark.WithExtensions(
|
|
NewFootnote(
|
|
WithFootnoteIDPrefixFunction(func(n gast.Node) []byte {
|
|
v, ok := n.OwnerDocument().Meta()["footnote-prefix"]
|
|
if ok {
|
|
return util.StringToReadOnlyBytes(v.(string))
|
|
}
|
|
return nil
|
|
}),
|
|
WithFootnoteLinkClass([]byte("link-class")),
|
|
WithFootnoteBacklinkClass([]byte("backlink-class")),
|
|
WithFootnoteLinkTitle([]byte("link-title-%%-^^")),
|
|
WithFootnoteBacklinkTitle([]byte("backlink-title")),
|
|
WithFootnoteBacklinkHTML([]byte("^")),
|
|
),
|
|
),
|
|
)
|
|
|
|
testutil.DoTestCase(
|
|
markdown,
|
|
testutil.MarkdownTestCase{
|
|
No: 2,
|
|
Description: "Footnote with an id prefix function",
|
|
Markdown: `That's some text with a footnote.[^1]
|
|
|
|
Same footnote.[^1]
|
|
|
|
Another one.[^2]
|
|
|
|
[^1]: And that's the footnote.
|
|
[^2]: Another footnote.
|
|
`,
|
|
Expected: `<p>That's some text with a footnote.<sup id="article12-fnref:1"><a href="#article12-fn:1" class="link-class" title="link-title-2-1" role="doc-noteref">1</a></sup></p>
|
|
<p>Same footnote.<sup id="article12-fnref:1"><a href="#article12-fn:1" class="link-class" title="link-title-2-1" role="doc-noteref">1</a></sup></p>
|
|
<p>Another one.<sup id="article12-fnref:2"><a href="#article12-fn:2" class="link-class" title="link-title-1-2" role="doc-noteref">2</a></sup></p>
|
|
<section class="footnotes" role="doc-endnotes">
|
|
<hr>
|
|
<ol>
|
|
<li id="article12-fn:1" role="doc-endnote">
|
|
<p>And that's the footnote. <a href="#article12-fnref:1" class="backlink-class" title="backlink-title" role="doc-backlink">^</a></p>
|
|
</li>
|
|
<li id="article12-fn:2" role="doc-endnote">
|
|
<p>Another footnote. <a href="#article12-fnref:2" class="backlink-class" title="backlink-title" role="doc-backlink">^</a></p>
|
|
</li>
|
|
</ol>
|
|
</section>
|
|
`,
|
|
},
|
|
t,
|
|
)
|
|
}
|