forked from TrueCloudLab/restic
Update vendored library golang.org/x/text
This commit is contained in:
parent
d8dd79eb0b
commit
5b6568875c
46 changed files with 610 additions and 2739 deletions
97
vendor/golang.org/x/text/message/pipeline/generate.go
generated
vendored
97
vendor/golang.org/x/text/message/pipeline/generate.go
generated
vendored
|
@ -6,9 +6,7 @@ package pipeline
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"go/build"
|
||||
"io"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strings"
|
||||
|
@ -20,75 +18,23 @@ 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.
|
||||
// Translations are retrieved from s.Messages, not s.Translations, so it
|
||||
// is assumed Merge has been called.
|
||||
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()
|
||||
// Generate writes a Go file with the given package name to w, which defines a
|
||||
// Catalog with translated messages.
|
||||
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.
|
||||
|
||||
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
|
||||
// Catalog with translated messages. Translations are retrieved from s.Messages,
|
||||
// not s.Translations, so it is assumed Merge has been called.
|
||||
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) {
|
||||
// Build up index of translations and original messages.
|
||||
translations := map[language.Tag]map[string]Message{}
|
||||
languages := []language.Tag{}
|
||||
langVars := []string{}
|
||||
usedKeys := map[string]int{}
|
||||
|
||||
for _, loc := range s.Messages {
|
||||
for _, loc := range trans {
|
||||
tag := loc.Language
|
||||
if _, ok := translations[tag]; !ok {
|
||||
translations[tag] = map[string]Message{}
|
||||
|
@ -98,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
|
||||
}
|
||||
|
@ -109,11 +55,10 @@ func (s *State) generate() (*gen.CodeWriter, error) {
|
|||
// Verify completeness and register keys.
|
||||
internal.SortTags(languages)
|
||||
|
||||
langVars := []string{}
|
||||
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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue