vanilla-wow-addons – Rev 1
?pathlinks?
---- 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.