#pragma once #include #include #include #include "katom.h" #include "locator.h" class Target { public: Target() = default; // Target(std::vector::iterator begin, std::vector::iterator end, Argtype_set argtypes); Target(std::string name, std::string desc, Locator loc) : m_name(name) , m_desc(desc) , m_loc(loc) {}; void add_transform(std::string original, std::string transformed); void add_transforms(std::string transforms); void add_transforms(std::vector> transforms); void transform(std::vector& katoms); void add_escapes(std::string escape_spec); std::string escape_text(std::string text) const; std::string unescape_text(std::string text) const; std::string resolve_escapes(std::string text) const; static std::string escape_marker(const std::string& ch); void add_after_apply(std::string function_specs); std::string m_name {}; std::string m_desc {}; std::vector m_includes {}; std::vector m_provides {}; std::vector m_after_apply {}; Locator m_loc {}; std::vector> m_transforms {}; std::vector> m_escapes {}; // Argtype_set m_argtypes {}; }; std::vector> parse_transforms(std::string transform_string); // Decode every KTESCKTESC marker in text back to its original // characters. Used for the final output (after target-declared escapes have // been resolved to their replacements) and for programmatic use of argument // values. The Python counterpart is unescape_ktesc() in klammer_base.py. std::string ktesc_resolve(std::string text); // Replace each Klammertext structural character (@ | # ^ : *) in s with its // KTESC marker, so text that has already been interpreted once (quoted // specials, ^'...'^ literal content) survives re-katomization by // sub-Machines and the @eval result read-back. Resolved by ktesc_resolve() // at final processing. std::string hide_structural_characters(const std::string& s);