]> Cypherpunks repositories - gostls13.git/commitdiff
ebnflint: better handling of stdin
authorRobert Griesemer <gri@golang.org>
Sat, 25 Jun 2011 00:29:19 +0000 (17:29 -0700)
committerRobert Griesemer <gri@golang.org>
Sat, 25 Jun 2011 00:29:19 +0000 (17:29 -0700)
- don't rely on /dev/stdin as the name for standard input
- employ EBNF extraction if the source contains tags

"cat source.html | ebnflint" works now

R=r
CC=golang-dev
https://golang.org/cl/4641075

src/cmd/ebnflint/ebnflint.go

index cac39179f2ab8a0ef4e237737f755b50ed4cc6fb..0b04431568f112ae42db26299c69005d85be80ed 100644 (file)
@@ -35,6 +35,12 @@ var (
 )
 
 
+func report(err os.Error) {
+       scanner.PrintError(os.Stderr, err)
+       os.Exit(1)
+}
+
+
 func extractEBNF(src []byte) []byte {
        var buf bytes.Buffer
 
@@ -75,34 +81,35 @@ func extractEBNF(src []byte) []byte {
 func main() {
        flag.Parse()
 
-       var filename string
+       var (
+               filename string
+               src      []byte
+               err      os.Error
+       )
        switch flag.NArg() {
        case 0:
-               filename = "/dev/stdin"
+               filename = "<stdin>"
+               src, err = ioutil.ReadAll(os.Stdin)
        case 1:
                filename = flag.Arg(0)
+               src, err = ioutil.ReadFile(filename)
        default:
                usage()
        }
-
-       src, err := ioutil.ReadFile(filename)
        if err != nil {
-               scanner.PrintError(os.Stderr, err)
-               os.Exit(1)
+               report(err)
        }
 
-       if filepath.Ext(filename) == ".html" {
+       if filepath.Ext(filename) == ".html" || bytes.Index(src, open) >= 0 {
                src = extractEBNF(src)
        }
 
        grammar, err := ebnf.Parse(fset, filename, src)
        if err != nil {
-               scanner.PrintError(os.Stderr, err)
-               os.Exit(1)
+               report(err)
        }
 
        if err = ebnf.Verify(fset, grammar, *start); err != nil {
-               scanner.PrintError(os.Stderr, err)
-               os.Exit(1)
+               report(err)
        }
 }