Klammerset: the @@@klammerset construct, its search path, and const correctness
The @@@klammerset system command formally declares a klammerset — a named, logically related group of klammer definitions — with an operative, idempotent declaration (:requires and :files load in order at the declaration point, relative to the declaring file). A bare symbol given to ktext -k, kdesc --input, or :requires resolves to x/x.k on the search path: the document's directory, then KLAMMERTEXT_KLAMMERSETS, then KLAMMERTEXT_HOME; kdesc --klammerset lists the available sets. sks/sks.k is the first declared klammerset, so `-k sks` loads the SKS by name. The engine's lookup classes were renamed *_set → *_registry to keep the two concepts apart, and the whole C++ tree now follows standard const-correctness conventions. tst/ gains klammerset_test.sh (18 cases). (from dev 64b1abf23e56)
This commit is contained in:
@@ -7,7 +7,8 @@
|
||||
#include "util.h"
|
||||
#include "machine.h"
|
||||
#include "show.h"
|
||||
#include "target_set.h"
|
||||
#include "target_registry.h"
|
||||
#include "klammerset_registry.h"
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
@@ -17,10 +18,10 @@ int main(int argc, char* argv[])
|
||||
args.req("filenames", "Input files in Klammertext format. ", "'list'");
|
||||
args.opt("s", "Text processed before input files.", "input-string", "", "'text'");
|
||||
args.opt("t","Output target; default is general (unspecified)", "target",
|
||||
Target_set::general_name, "'word'");
|
||||
Target_registry::general_name, "'word'");
|
||||
args.opt("o", "Output basename; meaning and default defined by target.", "basename",
|
||||
"", "'word'");
|
||||
args.opt("k", "File containing the klammerset definition; default is the Standard Klammer Set. With a value of \"none\", no klammerset is loaded.",
|
||||
args.opt("k", "Klammerset symbol (resolved on the klammerset search path) or the pathname of a klammerset definition file; default is the Standard Klammer Set. With a value of \"none\", no klammerset is loaded.",
|
||||
"pathname", "", "'word'");
|
||||
args.flag("d", "Display the output to the screen, rather than writing files.");
|
||||
args.flag("m", "Show the Klammermachine state at the beginning of processing.");
|
||||
@@ -83,6 +84,12 @@ int main(int argc, char* argv[])
|
||||
if (klammerset_filename != "none") {
|
||||
if (klammerset_filename.empty()) {
|
||||
klammerset_filename = M.m_state.value("KLAMMERTEXT_HOME") + "/sks/sks.k";
|
||||
} else if (is_klammerset_symbol(klammerset_filename)) {
|
||||
// A bare symbol resolves on the klammerset search path;
|
||||
// the local stage is the input document's directory (the
|
||||
// cwd when the input is a string).
|
||||
klammerset_filename = resolve_klammerset_symbol(
|
||||
klammerset_filename, M.m_state.value("K_input_dir"), Locator()).string();
|
||||
}
|
||||
K::log(1, "Reading klammerset filename: " + klammerset_filename);
|
||||
M.read(fs::path(klammerset_filename));
|
||||
|
||||
Reference in New Issue
Block a user