diff --git a/config.go b/config.go index 5347ccb..9d3df17 100644 --- a/config.go +++ b/config.go @@ -136,6 +136,7 @@ func newConfig() *config { options.Add("json", "-j|--json") options.Add("listcharsets", "--list-charsets") options.Add("listformats", "--list-formats") + options.Add("listformatscsv", "--list-formats-csv") options.Add("logfiles", "--log-files") options.Add("logstats", "-l|--log-stats") options.Add("module", "-m=s+|--module=s+") @@ -172,6 +173,8 @@ func newConfig() *config { usageCharsets() case "listformats": usageFormats(c.formats) + case "listformatscsv": + usageFormatsCSV(c.formats) case "logfiles": c.logFiles = true case "logstats": diff --git a/docs/core/usage.md b/docs/core/usage.md index f4e7199..63e743d 100644 --- a/docs/core/usage.md +++ b/docs/core/usage.md @@ -48,6 +48,7 @@ Where [options] are mostly optional configuration flags—see [Opti
--head=FILE
Name of the file whose contents will be appended as-is to the <head> element of the compiled HTML.
--list-charsets
List the supported input character sets, then exit.
--list-formats
List the available story formats, then exit.
+
--list-formats-csv
List the available story formats as CSV, then exit.
--log-files

Log the processed input files.

diff --git a/usage.go b/usage.go index 79f8c18..cf33d30 100644 --- a/usage.go +++ b/usage.go @@ -45,6 +45,7 @@ Options: -j, --json Output JSON, instead of compiled HTML. --list-charsets List the supported input character sets, then exit. --list-formats List the available story formats, then exit. + --list-formats-csv List the available story formats as CSV, then exit. --log-files Log the processed input files. -l, --log-stats Log various story statistics. -m SRC, --module=SRC Module sources (repeatable); may consist of supported @@ -118,6 +119,33 @@ func usageFormats(formats storyFormatsMap) { os.Exit(1) } +// formats the list of supported story formats as csv for the user +func usageFormatsCSV(formats storyFormatsMap) { + fmt.Fprintln(os.Stdout) + if formats.isEmpty() { + fmt.Fprintln(os.Stderr, "Story formats not found.") + os.Exit(1) + } else { + ids := formats.ids() + sort.Sort(StringsInsensitively(ids)) + fmt.Fprintln(os.Stdout, "id,name,version,details") + for _, id := range ids { + f := formats[id] + fmt.Fprint(os.Stdout, f.id) + if f.isTwine2Style() { + fmt.Fprintf(os.Stdout, ",%s,%s,", f.name, f.version) + if f.proofing { + fmt.Fprint(os.Stdout, "proofing") + } + } else { + fmt.Fprint(os.Stdout, ",,,") + } + fmt.Fprintln(os.Stdout) + } + } + os.Exit(0) +} + func usageVersion() { fmt.Fprintf(os.Stderr, "\n%s, %s\n", tweegoName, tweegoVersion) fmt.Fprint(os.Stderr, `