summaryrefslogtreecommitdiffhomepage
path: root/helpers
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <[email protected]>2020-01-04 11:28:19 +0100
committerBjørn Erik Pedersen <[email protected]>2020-01-04 19:46:01 +0100
commita82d2700fcc772aada15d65b8f76913ca23f7404 (patch)
treefa1c09eb1523d7cda303982b5c08661af9a194d6 /helpers
parentae816452b171b6b6aabca6a7423ed28a653baaa2 (diff)
downloadhugo-a82d2700fcc772aada15d65b8f76913ca23f7404.tar.gz
hugo-a82d2700fcc772aada15d65b8f76913ca23f7404.zip
markup/goldmark: Make auto IDs GitHub compatible
You can turn off this behaviour: ```toml [markup] [markup.goldmark] [markup.goldmark.parser] autoHeadingIDAsciiOnly = true ``` Note that the `anchorize` now adapts its behaviour depending on the default Markdown handler. Fixes #6616
Diffstat (limited to 'helpers')
-rw-r--r--helpers/content.go20
-rw-r--r--helpers/path.go21
2 files changed, 25 insertions, 16 deletions
diff --git a/helpers/content.go b/helpers/content.go
index 1c780fefe..e61888357 100644
--- a/helpers/content.go
+++ b/helpers/content.go
@@ -48,8 +48,9 @@ var (
// ContentSpec provides functionality to render markdown content.
type ContentSpec struct {
- Converters markup.ConverterProvider
- MardownConverter converter.Converter // Markdown converter with no document context
+ Converters markup.ConverterProvider
+ MardownConverter converter.Converter // Markdown converter with no document context
+ anchorNameSanitizer converter.AnchorNameSanitizer
// SummaryLength is the length of the summary that Hugo extracts from a content.
summaryLength int
@@ -91,6 +92,17 @@ func NewContentSpec(cfg config.Provider, logger *loggers.Logger, contentFs afero
return nil, err
}
spec.MardownConverter = conv
+ if as, ok := conv.(converter.AnchorNameSanitizer); ok {
+ spec.anchorNameSanitizer = as
+ } else {
+ // Use Goldmark's sanitizer
+ p := converterProvider.Get("goldmark")
+ conv, err := p.New(converter.DocumentContext{})
+ if err != nil {
+ return nil, err
+ }
+ spec.anchorNameSanitizer = conv.(converter.AnchorNameSanitizer)
+ }
return spec, nil
}
@@ -192,6 +204,10 @@ func (c *ContentSpec) RenderMarkdown(src []byte) ([]byte, error) {
return b.Bytes(), nil
}
+func (c *ContentSpec) SanitizeAnchorName(s string) string {
+ return c.anchorNameSanitizer.SanitizeAnchorName(s)
+}
+
func (c *ContentSpec) ResolveMarkup(in string) string {
in = strings.ToLower(in)
switch in {
diff --git a/helpers/path.go b/helpers/path.go
index 12ddfeb56..d97789e15 100644
--- a/helpers/path.go
+++ b/helpers/path.go
@@ -24,6 +24,8 @@ import (
"strings"
"unicode"
+ "github.com/gohugoio/hugo/common/text"
+
"github.com/gohugoio/hugo/config"
"github.com/gohugoio/hugo/hugofs"
@@ -31,9 +33,6 @@ import (
"github.com/gohugoio/hugo/common/hugio"
_errors "github.com/pkg/errors"
"github.com/spf13/afero"
- "golang.org/x/text/runes"
- "golang.org/x/text/transform"
- "golang.org/x/text/unicode/norm"
)
var (
@@ -134,6 +133,10 @@ func ishex(c rune) bool {
// are also removed.
// Spaces will be replaced with a single hyphen, and sequential hyphens will be reduced to one.
func (p *PathSpec) UnicodeSanitize(s string) string {
+ if p.RemovePathAccents {
+ s = text.RemoveAccentsString(s)
+ }
+
source := []rune(s)
target := make([]rune, 0, len(source))
var prependHyphen bool
@@ -154,17 +157,7 @@ func (p *PathSpec) UnicodeSanitize(s string) string {
}
}
- var result string
-
- if p.RemovePathAccents {
- // remove accents - see https://blog.golang.org/normalization
- t := transform.Chain(norm.NFD, runes.Remove(runes.In(unicode.Mn)), norm.NFC)
- result, _, _ = transform.String(t, string(target))
- } else {
- result = string(target)
- }
-
- return result
+ return string(target)
}
// ReplaceExtension takes a path and an extension, strips the old extension