diff options
-rw-r--r-- | src/gotext.go | 49 | ||||
-rw-r--r-- | tests/gotext.go | 47 |
2 files changed, 56 insertions, 40 deletions
diff --git a/src/gotext.go b/src/gotext.go index 152b33c..0ac104e 100644 --- a/src/gotext.go +++ b/src/gotext.go @@ -8,7 +8,6 @@ import ( "go/token" "io" "io/ioutil" - "log" "os" "sort" "strings" @@ -84,9 +83,14 @@ type argsT struct{ keywordPlural string } +type envT struct{ + args argsT + in io.Reader + out io.Writer + err io.Writer +} -var msgIDs map[string][]msgID func formatComment(com string) string { out := "" @@ -160,6 +164,7 @@ func constructValue(val interface{}) string { func inspectNodeForTranslations( args argsT, + msgIDs map[string][]msgID, fset *token.FileSet, f *ast.File, n ast.Node, @@ -227,6 +232,7 @@ func inspectNodeForTranslations( msgidStr := formatI18nStr(i18nStr) posCall := fset.Position(n.Pos()) + msgIDs[msgidStr] = append(msgIDs[msgidStr], msgID{ formatHint: formatHint, msgidPlural: formatI18nStr(i18nStrPlural), @@ -257,22 +263,24 @@ func formatI18nStr(s string) string { return s } -func processFiles(args argsT) error { +func processFiles(args argsT) (map[string][]msgID, error) { // go over the input files - msgIDs = make(map[string][]msgID) + msgIDs := map[string][]msgID{} fset := token.NewFileSet() for _, fname := range args.subArgs { - if err := processSingleGoSource(args, fset, fname); err != nil { - return err + err := processSingleGoSource(args, msgIDs, fset, fname) + if err != nil { + return nil, err } } - return nil + return msgIDs, nil } func processSingleGoSource( args argsT, + msgIDs map[string][]msgID, fset *token.FileSet, fname string, ) error { @@ -288,7 +296,7 @@ func processSingleGoSource( } ast.Inspect(f, func(n ast.Node) bool { - return inspectNodeForTranslations(args, fset, f, n) + return inspectNodeForTranslations(args, msgIDs, fset, f, n) }) return nil @@ -308,8 +316,7 @@ func formatOutput(in string) string { } } -func writePotFile(out io.Writer) { - +func writePotFile(out io.Writer, msgIDs map[string][]msgID) { header := g.Heredoc(` #, fuzzy msgid "" @@ -358,7 +365,6 @@ func writePotFile(out io.Writer) { } fmt.Fprintf(out, "\n") } - } func usage(argv0 string, w io.Writer) { @@ -408,6 +414,16 @@ func getopt(allArgs []string, w io.Writer) (argsT, int) { }, 0 } +func run(env envT) int { + msgIDs, err := processFiles(env.args) + if err != nil { + fmt.Fprintln(env.err, err) + return 1 + } + + writePotFile(os.Stdout, msgIDs) + return 0 +} func Main() { // parse args @@ -421,12 +437,13 @@ func Main() { g.Init() args, rc := getopt(os.Args, os.Stderr) g.ExitIf(rc) + os.Exit(run(envT{ + args: args, + in: os.Stdin, + out: os.Stdout, + err: os.Stderr, + })) - if err := processFiles(args); err != nil { - log.Fatalf("processFiles failed with: %s", err) - } - - writePotFile(os.Stdout) } // SetLocale sets the program's current locale. diff --git a/tests/gotext.go b/tests/gotext.go index da57254..25f0f3a 100644 --- a/tests/gotext.go +++ b/tests/gotext.go @@ -52,7 +52,7 @@ func test_processFiles() { } `)) defer os.Remove(fname) - g.TErrorIf(processFiles(argsT{ + msgIDs := g.TMust(processFiles(argsT{ subArgs: []string{fname}, keyword: "i18n.G", })) @@ -81,7 +81,7 @@ func test_processFiles() { } `)) defer os.Remove(fname) - g.TErrorIf(processFiles(argsT{ + msgIDs := g.TMust(processFiles(argsT{ subArgs: []string{fname}, keyword: "i18n.G", })) @@ -103,7 +103,6 @@ func test_processFiles() { }) g.Testing("process files with concat", func() { - msgIDs = nil fname := src(g.Heredoc(` package main @@ -112,7 +111,7 @@ func test_processFiles() { i18n.G("foo\n" + "bar\n" + "baz") } `)) - g.TErrorIf(processFiles(argsT{ + msgIDs := g.TMust(processFiles(argsT{ subArgs: []string{fname}, keyword: "i18n.G", })) @@ -137,13 +136,13 @@ func test_processFiles() { } `), "`")) defer os.Remove(fname) - g.TErrorIf(processFiles(argsT{ + msgIDs := g.TMust(processFiles(argsT{ subArgs: []string{fname}, keyword: "i18n.G", })) out := bytes.NewBuffer([]byte("")) - writePotFile(out) + writePotFile(out, msgIDs) expected := fmt.Sprintf(g.Heredoc(` #, fuzzy @@ -167,7 +166,7 @@ func test_writePotFile() { g.TestStart("writePotFile()") g.Testing("write simple file", func() { - msgIDs = map[string][]msgID{ + msgIDs := map[string][]msgID{ "foo": []msgID{ { fname: "fname", @@ -177,7 +176,7 @@ func test_writePotFile() { }, } out := bytes.NewBuffer([]byte("")) - writePotFile(out) + writePotFile(out, msgIDs) expected := g.Heredoc(` #, fuzzy @@ -198,7 +197,7 @@ func test_writePotFile() { }) g.Testing("write template with 2 entries", func() { - msgIDs = map[string][]msgID{ + msgIDs := map[string][]msgID{ "foo": []msgID{ { fname: "fname", @@ -213,7 +212,7 @@ func test_writePotFile() { }, } out := bytes.NewBuffer([]byte("")) - writePotFile(out) + writePotFile(out, msgIDs) expected := g.Heredoc(` #, fuzzy @@ -235,7 +234,7 @@ func test_writePotFile() { }) g.Testing("template without comment", func() { - msgIDs = map[string][]msgID{ + msgIDs := map[string][]msgID{ "foo": []msgID{ { fname: "fname", @@ -244,7 +243,7 @@ func test_writePotFile() { }, } out := bytes.NewBuffer([]byte("")) - writePotFile(out) + writePotFile(out, msgIDs) expected := g.Heredoc(` #, fuzzy @@ -264,7 +263,7 @@ func test_writePotFile() { }) g.Testing("output without location", func() { - msgIDs = map[string][]msgID{ + msgIDs := map[string][]msgID{ "foo": []msgID{ { fname: "fname", @@ -274,7 +273,7 @@ func test_writePotFile() { } out := bytes.NewBuffer([]byte("")) - writePotFile(out) + writePotFile(out, msgIDs) expected := g.Heredoc(` #, fuzzy @@ -294,7 +293,7 @@ func test_writePotFile() { }) g.Testing("output with hint", func() { - msgIDs = map[string][]msgID{ + msgIDs := map[string][]msgID{ "foo": []msgID{ { fname: "fname", @@ -305,7 +304,7 @@ func test_writePotFile() { } out := bytes.NewBuffer([]byte("")) - writePotFile(out) + writePotFile(out, msgIDs) expected := g.Heredoc(` #, fuzzy @@ -326,7 +325,7 @@ func test_writePotFile() { }) g.Testing("output with plural", func() { - msgIDs = map[string][]msgID{ + msgIDs := map[string][]msgID{ "foo": []msgID{ { msgidPlural: "plural", @@ -337,7 +336,7 @@ func test_writePotFile() { } out := bytes.NewBuffer([]byte("")) - writePotFile(out) + writePotFile(out, msgIDs) expected := g.Heredoc(` #, fuzzy @@ -359,7 +358,7 @@ func test_writePotFile() { }) g.Testing("multiline output", func() { - msgIDs = map[string][]msgID{ + msgIDs := map[string][]msgID{ "foo\\nbar\\nbaz": []msgID{ { fname: "fname", @@ -369,7 +368,7 @@ func test_writePotFile() { }, } out := bytes.NewBuffer([]byte("")) - writePotFile(out) + writePotFile(out, msgIDs) expected := g.Heredoc(` #, fuzzy msgid "" @@ -392,7 +391,7 @@ func test_writePotFile() { }) g.Testing("output tidy output", func() { - msgIDs = map[string][]msgID{ + msgIDs := map[string][]msgID{ "foo\\nbar\\nbaz": []msgID{ { fname: "fname", @@ -407,7 +406,7 @@ func test_writePotFile() { }, } out := bytes.NewBuffer([]byte("")) - writePotFile(out) + writePotFile(out, msgIDs) expected := g.Heredoc(` #, fuzzy msgid "" @@ -441,13 +440,13 @@ func test_writePotFile() { } `)) defer os.Remove(fname) - g.TErrorIf(processFiles(argsT{ + msgIDs := g.TMust(processFiles(argsT{ subArgs: []string{fname}, keyword: "i18n.G", })) out := bytes.NewBuffer([]byte("")) - writePotFile(out) + writePotFile(out, msgIDs) expected := fmt.Sprintf(g.Heredoc(` #, fuzzy |