19 throw std::runtime_error (explanation);
23 inline void parser_assert (
bool requirement,
const char *explanation,
const std::string &detail) {
25 throw std::runtime_error (std::string (explanation) +
": " + detail);
101 return !(*
this == other);
112 template <
class DesiredEvaluator>
114 DesiredEvaluator *possess =
dynamic_cast<DesiredEvaluator *
> (parser.get());
117 *existed = (possess !=
nullptr);
120 possess =
new DesiredEvaluator (parser.get());
121 parser.reset (possess);
172 std::string keywords);
187 using RegexType = std::basic_regex <StringType::value_type>;
190 using StringEvaluator::StringEvaluator;
196 const std::
string &
name,
198 const
bool case_blind);
204 using StringEvaluator::StringEvaluator;
221 const std::
string &
name,
222 const std::
string &min,
223 const std::
string &max);
238 const std::
string &
name,
239 const std::
string &min,
240 const std::
string &max);
249 std::unordered_map<StringType, EvaluatorRef>
tokens;
250 bool numbers_present{
false};
256 return ((!
value.empty() && isdigit (
value[0]))
261 for (
auto &ch :
value) {
277 const std::string &
name,
278 std::string keywords);
320 bool regurgitate {
false};
321 bool iterate {
false};
331 std::string option_parser_type,
333 const Parser *parent_parser);
An iterator for argument vectors.
Definition: parsnip_argv.h:42
Generic data type.
Definition: parsnip.h:81
Schema component for validating dictionaries.
Definition: parsnip_schema.h:307
An evaluator representing abrupt end of the command pattern.
Definition: parsnip_evaluate.h:137
virtual Evaluator * getNextEvaluator(const StringType &value) const override
An evaluator representing of one option phrase.
Definition: parsnip_evaluate.cpp:108
virtual void constructSchema(const DictionarySchema &scheme, const Schema::OptionSchemas &option_schemas, const SchemaIntegratorCallback &integrator) const override
Construct a schema from an evaluator tree.
Definition: parsnip_evaluate.cpp:121
virtual Parsnip::Data evaluateToken(ArgvCursor *cursor) const override
Evaluate command line tokens.
Definition: parsnip_evaluate.cpp:112
virtual void convertToOptionEvaluator() override
Make any changes to the parse tree to convert it to an options evaluator.
Definition: parsnip_evaluate.cpp:117
Evaluator base class.
Definition: parsnip_evaluate.h:30
virtual void constructSchema(const DictionarySchema &schema, const Schema::OptionSchemas &option_schemas, const SchemaIntegratorCallback &integrator) const =0
Construct a schema from an evaluator tree.
virtual Parsnip::Data evaluateToken(class ArgvCursor *cursor) const =0
Evaluate command line tokens.
bool operator!=(const Evaluator &other) const
Definition: parsnip_evaluate.h:100
virtual ~Evaluator()=default
virtual Evaluator * getNextEvaluator(const StringType &token) const =0
Determine if and how to evaluate additional command line tokens.
int evaluate(ArgvCursor *cursor, Parsnip::Data &result_dict)
Evaluate a token in the command line, and recurse if there is more to go.
Definition: parsnip_command.cpp:359
int CommandId
Definition: parsnip_evaluate.h:42
friend class RemainderEvaluator
Definition: parsnip_evaluate.h:34
static void set_name(EvaluatorRef &target, const std::string &name)
Assign a name by which to store values for value evaluators.
Definition: parsnip_evaluate.cpp:55
virtual void convertToOptionEvaluator()=0
Make any changes to the parse tree to convert it to an options evaluator.
CommandId command_id
If this completes a command, the command ID.
Definition: parsnip_evaluate.h:50
static void construct(EvaluatorRef &evaluator, const ArgvCursor &cursor, CommandId id, Parser *parent_parser)
Construct token handler from the token in a parsing definition.
Definition: parsnip_command.cpp:273
static const CommandId EndOfOption
Definition: parsnip_evaluate.h:46
friend class ValueEvaluator
Definition: parsnip_evaluate.h:31
void setCommandId(CommandId id)
Set the command ID in an evaluator.
Definition: parsnip_evaluate.cpp:68
static const CommandId NoCommand
Definition: parsnip_evaluate.h:45
virtual bool operator==(const Evaluator &) const
Check if two evaluators are the same.
Definition: parsnip_evaluate.cpp:75
std::string StringType
Definition: parsnip_evaluate.h:41
std::string name
If not empty, the name by which this value shall be accessed.
Definition: parsnip_evaluate.h:52
Evaluate and validate an integral value field.
Definition: parsnip_evaluate.h:209
long maximum
Maximum acceptable value.
Definition: parsnip_evaluate.h:211
long minimum
Minimum acceptable value.
Definition: parsnip_evaluate.h:210
Evaluate a keyword in a command line.
Definition: parsnip_evaluate.h:244
EvaluatorRef numeric_evaluator
Definition: parsnip_evaluate.h:248
static bool is_numeric(const std::string &value)
Definition: parsnip_evaluate.h:255
std::unordered_map< StringType, EvaluatorRef > tokens
Definition: parsnip_evaluate.h:249
static std::string tolower(std::string value)
Definition: parsnip_evaluate.h:260
Evaluate remainder with a different parser.
Definition: parsnip_evaluate.h:315
OptionParserRef option_parser
Definition: parsnip_evaluate.h:317
A class for parsing command line options (name-value pairs, for instance).
Definition: parsnip_command.h:82
A class for parsing command lines.
Definition: parsnip_command.h:100
Gather the rest of the command line as an untokenized string.
Definition: parsnip_evaluate.h:202
Evaluate and validate a numeric value field.
Definition: parsnip_evaluate.h:227
double maximum
Maximum acceptable value.
Definition: parsnip_evaluate.h:229
double minimum
Minimum acceptable value.
Definition: parsnip_evaluate.h:228
Evaluate a string value field.
Definition: parsnip_evaluate.h:185
virtual Parsnip::Data evaluateToken(ArgvCursor *cursor) const override
Definition: parsnip_evaluate.cpp:173
static RegExEvaluator * construct(EvaluatorRef &evaluator, const std::string &name, const StringType &expression, const bool case_blind)
Construct an evaluator (or validate the existing validator) for accepting an integer with a limited r...
Definition: parsnip_evaluate.cpp:196
StringType expression
The string defining the regular expression.
Definition: parsnip_evaluate.h:186
RegexType regex
The compiled regular expression.
Definition: parsnip_evaluate.h:188
virtual SchemaBase * getSchema() const override final
Definition: parsnip_evaluate.cpp:190
std::basic_regex< StringType::value_type > RegexType
Definition: parsnip_evaluate.h:187
virtual bool operator==(const Evaluator &other) const override
Check if two evaluators are the same.
Definition: parsnip_evaluate.cpp:182
An evaluator that represents the rest of the command line.
Definition: parsnip_evaluate.h:285
EvaluatorRef terminating_evaluator
Definition: parsnip_evaluate.h:291
Gather the rest of the command line tokens in a list.
Definition: parsnip_evaluate.h:302
friend ValueEvaluator
Definition: parsnip_evaluate.h:303
Definition: parsnip_schema.h:28
Schema for one JSON object.
Definition: parsnip.h:612
std::unordered_map< class OptionParser *, SchemaRef > OptionSchemas
Definition: parsnip.h:615
A schema built to validate JSON messages based on command line patterns.
Definition: parsnip_command.h:171
Evaluate a string value field.
Definition: parsnip_evaluate.h:176
virtual SchemaBase * getSchema() const override
Definition: parsnip_evaluate.cpp:168
virtual Parsnip::Data evaluateToken(ArgvCursor *cursor) const override
Definition: parsnip_evaluate.cpp:164
An evaluator representing abrupt end of the command pattern.
Definition: parsnip_evaluate.h:127
virtual void convertToOptionEvaluator() override
Make any changes to the parse tree to convert it to an options evaluator.
Definition: parsnip_evaluate.cpp:93
virtual void constructSchema(const DictionarySchema &scheme, const Schema::OptionSchemas &option_schemas, const SchemaIntegratorCallback &integrator) const override
Construct a schema from an evaluator tree.
Definition: parsnip_evaluate.cpp:97
virtual Evaluator * getNextEvaluator(const StringType &value) const override
An evaluator representing abrupt end of the command pattern.
Definition: parsnip_evaluate.cpp:84
virtual Parsnip::Data evaluateToken(ArgvCursor *cursor) const override
Evaluate command line tokens.
Definition: parsnip_evaluate.cpp:88
Evaluate a value/fill-in field.
Definition: parsnip_evaluate.h:150
virtual Evaluator * getNextEvaluator(const StringType &value) const override
Determine if and how to evaluate additional command line tokens.
Definition: parsnip_evaluate.cpp:131
virtual void convertToOptionEvaluator() override
Make any changes to the parse tree to convert it to an options evaluator.
Definition: parsnip_evaluate.cpp:143
virtual bool operator==(const Evaluator &other) const override
Check if two evaluators are the same.
Definition: parsnip_evaluate.cpp:135
virtual void constructSchema(const DictionarySchema &scheme, const Schema::OptionSchemas &option_schemas, const SchemaIntegratorCallback &integrator) const override
Construct a schema from an evaluator tree.
Definition: parsnip_evaluate.cpp:150
EvaluatorRef next_evaluator
Definition: parsnip_evaluate.h:152
static void construct(EvaluatorRef &parser, const ArgvCursor &cursor, CommandId id, Parser *parent_parser, std::string name, std::string keywords)
Construct a value/fill-in token handler.
Definition: parsnip_command.cpp:187
virtual SchemaBase * getSchema() const =0
uint32_t value
Definition: audiooutput.cpp:68
Serialization and parsing library.
Definition: mediaunit.h:26
std::shared_ptr< OptionParser > OptionParserRef
Definition: parsnip_command.h:97
static DesiredEvaluator * uptype_construct(EvaluatorRef &parser, bool *existed=nullptr)
If an evaluator isn't constructed, create it.
Definition: parsnip_evaluate.h:113
std::unique_ptr< class Evaluator, EvaluatorDeleter > EvaluatorRef
Definition: parsnip_command.h:79
void parser_assert(bool requirement, const char *explanation)
Definition: parsnip_evaluate.h:17
std::function< void(const int, const class DictionarySchema &)> SchemaIntegratorCallback
Definition: parsnip_schema.h:25
Parsnip command-line parsing.
Parsnip serialization schemas.