summaryrefslogtreecommitdiffstats
path: root/markup/markup.go
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2019-11-06 20:10:47 +0100
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2019-11-23 14:12:24 +0100
commitbfb9613a14ab2d93a4474e5486d22e52a9d5e2b3 (patch)
tree81c4dbd10505e952489e1dbcf1d7bafc88b57c28 /markup/markup.go
parenta3fe5e5e35f311f22b6b4fc38abfcf64cd2c7d6f (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.go64
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