commit 757d8849c6b133354a9dee66327b187334c56061 Author: Bart van Strien Date: Tue Dec 6 18:02:49 2011 +0100 Add inifile diff --git a/inifile/inifile.lua b/inifile/inifile.lua new file mode 100644 index 0000000..98befce --- /dev/null +++ b/inifile/inifile.lua @@ -0,0 +1,46 @@ +inifile = {} + +local lines +local write + +if love then + lines = love.filesystem.lines + write = love.filesystem.write +else + lines = function(name) return assert(io.open(name)):lines() end + write = function(name, contents) return assert(io.open(name, "w")):write(contents) end +end + +function inifile.parse(name) + local t = {} + local section + for line in lines(name) do + local s = line:match("^%[([^%]]+)%]$") + if s then + section = s + t[section] = t[section] or {} + end + local key, value = line:match("^(%w+)%s-=%s-(.+)$") + if tonumber(value) then value = tonumber(value) end + if value == "true" then value = true end + if value == "false" then value = false end + if key and value then + t[section][key] = value + end + end + return t +end + +function inifile.save(name, t) + local contents = "" + for section, s in pairs(t) do + local sec = ("[%s]\n"):format(section) + for key, value in pairs(s) do + sec = sec .. ("%s=%s\n"):format(key, tostring(value)) + end + contents = contents .. sec .. "\n" + end + write(name, contents) +end + +return inifile