Stores information about tag. More...
#include <tag.hpp>
Classes | |
class | iterator |
Public Types | |
using | tag_map = std::map< std::string, wml_tag > |
using | key_map = std::map< std::string, wml_key > |
using | link_map = std::map< std::string, std::string > |
using | condition_list = std::vector< wml_condition > |
using | super_list = std::map< std::string, const wml_tag * > |
Public Member Functions | |
wml_tag ()=default | |
wml_tag (const std::string &name, int min, int max, const std::string &super="", bool any=false) | |
wml_tag (const config &) | |
void | print (std::ostream &os) |
Prints information about tag to outputstream, recursively is used to print tag info the format is next [tag] subtags keys name="name" min="min" max="max" [/tag]. More... | |
const std::string & | get_name () const |
int | get_min () const |
int | get_max () const |
int | get_min_children () const |
int | get_max_children () const |
const std::string & | get_super () const |
bool | is_extension () const |
bool | is_fuzzy () const |
bool | accepts_any_tag () const |
void | set_name (const std::string &name) |
void | set_min (int o) |
void | set_max (int o) |
void | set_min_children (int o) |
void | set_max_children (int o) |
void | set_min (const std::string &s) |
void | set_max (const std::string &s) |
void | set_min_children (const std::string &s) |
void | set_max_children (const std::string &s) |
void | set_super (const std::string &s) |
void | set_fuzzy (bool f) |
void | set_any_tag (bool any) |
void | add_key (const wml_key &new_key) |
void | add_tag (const wml_tag &new_tag) |
void | add_link (const std::string &link) |
void | add_switch (const config &switch_cfg) |
void | add_filter (const config &cond_cfg) |
void | add_tag (const std::string &path, const wml_tag &tag, wml_tag &root) |
Tags are usually organized in tree. More... | |
bool | operator< (const wml_tag &t) const |
bool | operator== (const wml_tag &other) const |
const wml_key * | find_key (const std::string &name, const config &match, bool ignore_super=false) const |
Returns pointer to child key. More... | |
const std::string * | find_link (const std::string &name) const |
Returns pointer to child link. More... | |
const wml_tag * | find_tag (const std::string &fullpath, const wml_tag &root, const config &match, bool ignore_super=false) const |
Returns pointer to tag using full path to it. More... | |
void | expand_all (wml_tag &root) |
Calls the expansion on each child. More... | |
boost::iterator_range< tag_iterator > | tags (const config &cfg_match) const |
boost::iterator_range< key_iterator > | keys (const config &cfg_match) const |
boost::iterator_range< super_iterator > | super (const config &cfg_match) const |
const link_map & | links () const |
const condition_list & | conditions () const |
void | remove_key_by_name (const std::string &name) |
void | remove_keys_by_type (const std::string &type) |
Removes all keys with this type. More... | |
Private Types | |
using | tag_iterator = iterator< wml_tag > |
using | key_iterator = iterator< wml_key > |
using | super_iterator = iterator< const wml_tag * > |
Private Member Functions | |
void | printl (std::ostream &os, int level, int step=4) |
the same as wml_tag::print(std::ostream&) but indents different levels with step space. More... | |
wml_tag * | find_tag (const std::string &fullpath, wml_tag &root, const config &match) |
void | add_tags (const tag_map &list) |
void | add_keys (const key_map &list) |
void | add_links (const link_map &list) |
void | add_conditions (const condition_list &list) |
void | expand (wml_tag &root) |
Expands all "super", storing direct references for easier access. More... | |
const wml_key * | find_key (const std::string &name, const config &match, bool ignore_super, std::vector< const wml_tag * > &visited) const |
Finds a key with super bookkeeping to handle super cycles. More... | |
const wml_tag * | find_tag (const std::string &fullpath, const wml_tag &root, const config &match, bool ignore_super, std::vector< const wml_tag * > &visited) const |
Finds a tag with super bookkeeping to handle super cycles. More... | |
Static Private Member Functions | |
static void | push_new_tag_conditions (std::queue< const wml_tag * > &q, const config &match, const wml_tag &tag) |
Private Attributes | |
std::string | name_ = "" |
name of tag. More... | |
int | min_ = 0 |
minimum number of occurrences. More... | |
int | max_ = 0 |
maximum number of occurrences. More... | |
int | min_children_ = 0 |
minimum number of children. More... | |
int | max_children_ = std::numeric_limits<int>::max() |
maximum number of children. More... | |
std::string | super_ = "" |
name of tag to extend "super-tag" Extension is smth like inheritance and is used in case when you need to use another tag with all his keys, children, etc. More... | |
tag_map | tags_ |
children tags More... | |
key_map | keys_ |
keys More... | |
link_map | links_ |
links to possible children. More... | |
condition_list | conditions_ |
conditional partial matches More... | |
super_list | super_refs_ |
super-tag references More... | |
bool | fuzzy_ = false |
whether this is a "fuzzy" tag. More... | |
bool | any_tag_ = false |
whether this tag allows arbitrary subtags. More... | |
Friends | |
template<typename T , typename Map > | |
class | iterator |
Stores information about tag.
Each tags is an element of great tag tree. This tree is close to filesystem: you can use links and special include directory global/ Normally root is not mentioned in path. Each tag has name, minimum and maximum occasions number, and lists of subtags, keys and links.
using schema_validation::wml_tag::condition_list = std::vector<wml_condition> |
|
private |
using schema_validation::wml_tag::key_map = std::map<std::string, wml_key> |
using schema_validation::wml_tag::link_map = std::map<std::string, std::string> |
|
private |
using schema_validation::wml_tag::super_list = std::map<std::string, const wml_tag*> |
|
private |
using schema_validation::wml_tag::tag_map = std::map<std::string, wml_tag> |
|
default |
schema_validation::wml_tag::wml_tag | ( | const std::string & | name, |
int | min, | ||
int | max, | ||
const std::string & | super = "" , |
||
bool | any = false |
||
) |
schema_validation::wml_tag::wml_tag | ( | const config & | cfg | ) |
Definition at line 40 of file tag.cpp.
References add_filter(), add_key(), add_link(), add_switch(), add_tag(), config::child_range(), config::has_attribute(), max_, max_children_, super_, and sw.
|
inline |
|
private |
void schema_validation::wml_tag::add_filter | ( | const config & | cond_cfg | ) |
Definition at line 451 of file tag.cpp.
References config::append_children(), config::child_range(), config::clear_children(), config::has_child(), i, and config::mandatory_child().
Referenced by wml_tag().
|
inline |
Definition at line 219 of file tag.hpp.
References schema_validation::wml_key::get_name(), and keys_.
Referenced by wml_tag().
|
inlineprivate |
void schema_validation::wml_tag::add_link | ( | const std::string & | link | ) |
|
inlineprivate |
void schema_validation::wml_tag::add_switch | ( | const config & | switch_cfg | ) |
Definition at line 406 of file tag.cpp.
References config::add_child(), config::child_range(), config::empty(), config::has_child(), config::mandatory_child(), utils::split(), and utils::STRIP_SPACES.
Referenced by wml_tag().
void schema_validation::wml_tag::add_tag | ( | const std::string & | path, |
const wml_tag & | tag, | ||
wml_tag & | root | ||
) |
Tags are usually organized in tree.
This function helps to add a tag to his exact place in tree
path | - path in subtree to exact place of tag |
tag | - tag to add |
root | - root of schema tree - use to support of adding to link. Path is getting shotter and shoter with each call. Path should look like tag1/tag2/parent/ Slash at end is mandatory. |
Definition at line 348 of file tag.cpp.
References add_tag(), game_config::path, set_name(), and markup::tag().
|
inline |
|
inlineprivate |
|
inline |
Definition at line 290 of file tag.hpp.
References conditions_.
|
private |
Expands all "super", storing direct references for easier access.
Definition at line 394 of file tag.cpp.
References find_tag(), and utils::split().
void schema_validation::wml_tag::expand_all | ( | wml_tag & | root | ) |
Calls the expansion on each child.
Definition at line 282 of file tag.cpp.
References markup::tag().
Referenced by schema_validation::schema_validator::schema_validator().
|
private |
Finds a key with super bookkeeping to handle super cycles.
Definition at line 125 of file tag.cpp.
References conditions_, utils::find(), keys_, and utils::wildcard_string_match().
const wml_key * schema_validation::wml_tag::find_key | ( | const std::string & | name, |
const config & | match, | ||
bool | ignore_super = false |
||
) | const |
Returns pointer to child key.
Definition at line 119 of file tag.cpp.
Referenced by schema_validation::schema_validator::validate_key().
const std::string * schema_validation::wml_tag::find_link | ( | const std::string & | name | ) | const |
|
private |
Finds a tag with super bookkeeping to handle super cycles.
Definition at line 195 of file tag.cpp.
References utils::find(), find_tag(), markup::tag(), and utils::wildcard_string_match().
const wml_tag * schema_validation::wml_tag::find_tag | ( | const std::string & | fullpath, |
const wml_tag & | root, | ||
const config & | match, | ||
bool | ignore_super = false |
||
) | const |
Returns pointer to tag using full path to it.
Also work with links
Definition at line 189 of file tag.cpp.
Referenced by schema_validation::schema_self_validator::reference::can_find(), expand(), find_tag(), and schema_validation::schema_validator::open_tag().
|
inlineprivate |
Definition at line 358 of file tag.hpp.
References find_tag().
|
inline |
|
inline |
Definition at line 152 of file tag.hpp.
References max_children_.
Referenced by schema_validation::schema_validator::validate().
|
inline |
|
inline |
Definition at line 147 of file tag.hpp.
References min_children_.
Referenced by schema_validation::schema_validator::validate().
|
inline |
Definition at line 132 of file tag.hpp.
References name_.
Referenced by schema_validation::schema_self_validator::close_tag(), schema_validation::schema_validator::validate(), and schema_validation::schema_self_validator::validate_key().
|
inline |
Definition at line 157 of file tag.hpp.
References super_.
Referenced by schema_validation::schema_validator::validate().
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
void schema_validation::wml_tag::print | ( | std::ostream & | os | ) |
|
private |
the same as wml_tag::print(std::ostream&) but indents different levels with step space.
os | stream to print |
level | current level of indentation |
step | step to next indent |
Definition at line 310 of file tag.cpp.
References game_config::images::level, s, and markup::tag().
Referenced by print().
|
staticprivate |
Definition at line 554 of file tag.cpp.
References markup::tag().
Referenced by schema_validation::wml_tag::iterator< T, Map >::push_new_tag_conditions().
|
inline |
void schema_validation::wml_tag::remove_keys_by_type | ( | const std::string & | type | ) |
Removes all keys with this type.
Works recursively
Definition at line 294 of file tag.cpp.
References i, and markup::tag().
|
inline |
|
inline |
void schema_validation::wml_tag::set_max | ( | const std::string & | s | ) |
|
inline |
void schema_validation::wml_tag::set_max_children | ( | const std::string & | s | ) |
|
inline |
Definition at line 195 of file tag.hpp.
References max_children_.
void schema_validation::wml_tag::set_min | ( | const std::string & | s | ) |
|
inline |
void schema_validation::wml_tag::set_min_children | ( | const std::string & | s | ) |
|
inline |
Definition at line 190 of file tag.hpp.
References min_children_.
|
inline |
|
inline |
|
inline |
Definition at line 281 of file tag.hpp.
Referenced by schema_validation::schema_validator::validate().
|
inline |
Definition at line 271 of file tag.hpp.
Referenced by schema_validation::schema_validator::validate().
|
friend |
|
private |
whether this tag allows arbitrary subtags.
Definition at line 347 of file tag.hpp.
Referenced by accepts_any_tag(), and set_any_tag().
|
private |
conditional partial matches
Definition at line 338 of file tag.hpp.
Referenced by conditions(), and find_key().
|
private |
whether this is a "fuzzy" tag.
Definition at line 344 of file tag.hpp.
Referenced by is_fuzzy(), and set_fuzzy().
|
private |
keys
Definition at line 332 of file tag.hpp.
Referenced by add_key(), add_keys(), find_key(), and remove_key_by_name().
|
private |
links to possible children.
Definition at line 335 of file tag.hpp.
Referenced by add_link(), add_links(), and links().
|
private |
|
private |
maximum number of children.
Definition at line 317 of file tag.hpp.
Referenced by get_max_children(), set_max_children(), and wml_tag().
|
private |
|
private |
minimum number of children.
Definition at line 314 of file tag.hpp.
Referenced by get_min_children(), and set_min_children().
|
private |
name of tag.
Definition at line 305 of file tag.hpp.
Referenced by add_tag(), get_name(), operator<(), operator==(), and set_name().
|
private |
name of tag to extend "super-tag" Extension is smth like inheritance and is used in case when you need to use another tag with all his keys, children, etc.
But you also want to allow extra subtags of that tags, so just linking that tag wouldn't help at all.
Definition at line 326 of file tag.hpp.
Referenced by get_super(), is_extension(), set_super(), and wml_tag().
|
private |
|
private |
children tags
Definition at line 329 of file tag.hpp.
Referenced by add_tag(), add_tags(), schema_validation::wml_tag::iterator< T, Map >::ensure_valid_or_end(), and schema_validation::wml_tag::iterator< T, Map >::init().