Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gohugoio/hugo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2016-07-24 14:58:27 +0300
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2016-09-06 18:32:15 +0300
commit06d12ab895a83fc8a9f94b23e533b25511bbb6d1 (patch)
treee25be5f3afb89ce99af7aaa49561b23fd053a616 /commands
parentec33732fbe84f67c1164fb713d6cb738609f2e2e (diff)
Add proper Language and Languages types
Diffstat (limited to 'commands')
-rw-r--r--commands/hugo.go15
-rw-r--r--commands/multilingual.go65
2 files changed, 52 insertions, 28 deletions
diff --git a/commands/hugo.go b/commands/hugo.go
index 57a426458..c773ac5c4 100644
--- a/commands/hugo.go
+++ b/commands/hugo.go
@@ -493,9 +493,8 @@ func InitializeConfig(subCmdVs ...*cobra.Command) error {
helpers.HugoReleaseVersion(), minVersion)
}
- readMultilingualConfiguration()
+ return readMultilingualConfiguration()
- return nil
}
func flagChanged(flags *flag.FlagSet, key string) bool {
@@ -715,11 +714,11 @@ func buildSite(watching ...bool) (err error) {
for _, lang := range langConfigsList {
t1 := time.Now()
- mainSite, present := MainSites[lang]
+ mainSite, present := MainSites[lang.Lang]
if !present {
mainSite = new(hugolib.Site)
- MainSites[lang] = mainSite
- mainSite.SetMultilingualConfig(lang, langConfigsList, langConfigs)
+ MainSites[lang.Lang] = mainSite
+ mainSite.SetMultilingualConfig(lang, langConfigsList)
}
if len(watching) > 0 && watching[0] {
@@ -730,7 +729,7 @@ func buildSite(watching ...bool) (err error) {
return err
}
- mainSite.Stats(lang, t1)
+ mainSite.Stats(lang.Lang, t1)
}
jww.FEEDBACK.Printf("total in %v ms\n", int(1000*time.Since(t0).Seconds()))
@@ -743,13 +742,13 @@ func rebuildSite(events []fsnotify.Event) error {
for _, lang := range langConfigsList {
t1 := time.Now()
- mainSite := MainSites[lang]
+ mainSite := MainSites[lang.Lang]
if err := mainSite.ReBuild(events); err != nil {
return err
}
- mainSite.Stats(lang, t1)
+ mainSite.Stats(lang.Lang, t1)
}
jww.FEEDBACK.Printf("total in %v ms\n", int(1000*time.Since(t0).Seconds()))
diff --git a/commands/multilingual.go b/commands/multilingual.go
index 68da7c96d..983dc756d 100644
--- a/commands/multilingual.go
+++ b/commands/multilingual.go
@@ -1,41 +1,66 @@
package commands
import (
+ "fmt"
"sort"
+ "strings"
+
"github.com/spf13/cast"
+ "github.com/spf13/hugo/hugolib"
"github.com/spf13/viper"
)
-var langConfigs map[string]interface{}
-var langConfigsList langConfigsSortable
+var langConfigsList hugolib.Languages
-func readMultilingualConfiguration() {
+func readMultilingualConfiguration() error {
multilingual := viper.GetStringMap("Multilingual")
if len(multilingual) == 0 {
- langConfigsList = append(langConfigsList, "")
- return
+ // TODO(bep) multilingo langConfigsList = append(langConfigsList, hugolib.NewLanguage("en"))
+ return nil
}
- langConfigs = make(map[string]interface{})
- for lang, config := range multilingual {
- langConfigs[lang] = config
- langConfigsList = append(langConfigsList, lang)
+ var err error
+
+ langConfigsList, err = toSortedLanguages(multilingual)
+
+ if err != nil {
+ return fmt.Errorf("Failed to parse multilingual config: %s", err)
}
- sort.Sort(langConfigsList)
+
+ return nil
}
-type langConfigsSortable []string
+func toSortedLanguages(l map[string]interface{}) (hugolib.Languages, error) {
+ langs := make(hugolib.Languages, len(l))
+
+ for lang, langConf := range l {
+ langsMap, ok := langConf.(map[string]interface{})
-func (p langConfigsSortable) Len() int { return len(p) }
-func (p langConfigsSortable) Less(i, j int) bool { return weightForLang(p[i]) < weightForLang(p[j]) }
-func (p langConfigsSortable) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
+ if !ok {
+ return nil, fmt.Errorf("Language config is not a map: %v", langsMap)
+ }
-func weightForLang(lang string) int {
- conf := langConfigs[lang]
- if conf == nil {
- return 0
+ language := hugolib.NewLanguage(lang)
+
+ for k, v := range langsMap {
+ loki := strings.ToLower(k)
+ switch loki {
+ case "title":
+ language.Title = cast.ToString(v)
+ case "weight":
+ language.Weight = cast.ToInt(v)
+ }
+
+ // Put all into the Params map
+ // TODO(bep) reconsile with the type handling etc. from other params handlers.
+ language.SetParam(loki, v)
+ }
+
+ langs = append(langs, language)
}
- m := cast.ToStringMap(conf)
- return cast.ToInt(m["weight"])
+
+ sort.Sort(langs)
+
+ return langs, nil
}