The Battle for Wesnoth  1.15.2+dev
Namespaces | Macros | Typedefs | Functions | Variables
lua_common.cpp File Reference

Contains code common to the application and game lua kernels which cannot or should not go into the lua kernel base files. More...

#include "scripting/lua_common.hpp"
#include "config.hpp"
#include "scripting/push_check.hpp"
#include "scripting/lua_unit.hpp"
#include "tstring.hpp"
#include "variable.hpp"
#include "log.hpp"
#include "gettext.hpp"
#include "lua_jailbreak_exception.hpp"
#include "game_display.hpp"
#include <cstring>
#include <iterator>
#include <new>
#include <string>
#include "lua/lauxlib.h"
#include "lua/lua.h"
Include dependency graph for lua_common.cpp:

Go to the source code of this file.

Namespaces

 lua_common
 

Macros

#define LOG_LUA   LOG_STREAM(info, log_scripting_lua)
 
#define WRN_LUA   LOG_STREAM(warn, log_scripting_lua)
 
#define ERR_LUA   LOG_STREAM(err, log_scripting_lua)
 
#define return_misformed()   do { lua_settop(L, initial_top); return false; } while (0)
 

Typedefs

typedef std::pair< vconfig::all_children_iterator, vconfig::all_children_iteratorlua_common::vconfig_child_range
 

Functions

static int lua_common::impl_gettext (lua_State *L)
 Creates a t_string object (__call metamethod). More...
 
static int lua_common::impl_gettext_tostr (lua_State *L)
 
int lua_common::intf_textdomain (lua_State *L)
 Creates an interface for gettext. More...
 
static void lua_common::tstring_concat_aux (lua_State *L, t_string &dst, int src)
 Converts a Lua value at position src and appends it to dst. More...
 
static int lua_common::impl_tstring_concat (lua_State *L)
 Appends a scalar to a t_string object (__concat metamethod). More...
 
static int lua_common::impl_tstring_len (lua_State *L)
 
static int lua_common::impl_tstring_collect (lua_State *L)
 Destroys a t_string object before it is collected (__gc metamethod). More...
 
static int lua_common::impl_tstring_lt (lua_State *L)
 
static int lua_common::impl_tstring_le (lua_State *L)
 
static int lua_common::impl_tstring_eq (lua_State *L)
 
static int lua_common::impl_tstring_tostring (lua_State *L)
 Converts a t_string object to a string (__tostring metamethod); that is, performs a translation. More...
 
static int lua_common::impl_vconfig_get (lua_State *L)
 Gets the parsed field of a vconfig object (_index metamethod). More...
 
static int lua_common::impl_vconfig_size (lua_State *L)
 Returns the number of a child of a vconfig object. More...
 
static int lua_common::impl_vconfig_collect (lua_State *L)
 Destroys a vconfig object before it is collected (__gc metamethod). More...
 
static int lua_common::impl_vconfig_pairs_iter (lua_State *L)
 Iterate through the attributes of a vconfig. More...
 
static int lua_common::impl_vconfig_pairs_collect (lua_State *L)
 Destroy a vconfig pairs iterator. More...
 
static int lua_common::impl_vconfig_pairs (lua_State *L)
 Construct an iterator to iterate through the attributes of a vconfig. More...
 
static int lua_common::impl_vconfig_ipairs_iter (lua_State *L)
 Iterate through the subtags of a vconfig. More...
 
static int lua_common::impl_vconfig_ipairs_collect (lua_State *L)
 Destroy a vconfig ipairs iterator. More...
 
static int lua_common::impl_vconfig_ipairs (lua_State *L)
 Construct an iterator to iterate through the subtags of a vconfig. More...
 
int lua_common::intf_tovconfig (lua_State *L)
 Creates a vconfig containing the WML table. More...
 
std::string lua_common::register_gettext_metatable (lua_State *L)
 Adds the gettext metatable. More...
 
std::string lua_common::register_tstring_metatable (lua_State *L)
 Adds the tstring metatable. More...
 
std::string lua_common::register_vconfig_metatable (lua_State *L)
 Adds the vconfig metatable. More...
 
void * operator new (std::size_t sz, lua_State *L)
 
void operator delete (void *, lua_State *L)
 
bool luaW_getmetafield (lua_State *L, int idx, const char *key)
 Like luaL_getmetafield, but returns false if key is an empty string or begins with two underscores. More...
 
void luaW_pushvconfig (lua_State *L, const vconfig &cfg)
 Pushes a vconfig on the top of the stack. More...
 
void luaW_pushtstring (lua_State *L, const t_string &v)
 Pushes a t_string on the top of the stack. More...
 
void luaW_pushscalar (lua_State *L, const config::attribute_value &v)
 Converts an attribute value into a Lua object pushed at the top of the stack. More...
 
bool luaW_toscalar (lua_State *L, int index, config::attribute_value &v)
 Converts the value at the top of the stack to an attribute value. More...
 
bool luaW_totstring (lua_State *L, int index, t_string &str)
 Converts a scalar to a translatable string. More...
 
t_string luaW_checktstring (lua_State *L, int index)
 Converts a scalar to a translatable string. More...
 
bool luaW_iststring (lua_State *L, int index)
 
void luaW_filltable (lua_State *L, const config &cfg)
 Converts a config object to a Lua table. More...
 
void luaW_pushlocation (lua_State *L, const map_location &ml)
 Converts a map location object to a Lua table pushed at the top of the stack. More...
 
bool luaW_tolocation (lua_State *L, int index, map_location &loc)
 Converts an optional table or pair of integers to a map location object. More...
 
map_location luaW_checklocation (lua_State *L, int index)
 Converts an optional table or pair of integers to a map location object. More...
 
void luaW_pushconfig (lua_State *L, const config &cfg)
 Converts a config object to a Lua table pushed at the top of the stack. More...
 
bool luaW_toconfig (lua_State *L, int index, config &cfg)
 Converts an optional table or vconfig to a config object. More...
 
config luaW_checkconfig (lua_State *L, int index)
 Converts an optional table or vconfig to a config object. More...
 
config luaW_checkconfig (lua_State *L, int index, const vconfig *&vcfg)
 Like the two-argument version, but if it was a vconfig, also returns a pointer to that vconfig. More...
 
bool luaW_tovconfig (lua_State *L, int index, vconfig &vcfg)
 Gets an optional vconfig from either a table or a userdata. More...
 
vconfig luaW_checkvconfig (lua_State *L, int index, bool allow_missing)
 Gets an optional vconfig from either a table or a userdata. More...
 
bool luaW_getglobal (lua_State *L, const std::vector< std::string > &path)
 Pushes the value found by following the variadic names (char *), if the value is not nil. More...
 
bool luaW_toboolean (lua_State *L, int n)
 
bool luaW_pushvariable (lua_State *L, variable_access_const &v)
 
bool luaW_checkvariable (lua_State *L, variable_access_create &v, int n)
 
bool luaW_tableget (lua_State *L, int index, const char *key)
 
utils::string_view luaW_tostring (lua_State *L, int index)
 
utils::string_view luaW_tostring_or_default (lua_State *L, int index, utils::string_view def)
 
void chat_message (const std::string &caption, const std::string &msg)
 Displays a message in the chat window. More...
 
void push_error_handler (lua_State *L)
 
int luaW_pcall_internal (lua_State *L, int nArgs, int nRets)
 
bool luaW_pcall (lua_State *L, int nArgs, int nRets, bool allow_wml_error)
 Calls a Lua function stored below its nArgs arguments at the top of the stack. More...
 
int luaW_type_error (lua_State *L, int narg, const char *tname)
 
int luaW_type_error (lua_State *L, int narg, const char *kpath, const char *tname)
 

Variables

static const char gettextKey [] = "gettext"
 
static const char vconfigKey [] = "vconfig"
 
static const char vconfigpairsKey [] = "vconfig pairs"
 
static const char vconfigipairsKey [] = "vconfig ipairs"
 
static const char tstringKey [] = "translatable string"
 
static const char executeKey [] = "err"
 
static lg::log_domain log_scripting_lua ("scripting/lua")
 

Detailed Description

Contains code common to the application and game lua kernels which cannot or should not go into the lua kernel base files.

Currently contains implementation functions related to vconfig and gettext, also some macros to assist in writing C lua callbacks.

Definition in file lua_common.cpp.

Macro Definition Documentation

◆ ERR_LUA

#define ERR_LUA   LOG_STREAM(err, log_scripting_lua)

Definition at line 54 of file lua_common.cpp.

Referenced by luaW_pcall().

◆ LOG_LUA

#define LOG_LUA   LOG_STREAM(info, log_scripting_lua)

Definition at line 52 of file lua_common.cpp.

◆ return_misformed

#define return_misformed ( )    do { lua_settop(L, initial_top); return false; } while (0)

Definition at line 732 of file lua_common.cpp.

Referenced by luaW_toconfig().

◆ WRN_LUA

#define WRN_LUA   LOG_STREAM(warn, log_scripting_lua)

Definition at line 53 of file lua_common.cpp.

Referenced by luaW_checkvariable(), and luaW_pushvariable().

Function Documentation

◆ chat_message()

void chat_message ( const std::string &  caption,
const std::string &  msg 
)

◆ luaW_checkconfig() [1/2]

config luaW_checkconfig ( lua_State L,
int  index 
)

◆ luaW_checkconfig() [2/2]

config luaW_checkconfig ( lua_State L,
int  index,
const vconfig *&  vcfg 
)

Like the two-argument version, but if it was a vconfig, also returns a pointer to that vconfig.

Definition at line 818 of file lua_common.cpp.

References luaL_testudata(), luaW_checkconfig(), p, and vconfigKey.

◆ luaW_checklocation()

map_location luaW_checklocation ( lua_State L,
int  index 
)

◆ luaW_checktstring()

t_string luaW_checktstring ( lua_State L,
int  index 
)

◆ luaW_checkvariable()

bool luaW_checkvariable ( lua_State L,
variable_access_create v,
int  n 
)

◆ luaW_checkvconfig()

vconfig luaW_checkvconfig ( lua_State L,
int  index,
bool  allow_missing = false 
)

◆ luaW_filltable()

void luaW_filltable ( lua_State L,
const config cfg 
)

Converts a config object to a Lua table.

The destination table should be at the top of the stack on entry. It is still at the top on exit.

Definition at line 632 of file lua_common.cpp.

References config::all_children_range(), config::attribute_range(), lua_checkstack(), lua_createtable(), LUA_MINSTACK, lua_newtable, lua_pushstring(), lua_rawseti(), lua_setfield(), luaW_filltable(), and luaW_pushscalar().

Referenced by luaW_filltable(), luaW_pushconfig(), and luaW_pushvariable().

◆ luaW_getglobal()

bool luaW_getglobal ( lua_State L,
const std::vector< std::string > &  path 
)

◆ luaW_getmetafield()

bool luaW_getmetafield ( lua_State L,
int  idx,
const char *  key 
)

Like luaL_getmetafield, but returns false if key is an empty string or begins with two underscores.

Definition at line 505 of file lua_common.cpp.

References luaL_getmetafield(), and n.

Referenced by impl_animator_get(), impl_music_get(), impl_terainmap_get(), impl_track_get(), and impl_unit_attack_get().

◆ luaW_iststring()

bool luaW_iststring ( lua_State L,
int  index 
)

◆ luaW_pcall()

bool luaW_pcall ( lua_State L,
int  nArgs,
int  nRets,
bool  allow_wml_error = false 
)

◆ luaW_pcall_internal()

int luaW_pcall_internal ( lua_State L,
int  nArgs,
int  nRets 
)

◆ luaW_pushconfig()

void luaW_pushconfig ( lua_State L,
const config cfg 
)

◆ luaW_pushlocation()

void luaW_pushlocation ( lua_State L,
const map_location ml 
)

◆ luaW_pushscalar()

void luaW_pushscalar ( lua_State L,
const config::attribute_value v 
)

Converts an attribute value into a Lua object pushed at the top of the stack.

Definition at line 556 of file lua_common.cpp.

References config_attribute_value::apply_visitor().

Referenced by impl_preferences_get(), lua_common::impl_vconfig_get(), lua_common::impl_vconfig_pairs_iter(), luaW_filltable(), and luaW_pushvariable().

◆ luaW_pushtstring()

void luaW_pushtstring ( lua_State L,
const t_string v 
)

◆ luaW_pushvariable()

bool luaW_pushvariable ( lua_State L,
variable_access_const v 
)

◆ luaW_pushvconfig()

void luaW_pushvconfig ( lua_State L,
const vconfig cfg 
)

◆ luaW_tableget()

bool luaW_tableget ( lua_State L,
int  index,
const char *  key 
)

◆ luaW_toboolean()

bool luaW_toboolean ( lua_State L,
int  n 
)

Definition at line 881 of file lua_common.cpp.

References lua_toboolean().

Referenced by ai::ai_move(), ai::call_lua_filter_fcn(), game_lua_kernel::cfun_builtin_effect(), cfun_exec_candidate_action(), impl_add_animation(), ai::impl_ai_get(), impl_unit_status_set(), intf_add_modification(), intf_advance_unit(), game_lua_kernel::intf_allow_end_turn(), game_lua_kernel::intf_allow_undo(), game_lua_kernel::intf_delay(), game_lua_kernel::intf_find_cost_map(), intf_find_path(), game_lua_kernel::intf_find_reach(), game_lua_kernel::intf_get_time_of_day(), lua_fileops::intf_have_file(), intf_load_wml(), game_lua_kernel::intf_lock_view(), game_lua_kernel::intf_log(), intf_music_add(), game_lua_kernel::intf_put_unit(), game_lua_kernel::intf_redraw(), game_lua_kernel::intf_scroll_to_tile(), game_lua_kernel::intf_select_hex(), game_lua_kernel::intf_select_unit(), lua_gui2::intf_set_dialog_active(), lua_gui2::intf_set_dialog_markup(), lua_gui2::intf_set_dialog_value(), lua_gui2::intf_set_dialog_visible(), game_lua_kernel::intf_set_end_campaign_credits(), game_lua_kernel::intf_set_terrain(), game_lua_kernel::intf_set_village_owner(), game_lua_kernel::intf_skip_messages(), game_lua_kernel::intf_teleport(), game_lua_kernel::intf_terrain_mask(), game_lua_kernel::intf_toggle_fog(), intf_unit_resistance(), game_lua_kernel::intf_zoom(), ai::lua_ai_load::lua_ai_load(), lua_check_impl::lua_check(), lua_check_impl::lua_to_or_default(), luaW_checkvariable(), luaW_getglobal(), luaW_toscalar(), read_rules_vector(), game_lua_kernel::run_filter(), game_lua_kernel::run_wml_conditional(), lua_gui2::show_menu(), lua_gui2::show_message_box(), and ai::lua_object< T >::to_type().

◆ luaW_toconfig()

bool luaW_toconfig ( lua_State L,
int  index,
config cfg 
)

◆ luaW_tolocation()

bool luaW_tolocation ( lua_State L,
int  index,
map_location loc 
)

◆ luaW_toscalar()

bool luaW_toscalar ( lua_State L,
int  index,
config::attribute_value v 
)

Converts the value at the top of the stack to an attribute value.

Definition at line 561 of file lua_common.cpp.

References LUA_TBOOLEAN, LUA_TNUMBER, lua_tonumber, lua_tostring, LUA_TSTRING, LUA_TUSERDATA, lua_type(), luaL_testudata(), luaW_toboolean(), and tstringKey.

Referenced by impl_preferences_set(), and luaW_toconfig().

◆ luaW_tostring()

utils::string_view luaW_tostring ( lua_State L,
int  index 
)

◆ luaW_tostring_or_default()

utils::string_view luaW_tostring_or_default ( lua_State L,
int  index,
utils::string_view  def 
)

Definition at line 982 of file lua_common.cpp.

References lua_tolstring().

Referenced by lua_check_impl::lua_to_or_default(), and luaW_getglobal().

◆ luaW_totstring()

bool luaW_totstring ( lua_State L,
int  index,
t_string str 
)

◆ luaW_tovconfig()

bool luaW_tovconfig ( lua_State L,
int  index,
vconfig vcfg 
)

Gets an optional vconfig from either a table or a userdata.

Returns
false in case of failure.

Definition at line 827 of file lua_common.cpp.

References LUA_TNIL, LUA_TNONE, LUA_TTABLE, LUA_TUSERDATA, lua_type(), luaL_testudata(), luaW_toconfig(), and vconfigKey.

Referenced by game_lua_kernel::intf_find_cost_map(), luaW_checkvconfig(), luaW_tofaivariant(), luaW_tolocation(), and ai::lua_object< T >::to_type().

◆ luaW_type_error() [1/2]

int luaW_type_error ( lua_State L,
int  narg,
const char *  tname 
)

◆ luaW_type_error() [2/2]

int luaW_type_error ( lua_State L,
int  narg,
const char *  kpath,
const char *  tname 
)

Definition at line 1077 of file lua_common.cpp.

References lua_pushfstring(), luaL_argerror(), luaL_typename, and wfl::msg().

◆ operator delete()

void operator delete ( void *  ,
lua_State L 
)

Definition at line 497 of file lua_common.cpp.

References lua_pop.

◆ operator new()

void* operator new ( std::size_t  sz,
lua_State L 
)

Definition at line 492 of file lua_common.cpp.

References lua_newuserdata().

◆ push_error_handler()

void push_error_handler ( lua_State L)

Variable Documentation

◆ executeKey

const char executeKey[] = "err"
static

Definition at line 49 of file lua_common.cpp.

Referenced by luaW_pcall_internal(), and push_error_handler().

◆ gettextKey

const char gettextKey[] = "gettext"
static

◆ log_scripting_lua

lg::log_domain log_scripting_lua("scripting/lua")
static

◆ tstringKey

const char tstringKey[] = "translatable string"
static

◆ vconfigipairsKey

const char vconfigipairsKey[] = "vconfig ipairs"
static

◆ vconfigKey

const char vconfigKey[] = "vconfig"
static

◆ vconfigpairsKey

const char vconfigpairsKey[] = "vconfig pairs"
static