vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[
  ****************************************************************
        SCT Globalization Format Parser
        
        Some of this code was directly taken from MarsMessageParser.lua 
        with permission from the author (as said in the file).
        
        It used is being used by SCT simply to make sure all the 
        GlobalStrings.lua strings are ordered and converted properly.
        
        ****************************************************************]]
        
        
local SCT_GlobalStrings = {};
local ParseFunction;
local parseBuffer;
local parseOrder;
local parseCount;

ParseFunction = function (character)
        local result;
        if(not parseBuffer) then
                if(character == "%") then
                        parseBuffer = character;
                        result = "";
                else
                        if(string.find(character, "[%^%$%(%)%%%.%[%]%*%+%-%?]")) then
                                result = "%"..character;
                        else
                                result = character;
                        end
                end
        else
                parseBuffer = parseBuffer..character;
                if(string.find(character, "[%%cEefgGiouXxqs]")) then
                        local order;
                        _, _, order = string.find(parseBuffer, "(%d+)%$");
                        parseCount = parseCount + 1;
                        if(order) then
                                parseOrder[parseCount] = tonumber(order);
                        else
                                parseOrder[parseCount] = parseCount;
                        end
                        result = "(.+)";
                        parseBuffer = nil;
                elseif(string.find(character, "[%%d]")) then
                        local order;
                        _, _, order = string.find(parseBuffer, "(%d+)%$");
                        parseCount = parseCount + 1;
                        if(order) then
                                parseOrder[parseCount] = tonumber(order);
                        else
                                parseOrder[parseCount] = parseCount;
                        end
                        result = "(%d+)";
                        parseBuffer = nil;
                elseif(string.find(character, "[%$%.%d]")) then
                        result = "";
                else
                        result = parseBuffer;
                        parseBuffer = nil;
                end
        end
        return result;
end

function SCTGlobalParser_Format(formatString)
        parseBuffer = nil;
        parseOrder = {};
        parseCount = 0;
        
        --see if in "cache" table
        if (SCT_GlobalStrings[formatString] == nil) then
                local parseString = string.gsub(formatString, ".", ParseFunction);
                SCT_GlobalStrings[formatString] = { parseString, parseOrder };
        end
        
        return SCT_GlobalStrings[formatString];
end

function SCTGlobalParser_ParseMessage(arg1, formatString)
        local parseResult;
        local findResult;
        
        parseResult = SCTGlobalParser_Format(formatString);     
        findResult = {string.find(arg1, parseResult[1])};
        if(findResult[1]) then
                local i, n;
                local callResult = {};
                n = table.getn(findResult);
                for i=3,n do
                        callResult[parseResult[2][i-2]] = findResult[i];
                end
                return unpack(callResult);
        end
        return nil;
end

        

Generated by GNU Enscript 1.6.5.90.