aboutsummaryrefslogtreecommitdiffhomepage
path: root/vendor/golang.org/x/text/message/pipeline/generate.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/golang.org/x/text/message/pipeline/generate.go')
-rw-r--r--vendor/golang.org/x/text/message/pipeline/generate.go89
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) {