diff options
author | Frédéric Guillot <fred@miniflux.net> | 2018-07-06 21:18:14 -0700 |
---|---|---|
committer | Frédéric Guillot <fred@miniflux.net> | 2018-07-06 21:18:14 -0700 |
commit | 459bb4531f92f8663afb6f36aa9be5b789bd591f (patch) | |
tree | f14e6c06b8e5c63612d1ff36f8cab40ae8a99d20 /vendor/golang.org/x/text/cmd/gotext/generate.go | |
parent | 34a3fe426b33a63f2d8e02d4a70c88f137fa5410 (diff) |
Update vendor dependencies
Diffstat (limited to 'vendor/golang.org/x/text/cmd/gotext/generate.go')
-rw-r--r-- | vendor/golang.org/x/text/cmd/gotext/generate.go | 83 |
1 files changed, 76 insertions, 7 deletions
diff --git a/vendor/golang.org/x/text/cmd/gotext/generate.go b/vendor/golang.org/x/text/cmd/gotext/generate.go index c8d5d79..2d34465 100644 --- a/vendor/golang.org/x/text/cmd/gotext/generate.go +++ b/vendor/golang.org/x/text/cmd/gotext/generate.go @@ -5,7 +5,16 @@ package main import ( + "encoding/json" + "fmt" + "io/ioutil" + "os" + "path/filepath" + "regexp" + "strings" + "golang.org/x/text/message/pipeline" + "golang.org/x/tools/go/loader" ) func init() { @@ -22,14 +31,74 @@ var cmdGenerate = &Command{ Short: "generates code to insert translated messages", } -func runGenerate(cmd *Command, config *pipeline.Config, args []string) error { - config.Packages = args - s, err := pipeline.Extract(config) +var transRe = regexp.MustCompile(`messages\.(.*)\.json`) + +func runGenerate(cmd *Command, args []string) error { + + prog, err := loadPackages(&loader.Config{}, args) + if err != nil { + return wrap(err, "could not load package") + } + + pkgs := prog.InitialPackages() + if len(pkgs) != 1 { + return fmt.Errorf("more than one package selected: %v", pkgs) + } + pkg := pkgs[0].Pkg.Name() + + // TODO: add in external input. Right now we assume that all files are + // manually created and stored in the textdata directory. + + // Build up index of translations and original messages. + extracted := pipeline.Locale{} + translations := []*pipeline.Locale{} + + err = filepath.Walk(*dir, func(path string, f os.FileInfo, err error) error { + if err != nil { + return wrap(err, "loading data") + } + if f.IsDir() { + return nil + } + if f.Name() == extractFile { + b, err := ioutil.ReadFile(path) + if err != nil { + return wrap(err, "read file failed") + } + if err := json.Unmarshal(b, &extracted); err != nil { + return wrap(err, "unmarshal source failed") + } + return nil + } + if f.Name() == outFile { + return nil + } + if !strings.HasSuffix(path, gotextSuffix) { + return nil + } + b, err := ioutil.ReadFile(path) + if err != nil { + return wrap(err, "read file failed") + } + var locale pipeline.Locale + if err := json.Unmarshal(b, &locale); err != nil { + return wrap(err, "parsing translation file failed") + } + translations = append(translations, &locale) + return nil + }) if err != nil { - return wrap(err, "extraction failed") + return err } - if err := s.Import(); err != nil { - return wrap(err, "import failed") + + w := os.Stdout + if *out != "" { + w, err = os.Create(*out) + if err != nil { + return wrap(err, "create file failed") + } } - return wrap(s.Generate(), "generation failed") + + _, err = pipeline.Generate(w, pkg, &extracted, translations...) + return err } |