diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2020-01-04 11:28:19 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2020-01-04 19:46:01 +0100 |
commit | a82d2700fcc772aada15d65b8f76913ca23f7404 (patch) | |
tree | fa1c09eb1523d7cda303982b5c08661af9a194d6 /common | |
parent | ae816452b171b6b6aabca6a7423ed28a653baaa2 (diff) |
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 'common')
-rw-r--r-- | common/text/transform.go | 47 | ||||
-rw-r--r-- | common/text/transform_test.go | 29 |
2 files changed, 76 insertions, 0 deletions
diff --git a/common/text/transform.go b/common/text/transform.go new file mode 100644 index 000000000..f59577803 --- /dev/null +++ b/common/text/transform.go @@ -0,0 +1,47 @@ +// Copyright 2019 The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package text + +import ( + "sync" + "unicode" + + "golang.org/x/text/runes" + "golang.org/x/text/transform" + "golang.org/x/text/unicode/norm" +) + +var accentTransformerPool = &sync.Pool{ + New: func() interface{} { + return transform.Chain(norm.NFD, runes.Remove(runes.In(unicode.Mn)), norm.NFC) + }, +} + +// RemoveAccents removes all accents from b. +func RemoveAccents(b []byte) []byte { + t := accentTransformerPool.Get().(transform.Transformer) + b, _, _ = transform.Bytes(t, b) + t.Reset() + accentTransformerPool.Put(t) + return b +} + +// RemoveAccentsString removes all accents from s. +func RemoveAccentsString(s string) string { + t := accentTransformerPool.Get().(transform.Transformer) + s, _, _ = transform.String(t, s) + t.Reset() + accentTransformerPool.Put(t) + return s +} diff --git a/common/text/transform_test.go b/common/text/transform_test.go new file mode 100644 index 000000000..70b10d149 --- /dev/null +++ b/common/text/transform_test.go @@ -0,0 +1,29 @@ +// Copyright 2019 The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package text + +import ( + "testing" + + qt "github.com/frankban/quicktest" +) + +func TestRemoveAccents(t *testing.T) { + c := qt.New(t) + + c.Assert(string(RemoveAccents([]byte("Resumé"))), qt.Equals, "Resume") + c.Assert(string(RemoveAccents([]byte("Hugo Rocks!"))), qt.Equals, "Hugo Rocks!") + c.Assert(string(RemoveAccentsString("Resumé")), qt.Equals, "Resume") + +} |