Typed arguments, calculated tables, spans, closed-world fonts, top-level fnt/ and env/
Sync with klammertext-dev through b90b0e09: - Argument types end to end: :python_cast values are applied (Python @eval receives real bools/numbers/lists), argument values are validated against their argtype patterns with the argtype's description as the error message, argtypes can declare :default (overridable per declaration), and parameterized type families are supported: rest(N) casts a rest argument to an N-dimensional list (bar-count = dimension). - Unified indexed_range syntax (selector with parenthesized subsets, composable mnemonic names) for table lines and spans. - Table klammer: caption fonts fixed in both targets, :column_width / :leading / :colsep wired, :colspan and :rowspan render (HTML attributes; \multicolumn / \multirow), calculated cell values (:calc) with prefix operators, display-precision semantics, :calc_format and :decimal period|comma. - Fonts: closed-world resolution on the Klammertext font store (infrastructure in mac/font_store; no Google Fonts links or fetch). Default fonts live in the top-level fnt/; additional fonts install into KLAMMERTEXT_FONTS directories via kdesc --font (list, samples, preview, install — classification by font metadata). CSS font family names are quoted (digit-initial families were silently lost). - Environment files moved from mac/env/ to the top-level env/; shell profiles source env/runtime.env. Dead per-host variants removed. - Container: fnt/ ships in the image; curl removed (no network use).
This commit is contained in:
14
mac/argv.h
14
mac/argv.h
@@ -3,6 +3,7 @@
|
||||
// Delusions of generality, but it's really just for Klammertext commands.
|
||||
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <ranges>
|
||||
#include <algorithm>
|
||||
#include <regex>
|
||||
@@ -52,12 +53,23 @@ public:
|
||||
void flag(const std::string& name, const std::string& desc);
|
||||
void req(const std::string& name, const std::string& desc, const std::string& regex_pattern="'text'");
|
||||
void opt(const std::string& name, const std::string& desc="", const std::string& parameter="", const std::string& default_value="", const std::string& regex_pattern="text");
|
||||
// A variadic option: --name collects every following word up to the
|
||||
// next -/-- token (zero or more). get(name) returns the words
|
||||
// space-joined; given(name) distinguishes "--name with no words"
|
||||
// from an absent --name. Used for subcommand-style interfaces
|
||||
// (kdesc --font install <dir>).
|
||||
void var(const std::string& name, const std::string& desc);
|
||||
|
||||
void update_width(Arg arg);
|
||||
|
||||
void check_flags_and_options(std::string command, std::vector<std::string>& words);
|
||||
void parse_flags(std::vector<std::string>& words, std::map<std::string, std::string>& named_args);
|
||||
void parse_optional(std::vector<std::string>& words, std::map<std::string, std::string>& named_args);
|
||||
void parse_vars(std::vector<std::string>& words, std::map<std::string, std::string>& named_args);
|
||||
|
||||
// True when the named variadic option appeared on the command line
|
||||
// (even with no following words).
|
||||
bool given(const std::string& name) { return m_given.contains(name); };
|
||||
|
||||
void parse_positional(
|
||||
std::string command, // std::vector<std::string> words,
|
||||
@@ -98,6 +110,8 @@ public:
|
||||
std::vector<std::string> m_req_names {};
|
||||
std::vector<std::string> m_flag_names {};
|
||||
std::vector<std::string> m_opt_names {};
|
||||
std::vector<std::string> m_var_names {};
|
||||
std::set<std::string> m_given {};
|
||||
std::vector<std::string> m_hyphen_markers {};
|
||||
long unsigned int m_syntax_size = 0;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user