diff options
Diffstat (limited to 'markup')
-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 | ||||
-rw-r--r-- | markup/goldmark/hugocontext/hugocontext.go | 4 | ||||
-rw-r--r-- | markup/goldmark/hugocontext/hugocontext_test.go | 2 | ||||
-rw-r--r-- | markup/markup.go | 29 |
6 files changed, 127 insertions, 10 deletions
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>", + ) +} diff --git a/markup/goldmark/hugocontext/hugocontext.go b/markup/goldmark/hugocontext/hugocontext.go index ed62bb8c6..b9c548dac 100644 --- a/markup/goldmark/hugocontext/hugocontext.go +++ b/markup/goldmark/hugocontext/hugocontext.go @@ -34,7 +34,7 @@ func New() goldmark.Extender { // Wrap wraps the given byte slice in a Hugo context that used to determine the correct Page // in .RenderShortcodes. -func Wrap(b []byte, pid uint64) []byte { +func Wrap(b []byte, pid uint64) string { buf := bufferpool.GetBuffer() defer bufferpool.PutBuffer(buf) buf.Write(prefix) @@ -45,7 +45,7 @@ func Wrap(b []byte, pid uint64) []byte { buf.Write(b) buf.Write(prefix) buf.Write(closingDelimAndNewline) - return buf.Bytes() + return buf.String() } var kindHugoContext = ast.NewNodeKind("HugoContext") diff --git a/markup/goldmark/hugocontext/hugocontext_test.go b/markup/goldmark/hugocontext/hugocontext_test.go index da96cc339..4a6eb80f5 100644 --- a/markup/goldmark/hugocontext/hugocontext_test.go +++ b/markup/goldmark/hugocontext/hugocontext_test.go @@ -24,7 +24,7 @@ func TestWrap(t *testing.T) { b := []byte("test") - c.Assert(string(Wrap(b, 42)), qt.Equals, "{{__hugo_ctx pid=42}}\ntest{{__hugo_ctx/}}\n") + c.Assert(Wrap(b, 42), qt.Equals, "{{__hugo_ctx pid=42}}\ntest{{__hugo_ctx/}}\n") } func BenchmarkWrap(b *testing.B) { diff --git a/markup/markup.go b/markup/markup.go index 835c7bbec..cd1c1f823 100644 --- a/markup/markup.go +++ b/markup/markup.go @@ -19,6 +19,7 @@ import ( "strings" "github.com/gohugoio/hugo/markup/highlight" + "github.com/gohugoio/hugo/media" "github.com/gohugoio/hugo/markup/markup_config" @@ -44,7 +45,7 @@ func NewConverterProvider(cfg converter.ProviderConfig) (ConverterProvider, erro defaultHandler := mcfg.DefaultMarkdownHandler var defaultFound bool - add := func(p converter.ProviderProvider, aliases ...string) error { + add := func(p converter.ProviderProvider, subType string, aliases ...string) error { c, err := p.New(cfg) if err != nil { return err @@ -53,6 +54,7 @@ func NewConverterProvider(cfg converter.ProviderConfig) (ConverterProvider, erro name := c.Name() aliases = append(aliases, name) + aliases = append(aliases, subType) if strings.EqualFold(name, defaultHandler) { aliases = append(aliases, "markdown") @@ -63,19 +65,21 @@ func NewConverterProvider(cfg converter.ProviderConfig) (ConverterProvider, erro return nil } - if err := add(goldmark.Provider); err != nil { + contentTypes := cfg.Conf.ContentTypes().(media.ContentTypes) + + if err := add(goldmark.Provider, contentTypes.Markdown.SubType, contentTypes.Markdown.Suffixes()...); err != nil { return nil, err } - if err := add(asciidocext.Provider, "ad", "adoc"); err != nil { + if err := add(asciidocext.Provider, contentTypes.AsciiDoc.SubType, contentTypes.AsciiDoc.Suffixes()...); err != nil { return nil, err } - if err := add(rst.Provider); err != nil { + if err := add(rst.Provider, contentTypes.ReStructuredText.SubType, contentTypes.ReStructuredText.Suffixes()...); err != nil { return nil, err } - if err := add(pandoc.Provider, "pdc"); err != nil { + if err := add(pandoc.Provider, contentTypes.Pandoc.SubType, contentTypes.Pandoc.Suffixes()...); err != nil { return nil, err } - if err := add(org.Provider); err != nil { + if err := add(org.Provider, contentTypes.EmacsOrgMode.SubType, contentTypes.EmacsOrgMode.Suffixes()...); err != nil { return nil, err } @@ -133,3 +137,16 @@ func addConverter(m map[string]converter.Provider, c converter.Provider, aliases m[alias] = c } } + +// ResolveMarkup returns the markup type. +func ResolveMarkup(s string) string { + s = strings.ToLower(s) + switch s { + case "goldmark": + return media.DefaultContentTypes.Markdown.SubType + case "asciidocext": + return media.DefaultContentTypes.AsciiDoc.SubType + default: + return s + } +} |