From 60938612c52e8a86b9d267dce523df81432caf1e Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Mon, 25 Dec 2023 13:49:52 +0200 Subject: [PATCH] Rename schemac compiler to preserves-schemac --- src/preserves/Tupfile | 2 +- src/preserves/preserves_schemac.nim | 58 +++++++++++++++++++ ...emac.nim.cfg => preserves_schemac.nim.cfg} | 0 src/preserves/schemac.nim | 47 --------------- tests/Tupfile | 4 ++ 5 files changed, 63 insertions(+), 48 deletions(-) create mode 100644 src/preserves/preserves_schemac.nim rename src/preserves/{schemac.nim.cfg => preserves_schemac.nim.cfg} (100%) delete mode 100644 src/preserves/schemac.nim diff --git a/src/preserves/Tupfile b/src/preserves/Tupfile index feab1ea..8660033 100644 --- a/src/preserves/Tupfile +++ b/src/preserves/Tupfile @@ -3,5 +3,5 @@ NIM_FLAGS += --path:$(TUP_CWD)/.. : foreach preserves_schema_nim.nim schemaparse.nim |> !nim_bin |> $(BIN_DIR)/%B | $(BIN_DIR)/<%B> DOT_FILES = ../../Document.dot ../../Schema.dot -: schemac.nim |> !nim_bin |> $(BIN_DIR)/%B | $(DOT_FILES) $(BIN_DIR)/<%B> +: preserves_schemac.nim |> !nim_bin |> $(BIN_DIR)/preserves-schemac | $(DOT_FILES) $(BIN_DIR)/ : foreach $(DOT_FILES) |> dot -Tsvg -LO %f > %o |> ../../%B-Grammer-Graph.svg diff --git a/src/preserves/preserves_schemac.nim b/src/preserves/preserves_schemac.nim new file mode 100644 index 0000000..f103f5a --- /dev/null +++ b/src/preserves/preserves_schemac.nim @@ -0,0 +1,58 @@ +# SPDX-FileCopyrightText: ☭ Emery Hemingway +# SPDX-License-Identifier: Unlicense + +import std/[hashes, options, os, parseopt, streams, strutils, tables] + +import ../preserves, ./schema, ./schemaparse + +when isMainModule: + let outStream = newFileStream(stdout) + var + inputPath = "" + noBundle = false + + for kind, key, arg in getopt(): + case kind + of cmdEnd: discard + of cmdArgument: + if inputPath != "": + quit "only a single path may specified" + inputPath = key + of cmdLongOption: + if arg != "": + quit("flag does not take an argument: " & key & " " & arg) + case key + of "no-bundle": noBundle = true + else: quit(key & "flag not recognized") + else: quit(key & "flag not recognized") + + if inputPath == "": + quit "input file(s) not specified" + + if noBundle: + if not fileExists inputPath: + quit(inputPath & " does not exist or is not a file") + var schema = parsePreservesSchema(readFile(inputPath)) + write(outStream, schema.toPreserve) + + else: + let bundle = Bundle() + if not dirExists inputPath: + quit "not a directory of schemas: " & inputPath + else: + for filePath in walkDirRec(inputPath, relative = true): + var (dirPath, fileName, fileExt) = splitFile(filePath) + if fileExt == ".prs": + var + scm = parsePreservesSchema(readFile(inputPath / filePath)) + path: ModulePath + for e in split(dirPath, '/'): + add(path, Symbol e) + add(path, Symbol fileName) + bundle.modules[path] = scm + if bundle.modules.len == 0: + quit "no schemas parsed" + else: + write(outStream, bundle.toPreserve) + + close(outStream) diff --git a/src/preserves/schemac.nim.cfg b/src/preserves/preserves_schemac.nim.cfg similarity index 100% rename from src/preserves/schemac.nim.cfg rename to src/preserves/preserves_schemac.nim.cfg diff --git a/src/preserves/schemac.nim b/src/preserves/schemac.nim deleted file mode 100644 index 166df08..0000000 --- a/src/preserves/schemac.nim +++ /dev/null @@ -1,47 +0,0 @@ -# SPDX-FileCopyrightText: ☭ Emery Hemingway -# SPDX-License-Identifier: Unlicense - -import std/[hashes, options, os, parseopt, streams, strutils, tables] - -import ../preserves, ./schema, ./schemaparse - -when isMainModule: - let outStream = newFileStream(stdout) - - for kind, key, inputPath in getopt(): - case kind - of cmdEnd: discard - of cmdArgument: - quit "arguments must be prefixed by --schema: or --bundle:" - of cmdLongOption: - if inputPath == "": - quit "long command line options require a path argument" - case key - - of "schema": - var schema = parsePreservesSchema(readFile(inputPath)) - write(outStream, schema.toPreserve) - - of "bundle": - let bundle = Bundle() - if not dirExists inputPath: - quit "not a directory of schemas: " & inputPath - else: - for filePath in walkDirRec(inputPath, relative = true): - var (dirPath, fileName, fileExt) = splitFile(filePath) - if fileExt == ".prs": - var - scm = parsePreservesSchema(readFile(inputPath / filePath)) - path: ModulePath - for e in split(dirPath, '/'): - add(path, Symbol e) - add(path, Symbol fileName) - bundle.modules[path] = scm - if bundle.modules.len == 0: - quit "no schemas parsed" - else: - write(outStream, bundle.toPreserve) - - else: quit("unhandled option " & key) - else: quit("unhandled option " & key) - close(outStream) diff --git a/tests/Tupfile b/tests/Tupfile index fc4fccb..479ba1f 100644 --- a/tests/Tupfile +++ b/tests/Tupfile @@ -1,3 +1,7 @@ include_rules NIM_FLAGS_test_samples += -d:upstreamTestfile="$(TUP_CWD)/../../preserves/tests/samples.pr" : foreach t*.nim |> !nim_run |> | ../ + +: $(BIN_DIR)/ \ + |> $(BIN_DIR)/preserves-schemac --no-bundle ../../preserves/doc/demo.prs | xxd > %o \ + |> demo.xxd