Schematics: Add indent-with-space option for schematic Lua table serialization
authorkwolekr <kwolekr@minetest.net>
Thu, 7 May 2015 06:54:30 +0000 (02:54 -0400)
committerkwolekr <kwolekr@minetest.net>
Thu, 7 May 2015 06:54:35 +0000 (02:54 -0400)
doc/lua_api.txt
src/mg_schematic.cpp
src/mg_schematic.h
src/script/lua_api/l_mapgen.cpp

index 6d1e7e705616b186eccf90eb7f4024d4618f0e18..cb8b8848fd95fd3b6f614950b4cf1d8e62f1fbd1 100644 (file)
@@ -2178,8 +2178,10 @@ These functions return the leftover itemstack.
     * "mts" - a string containing the binary MTS data used in the MTS file format
     * "lua" - a string containing Lua code representing the schematic in table format
     * `options` is a table containing the following optional parameters:
-    * If `use_comments` is true and `format` is "lua", the Lua code generated will have (X, Z)
+    * If `lua_use_comments` is true and `format` is "lua", the Lua code generated will have (X, Z)
     * position comments for every X row generated in the schematic data for easier reading.
+    * If `lua_num_indent_spaces` is a nonzero number and `format` is "lua", the Lua code generated
+    * will use that number of spaces as indentation instead of a tab character.
 
 ### Misc.
 * `minetest.get_connected_players()`: returns list of `ObjectRefs`
index 3100637ae82f70508f6a8dca9eb018078443c09d..bea08ef12c891096ea908632cc6d3248b1e2ee26 100644 (file)
@@ -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;
index 3f253ad9273a4c2de509a266a538abc096b2dc5c..5b546f879c539fa0e080d438bcd59b5f4609b9af 100644 (file)
@@ -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);
index d99f40ccdfcc140920026ee54bd7232b35d2150e..7e9c07939fd7326de300861d5d52d8c3c11472d2 100644 (file)
@@ -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;