The Battle for Wesnoth  1.19.15+dev
Classes | Macros | Functions | Variables
preprocessor.cpp File Reference

WML preprocessor. More...

#include "serialization/preprocessor.hpp"
#include "buffered_istream.hpp"
#include "config.hpp"
#include "log.hpp"
#include "serialization/binary_or_text.hpp"
#include "serialization/parser.hpp"
#include "serialization/string_utils.hpp"
#include "game_version.hpp"
#include "wesconfig.h"
#include "deprecation.hpp"
#include <stdexcept>
#include <deque>
Include dependency graph for preprocessor.cpp:

Go to the source code of this file.

Classes

class  preprocessor
 Base class for preprocessing an input. More...
 
class  preprocessor_streambuf
 Target for sending preprocessed output. More...
 
class  preprocessor_file
 Specialized preprocessor for handling a file or a set of files. More...
 
class  preprocessor_data
 Specialized preprocessor for handling any kind of input stream. More...
 
struct  preprocessor_data::token_desc
 Description of a preprocessing chunk. More...
 
class  preprocessor_istream
 

Macros

#define ERR_PREPROC   LOG_STREAM(err, log_preprocessor)
 
#define WRN_PREPROC   LOG_STREAM(warn, log_preprocessor)
 
#define LOG_PREPROC   LOG_STREAM(info, log_preprocessor)
 
#define DBG_PREPROC   LOG_STREAM(debug, log_preprocessor)
 

Functions

static std::string get_filename (const std::string &file_code)
 
static std::string get_file_code (const std::string &filename)
 
static std::string get_location (const std::string &loc)
 
std::ostream & operator<< (std::ostream &stream, const preproc_define &def)
 
std::ostream & operator<< (std::ostream &stream, const preproc_map::value_type &def)
 
std::string lineno_string (const std::string &lineno)
 
bool operator== (preprocessor_data::token_desc::token_type, char)
 
bool operator== (char lhs, preprocessor_data::token_desc::token_type rhs)
 
bool operator!= (preprocessor_data::token_desc::token_type rhs, char lhs)
 
bool operator!= (char lhs, preprocessor_data::token_desc::token_type rhs)
 
filesystem::scoped_istream preprocess_file (const std::string &fname, preproc_map &defines)
 Function to use the WML preprocessor on a file. More...
 
filesystem::scoped_istream preprocess_file (const std::string &fname)
 
filesystem::scoped_istream preprocess_string (const std::string &contents, const std::string &textdomain)
 
filesystem::scoped_istream preprocess_string (const std::string &contents, const std::string &textdomain, preproc_map &defines)
 Function to use the WML preprocessor on a string. More...
 
void preprocess_resource (const std::string &res_name, preproc_map *defines_map, bool write_cfg, bool write_plain_cfg, const std::string &parent_directory)
 

Variables

static lg::log_domain log_preprocessor ("preprocessor")
 
static const std::string current_file_str = "CURRENT_FILE"
 
static const std::string current_dir_str = "CURRENT_DIRECTORY"
 
static const std::string left_curly_str = "LEFT_BRACE"
 
static const std::string right_curly_str = "RIGHT_BRACE"
 
static std::map< std::string, int > file_number_map
 
static bool encode_filename = true
 
static std::string preprocessor_error_detail_prefix = "\n "
 

Detailed Description

WML preprocessor.

Definition in file preprocessor.cpp.

Macro Definition Documentation

◆ DBG_PREPROC

#define DBG_PREPROC   LOG_STREAM(debug, log_preprocessor)

Definition at line 41 of file preprocessor.cpp.

◆ ERR_PREPROC

#define ERR_PREPROC   LOG_STREAM(err, log_preprocessor)

Definition at line 38 of file preprocessor.cpp.

◆ LOG_PREPROC

#define LOG_PREPROC   LOG_STREAM(info, log_preprocessor)

Definition at line 40 of file preprocessor.cpp.

◆ WRN_PREPROC

#define WRN_PREPROC   LOG_STREAM(warn, log_preprocessor)

Definition at line 39 of file preprocessor.cpp.

Function Documentation

◆ get_file_code()

static std::string get_file_code ( const std::string &  filename)
static

◆ get_filename()

static std::string get_filename ( const std::string &  file_code)
static

◆ get_location()

static std::string get_location ( const std::string &  loc)
static

Definition at line 98 of file preprocessor.cpp.

References get_filename(), i, loc, and utils::quoted_split().

Referenced by preprocessor_data::get_chunk(), and preproc_define::write().

◆ lineno_string()

std::string lineno_string ( const std::string &  lineno)

◆ operator!=() [1/2]

bool operator!= ( char  lhs,
preprocessor_data::token_desc::token_type  rhs 
)

Definition at line 762 of file preprocessor.cpp.

◆ operator!=() [2/2]

bool operator!= ( preprocessor_data::token_desc::token_type  rhs,
char  lhs 
)

Definition at line 757 of file preprocessor.cpp.

◆ operator<<() [1/2]

std::ostream& operator<< ( std::ostream &  stream,
const preproc_define def 
)

Definition at line 234 of file preprocessor.cpp.

References preproc_define::location, and preproc_define::value.

◆ operator<<() [2/2]

std::ostream& operator<< ( std::ostream &  stream,
const preproc_map::value_type &  def 
)

Definition at line 239 of file preprocessor.cpp.

◆ operator==() [1/2]

bool operator== ( char  lhs,
preprocessor_data::token_desc::token_type  rhs 
)

Definition at line 752 of file preprocessor.cpp.

◆ operator==() [2/2]

bool operator== ( preprocessor_data::token_desc::token_type  ,
char   
)

Definition at line 747 of file preprocessor.cpp.

◆ preprocess_file() [1/2]

filesystem::scoped_istream preprocess_file ( const std::string &  fname)

Definition at line 1742 of file preprocessor.cpp.

References log_scope.

◆ preprocess_file() [2/2]

filesystem::scoped_istream preprocess_file ( const std::string &  fname,
preproc_map defines 
)

◆ preprocess_resource()

void preprocess_resource ( const std::string &  res_name,
preproc_map defines_map,
bool  write_cfg,
bool  write_plain_cfg,
const std::string &  parent_directory 
)

◆ preprocess_string() [1/2]

filesystem::scoped_istream preprocess_string ( const std::string &  contents,
const std::string &  textdomain 
)

Definition at line 1751 of file preprocessor.cpp.

References log_scope, and game_config::path.

Referenced by handle_preprocess_string(), and editor::map_context::to_config().

◆ preprocess_string() [2/2]

filesystem::scoped_istream preprocess_string ( const std::string &  contents,
const std::string &  textdomain,
preproc_map defines 
)

Function to use the WML preprocessor on a string.

Parameters
definesA map of symbols defined.
contentsThe string to be preprocessed.
textdomainThe textdomain to associate the contents.
Returns
The resulting preprocessed string.

Definition at line 1763 of file preprocessor.cpp.

References log_scope, and game_config::path.

Variable Documentation

◆ current_dir_str

const std::string current_dir_str = "CURRENT_DIRECTORY"
static

Definition at line 44 of file preprocessor.cpp.

Referenced by preprocessor_data::get_chunk().

◆ current_file_str

const std::string current_file_str = "CURRENT_FILE"
static

Definition at line 43 of file preprocessor.cpp.

Referenced by preprocessor_data::get_chunk().

◆ encode_filename

bool encode_filename = true
static

Definition at line 51 of file preprocessor.cpp.

Referenced by get_file_code(), get_filename(), and preprocess_resource().

◆ file_number_map

std::map<std::string, int> file_number_map
static

Definition at line 49 of file preprocessor.cpp.

Referenced by get_file_code(), and get_filename().

◆ left_curly_str

const std::string left_curly_str = "LEFT_BRACE"
static

Definition at line 45 of file preprocessor.cpp.

Referenced by preprocessor_data::get_chunk().

◆ log_preprocessor

lg::log_domain log_preprocessor("preprocessor") ( "preprocessor"  )
static

◆ preprocessor_error_detail_prefix

std::string preprocessor_error_detail_prefix = "\n "
static

Definition at line 53 of file preprocessor.cpp.

Referenced by lineno_string().

◆ right_curly_str

const std::string right_curly_str = "RIGHT_BRACE"
static

Definition at line 46 of file preprocessor.cpp.

Referenced by preprocessor_data::get_chunk().