CGII/framework/include/libs/ppp_lib/command_token.h
2018-05-17 15:50:03 +02:00

84 lines
2.5 KiB
C++

#pragma once
#include <vector>
#include "expression_processor.h"
#include "lib_begin.h"
namespace cgv {
namespace media {
namespace text {
namespace ppp {
enum CommandType {
CT_IMPLICIT_TEXT = -1,
CT_TEXT = 0,
CT_DEFINE,
CT_SKIP,
CT_READ,
CT_WRITE,
CT_RAND,
CT_NAMESPACE,
CT_FOR,
CT_IF, CT_ELIF, CT_ELSE,
CT_EVAL, CT_STRING, CT_LIST,
CT_BEGIN, CT_END,
CT_INCLUDE, CT_CINCLUDE, CT_EXCLUDE, CT_INSERT,
CT_REFLECT_NEXT_LINE, CT_REFLECT_PREV_LINE,
CT_COUT, CT_CIN, CT_ERROR, CT_WARNING,
CT_SYSTEM, CT_DIR, CT_FUNC, CT_EXIT,
CT_TRANSFORM,
CT_SCAN_INCLUDES,
CT_UNDEF
};
struct CGV_API command_token : public token
{
protected:
static std::string last_error;
static token last_error_token;
public:
static const std::string& get_last_error();
static const token& get_last_error_token();
/// store command type
CommandType ct;
/// store index of parenthesis that enclosed the expressions
unsigned int parenthesis_index;
/// store the index of the command token that terminates the block following this command
unsigned int block_end;
/// vector of parsed expressions
std::vector<expression_processor> expressions;
/// constructs an undefined command token
command_token();
/// constructs a command token of type text
command_token(const token& t);
/// splits a command token from the front of a given token
bool split_off_from(token& t);
/// get the number of characters to be skipped before expressions start
unsigned get_skip_length() const;
/// return the number of expressions that the command takes as argument
unsigned get_nr_expressions() const;
/// return the minimum number of expressions that the command takes as argument
unsigned get_min_nr_expressions() const;
/// return whether the number of expressions that the command takes as argument is fix
bool is_nr_expressions_fix() const;
/// return the keyword describing the command
const char* get_keyword() const;
/// check whether the token only contains white spaces
bool is_empty() const;
/// return whether the command token must be followed by a block
bool block_follows() const;
/// return whether empty text tokens before this command token should be deleted
bool remove_preceeding_empty_text_token() const;
/// return the open parenthesis enclosing the expressions
char get_open_parenthesis() const;
/// return the close parenthesis enclosing the expressions
char get_close_parenthesis() const;
};
}
}
}
}
#include <cgv/config/lib_end.h>