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:
80
mac/state.h
Normal file
80
mac/state.h
Normal file
@@ -0,0 +1,80 @@
|
||||
#pragma once
|
||||
|
||||
#include "util.h"
|
||||
#include "locator.h"
|
||||
//#include "argtype.h"
|
||||
#include "argument_set.h"
|
||||
|
||||
|
||||
namespace klammerstate {
|
||||
inline std::string no_value = "\0";
|
||||
}
|
||||
|
||||
class Var
|
||||
{
|
||||
public:
|
||||
Var() = default;
|
||||
Var(std::string name, std::string value=klammerstate::no_value,
|
||||
std::string delim=":", std::string desc="", Locator loc=Locator())
|
||||
: m_name(name)
|
||||
, m_value(value)
|
||||
, m_delim(delim)
|
||||
, m_desc(desc)
|
||||
, m_loc(loc)
|
||||
{};
|
||||
bool defined();
|
||||
|
||||
std::string m_name {};
|
||||
std::string m_value {};
|
||||
std::string m_delim {};
|
||||
std::string m_desc {};
|
||||
Locator m_loc {};
|
||||
};
|
||||
|
||||
namespace klammerstate {
|
||||
inline std::string shell_environment_name = "Shell environment";
|
||||
}
|
||||
|
||||
class Frame
|
||||
{
|
||||
public:
|
||||
Frame(std::string name)
|
||||
: m_name(name)
|
||||
{};
|
||||
|
||||
std::vector<std::string> names() const;
|
||||
void set(std::string name, std::string value,
|
||||
std::string delim=":", std::string desc="", Locator loc=Locator());
|
||||
std::pair<Var, bool> get(std::string name);
|
||||
|
||||
std::string m_name {};
|
||||
std::map<std::string, Var> m_vars {};
|
||||
};
|
||||
|
||||
class State
|
||||
{
|
||||
public:
|
||||
static int class_id;
|
||||
void open_frame(std::string name);
|
||||
void close_frame();
|
||||
void set(std::string name, std::string value, bool update=false,
|
||||
std::string delim=" ", std::string desc="", Locator loc=Locator());
|
||||
void set(std::map<std::string, std::string> varmap);
|
||||
void replace(std::string name, std::string value, bool error_if_not_defined=true);
|
||||
void add_environment_frame();
|
||||
Var get(std::string name, bool error_if_not_defined=false, Locator loc=Locator());
|
||||
std::string value(std::string name, bool error_if_not_defined=true, Locator loc=Locator());
|
||||
|
||||
std::string subst(std::string text, bool quote_values=false);
|
||||
void subst(std::vector<Katom>::iterator begin, std::vector<Katom>::iterator end);
|
||||
|
||||
void parse_state_katoms(std::vector<Katom>::iterator begin, std::vector<Katom>::iterator end, katom_list katoms);
|
||||
std::vector<std::string> all_names();
|
||||
std::string python_code();
|
||||
std::string describe(bool show_environment=false, int margin_size=2) const;
|
||||
|
||||
std::vector<Frame> m_frames {};
|
||||
// @@@state Image_search_path :set :append :replace :argtype :desc
|
||||
// Parameter_set m_parameters = Parameter_set("name :set :append :replace :argtype :delim :desc");
|
||||
Parameter_set m_parameters = Parameter_set("name :value :append :replace :delim :desc");
|
||||
};
|
||||
Reference in New Issue
Block a user