vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
---- unitFromPlayerName(string name) returns string unit or false if not in group
function unitFromPlayerName(name)
        name = string.gsub(name, "(-.*)", "")

        if UnitName("player") == name then 
                return "player" 
        end
        if GetNumRaidMembers() == 0 then
                for i=1,GetNumPartyMembers() do
                        if(UnitName("party"..i) == name) then
                                return "party"..i
                        end
                end
        else
                for i=1,GetNumRaidMembers() do
                        if(UnitName("raid"..i) == name) then
                                return "raid"..i
                        end
                end
        end
        return false
end

function tokenizestring(str, values)
        sgsub = string.gsub
        for k, v in values do
                str = sgsub(str, "%["..k.."%]", (type(v) == "function" and v() or v))
        end
        return str
end

---- nilTable(table tableToNil) returns empty tableToNil
tsetn = XLoot.compat and function() end or table.setn
function nilTable(tableToNil) -- MentalPower
        if (not (type(tableToNil) == "table")) then
                return tableToNil;
        end

        for key, value in pairs(tableToNil) do
                if type(value) == "table" then
                        nilTable(value)
                end
                tableToNil[key] = nil;
        end

        tsetn(tableToNil, 0);
        return tableToNil;
end


---- iteratetable, rewrite of iterateTable by ckknight with fancy metatable voodoo
---- for k, v in iteratetable(table, optional string key, optional boolean reverse)
do
        local mySort = function(a, b)
                if not a then
                        return false
                end
                if not b then
                        return true
                end
                
                if type(a) == "string" then
                        return string.upper(a) < string.upper(b)
                else
                        return a < b
                end
        end

        local mySort_reverse = function(a, b)
                if not b then
                        return false
                end
                if not a then
                        return true
                end
                
                if type(a) == "string" then
                        return string.upper(a) > string.upper(b)
                else
                        return a > b
                end
        end

        local current
        local sorts = setmetatable({}, {__index=function(self, sortBy)
                local x = function(a, b)
                        if not a or not b then
                                return false
                        elseif type(current[a][sortBy]) == "string" then
                                return string.upper(current[a][sortBy]) < string.upper(current[b][sortBy])
                        else
                                return current[a][sortBy] < current[b][sortBy]
                        end
                end
                self[sortBy] = x
                return x
        end})
        local sorts_reverse = setmetatable({}, {__index=function(self, sortBy)
                local x = function(a, b)
                        if not a or not b then
                                return false
                        elseif type(current[a][sortBy]) == "string" then
                                return string.upper(current[a][sortBy]) > string.upper(current[b][sortBy])
                        else
                                return current[a][sortBy] > current[b][sortBy]
                        end
                end
                self[sortBy] = x
                return x
        end})

        local iters; iters = setmetatable({}, {__index=function(self, t)
                local q; q = function(tab)
                        local position = t['#'] + 1
                        
                        local x = t[position]
                        if not x then
                                for k in pairs(t) do
                                        t[k] = nil
                                end
                                tsetn(t, 0)
                                iters[t] = q
                                return
                        end
                        
                        t['#'] = position
                        
                        return x, tab[x]
                end
                return q
        end, __mode='k'})

        function iteratetable(tab, key, reverse)
                local t = next(iters) or {}
                local iter = iters[t]
                iters[t] = nil
                for k, v in pairs(tab) do
                        table.insert(t, k)
                end
                
                if not key then
                        table.sort(t, reverse and mySort_reverse or mySort)
                else
                        current = tab
                        table.sort(t, reverse and sorts_reverse[key] or sorts[key])
                        current = nil
                end
                
                t['#'] = 0
                
                return iter, tab
        end
end

Generated by GNU Enscript 1.6.5.90.