123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- --[[
- Copyright (c) 2012 Carreras Nicolas
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
- --]]
- --- Lua INI Parser.
- -- It has never been that simple to use INI files with Lua.
- --@author Dynodzzo
- local LIP = {};
- --- Returns a table containing all the data from the INI file.
- --@param fileName The name of the INI file to parse. [string]
- --@return The table containing all data from the INI file. [table]
- function LIP.load(fileName,nested)
- assert(type(fileName) == 'string', 'Parameter "fileName" must be a string.');
- local file = assert(io.open(fileName, 'r'), 'Error loading file : ' .. fileName);
- local data = {};
- local section;
- local count =0;
- -- if nested param dont't push
- if nested == nil then
- nested={}
- end
- for line in file:lines() do
- local tempSection = line:match('^%[([^%[%]]+)%]$');
- if(tempSection)then
- section = tonumber(tempSection) and tonumber(tempSection) or tempSection;
- data[section] = data[section] or {};
- end
- local param, value = line:match('^([%w|_]+)%s-=%s-(.+)$');
- if(param and value ~= nil)then
-
- if(tonumber(value))then
- value = tonumber(value);
- elseif(value == 'true')then
- value = true;
- elseif(value == 'false')then
- value = false;
- end
- if(tonumber(param))then
- param = tonumber(param);
- end
-
- -- value trim spaces not all just ltrim,rtrim
- -- this is for all,not suit for betik key -> value=value:gsub('%s+', '')
- if value ~= nil and type(value) ~= "number" then
- value=ltrim(rtrim(value))
- end
- -- nested parametresiyle derle,pakur gibi kısımlar için
- -- indekslenerek array yapı olarak tutulması sağlanıyor.
- -- derle,pakur sıralı betik olmak zorundadır.
- if has_value(nested,section) then
- --count = count +1
- --data[section][count] = param .."@@"..value;
- table.insert(data[section],param .."@@"..value)
- else
- data[section][param] = value;
- end
- end
- end
- file:close();
- return data;
- end
- --- Saves all the data from a table to an INI file.
- --@param fileName The name of the INI file to fill. [string]
- --@param data The table containing all the data to store. [table]
- function LIP.save(fileName, data)
- assert(type(fileName) == 'string', 'Parameter "fileName" must be a string.');
- assert(type(data) == 'table', 'Parameter "data" must be a table.');
- local file = assert(io.open(fileName, 'w+b'), 'Error loading file :' .. fileName);
- local contents = '';
- for section, param in pairs(data) do
- contents = contents .. ('[%s]\n'):format(section);
- for key, value in pairs(param) do
- contents = contents .. ('%s=%s\n'):format(key, tostring(value));
- end
- contents = contents .. '\n';
- end
- file:write(contents);
- file:close();
- end
- -- check a variable in an array
- function has_value (tab, val)
- for index, value in ipairs(tab) do
- if value == val then
- return true
- end
- end
- return false
- end
- -- remove leading whitespace from string.
- -- http://en.wikipedia.org/wiki/Trim_(programming)
- function ltrim(s)
- return (s:gsub("^%s*", ""))
- end
- -- remove trailing whitespace from string.
- -- http://en.wikipedia.org/wiki/Trim_(programming)
- function rtrim(s)
- local n = #s
- while n > 0 and s:find("^%s", n) do n = n - 1 end
- return s:sub(1, n)
- end
- return LIP;
|