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:
56
mac/deftype.cpp
Normal file
56
mac/deftype.cpp
Normal file
@@ -0,0 +1,56 @@
|
||||
#include "deftype.h"
|
||||
#include "error.h"
|
||||
|
||||
defmode_t defmode_from_katom(katom_t type)
|
||||
{
|
||||
switch (type) {
|
||||
case katom_t::klammer_definition:
|
||||
case katom_t::klammer_instance:
|
||||
return defmode_t::def_create;
|
||||
case katom_t::klammer_override:
|
||||
return defmode_t::def_override;
|
||||
case katom_t::klammer_default:
|
||||
return defmode_t::def_default;
|
||||
default:
|
||||
throw Internal_error("defmode_from_katom: not a definition type");
|
||||
}
|
||||
}
|
||||
|
||||
static const std::map<std::pair<defmode_t,defmode_t>, defmode_result> transition_table {
|
||||
// create + create = error
|
||||
{ {defmode_t::def_create, defmode_t::def_create},
|
||||
{false, false, "Klammer NAME already defined at AT"} },
|
||||
// create + override = replace with warning
|
||||
{ {defmode_t::def_create, defmode_t::def_override},
|
||||
{true, true, "Klammer NAME at AT overridden"} },
|
||||
// create + default = ignore silently
|
||||
{ {defmode_t::def_create, defmode_t::def_default},
|
||||
{false, false, ""} },
|
||||
// override + create = error
|
||||
{ {defmode_t::def_override, defmode_t::def_create},
|
||||
{false, false, "Klammer NAME already overridden at AT"} },
|
||||
// override + override = replace with warning
|
||||
{ {defmode_t::def_override, defmode_t::def_override},
|
||||
{true, true, "Klammer NAME at AT overridden again"} },
|
||||
// override + default = ignore silently
|
||||
{ {defmode_t::def_override, defmode_t::def_default},
|
||||
{false, false, ""} },
|
||||
// default + create = replace silently
|
||||
{ {defmode_t::def_default, defmode_t::def_create},
|
||||
{true, false, ""} },
|
||||
// default + override = replace with warning
|
||||
{ {defmode_t::def_default, defmode_t::def_override},
|
||||
{true, true, "Default klammer NAME at AT overridden"} },
|
||||
// default + default = error
|
||||
{ {defmode_t::def_default, defmode_t::def_default},
|
||||
{false, false, "Default klammer NAME already defined at AT"} }
|
||||
};
|
||||
|
||||
const defmode_result& defmode_transition(defmode_t existing, defmode_t incoming)
|
||||
{
|
||||
auto it = transition_table.find({existing, incoming});
|
||||
if (it == transition_table.end()) {
|
||||
throw Internal_error("defmode_transition: unknown combination");
|
||||
}
|
||||
return it->second;
|
||||
}
|
||||
Reference in New Issue
Block a user