ref: 52d94fa67578f6b63035e73b236ca8abd40d0006
parent: 49fe04c0bd8111bf686d9205d543f8651ea24cfc
author: chrongzhang <[email protected]>
date: Tue Sep 1 16:53:25 EDT 2015
Add config option "disablePathToLower" Enabling this prevents lowercasing of the path/url. Fixes #557
--- a/commands/hugo.go
+++ b/commands/hugo.go
@@ -160,6 +160,7 @@
viper.SetDefault("Blackfriday", helpers.NewBlackfriday())
viper.SetDefault("RSSUri", "index.xml")
viper.SetDefault("SectionPagesMenu", "")
+ viper.SetDefault("DisablePathToLower", false)
}
// InitializeConfig initializes a config file with sensible default configuration flags.
--- a/docs/content/overview/configuration.md
+++ b/docs/content/overview/configuration.md
@@ -133,6 +133,8 @@
title: ""
# if true, use /filename.html instead of /filename/
uglyURLs: false
+ # Do not make the url/path to lowercase
+ disablePathToLower: false
# verbose output
verbose: false
# verbose logging
--- a/helpers/path.go
+++ b/helpers/path.go
@@ -78,11 +78,13 @@
return UnicodeSanitize(strings.Replace(strings.TrimSpace(s), " ", "-", -1))
}
-// MakePathToLower creates a Unicode-sanitized string, with the spaces replaced,
-// and transformed to lower case.
-// E.g. Social Media -> social-media
-func MakePathToLower(s string) string {
- return strings.ToLower(MakePath(s))
+// MakePathSanitized creates a Unicode-sanitized string, with the spaces replaced
+func MakePathSanitized(s string) string {
+ if viper.GetBool("DisablePathToLower") {
+ return MakePath(s)
+ } else {
+ return strings.ToLower(MakePath(s))
+ }
}
func MakeTitle(inpath string) string {
--- a/helpers/path_test.go
+++ b/helpers/path_test.go
@@ -42,7 +42,10 @@
}
}
-func TestMakePathToLower(t *testing.T) {
+func TestMakePathSanitized(t *testing.T) {
+ viper.Reset()
+ defer viper.Reset()
+
tests := []struct {
input string
expected string
@@ -54,8 +57,34 @@
{"трям/трям", "трям/трям"},
{"은행", "은행"},
}
+
for _, test := range tests {
- output := MakePathToLower(test.input)
+ output := MakePathSanitized(test.input)
+ if output != test.expected {
+ t.Errorf("Expected %#v, got %#v\n", test.expected, output)
+ }
+ }
+}
+
+func TestMakePathSanitizedDisablePathToLower(t *testing.T) {
+ viper.Reset()
+ defer viper.Reset()
+ viper.Set("DisablePathToLower", true)
+
+ tests := []struct {
+ input string
+ expected string
+ }{
+ {" FOO bar ", "FOO-bar"},
+ {"Foo.Bar/fOO_bAr-Foo", "Foo.Bar/fOO_bAr-Foo"},
+ {"FOO,bar:Foo%Bar", "FOObarFooBar"},
+ {"foo/BAR.HTML", "foo/BAR.HTML"},
+ {"трям/трям", "трям/трям"},
+ {"은행", "은행"},
+ }
+
+ for _, test := range tests {
+ output := MakePathSanitized(test.input)
if output != test.expected {
t.Errorf("Expected %#v, got %#v\n", test.expected, output)
}
--- a/helpers/url.go
+++ b/helpers/url.go
@@ -102,7 +102,7 @@
// uri: Vim (text editor)
// urlize: vim-text-editor
func URLize(uri string) string {
- sanitized := MakePathToLower(uri)
+ sanitized := MakePathSanitized(uri)
// escape unicode letters
parsedUri, err := url.Parse(sanitized)
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -1045,7 +1045,7 @@
key := t.key
n := s.NewNode()
if s.Info.preserveTaxonomyNames {
- key = helpers.MakePathToLower(key)
+ key = helpers.MakePathSanitized(key)
// keep as is, just make sure the first char is upper
n.Title = helpers.FirstUpper(t.key)
} else {
@@ -1188,7 +1188,7 @@
[]string{"section/" + section + ".html", "_default/section.html", "_default/list.html", "indexes/" + section + ".html", "_default/indexes.html"})
if s.Info.preserveTaxonomyNames {
- section = helpers.MakePathToLower(section)
+ section = helpers.MakePathSanitized(section)
}
n := s.newSectionListNode(sectionName, section, data)
--- a/hugolib/taxonomy.go
+++ b/hugolib/taxonomy.go
@@ -60,7 +60,7 @@
// KeyPrep... Taxonomies should be case insensitive. Can make it easily conditional later.
func kp(in string) string {
- return helpers.MakePathToLower(in)
+ return helpers.MakePathSanitized(in)
}
func (i Taxonomy) Get(key string) WeightedPages { return i[kp(key)] }