summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/luadgn.cc
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/luadgn.cc')
-rw-r--r--crawl-ref/source/luadgn.cc24
1 files changed, 19 insertions, 5 deletions
diff --git a/crawl-ref/source/luadgn.cc b/crawl-ref/source/luadgn.cc
index d76005102d..6507066111 100644
--- a/crawl-ref/source/luadgn.cc
+++ b/crawl-ref/source/luadgn.cc
@@ -456,19 +456,20 @@ static int dgn_shuffle_remove(lua_State *ls)
return (0);
}
-static int dgn_subst(lua_State *ls)
+static int dgn_map_add_transform(
+ lua_State *ls,
+ std::string (map_lines::*add)(const std::string &s),
+ void (map_lines::*erase)())
{
MAP(ls, 1, map);
- if (lua_gettop(ls) == 1)
- return dlua_stringtable(ls, map->get_subst_strings());
for (int i = 2, size = lua_gettop(ls); i <= size; ++i)
{
if (lua_isnil(ls, i))
- map->map.clear_substs();
+ (map->map.*erase)();
else
{
- std::string err = map->map.add_subst(luaL_checkstring(ls, i));
+ std::string err = (map->map.*add)(luaL_checkstring(ls, i));
if (!err.empty())
luaL_error(ls, err.c_str());
}
@@ -477,6 +478,18 @@ static int dgn_subst(lua_State *ls)
return (0);
}
+static int dgn_subst(lua_State *ls)
+{
+ return dgn_map_add_transform(ls, &map_lines::add_subst,
+ &map_lines::clear_substs);
+}
+
+static int dgn_nsubst(lua_State *ls)
+{
+ return dgn_map_add_transform(ls, &map_lines::add_nsubst,
+ &map_lines::clear_nsubsts);
+}
+
static int dgn_subst_remove(lua_State *ls)
{
MAP(ls, 1, map);
@@ -858,6 +871,7 @@ static const struct luaL_reg dgn_lib[] =
{ "shuffle", dgn_shuffle },
{ "shuffle_remove", dgn_shuffle_remove },
{ "subst", dgn_subst },
+ { "nsubst", dgn_nsubst },
{ "subst_remove", dgn_subst_remove },
{ "map", dgn_map },
{ "mons", dgn_mons },