diff --git a/hugolib/hugo_sites.go b/hugolib/hugo_sites.go index 7b42a0f5a..611be6808 100644 --- a/hugolib/hugo_sites.go +++ b/hugolib/hugo_sites.go @@ -225,6 +225,9 @@ func (h *HugoSites) createMissingPages() error { foundTaxonomyPage := false foundTaxonomyTermsPage := false for key := range tax { + if s.Info.preserveTaxonomyNames { + key = s.Info.pathSpec.MakePathSanitized(key) + } for _, p := range taxonomyPages { if p.sections[0] == plural && p.sections[1] == key { foundTaxonomyPage = true diff --git a/hugolib/node_as_page_test.go b/hugolib/node_as_page_test.go index 9836d92a2..b337c7bfc 100644 --- a/hugolib/node_as_page_test.go +++ b/hugolib/node_as_page_test.go @@ -33,12 +33,14 @@ import ( */ func TestNodesAsPage(t *testing.T) { - for _, ugly := range []bool{false, true} { - doTestNodeAsPage(t, ugly) + for _, preserveTaxonomyNames := range []bool{false, true} { + for _, ugly := range []bool{true, false} { + doTestNodeAsPage(t, ugly, preserveTaxonomyNames) + } } } -func doTestNodeAsPage(t *testing.T, ugly bool) { +func doTestNodeAsPage(t *testing.T, ugly, preserveTaxonomyNames bool) { //jww.SetStdoutThreshold(jww.LevelDebug) jww.SetStdoutThreshold(jww.LevelFatal) @@ -55,6 +57,7 @@ func doTestNodeAsPage(t *testing.T, ugly bool) { testCommonResetState() viper.Set("uglyURLs", ugly) + viper.Set("preserveTaxonomyNames", preserveTaxonomyNames) writeLayoutsForNodeAsPageTests(t) writeNodePagesForNodeAsPageTests("", t) @@ -86,6 +89,7 @@ func doTestNodeAsPage(t *testing.T, ugly bool) { h := s.owner nodes := h.findAllPagesByKindNotIn(KindPage) + require.Len(t, nodes, 6) home := nodes[5] // oldest @@ -139,6 +143,10 @@ func doTestNodeAsPage(t *testing.T, ugly bool) { "Lastmod: 2009-01-09", ) + web := s.getPage(KindTaxonomy, "categories", "web") + require.NotNil(t, web) + require.Len(t, web.Data["Pages"].(Pages), 4) + assertFileContent(t, expectedFilePath(ugly, "public", "categories", "web"), false, "Taxonomy Title: Taxonomy Web", "Taxonomy Web Content!", @@ -728,7 +736,7 @@ Lastmod: {{ .Lastmod.Format "2006-01-02" }} Taxonomy Terms Title: {{ .Title }} Taxonomy Terms Content: {{ .Content }} {{ range $key, $value := .Data.Terms }} - k/v: {{ $key }} / {{ printf "%s" $value }} + k/v: {{ $key | lower }} / {{ printf "%s" $value }} {{ end }} {{ with .Site.Menus.mymenu }} {{ range . }} diff --git a/hugolib/page.go b/hugolib/page.go index a9d90c121..3fb23dd11 100644 --- a/hugolib/page.go +++ b/hugolib/page.go @@ -1494,6 +1494,12 @@ func (p *Page) prepareData(s *Site) error { plural := p.sections[0] term := p.sections[1] + if s.Info.preserveTaxonomyNames { + if v, ok := s.taxonomiesOrigKey[fmt.Sprintf("%s-%s", plural, term)]; ok { + term = v + } + } + singular := s.taxonomiesPluralSingular[plural] taxonomy := s.Taxonomies[plural].Get(term) diff --git a/hugolib/site.go b/hugolib/site.go index 6205ea040..61676a16b 100644 --- a/hugolib/site.go +++ b/hugolib/site.go @@ -88,6 +88,11 @@ type Site struct { // to get the singular form from that value. taxonomiesPluralSingular map[string]string + // This is temporary, see https://github.com/spf13/hugo/issues/2835 + // Maps "actors-gerard-depardieu" to "GĂ©rard Depardieu" when preserveTaxonomyNames + // is set. + taxonomiesOrigKey map[string]string + Source source.Input Sections Taxonomy Info SiteInfo @@ -1477,8 +1482,10 @@ func (s *Site) assembleMenus() { func (s *Site) assembleTaxonomies() { s.Taxonomies = make(TaxonomyList) s.taxonomiesPluralSingular = make(map[string]string) + s.taxonomiesOrigKey = make(map[string]string) taxonomies := s.Language.GetStringMapString("taxonomies") + jww.INFO.Printf("found taxonomies: %#v\n", taxonomies) for singular, plural := range taxonomies { @@ -1496,10 +1503,18 @@ func (s *Site) assembleTaxonomies() { for _, idx := range v { x := WeightedPage{weight.(int), p} s.Taxonomies[plural].add(idx, x, s.Info.preserveTaxonomyNames) + if s.Info.preserveTaxonomyNames { + // Need to track the original + s.taxonomiesOrigKey[fmt.Sprintf("%s-%s", plural, kp(idx))] = idx + } } } else if v, ok := vals.(string); ok { x := WeightedPage{weight.(int), p} s.Taxonomies[plural].add(v, x, s.Info.preserveTaxonomyNames) + if s.Info.preserveTaxonomyNames { + // Need to track the original + s.taxonomiesOrigKey[fmt.Sprintf("%s-%s", plural, kp(v))] = v + } } else { jww.ERROR.Printf("Invalid %s in %s\n", plural, p.File.Path()) }