diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2019-11-06 20:10:47 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2019-11-23 14:12:24 +0100 |
commit | bfb9613a14ab2d93a4474e5486d22e52a9d5e2b3 (patch) | |
tree | 81c4dbd10505e952489e1dbcf1d7bafc88b57c28 /markup/markup.go | |
parent | a3fe5e5e35f311f22b6b4fc38abfcf64cd2c7d6f (diff) |
Add Goldmark as the new default markdown handler
This commit adds the fast and CommonMark compliant Goldmark as the new default markdown handler in Hugo.
If you want to continue using BlackFriday as the default for md/markdown extensions, you can use this configuration:
```toml
[markup]
defaultMarkdownHandler="blackfriday"
```
Fixes #5963
Fixes #1778
Fixes #6355
Diffstat (limited to 'markup/markup.go')
-rw-r--r-- | markup/markup.go | 64 |
1 files changed, 56 insertions, 8 deletions
diff --git a/markup/markup.go b/markup/markup.go index 54193aba3..8bcfa4c61 100644 --- a/markup/markup.go +++ b/markup/markup.go @@ -16,6 +16,12 @@ package markup import ( "strings" + "github.com/gohugoio/hugo/markup/highlight" + + "github.com/gohugoio/hugo/markup/markup_config" + + "github.com/gohugoio/hugo/markup/goldmark" + "github.com/gohugoio/hugo/markup/org" "github.com/gohugoio/hugo/markup/asciidoc" @@ -29,39 +35,71 @@ import ( func NewConverterProvider(cfg converter.ProviderConfig) (ConverterProvider, error) { converters := make(map[string]converter.Provider) - add := func(p converter.NewProvider, aliases ...string) error { + markupConfig, err := markup_config.Decode(cfg.Cfg) + if err != nil { + return nil, err + } + + if cfg.Highlight == nil { + h := highlight.New(markupConfig.Highlight) + cfg.Highlight = func(code, lang, optsStr string) (string, error) { + return h.Highlight(code, lang, optsStr) + } + } + + cfg.MarkupConfig = markupConfig + + add := func(p converter.ProviderProvider, aliases ...string) error { c, err := p.New(cfg) if err != nil { return err } + + name := c.Name() + + aliases = append(aliases, name) + + if strings.EqualFold(name, cfg.MarkupConfig.DefaultMarkdownHandler) { + aliases = append(aliases, "markdown") + } + addConverter(converters, c, aliases...) return nil } - if err := add(blackfriday.Provider, "md", "markdown", "blackfriday"); err != nil { + if err := add(goldmark.Provider); err != nil { + return nil, err + } + if err := add(blackfriday.Provider); err != nil { return nil, err } - if err := add(mmark.Provider, "mmark"); err != nil { + if err := add(mmark.Provider); err != nil { return nil, err } - if err := add(asciidoc.Provider, "asciidoc"); err != nil { + if err := add(asciidoc.Provider, "ad", "adoc"); err != nil { return nil, err } - if err := add(rst.Provider, "rst"); err != nil { + if err := add(rst.Provider); err != nil { return nil, err } - if err := add(pandoc.Provider, "pandoc"); err != nil { + if err := add(pandoc.Provider, "pdc"); err != nil { return nil, err } - if err := add(org.Provider, "org"); err != nil { + if err := add(org.Provider); err != nil { return nil, err } - return &converterRegistry{converters: converters}, nil + return &converterRegistry{ + config: cfg, + converters: converters, + }, nil } type ConverterProvider interface { Get(name string) converter.Provider + //Default() converter.Provider + GetMarkupConfig() markup_config.Config + Highlight(code, lang, optsStr string) (string, error) } type converterRegistry struct { @@ -70,12 +108,22 @@ type converterRegistry struct { // may be registered multiple times. // All names are lower case. converters map[string]converter.Provider + + config converter.ProviderConfig } func (r *converterRegistry) Get(name string) converter.Provider { return r.converters[strings.ToLower(name)] } +func (r *converterRegistry) Highlight(code, lang, optsStr string) (string, error) { + return r.config.Highlight(code, lang, optsStr) +} + +func (r *converterRegistry) GetMarkupConfig() markup_config.Config { + return r.config.MarkupConfig +} + func addConverter(m map[string]converter.Provider, c converter.Provider, aliases ...string) { for _, alias := range aliases { m[alias] = c |