bash - main.go
1 package main
2
3 import (
4 "flag"
5 "fmt"
6 "os"
7
8 "vimagination.zapto.org/bash"
9 "vimagination.zapto.org/parser"
10 )
11
12 func main() {
13 if err := run(); err != nil {
14 fmt.Fprintln(os.Stderr, err)
15
16 os.Exit(1)
17 }
18 }
19
20 func run() error {
21 var write, concise bool
22
23 flag.BoolVar(&write, "w", false, "write formatted bash code to source file instead of stdout")
24 flag.BoolVar(&concise, "c", false, "print concise bash")
25 flag.Parse()
26
27 file := flag.CommandLine.Arg(0)
28
29 r := os.Stdin
30
31 if file != "" {
32 f, err := os.Open(file)
33 if err != nil {
34 return err
35 }
36
37 r = f
38 }
39
40 tk := parser.NewReaderTokeniser(r)
41
42 b, err := bash.Parse(bash.SetTokeniser(&tk))
43 if err != nil {
44 return err
45 }
46
47 out := os.Stdout
48
49 if write && r != os.Stdin {
50 f, err := os.Create(file)
51 if err != nil {
52 return err
53 }
54 defer f.Close()
55
56 out = f
57 }
58
59 if concise {
60 fmt.Fprintf(out, "%s", b)
61 } else {
62 fmt.Fprintf(out, "%+s", b)
63 }
64
65 return nil
66 }
67