diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2016-07-24 14:58:27 +0300 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2016-09-06 18:32:15 +0300 |
commit | 06d12ab895a83fc8a9f94b23e533b25511bbb6d1 (patch) | |
tree | e25be5f3afb89ce99af7aaa49561b23fd053a616 /commands | |
parent | ec33732fbe84f67c1164fb713d6cb738609f2e2e (diff) |
Add proper Language and Languages types
Diffstat (limited to 'commands')
-rw-r--r-- | commands/hugo.go | 15 | ||||
-rw-r--r-- | commands/multilingual.go | 65 |
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 } |