Tidy up generate_from_settingtypes.lua a bit.
authorTim <t4im@users.noreply.github.com>
Wed, 27 Jul 2016 16:46:02 +0000 (18:46 +0200)
committerest31 <MTest31@outlook.com>
Sat, 20 Aug 2016 13:48:47 +0000 (15:48 +0200)
* Multiline strings
* Table-concat instead of String-concats
* string.rep instead of loop-concat
* string.format %q instead of manual quotation by gsub
* Assert writeable files
* Generate new settings_translation_file

builtin/mainmenu/generate_from_settingtypes.lua
src/settings_translation_file.cpp

index 62d11b29b477a7b2cb81a95bed0a0129e090792e..6c9ba27fbcf272acce1705ebec11ca3d895494ff 100644 (file)
@@ -1,99 +1,99 @@
 local settings = ...
 
-local function create_minetest_conf_example()
-       local result = "#    This file contains a list of all available settings and their default value for minetest.conf\n" ..
-                       "\n" ..
-                       "#    By default, all the settings are commented and not functional.\n" ..
-                       "#    Uncomment settings by removing the preceding #.\n" ..
-                       "\n" ..
-                       "#    minetest.conf is read by default from:\n" ..
-                       "#    ../minetest.conf\n" ..
-                       "#    ../../minetest.conf\n" ..
-                       "#    Any other path can be chosen by passing the path as a parameter\n" ..
-                       "#    to the program, eg. \"minetest.exe --config ../minetest.conf.example\".\n" ..
-                       "\n" ..
-                       "#    Further documentation:\n" ..
-                       "#    http://wiki.minetest.net/\n" ..
-                       "\n"
+local concat = table.concat
+local insert = table.insert
+local sprintf = string.format
+local rep = string.rep
+
+local minetest_example_header = [[
+#    This file contains a list of all available settings and their default value for minetest.conf
+
+#    By default, all the settings are commented and not functional.
+#    Uncomment settings by removing the preceding #.
+
+#    minetest.conf is read by default from:
+#    ../minetest.conf
+#    ../../minetest.conf
+#    Any other path can be chosen by passing the path as a parameter
+#    to the program, eg. "minetest.exe --config ../minetest.conf.example".
 
+#    Further documentation:
+#    http://wiki.minetest.net/
+
+]]
+
+local function create_minetest_conf_example()
+       local result = { minetest_example_header }
        for _, entry in ipairs(settings) do
                if entry.type == "category" then
                        if entry.level == 0 then
-                               result = result .. "#\n# " .. entry.name .. "\n#\n\n"
+                               insert(result, "#\n# " .. entry.name .. "\n#\n\n")
                        else
-                               for i = 1, entry.level do
-                                       result = result .. "#"
-                               end
-                               result = result .. "# " .. entry.name .. "\n\n"
+                               insert(result, rep("#", entry.level))
+                               insert(result, "# " .. entry.name .. "\n\n")
                        end
                else
                        if entry.comment ~= "" then
                                for _, comment_line in ipairs(entry.comment:split("\n", true)) do
-                                       result = result .."#    " .. comment_line .. "\n"
+                                       insert(result, "#    " .. comment_line .. "\n")
                                end
                        end
-                       result = result .. "#    type: " .. entry.type
+                       insert(result, "#    type: " .. entry.type)
                        if entry.min then
-                               result = result .. " min: " .. entry.min
+                               insert(result, " min: " .. entry.min)
                        end
                        if entry.max then
-                               result = result .. " max: " .. entry.max
+                               insert(result, " max: " .. entry.max)
                        end
                        if entry.values then
-                               result = result .. " values: " .. table.concat(entry.values, ", ")
+                               insert(result, " values: " .. concat(entry.values, ", "))
                        end
                        if entry.possible then
-                               result = result .. " possible values: " .. entry.possible:gsub(",", ", ")
+                               insert(result, " possible values: " .. entry.possible:gsub(",", ", "))
                        end
-                       result = result .. "\n"
-                       local append = ""
+                       insert(result, "\n")
+                       local append
                        if entry.default ~= "" then
                                append = " " .. entry.default
                        end
-                       result = result .. "# " .. entry.name .. " =" .. append .. "\n\n"
+                       insert(result, sprintf("# %s =%s\n\n", entry.name, append or ""))
                end
        end
-       return result
+       return concat(result)
 end
 
-local function create_translation_file()
-       local result = "// This file is automatically generated\n" ..
-                       "// It conatins a bunch of fake gettext calls, to tell xgettext about the strings in config files\n" ..
-                       "// To update it, refer to the bottom of builtin/mainmenu/tab_settings.lua\n\n" ..
-                       "fake_function() {\n"
+local translation_file_header = [[
+// This file is automatically generated
+// It conatins a bunch of fake gettext calls, to tell xgettext about the strings in config files
+// To update it, refer to the bottom of builtin/mainmenu/dlg_settings_advanced.lua
+
+fake_function() {]]
 
+local function create_translation_file()
+       local result = { translation_file_header }
        for _, entry in ipairs(settings) do
                if entry.type == "category" then
-                       local name_escaped = entry.name:gsub("\"", "\\\"")
-                       result = result .. "\tgettext(\"" .. name_escaped .. "\");\n"
+                       insert(result, sprintf("\tgettext(%q);", entry.name))
                else
                        if entry.readable_name then
-                               local readable_name_escaped = entry.readable_name:gsub("\"", "\\\"")
-                               result = result .. "\tgettext(\"" .. readable_name_escaped .. "\");\n"
+                               insert(result, sprintf("\tgettext(%q);", entry.readable_name))
                        end
                        if entry.comment ~= "" then
                                local comment_escaped = entry.comment:gsub("\n", "\\n")
                                comment_escaped = comment_escaped:gsub("\"", "\\\"")
-                               result = result .. "\tgettext(\"" .. comment_escaped .. "\");\n"
+                               insert(result, "\tgettext(\"" .. comment_escaped .. "\");")
                        end
                end
        end
-       result = result .. "}\n"
-       return result
+       insert(result, "}\n")
+       return concat(result, "\n")
 end
 
-if false then
-       local file = io.open("minetest.conf.example", "w")
-       if file then
-               file:write(create_minetest_conf_example())
-               file:close()
-       end
-end
+local file = assert(io.open("minetest.conf.example", "w"))
+file:write(create_minetest_conf_example())
+file:close()
+
+file = assert(io.open("src/settings_translation_file.cpp", "w"))
+file:write(create_translation_file())
+file:close()
 
-if false then
-       local file = io.open("src/settings_translation_file.cpp", "w")
-       if file then
-               file:write(create_translation_file())
-               file:close()
-       end
-end
\ No newline at end of file
index 3e82279cd3eddf1c80f47c6e2db5050f7cdbd760..10e38e1a72257ff4d2e0fab1ec3b9ab690fbf370 100644 (file)
@@ -1,6 +1,6 @@
 // This file is automatically generated
 // It conatins a bunch of fake gettext calls, to tell xgettext about the strings in config files
-// To update it, refer to the bottom of builtin/mainmenu/tab_settings.lua
+// To update it, refer to the bottom of builtin/mainmenu/dlg_settings_advanced.lua
 
 fake_function() {
        gettext("Client");