diff --git a/jmdict.go b/jmdict.go index 3064a81..49e240e 100644 --- a/jmdict.go +++ b/jmdict.go @@ -81,11 +81,20 @@ func buildDictJson(entries []dictEntry, entities map[string]string) dictJson { return dict } -func outputJson(entries []dictEntry, entities map[string]string, writer io.Writer) error { +func outputJson(writer io.Writer, entries []dictEntry, entities map[string]string, pretty bool) error { dict := buildDictJson(entries, entities) - bytes, err := json.MarshalIndent(dict, "", " ") - // bytes, err := json.Marshal(dict) + var ( + bytes []byte + err error + ) + + if pretty { + bytes, err = json.MarshalIndent(dict, "", " ") + } else { + bytes, err = json.Marshal(dict) + } + if err != nil { return err } @@ -208,7 +217,7 @@ func convertEdictEntry(edictEntry jmdict.EdictEntry) []dictEntry { return entries } -func processEnamdict(reader io.Reader, writer io.Writer) error { +func processEnamdict(writer io.Writer, reader io.Reader, flags int) error { enamdictEntries, entities, err := jmdict.LoadEnamdict(reader, false) if err != nil { return err @@ -219,10 +228,10 @@ func processEnamdict(reader io.Reader, writer io.Writer) error { entries = append(entries, convertEnamdictEntry(enamdictEntry)...) } - return outputJson(entries, entities, writer) + return outputJson(writer, entries, entities, flags&flagPrettyJson == flagPrettyJson) } -func processEdict(reader io.Reader, writer io.Writer) error { +func processEdict(writer io.Writer, reader io.Reader, flags int) error { edictEntries, entities, err := jmdict.LoadEdict(reader, false) if err != nil { return err @@ -233,5 +242,5 @@ func processEdict(reader io.Reader, writer io.Writer) error { entries = append(entries, convertEdictEntry(edictEntry)...) } - return outputJson(entries, entities, writer) + return outputJson(writer, entries, entities, flags&flagPrettyJson == flagPrettyJson) } diff --git a/main.go b/main.go index 7a8c20e..8c7f487 100644 --- a/main.go +++ b/main.go @@ -24,6 +24,7 @@ package main import ( "errors" + "flag" "fmt" "io" "log" @@ -31,12 +32,18 @@ import ( "path" ) +const ( + flagPrettyJson = 1 << iota +) + func usage() { fmt.Fprintf(os.Stderr, "Usage: %s file_format input_file output_file\n\n", path.Base(os.Args[0])) + fmt.Fprintf(os.Stderr, "Parameters:\n") + flag.PrintDefaults() } -func process(fileFormat, inputFile, outputFile string) error { - handlers := map[string]func(io.Reader, io.Writer) error{ +func process(fileFormat, inputFile, outputFile string, flags int) error { + handlers := map[string]func(io.Writer, io.Reader, int) error{ "edict": processEdict, "enamdict": processEnamdict, } @@ -56,14 +63,22 @@ func process(fileFormat, inputFile, outputFile string) error { return err } - return handler(input, output) + return handler(output, input, flags) } func main() { - args := os.Args[1:] + prettyJson := flag.Bool("prettyJson", false, "output prettified json") - if len(args) == 3 { - if err := process(args[0], args[1], args[2]); err != nil { + flag.Usage = usage + flag.Parse() + + var flags int + if *prettyJson { + flags |= flagPrettyJson + } + + if flag.NArg() == 3 { + if err := process(flag.Arg(0), flag.Arg(1), flag.Arg(2), flags); err != nil { log.Fatal(err) } } else {