The Battle for Wesnoth  1.15.0-dev
Classes | Public Member Functions | Protected Types | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
schema_validation::schema_validator Class Reference

Realization of serialization/validator.hpp abstract validator. More...

#include <schema_validator.hpp>

Inheritance diagram for schema_validation::schema_validator:
Inheritance graph

Classes

struct  counter
 
struct  message_info
 Messages are cached. More...
 

Public Member Functions

virtual ~schema_validator ()
 
 schema_validator (const std::string &filename, bool validate_schema=false)
 Initializes validator from file. More...
 
void set_create_exceptions (bool value)
 
virtual void open_tag (const std::string &name, const config &parent, int start_line=0, const std::string &file="", bool addition=false) override
 Is called when parser opens tag. More...
 
virtual void close_tag () override
 As far as parser is built on stack, some realizations can store stack too. More...
 
virtual void validate (const config &cfg, const std::string &name, int start_line, const std::string &file) override
 Validates config. More...
 
virtual void validate_key (const config &cfg, const std::string &name, const std::string &value, int start_line, const std::string &file) override
 Checks if key is allowed and if its value is valid What exactly is validated depends on validator realization. More...
 
- Public Member Functions inherited from abstract_validator
 abstract_validator (const std::string &name)
 Constructor of validator can throw validator::error. More...
 
virtual ~abstract_validator ()
 

Protected Types

enum  message_type {
  WRONG_TAG, EXTRA_TAG, MISSING_TAG, EXTRA_KEY,
  MISSING_KEY, WRONG_VALUE, WRONG_TYPE, WRONG_PATH
}
 

Protected Member Functions

void queue_message (const config &cfg, message_type t, const std::string &file, int line=0, int n=0, const std::string &tag="", const std::string &key="", const std::string &value="")
 
const wml_tagactive_tag () const
 
std::string active_tag_path () const
 
bool have_active_tag () const
 
bool is_valid () const
 
wml_type::ptr find_type (const std::string &type) const
 

Private Types

typedef std::map< std::string, countercnt_map
 Counters are mapped by tag name. More...
 
typedef std::stack< cnt_mapcnt_stack
 And counter maps are organize in stack. More...
 
typedef std::deque< message_infomessage_list
 
typedef std::map< const config *, message_listmessage_map
 

Private Member Functions

void print (message_info &)
 
bool read_config_file (const std::string &filename)
 Reads config from input. More...
 

Private Attributes

bool config_read_
 Shows, if validator is initialized with schema file. More...
 
bool create_exceptions_
 Controls the way to print errors. More...
 
wml_tag root_
 Root of schema information. More...
 
std::stack< const wml_tag * > stack_
 
cnt_stack counter_
 Contains number of children. More...
 
std::stack< message_mapcache_
 Caches error messages. More...
 
wml_type::map types_
 Type validators. More...
 
bool validate_schema_
 

Additional Inherited Members

- Public Attributes inherited from abstract_validator
const std::string name_
 

Detailed Description

Realization of serialization/validator.hpp abstract validator.

Based on stack. Uses some stacks to store different info.

Definition at line 40 of file schema_validator.hpp.

Member Typedef Documentation

◆ cnt_map

typedef std::map<std::string, counter> schema_validation::schema_validator::cnt_map
private

Counters are mapped by tag name.

Definition at line 74 of file schema_validator.hpp.

◆ cnt_stack

And counter maps are organize in stack.

Definition at line 77 of file schema_validator.hpp.

◆ message_list

Definition at line 115 of file schema_validator.hpp.

◆ message_map

Definition at line 116 of file schema_validator.hpp.

Member Enumeration Documentation

◆ message_type

Enumerator
WRONG_TAG 
EXTRA_TAG 
MISSING_TAG 
EXTRA_KEY 
MISSING_KEY 
WRONG_VALUE 
WRONG_TYPE 
WRONG_PATH 

Definition at line 80 of file schema_validator.hpp.

Constructor & Destructor Documentation

◆ ~schema_validator()

schema_validation::schema_validator::~schema_validator ( )
virtual

Definition at line 142 of file schema_validator.cpp.

◆ schema_validator()

schema_validation::schema_validator::schema_validator ( const std::string &  filename,
bool  validate_schema = false 
)

Initializes validator from file.

Throws abstract_validator::error if any error.

Definition at line 146 of file schema_validator.cpp.

References cache_, counter_, ERR_VL, error(), schema_validation::wml_tag::expand_all(), LOG_VL, read_config_file(), root_, and stack_.

Member Function Documentation

◆ active_tag()

const wml_tag & schema_validation::schema_validator::active_tag ( ) const
protected

◆ active_tag_path()

std::string schema_validation::schema_validator::active_tag_path ( ) const
protected

Definition at line 336 of file schema_validator.cpp.

References utils::join(), game_config::path, and stack_.

◆ close_tag()

void schema_validation::schema_validator::close_tag ( )
overridevirtual

As far as parser is built on stack, some realizations can store stack too.

So they need to know if tag was closed.

Implements abstract_validator.

Reimplemented in schema_validation::schema_self_validator.

Definition at line 235 of file schema_validator.cpp.

References counter_, and stack_.

Referenced by schema_validation::schema_self_validator::close_tag(), and set_create_exceptions().

◆ find_type()

wml_type::ptr schema_validation::schema_validator::find_type ( const std::string &  type) const
protected

Definition at line 322 of file schema_validator.cpp.

References types_.

Referenced by is_valid(), and validate_key().

◆ have_active_tag()

bool schema_validation::schema_validator::have_active_tag ( ) const
protected

◆ is_valid()

bool schema_validation::schema_validator::is_valid ( ) const
inlineprotected

◆ open_tag()

void schema_validation::schema_validator::open_tag ( const std::string &  name,
const config parent,
int  start_line = 0,
const std::string &  file = "",
bool  addittion = false 
)
overridevirtual

◆ print()

void schema_validation::schema_validator::print ( message_info el)
private

◆ queue_message()

void schema_validation::schema_validator::queue_message ( const config cfg,
message_type  t,
const std::string &  file,
int  line = 0,
int  n = 0,
const std::string &  tag = "",
const std::string &  key = "",
const std::string &  value = "" 
)
protected

◆ read_config_file()

bool schema_validation::schema_validator::read_config_file ( const std::string &  filename)
private

◆ set_create_exceptions()

void schema_validation::schema_validator::set_create_exceptions ( bool  value)
inline

◆ validate()

void schema_validation::schema_validator::validate ( const config cfg,
const std::string &  name,
int  start_line,
const std::string &  file 
)
overridevirtual

Validates config.

Checks if all mandatory elements are present. What exactly is validated depends on validator realization

Parameters
cfgConfig to be validated.
nameName of tag
start_lineLine in file
fileName of file

Implements abstract_validator.

Reimplemented in schema_validation::schema_self_validator.

Definition at line 242 of file schema_validator.cpp.

References active_tag(), cache_, counter_, EXTRA_TAG, config::get(), have_active_tag(), is_valid(), schema_validation::wml_tag::keys(), MISSING_KEY, MISSING_TAG, name(), print(), and queue_message().

Referenced by set_create_exceptions(), and schema_validation::schema_self_validator::validate().

◆ validate_key()

void schema_validation::schema_validator::validate_key ( const config cfg,
const std::string &  name,
const std::string &  value,
int  start_line,
const std::string &  file 
)
overridevirtual

Checks if key is allowed and if its value is valid What exactly is validated depends on validator realization.

Parameters
cfgConfig to be validated.
nameName of tag
start_lineLine in file
fileName of file

Implements abstract_validator.

Reimplemented in schema_validation::schema_self_validator.

Definition at line 286 of file schema_validator.cpp.

References active_tag(), EXTRA_KEY, schema_validation::wml_tag::find_key(), find_type(), schema_validation::wml_key::get_type(), have_active_tag(), is_valid(), queue_message(), utils::split(), types_, and WRONG_VALUE.

Referenced by set_create_exceptions(), and schema_validation::schema_self_validator::validate_key().

Member Data Documentation

◆ cache_

std::stack<message_map> schema_validation::schema_validator::cache_
private

Caches error messages.

Definition at line 138 of file schema_validator.hpp.

Referenced by open_tag(), queue_message(), schema_validator(), and validate().

◆ config_read_

bool schema_validation::schema_validator::config_read_
private

Shows, if validator is initialized with schema file.

Definition at line 124 of file schema_validator.hpp.

Referenced by is_valid(), and read_config_file().

◆ counter_

cnt_stack schema_validation::schema_validator::counter_
private

Contains number of children.

Definition at line 135 of file schema_validator.hpp.

Referenced by close_tag(), open_tag(), schema_validator(), and validate().

◆ create_exceptions_

bool schema_validation::schema_validator::create_exceptions_
private

Controls the way to print errors.

Definition at line 127 of file schema_validator.hpp.

Referenced by open_tag(), print(), and set_create_exceptions().

◆ root_

wml_tag schema_validation::schema_validator::root_
private

Root of schema information.

Definition at line 130 of file schema_validator.hpp.

Referenced by open_tag(), read_config_file(), and schema_validator().

◆ stack_

std::stack<const wml_tag*> schema_validation::schema_validator::stack_
private

◆ types_

wml_type::map schema_validation::schema_validator::types_
private

Type validators.

Definition at line 141 of file schema_validator.hpp.

Referenced by find_type(), read_config_file(), and validate_key().

◆ validate_schema_

bool schema_validation::schema_validator::validate_schema_
private

Definition at line 143 of file schema_validator.hpp.

Referenced by read_config_file().


The documentation for this class was generated from the following files: