vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[

        Babylonian
        A sub-addon that manages the locales for other addons.
        3.4.1 (Platypus)
        $Id: Babylonian.lua 716 2006-02-09 15:25:17Z mentalpower $

        License:
                This program is free software; you can redistribute it and/or
                modify it under the terms of the GNU General Public License
                as published by the Free Software Foundation; either version 2
                of the License, or (at your option) any later version.

                This program is distributed in the hope that it will be useful,
                but WITHOUT ANY WARRANTY; without even the implied warranty of
                MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                GNU General Public License for more details.

                You should have received a copy of the GNU General Public License
                along with this program(see GLP.txt); if not, write to the Free Software
                Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

]]

local self = {}
if (not self.update) then self.update = {}; end
--Local function prototypes
local split, setOrder, getOrder, fetchString, getString, registerAddOn, unRegisterAddOn, updateKhaos, isAddOnRegistered

function split(str, at)
        local splut = {}
        if (type(str) ~= "string") then return nil end
        if (not str) then str = "" end
        if (not at) then table.insert(splut, str)
        else for n, c in string.gfind(str, '([^%'..at..']*)(%'..at..'?)') do
                table.insert(splut, n); if (c == '') then break end
        end end
        return splut
end

function setOrder(order)
        if (not order) then self.order = {}
        else self.order = split(order, ",") end
        table.insert(self.order, GetLocale())
        table.insert(self.order, "enUS")
        if not(self.order[1] == getOrder()) then
                SetCVar("BabylonianOrder", order)
                updateKhaos()
        end
        SetCVar("BabylonianOrder", order)
end

function getOrder()
        return GetCVar("BabylonianOrder")
end

function fetchString(stringTable, locale, stringKey)
        if (type(stringTable)=="table" and
                type(stringTable[locale])=="table" and
                stringTable[locale][stringKey]) then
                        return stringTable[locale][stringKey]
        end
end

function getString(stringTable, stringKey, default)
        local val
        for i=1, table.getn(self.order) do
                val = fetchString(stringTable, self.order[i], stringKey)
                if (val) then return val end
        end
        return default
end

--The following three functions were added to work around some Khaos behaviours.
function registerAddOn(AddOn, updateFunction)

        --Make both arguments required and make sure that they're the right type
        if ((not AddOn) or (not type(AddOn) == "string")) or ((not updateFunction) or (not type(updateFunction) == "function")) then
                EnhTooltip.DebugPrint("Invalid arguments passed to Babylonian.RegisterAddOn() |"..AddOn.." | "..updateFunction);
                return
        end

        EnhTooltip.DebugPrint("Registering '"..AddOn.."' with Babylonian");
        self.update[AddOn] = updateFunction;
end

function unRegisterAddOn(AddOn)

        --Again make sure the argument exists and that its the right type
        if ((not AddOn) or (not type(AddOn) == "string")) then
                return
        end

        EnhTooltip.DebugPrint("UnRegistering '"..AddOn.."' with Babylonian");
        self.update[AddOn] = nil;
end

function isAddOnRegistered(AddOn)

        --Again make sure the argument exists and that its the right type
        if ((not AddOn) or (not type(AddOn) == "string")) then
                return nil;
        end

        return (self.update[AddOn] ~= nil);
end

function updateKhaos()
local table = self.update

        for AddOn, updateFunction in table do
                EnhTooltip.DebugPrint("Updating '"..AddOn.."'s Khaos Locale");
                updateFunction(getOrder(), nil, true);
        end
end

if (not Babylonian) then
        Babylonian = {
                ['SetOrder'] = setOrder,
                ['GetOrder'] = getOrder,
                ['GetString'] = getString,
                ['FetchString'] = fetchString,
                ['RegisterAddOn'] = registerAddOn,
                ['UnRegisterAddOn'] = unRegisterAddOn,
                ['IsAddOnRegistered'] = isAddOnRegistered,
        }
        RegisterCVar("BabylonianOrder", "")
        setOrder(getOrder())
end