From 8391532f6ebac99e1484caac46a4d0a82cd93316 Mon Sep 17 00:00:00 2001 From: Lars Mueller Date: Fri, 13 May 2022 12:13:16 +0200 Subject: [PATCH] Schema: Fix settingtypes subtree ordering & level --- schema.lua | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/schema.lua b/schema.lua index a14e50e..6eaf531 100644 --- a/schema.lua +++ b/schema.lua @@ -40,7 +40,7 @@ function generate_settingtypes(self) if self._level > 0 then -- HACK: Minetest automatically adds the modname -- TODO simple names (not modname.field.other_field) - settings = {"[" .. ("*"):rep(self._level) .. self.name .. "]"} + settings = {"[" .. ("*"):rep(self._level - 1) .. self.name .. "]"} end local function setting(key, value_scheme) key = tostring(key) @@ -54,11 +54,19 @@ function generate_settingtypes(self) for key in pairs(self.entries or {}) do table.insert(keys, key) end - table.sort(keys) + table.sort(keys, function(key, other_key) + -- Force leaves before subtrees to prevent them from being accidentally graphically treated as part of the subtree + local is_subtree = self.entries[key].type == "table" + local other_is_subtree = self.entries[other_key].type == "table" + if is_subtree ~= other_is_subtree then + return not is_subtree + end + return key < other_key + end) for _, key in ipairs(keys) do setting(key, self.entries[key]) end - return table.concat(settings, "\n") + return table.concat(settings, "\n\n") end if not typ then return ""