--:Minify:--
local ini = {}

function ini.parse(str)
    local config = {}
    local section = nil

    for line in str:gmatch("[^\r\n]+") do
        -- trim whitespace
        line = line:match("^%s*(.-)%s*$")

        -- skip empty lines and comments
        if line ~= "" and not line:match("^[;#]") then
            -- section
            local sec = line:match("^%[(.-)%]$")
            if sec then
                section = sec
                config[section] = config[section] or {}
            else
                -- key=value
                local key, value = line:match("^(.-)=(.*)$")
                if key then
                    key = key:match("^%s*(.-)%s*$")
                    value = value:match("^%s*(.-)%s*$")

                    if section then
                        config[section][key] = value
                    else
                        config[key] = value
                    end
                end
            end
        end
    end

    return config
end

return ini