summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkwolekr <kwolekr@minetest.net>2015-05-07 02:54:30 -0400
committerkwolekr <kwolekr@minetest.net>2015-05-07 02:54:35 -0400
commitb246812455737b2d0337dec905ba0256adefd105 (patch)
treecea90089c81f83011895a19e60d194c92379766b /src
parent656575b59d4f0d67452cca7409c9064f690f038c (diff)
downloadminetest-b246812455737b2d0337dec905ba0256adefd105.tar.gz
minetest-b246812455737b2d0337dec905ba0256adefd105.tar.bz2
minetest-b246812455737b2d0337dec905ba0256adefd105.zip
Schematics: Add indent-with-space option for schematic Lua table serialization
Diffstat (limited to 'src')
-rw-r--r--src/mg_schematic.cpp23
-rw-r--r--src/mg_schematic.h2
-rw-r--r--src/script/lua_api/l_mapgen.cpp6
3 files changed, 19 insertions, 12 deletions
diff --git a/src/mg_schematic.cpp b/src/mg_schematic.cpp
index 3100637ae..bea08ef12 100644
--- a/src/mg_schematic.cpp
+++ b/src/mg_schematic.cpp
@@ -309,14 +309,18 @@ bool Schematic::serializeToMts(std::ostream *os,
bool Schematic::serializeToLua(std::ostream *os,
- const std::vector<std::string> &names, bool use_comments)
+ const std::vector<std::string> &names, bool use_comments, u32 indent_spaces)
{
std::ostream &ss = *os;
+ std::string indent("\t");
+ if (indent_spaces > 0)
+ indent.assign(indent_spaces, ' ');
+
//// Write header
{
ss << "schematic = {" << std::endl;
- ss << "\tsize = "
+ ss << indent << "size = "
<< "{x=" << size.X
<< ", y=" << size.Y
<< ", z=" << size.Z
@@ -325,33 +329,34 @@ bool Schematic::serializeToLua(std::ostream *os,
//// Write y-slice probabilities
{
- ss << "\tyslice_prob = {" << std::endl;
+ ss << indent << "yslice_prob = {" << std::endl;
for (u16 y = 0; y != size.Y; y++) {
- ss << "\t\t{"
+ ss << indent << indent << "{"
<< "ypos=" << y
<< ", prob=" << (u16)slice_probs[y]
<< "}," << std::endl;
}
- ss << "\t}," << std::endl;
+ ss << indent << "}," << std::endl;
}
//// Write node data
{
- ss << "\tdata = {" << std::endl;
+ ss << indent << "data = {" << std::endl;
u32 i = 0;
for (u16 z = 0; z != size.Z; z++)
for (u16 y = 0; y != size.Y; y++) {
if (use_comments) {
ss << std::endl
- << "\t\t-- z=" << z
+ << indent << indent
+ << "-- z=" << z
<< ", y=" << y << std::endl;
}
for (u16 x = 0; x != size.X; x++, i++) {
- ss << "\t\t{"
+ ss << indent << indent << "{"
<< "name=\"" << names[schemdata[i].getContent()]
<< "\", param1=" << (u16)schemdata[i].param1
<< ", param2=" << (u16)schemdata[i].param2
@@ -359,7 +364,7 @@ bool Schematic::serializeToLua(std::ostream *os,
}
}
- ss << "\t}," << std::endl;
+ ss << indent << "}," << std::endl;
}
ss << "}" << std::endl;
diff --git a/src/mg_schematic.h b/src/mg_schematic.h
index 3f253ad92..5b546f879 100644
--- a/src/mg_schematic.h
+++ b/src/mg_schematic.h
@@ -110,7 +110,7 @@ public:
bool deserializeFromMts(std::istream *is, std::vector<std::string> *names);
bool serializeToMts(std::ostream *os, const std::vector<std::string> &names);
bool serializeToLua(std::ostream *os, const std::vector<std::string> &names,
- bool use_comments);
+ bool use_comments, u32 indent_spaces);
void placeStructure(Map *map, v3s16 p, u32 flags,
Rotation rot, bool force_placement);
diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp
index d99f40ccd..7e9c07939 100644
--- a/src/script/lua_api/l_mapgen.cpp
+++ b/src/script/lua_api/l_mapgen.cpp
@@ -1134,7 +1134,8 @@ int ModApiMapgen::l_serialize_schematic(lua_State *L)
SchematicManager *schemmgr = getServer(L)->getEmergeManager()->schemmgr;
//// Read options
- bool use_comments = getboolfield_default(L, 3, "use_lua_comments", false);
+ bool use_comments = getboolfield_default(L, 3, "lua_use_comments", false);
+ u32 indent_spaces = getintfield_default(L, 3, "lua_num_indent_spaces", 0);
//// Get schematic
bool was_loaded = false;
@@ -1161,7 +1162,8 @@ int ModApiMapgen::l_serialize_schematic(lua_State *L)
schem->serializeToMts(&os, schem->m_nodenames);
break;
case SCHEM_FMT_LUA:
- schem->serializeToLua(&os, schem->m_nodenames, use_comments);
+ schem->serializeToLua(&os, schem->m_nodenames,
+ use_comments, indent_spaces);
break;
default:
return 0;