| // Copyright 2017 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package main |
| |
| import ( |
| "io" |
| "os" |
| |
| "golang.org/x/text/message/pipeline" |
| ) |
| |
| const printerType = "golang.org/x/text/message.Printer" |
| |
| // TODO: |
| // - merge information into existing files |
| // - handle different file formats (PO, XLIFF) |
| // - handle features (gender, plural) |
| // - message rewriting |
| |
| func init() { |
| overwrite = cmdRewrite.Flag.Bool("w", false, "write files in place") |
| } |
| |
| var ( |
| overwrite *bool |
| ) |
| |
| var cmdRewrite = &Command{ |
| Run: runRewrite, |
| UsageLine: "rewrite <package>", |
| Short: "rewrites fmt functions to use a message Printer", |
| Long: ` |
| rewrite is typically done once for a project. It rewrites all usages of |
| fmt to use x/text's message package whenever a message.Printer is in scope. |
| It rewrites Print and Println calls with constant strings to the equivalent |
| using Printf to allow translators to reorder arguments. |
| `, |
| } |
| |
| func runRewrite(cmd *Command, _ *pipeline.Config, args []string) error { |
| var w io.Writer |
| if !*overwrite { |
| w = os.Stdout |
| } |
| pkg := "." |
| switch len(args) { |
| case 0: |
| case 1: |
| pkg = args[0] |
| default: |
| return errorf("can only specify at most one package") |
| } |
| return pipeline.Rewrite(w, pkg) |
| } |