]> Cypherpunks repositories - gostls13.git/commitdiff
strconv: use go generate to create isprint.go
authorChaiShushan <chaishushan@gmail.com>
Thu, 28 Aug 2014 21:55:02 +0000 (14:55 -0700)
committerRob Pike <r@golang.org>
Thu, 28 Aug 2014 21:55:02 +0000 (14:55 -0700)
LGTM=r
R=golang-codereviews, r
CC=golang-codereviews
https://golang.org/cl/132230043

src/pkg/strconv/isprint.go
src/pkg/strconv/makeisprint.go
src/pkg/strconv/quote.go

index ba0adbdbb58ce4422e8d50dd63f3cde9d2c15ca3..80738ed71117231b771f1fdb26db0b85cf66ef01 100644 (file)
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // DO NOT EDIT.  GENERATED BY
-//     go run makeisprint.go >x && mv x isprint.go
+//     go run makeisprint.go -output isprint.go
 
 package strconv
 
index 216159cc020fdc5e27c5e3aa7c106dced48c0c1d..588d0a00b53b242010cc50afd051065e1ceb5a91 100644 (file)
@@ -4,15 +4,26 @@
 
 // +build ignore
 
-// makeisprint generates the tables for strconv's compact isPrint.
+//
+// usage:
+//
+// go run makeisprint.go -output isprint.go
+//
+
 package main
 
 import (
+       "bytes"
+       "flag"
        "fmt"
-       "os"
+       "go/format"
+       "io/ioutil"
+       "log"
        "unicode"
 )
 
+var filename = flag.String("output", "isprint.go", "output file name")
+
 var (
        range16  []uint16
        except16 []uint16
@@ -110,6 +121,8 @@ func to16(x []uint32) []uint16 {
 }
 
 func main() {
+       flag.Parse()
+
        rang, except := scan(0, 0xFFFF)
        range16 = to16(rang)
        except16 = to16(except)
@@ -117,49 +130,58 @@ func main() {
 
        for i := rune(0); i <= unicode.MaxRune; i++ {
                if isPrint(i) != unicode.IsPrint(i) {
-                       fmt.Fprintf(os.Stderr, "%U: isPrint=%v, want %v\n", i, isPrint(i), unicode.IsPrint(i))
-                       return
+                       log.Fatalf("%U: isPrint=%v, want %v\n", i, isPrint(i), unicode.IsPrint(i))
                }
        }
 
-       fmt.Printf(`// Copyright 2013 The Go Authors. All rights reserved.
+       var buf bytes.Buffer
+
+       fmt.Fprintf(&buf, `// Copyright 2013 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.` + "\n\n")
-       fmt.Printf("// DO NOT EDIT.  GENERATED BY\n")
-       fmt.Printf("//     go run makeisprint.go >x && mv x isprint.go\n\n")
-       fmt.Printf("package strconv\n\n")
+// license that can be found in the LICENSE file.`+"\n\n")
+       fmt.Fprintf(&buf, "// DO NOT EDIT.  GENERATED BY\n")
+       fmt.Fprintf(&buf, "//     go run makeisprint.go -output isprint.go\n\n")
+       fmt.Fprintf(&buf, "package strconv\n\n")
 
-       fmt.Printf("// (%d+%d+%d)*2 + (%d)*4 = %d bytes\n\n",
+       fmt.Fprintf(&buf, "// (%d+%d+%d)*2 + (%d)*4 = %d bytes\n\n",
                len(range16), len(except16), len(except32),
                len(range32),
                (len(range16)+len(except16)+len(except32))*2+
                        (len(range32))*4)
 
-       fmt.Printf("var isPrint16 = []uint16{\n")
+       fmt.Fprintf(&buf, "var isPrint16 = []uint16{\n")
        for i := 0; i < len(range16); i += 2 {
-               fmt.Printf("\t%#04x, %#04x,\n", range16[i], range16[i+1])
+               fmt.Fprintf(&buf, "\t%#04x, %#04x,\n", range16[i], range16[i+1])
        }
-       fmt.Printf("}\n\n")
+       fmt.Fprintf(&buf, "}\n\n")
 
-       fmt.Printf("var isNotPrint16 = []uint16{\n")
+       fmt.Fprintf(&buf, "var isNotPrint16 = []uint16{\n")
        for _, r := range except16 {
-               fmt.Printf("\t%#04x,\n", r)
+               fmt.Fprintf(&buf, "\t%#04x,\n", r)
        }
-       fmt.Printf("}\n\n")
+       fmt.Fprintf(&buf, "}\n\n")
 
-       fmt.Printf("var isPrint32 = []uint32{\n")
+       fmt.Fprintf(&buf, "var isPrint32 = []uint32{\n")
        for i := 0; i < len(range32); i += 2 {
-               fmt.Printf("\t%#06x, %#06x,\n", range32[i], range32[i+1])
+               fmt.Fprintf(&buf, "\t%#06x, %#06x,\n", range32[i], range32[i+1])
        }
-       fmt.Printf("}\n\n")
+       fmt.Fprintf(&buf, "}\n\n")
 
-       fmt.Printf("var isNotPrint32 = []uint16{ // add 0x10000 to each entry\n")
+       fmt.Fprintf(&buf, "var isNotPrint32 = []uint16{ // add 0x10000 to each entry\n")
        for _, r := range except32 {
                if r >= 0x20000 {
-                       fmt.Fprintf(os.Stderr, "%U too big for isNotPrint32\n", r)
-                       return
+                       log.Fatalf("%U too big for isNotPrint32\n", r)
                }
-               fmt.Printf("\t%#04x,\n", r-0x10000)
+               fmt.Fprintf(&buf, "\t%#04x,\n", r-0x10000)
+       }
+       fmt.Fprintf(&buf, "}\n")
+
+       data, err := format.Source(buf.Bytes())
+       if err != nil {
+               log.Fatal(err)
+       }
+       err = ioutil.WriteFile(*filename, data, 0644)
+       if err != nil {
+               log.Fatal(err)
        }
-       fmt.Printf("}\n")
 }
index 8cdfc472f352303386d04e096733ccc1d9816a05..4469c688b0f98195ea888fdc1d6b4f224650c5bc 100644 (file)
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+//go:generate go run makeisprint.go -output isprint.go
+
 package strconv
 
 import (