diff options
Diffstat (limited to 'vendor/golang.org/x/text/message/pipeline/generate.go')
-rw-r--r-- | vendor/golang.org/x/text/message/pipeline/generate.go | 89 |
1 files changed, 13 insertions, 76 deletions
diff --git a/vendor/golang.org/x/text/message/pipeline/generate.go b/vendor/golang.org/x/text/message/pipeline/generate.go index 8d6f07b..c5e51bd 100644 --- a/vendor/golang.org/x/text/message/pipeline/generate.go +++ b/vendor/golang.org/x/text/message/pipeline/generate.go @@ -6,9 +6,7 @@ package pipeline import ( "fmt" - "go/build" "io" - "path/filepath" "regexp" "sort" "strings" @@ -20,66 +18,13 @@ import ( "golang.org/x/text/internal/catmsg" "golang.org/x/text/internal/gen" "golang.org/x/text/language" - "golang.org/x/tools/go/loader" ) var transRe = regexp.MustCompile(`messages\.(.*)\.json`) -// Generate writes a Go file that defines a Catalog with translated messages. -func (s *State) Generate() error { - path := s.Config.GenPackage - if path == "" { - path = "." - } - isDir := path[0] == '.' - prog, err := loadPackages(&loader.Config{}, []string{path}) - if err != nil { - return wrap(err, "could not load package") - } - pkgs := prog.InitialPackages() - if len(pkgs) != 1 { - return errorf("more than one package selected: %v", pkgs) - } - pkg := pkgs[0].Pkg.Name() - - cw, err := s.generate() - if err != nil { - return err - } - if !isDir { - gopath := build.Default.GOPATH - path = filepath.Join(gopath, filepath.FromSlash(pkgs[0].Pkg.Path())) - } - path = filepath.Join(path, s.Config.GenFile) - cw.WriteGoFile(path, pkg) // TODO: WriteGoFile should return error. - return err -} - -// WriteGen writes a Go file with the given package name to w that defines a +// Generate writes a Go file with the given package name to w, which defines a // Catalog with translated messages. -func (s *State) WriteGen(w io.Writer, pkg string) error { - cw, err := s.generate() - if err != nil { - return err - } - _, err = cw.WriteGo(w, pkg, "") - return err -} - -// Generate is deprecated; use (*State).Generate(). -func Generate(w io.Writer, pkg string, extracted *Messages, trans ...Messages) (n int, err error) { - s := State{ - Extracted: *extracted, - Translations: trans, - } - cw, err := s.generate() - if err != nil { - return 0, err - } - return cw.WriteGo(w, pkg, "") -} - -func (s *State) generate() (*gen.CodeWriter, error) { +func Generate(w io.Writer, pkg string, extracted *Locale, trans ...*Locale) (n int, err error) { // TODO: add in external input. Right now we assume that all files are // manually created and stored in the textdata directory. @@ -89,7 +34,7 @@ func (s *State) generate() (*gen.CodeWriter, error) { langVars := []string{} usedKeys := map[string]int{} - for _, loc := range s.Translations { + for _, loc := range trans { tag := loc.Language if _, ok := translations[tag]; !ok { translations[tag] = map[string]Message{} @@ -99,7 +44,7 @@ func (s *State) generate() (*gen.CodeWriter, error) { if !m.Translation.IsEmpty() { for _, id := range m.ID { if _, ok := translations[tag][id]; ok { - warnf("Duplicate translation in locale %q for message %q", tag, id) + logf("Duplicate translation in locale %q for message %q", tag, id) } translations[tag][id] = m } @@ -113,7 +58,7 @@ func (s *State) generate() (*gen.CodeWriter, error) { for _, tag := range languages { langVars = append(langVars, strings.Replace(tag.String(), "-", "_", -1)) dict := translations[tag] - for _, msg := range s.Extracted.Messages { + for _, msg := range extracted.Messages { for _, id := range msg.ID { if trans, ok := dict[id]; ok && !trans.Translation.IsEmpty() { if _, ok := usedKeys[msg.Key]; !ok { @@ -122,7 +67,7 @@ func (s *State) generate() (*gen.CodeWriter, error) { break } // TODO: log missing entry. - warnf("%s: Missing entry for %q.", tag, id) + logf("%s: Missing entry for %q.", tag, id) } } } @@ -133,12 +78,12 @@ func (s *State) generate() (*gen.CodeWriter, error) { Fallback language.Tag Languages []string }{ - Fallback: s.Extracted.Language, + Fallback: extracted.Language, Languages: langVars, } if err := lookup.Execute(cw, x); err != nil { - return nil, wrap(err, "error") + return 0, wrap(err, "error") } keyToIndex := []string{} @@ -155,29 +100,21 @@ func (s *State) generate() (*gen.CodeWriter, error) { for i, tag := range languages { dict := translations[tag] a := make([]string, len(usedKeys)) - for _, msg := range s.Extracted.Messages { + for _, msg := range extracted.Messages { for _, id := range msg.ID { if trans, ok := dict[id]; ok && !trans.Translation.IsEmpty() { m, err := assemble(&msg, &trans.Translation) if err != nil { - return nil, wrap(err, "error") - } - _, leadWS, trailWS := trimWS(msg.Key) - if leadWS != "" || trailWS != "" { - m = catmsg.Affix{ - Message: m, - Prefix: leadWS, - Suffix: trailWS, - } + return 0, wrap(err, "error") } // TODO: support macros. data, err := catmsg.Compile(tag, nil, m) if err != nil { - return nil, wrap(err, "error") + return 0, wrap(err, "error") } key := usedKeys[msg.Key] if d := a[key]; d != "" && d != data { - warnf("Duplicate non-consistent translation for key %q, picking the one for message %q", msg.Key, id) + logf("Duplicate non-consistent translation for key %q, picking the one for message %q", msg.Key, id) } a[key] = string(data) break @@ -194,7 +131,7 @@ func (s *State) generate() (*gen.CodeWriter, error) { cw.WriteVar(langVars[i]+"Index", index) cw.WriteConst(langVars[i]+"Data", strings.Join(a, "")) } - return cw, nil + return cw.WriteGo(w, pkg, "") } func assemble(m *Message, t *Text) (msg catmsg.Message, err error) { |