Initial commit: Klammertext source distribution
Curated source subset assembled by klammertext-dev's doc/make_dist.sh: the Klammermachine (mac), the Standard Klammer Set (sks), the commands (com), editor plugins and install guides (doc), a test subset (tst), and lib/bin placeholders. Builds with 'make -C com'. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
83
com/kdesc.cpp
Normal file
83
com/kdesc.cpp
Normal file
@@ -0,0 +1,83 @@
|
||||
#include "argv.h"
|
||||
#include "command.h"
|
||||
#include "error.h"
|
||||
#include "file.h"
|
||||
#include "ktype.h"
|
||||
#include "log.h"
|
||||
#include "argtype_set.h"
|
||||
#include "character.h"
|
||||
#include "show.h"
|
||||
#include "util.h"
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
try {
|
||||
set_verbose_level(argc, argv);
|
||||
|
||||
Argv args {};
|
||||
args.flag("c", "Special characters");
|
||||
args.flag("a", "Argument types");
|
||||
args.flag("k", "Katom types");
|
||||
args.flag("r", "Katom rewrite patterns");
|
||||
args.opt("input", "Input filename", "filename", "", "'text'");
|
||||
args.flag("targets", "Show targets defined by the input file");
|
||||
args.flag("klammers", "Show klammers defined by the input file");
|
||||
args.opt("v", "'verbosity'", "n", "0", "'verbosity'");
|
||||
|
||||
if (show_usage(argc, argv)) {
|
||||
args.usage(file_basename(argv[0]));
|
||||
exit(1);
|
||||
}
|
||||
auto p = [&](std::string name) { return args.get(name) == "true"; };
|
||||
|
||||
args.parse(argc, argv);
|
||||
verbose_level = stoi(args.get("v"));
|
||||
if (verbose_level > 0) {
|
||||
args.describe();
|
||||
}
|
||||
|
||||
if (p("c")) {
|
||||
show_special_characters();
|
||||
std::cout << "\n";
|
||||
}
|
||||
|
||||
if (p("a")) {
|
||||
Argtype_set argtypes;
|
||||
std::cout << boldblack << "\nStandard klammer argument types\n" << black;
|
||||
std::cout << argtypes.describe() << "\n";
|
||||
}
|
||||
|
||||
if (p("k")) {
|
||||
describe_katoms(verbose_level > 2);
|
||||
}
|
||||
|
||||
if (p("r")) {
|
||||
describe_rewrite_patterns();
|
||||
}
|
||||
|
||||
Machine M;
|
||||
|
||||
strings_t input_filenames = args.as_vector("input");
|
||||
std::cout << "input_filenames: " << input_filenames << "\n";
|
||||
if (input_filenames.empty()) {
|
||||
M.read(fs::path(M.m_state.value("KLAMMERTEXT_HOME") + "/sks/sks.k"));
|
||||
} else {
|
||||
for (auto fname : input_filenames) {
|
||||
std::cout << "Read " << fname << "\n";
|
||||
M.read(fs::path(absolute_pathname(fname)));
|
||||
}
|
||||
}
|
||||
|
||||
if (p("targets")) {
|
||||
std::cout << boldblack << "Targets\n" << black << M.m_targets.describe(2, true);
|
||||
}
|
||||
|
||||
if (p("klammers")) {
|
||||
std::cout << boldblack << "Klammers\n" << black << M.m_klammers.describe(2);
|
||||
}
|
||||
|
||||
}
|
||||
catch (Error& e) {
|
||||
e.print_message();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user