diff options
author | Joe Mooring <[email protected]> | 2024-05-03 18:06:10 -0700 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2024-05-10 22:32:02 +0200 |
commit | ca9a77ef92eb0cb7bb5193e4e3afa4abb26d577c (patch) | |
tree | c3a7d5353fb516695b63a9a011bcc35dae280956 | |
parent | b1bf0bff2c8ce1e2cace5010a81911a3dbf8e674 (diff) | |
download | hugo-ca9a77ef92eb0cb7bb5193e4e3afa4abb26d577c.tar.gz hugo-ca9a77ef92eb0cb7bb5193e4e3afa4abb26d577c.zip |
markup/goldmark: Support extras extension
Enables inclusion of these HTML elements in Markdown:
- Inserted Text (++inserted++)
- Mark Text (==marked==)
- Subscript (H~2~O)
- Superscript (1^st^)
-rw-r--r-- | docs/data/docs.yaml | 9 | ||||
-rw-r--r-- | go.mod | 1 | ||||
-rw-r--r-- | go.sum | 2 | ||||
-rw-r--r-- | markup/goldmark/convert.go | 10 | ||||
-rw-r--r-- | markup/goldmark/goldmark_config/config.go | 42 | ||||
-rw-r--r-- | markup/goldmark/goldmark_integration_test.go | 50 |
6 files changed, 113 insertions, 1 deletions
diff --git a/docs/data/docs.yaml b/docs/data/docs.yaml index dcc96c590..036c21285 100644 --- a/docs/data/docs.yaml +++ b/docs/data/docs.yaml @@ -1065,6 +1065,15 @@ config: enable: false escapedSpace: false definitionList: true + extras: + insert: + enable: false + mark: + enable: false + subscript: + enable: false + superscript: + enable: false footnote: true linkify: true linkifyProtocol: https @@ -35,6 +35,7 @@ require ( github.com/gobuffalo/flect v1.0.2 github.com/gobwas/glob v0.2.3 github.com/gohugoio/go-i18n/v2 v2.1.3-0.20230805085216-e63c13218d0e + github.com/gohugoio/hugo-goldmark-extensions/extras v0.1.0 github.com/gohugoio/hugo-goldmark-extensions/passthrough v0.2.0 github.com/gohugoio/locales v0.14.0 github.com/gohugoio/localescompressed v1.0.1 @@ -213,6 +213,8 @@ github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/gohugoio/go-i18n/v2 v2.1.3-0.20230805085216-e63c13218d0e h1:QArsSubW7eDh8APMXkByjQWvuljwPGAGQpJEFn0F0wY= github.com/gohugoio/go-i18n/v2 v2.1.3-0.20230805085216-e63c13218d0e/go.mod h1:3Ltoo9Banwq0gOtcOwxuHG6omk+AwsQPADyw2vQYOJQ= +github.com/gohugoio/hugo-goldmark-extensions/extras v0.1.0 h1:YhxZNU8y2vxV6Ibr7QJzzUlpr8oHHWX/l+Q1R/a5Zao= +github.com/gohugoio/hugo-goldmark-extensions/extras v0.1.0/go.mod h1:0cuvOnGKW7WeXA3i7qK6IS07FH1bgJ2XzOjQ7BMJYH4= github.com/gohugoio/hugo-goldmark-extensions/passthrough v0.2.0 h1:PCtO5l++psZf48yen2LxQ3JiOXxaRC6v0594NeHvGZg= github.com/gohugoio/hugo-goldmark-extensions/passthrough v0.2.0/go.mod h1:g9CCh+Ci2IMbPUrVJuXbBTrA+rIIx5+hDQ4EXYaQDoM= github.com/gohugoio/locales v0.14.0 h1:Q0gpsZwfv7ATHMbcTNepFd59H7GoykzWJIxi113XGDc= diff --git a/markup/goldmark/convert.go b/markup/goldmark/convert.go index d7180140d..7c00433d5 100644 --- a/markup/goldmark/convert.go +++ b/markup/goldmark/convert.go @@ -17,6 +17,7 @@ package goldmark import ( "bytes" + "github.com/gohugoio/hugo-goldmark-extensions/extras" "github.com/gohugoio/hugo-goldmark-extensions/passthrough" "github.com/gohugoio/hugo/markup/goldmark/hugocontext" "github.com/yuin/goldmark/util" @@ -113,6 +114,15 @@ func newMarkdown(pcfg converter.ProviderConfig) goldmark.Markdown { extensions = append(extensions, images.New(cfg.Parser.WrapStandAloneImageWithinParagraph)) + extensions = append(extensions, extras.New( + extras.Config{ + Insert: extras.InsertConfig{Enable: cfg.Extensions.Extras.Insert.Enable}, + Mark: extras.MarkConfig{Enable: cfg.Extensions.Extras.Mark.Enable}, + Subscript: extras.SubscriptConfig{Enable: cfg.Extensions.Extras.Subscript.Enable}, + Superscript: extras.SuperscriptConfig{Enable: cfg.Extensions.Extras.Superscript.Enable}, + }, + )) + if mcfg.Highlight.CodeFences { extensions = append(extensions, codeblocks.New()) } diff --git a/markup/goldmark/goldmark_config/config.go b/markup/goldmark/goldmark_config/config.go index c22852b29..620475c48 100644 --- a/markup/goldmark/goldmark_config/config.go +++ b/markup/goldmark/goldmark_config/config.go @@ -49,6 +49,20 @@ var Default = Config{ EastAsianLineBreaksStyle: "simple", EscapedSpace: false, }, + Extras: Extras{ + Superscript: Superscript{ + Enable: false, + }, + Subscript: Subscript{ + Enable: false, + }, + Insert: Insert{ + Enable: false, + }, + Mark: Mark{ + Enable: false, + }, + }, Passthrough: Passthrough{ Enable: false, Delimiters: DelimitersConfig{ @@ -112,6 +126,7 @@ type Extensions struct { Typographer Typographer Footnote bool DefinitionList bool + Extras Extras Passthrough Passthrough // GitHub flavored markdown @@ -150,7 +165,32 @@ type Typographer struct { Apostrophe string } -// Passthrough hold passthrough configuration. +// Extras holds extras configuration. +// github.com/hugoio/hugo-goldmark-extensions/extras +type Extras struct { + Insert Insert + Mark Mark + Subscript Subscript + Superscript Superscript +} + +type Insert struct { + Enable bool +} + +type Mark struct { + Enable bool +} + +type Subscript struct { + Enable bool +} + +type Superscript struct { + Enable bool +} + +// Passthrough holds passthrough configuration. // github.com/hugoio/hugo-goldmark-extensions/passthrough type Passthrough struct { // Whether to enable the extension diff --git a/markup/goldmark/goldmark_integration_test.go b/markup/goldmark/goldmark_integration_test.go index ffeb763a7..82b41cc67 100644 --- a/markup/goldmark/goldmark_integration_test.go +++ b/markup/goldmark/goldmark_integration_test.go @@ -744,3 +744,53 @@ a^*=x-b^* %!% `) } + +func TestExtrasExtension(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +disableKinds = ['page','rss','section','sitemap','taxonomy','term'] +[markup.goldmark.extensions.extras.insert] +enable = false +[markup.goldmark.extensions.extras.mark] +enable = false +[markup.goldmark.extensions.extras.subscript] +enable = false +[markup.goldmark.extensions.extras.superscript] +enable = false +-- layouts/index.html -- +{{ .Content }} +-- content/_index.md -- +--- +title: home +--- +++insert++ + +==mark== + +H~2~0 + +1^st^ +` + + b := hugolib.Test(t, files) + + b.AssertFileContent("public/index.html", + "<p>++insert++</p>", + "<p>==mark==</p>", + "<p>H~2~0</p>", + "<p>1^st^</p>", + ) + + files = strings.ReplaceAll(files, "enable = false", "enable = true") + + b = hugolib.Test(t, files) + + b.AssertFileContent("public/index.html", + "<p><ins>insert</ins></p>", + "<p><mark>mark</mark></p>", + "<p>H<sub>2</sub>0</p>", + "<p>1<sup>st</sup></p>", + ) +} |