From 95c2da3075828a76d11aa5da3037fdc7dc871a95 Mon Sep 17 00:00:00 2001 From: Crum Date: Thu, 25 Jan 2018 13:05:13 -0600 Subject: [PATCH] update !Compatibility --- 2/3/4/5/6/7/!Compatibility/api/luaAPI.lua | 103 ++++++++++++++-------- 2/3/4/5/6/7/!Compatibility/api/wowAPI.lua | 75 ++++++++++++---- 2 files changed, 126 insertions(+), 52 deletions(-) diff --git a/2/3/4/5/6/7/!Compatibility/api/luaAPI.lua b/2/3/4/5/6/7/!Compatibility/api/luaAPI.lua index 5c87561..ae1901e 100644 --- a/2/3/4/5/6/7/!Compatibility/api/luaAPI.lua +++ b/2/3/4/5/6/7/!Compatibility/api/luaAPI.lua @@ -1,5 +1,5 @@ --Cache global variables -local assert = assert +--local assert = assert local error = error local geterrorhandler = geterrorhandler local loadstring = loadstring @@ -10,7 +10,7 @@ local type = type local unpack = unpack local ceil, floor = math.ceil, math.floor local find, format, gfind, gsub, sub = string.find, string.format, string.gfind, string.gsub, string.sub -local getn, setn, tinsert = table.getn, table.setn, table.insert +local concat, getn, setn, tinsert = table.concat, table.getn, table.setn, table.insert local escapeSequences = { ["\a"] = "\\a", -- Bell @@ -46,14 +46,22 @@ math.huge = 1/0 string.gmatch = gfind function difftime(time2, time1) - assert(type(time2) == "number", format("bad argument #1 to 'difftime' (number expected, got %s)", time2 and type(time2) or "no value")) - assert(not time1 or type(time1) == "number", format("bad argument #2 to 'difftime' (number expected, got %s)", time1 and type(time1) or "no value")) +-- assert(type(time2) == "number", format("bad argument #1 to 'difftime' (number expected, got %s)", time2 and type(time2) or "no value")) +-- assert(not time1 or type(time1) == "number", format("bad argument #2 to 'difftime' (number expected, got %s)", time1 and type(time1) or "no value")) + if type(time2) ~= "number" then + error(format("bad argument #1 to 'difftime' (number expected, got %s)", time2 and type(time2) or "no value"), 2) + elseif time1 and type(time1) ~= "number" then + error(format("bad argument #2 to 'difftime' (number expected, got %s)", time1 and type(time1) or "no value"), 2) + end return time1 and time2 - time1 or time2 end function select(n, ...) - assert(type(n) == "number" or (type(n) == "string" and n == "#"), format("bad argument #1 to 'select' (number expected, got %s)", n and type(n) or "no value")) +-- assert(type(n) == "number" or (type(n) == "string" and n == "#"), format("bad argument #1 to 'select' (number expected, got %s)", n and type(n) or "no value")) + if not (type(n) == "number" or (type(n) == "string" and n == "#")) then + error(format("bad argument #1 to 'select' (number expected, got %s)", n and type(n) or "no value"), 2) + end if type(n) == "string" then return getn(arg) @@ -73,7 +81,10 @@ function select(n, ...) end function math.modf(i) - assert(type(i) == "number", format("bad argument #1 to 'modf' (number expected, got %s)", i and type(i) or "no value")) +-- assert(type(i) == "number", format("bad argument #1 to 'modf' (number expected, got %s)", i and type(i) or "no value")) + if type(i) ~= "number" then + error(format("bad argument #1 to 'modf' (number expected, got %s)", i and type(i) or "no value"), 2) + end local int = i >= 0 and floor(i) or ceil(i) @@ -81,39 +92,54 @@ function math.modf(i) end function string.join(delimiter, ...) - assert(type(delimiter) == "string" or type(delimiter) == "number", format("bad argument #1 to 'join' (string expected, got %s)", delimiter and type(delimiter) or "no value")) +-- assert(type(delimiter) == "string" or type(delimiter) == "number", format("bad argument #1 to 'join' (string expected, got %s)", delimiter and type(delimiter) or "no value")) + if type(delimiter) ~= "string" and type(delimiter) ~= "number" then + error(format("bad argument #1 to 'join' (string expected, got %s)", delimiter and type(delimiter) or "no value"), 2) + end - local size = getn(arg) - if size == 0 then + if getn(arg) == 0 then return "" end - local text = arg[1] - for i = 2, size do - text = text..delimiter..arg[i] - end - - return text + return concat(arg, delimiter) end strjoin = string.join function string.match(str, pattern, index) - assert(type(str) == "string" or type(str) == "number", format("bad argument #1 to 'match' (string expected, got %s)", str and type(str) or "no value")) - assert(type(pattern) == "string" or type(pattern) == "number", format("bad argument #2 to 'match' (string expected, got %s)", pattern and type(pattern) or "no value")) - assert(not index or type(index) == "number" or type(index) == "string", format("bad argument #3 to 'match' (number expected, got %s)", index and type(index) or "no value")) +-- assert(type(str) == "string" or type(str) == "number", format("bad argument #1 to 'match' (string expected, got %s)", str and type(str) or "no value")) +-- assert(type(pattern) == "string" or type(pattern) == "number", format("bad argument #2 to 'match' (string expected, got %s)", pattern and type(pattern) or "no value")) +-- assert(not index or type(index) == "number" or (type(index) == "string" and index ~= ""), format("bad argument #3 to 'match' (number expected, got %s)", index and type(index) or "no value")) + if type(str) ~= "string" and type(str) ~= "number" then + error(format("bad argument #1 to 'match' (string expected, got %s)", str and type(str) or "no value"), 2) + elseif type(pattern) ~= "string" and type(pattern) ~= "number" then + error(format("bad argument #2 to 'match' (string expected, got %s)", pattern and type(pattern) or "no value"), 2) + elseif index and type(index) ~= "number" and (type(index) ~= "string" or index == "") then + error(format("bad argument #3 to 'match' (number expected, got %s)", index and type(index) or "no value"), 2) + end - str = type(str) == "number" and tostring(str) or str - pattern = type(pattern) == "number" and tostring(pattern) or pattern + local i1, i2, match, match2 = find(str, pattern, index) - return gfind(index and sub(str, index) or str, pattern)() + if not match and i2 and i2 >= i1 then + return sub(str, i1, i2) + elseif match2 then + local matches = {find(str, pattern, index)} + tremove(matches, 2) + tremove(matches, 1) + return unpack(matches) + end + + return match end strmatch = string.match function string.split(delimiter, str) - assert(type(delimiter) == "string" or type(str) == "number", format("bad argument #1 to 'split' (string expected, got %s)", delimiter and type(delimiter) or "no value")) - assert(type(str) == "string" or type(str) == "number", format("bad argument #2 to 'split' (string expected, got %s)", str and type(str) or "no value")) - - str = type(str) == "number" and tostring(str) or str +-- assert(type(delimiter) == "string" or type(delimiter) == "number", format("bad argument #1 to 'split' (string expected, got %s)", delimiter and type(delimiter) or "no value")) +-- assert(type(str) == "string" or type(str) == "number", format("bad argument #2 to 'split' (string expected, got %s)", str and type(str) or "no value")) + if type(delimiter) ~= "string" and type(delimiter) ~= "number" then + error(format("bad argument #1 to 'split' (string expected, got %s)", delimiter and type(delimiter) or "no value"), 2) + elseif type(str) ~= "string" and type(str) ~= "number" then + error(format("bad argument #2 to 'split' (string expected, got %s)", str and type(str) or "no value"), 2) + end local fields = {} gsub(str, format("([^%s]+)", delimiter), function(c) fields[getn(fields) + 1] = c end) @@ -123,14 +149,15 @@ end strsplit = string.split function string.trim(str, chars) - assert(type(str) == "string" or type(str) == "number", format("bad argument #1 to 'trim' (string expected, got %s)", str and type(str) or "no value")) - assert(not chars or type(chars) == "string" or type(chars) == "number", format("bad argument #2 to 'trim' (string expected, got %s)", chars and type(chars) or "no value")) - - str = type(str) == "number" and tostring(str) or str +-- assert(type(str) == "string" or type(str) == "number", format("bad argument #1 to 'trim' (string expected, got %s)", str and type(str) or "no value")) +-- assert(not chars or type(chars) == "string" or type(chars) == "number", format("bad argument #2 to 'trim' (string expected, got %s)", chars and type(chars) or "no value")) + if type(str) ~= "string" and type(str) ~= "number" then + error(format("bad argument #1 to 'trim' (string expected, got %s)", str and type(str) or "no value"), 2) + elseif chars and (type(chars) ~= "string" and type(chars) ~= "number") then + error(format("bad argument #2 to 'trim' (string expected, got %s)", chars and type(chars) or "no value"), 2) + end if chars then - chars = type(chars) == "number" and tostring(chars) or chars - local tokens = {} for token in gfind(chars, "[%z\1-\255]") do @@ -143,7 +170,7 @@ function string.trim(str, chars) for i = 1, size do pattern = pattern..(escapeSequences[tokens[i]] or tokens[i]).."+" - if size > 1 and i < size then + if i < size then pattern = pattern.."|" end end @@ -152,22 +179,27 @@ function string.trim(str, chars) local patternEnd = loadstring("return \"^(.-)["..pattern.."]$\"")() local trimed, x, y = 1 - while trimed >= 1 do + while trimed > 0 do str, x = gsub(str, patternStart, "%1") str, y = gsub(str, patternEnd, "%1") trimed = x + y end return str - else + elseif type(str) == "string" then -- remove leading/trailing [space][tab][return][newline] return gsub(str, "^%s*(.-)%s*$", "%1") + else + return tostring(str) end end strtrim = string.trim function table.wipe(t) - assert(type(t) == "table", format("bad argument #1 to 'wipe' (table expected, got %s)", t and type(t) or "no value")) +-- assert(type(t) == "table", format("bad argument #1 to 'wipe' (table expected, got %s)", t and type(t) or "no value")) + if type(t) ~= "table" then + error(format("bad argument #1 to 'wipe' (table expected, got %s)", t and type(t) or "no value"), 2) + end for k in pairs(t) do t[k] = nil @@ -215,6 +247,7 @@ function tostringall(...) return unpack(LOCAL_ToStringAllTemp) end +local strjoin = strjoin local LOCAL_PrintHandler = function(...) DEFAULT_CHAT_FRAME:AddMessage(strjoin(" ", tostringall(unpack(arg)))) end diff --git a/2/3/4/5/6/7/!Compatibility/api/wowAPI.lua b/2/3/4/5/6/7/!Compatibility/api/wowAPI.lua index 2900473..ca20d94 100644 --- a/2/3/4/5/6/7/!Compatibility/api/wowAPI.lua +++ b/2/3/4/5/6/7/!Compatibility/api/wowAPI.lua @@ -1,7 +1,8 @@ --Cache global variables local _G = _G -local assert = assert +--local assert = assert local date = date +local error = error local pairs = pairs local select = select local tonumber = tonumber @@ -10,6 +11,7 @@ local unpack = unpack local format, gsub, lower, match, upper = string.format, string.gsub, string.lower, string.match, string.upper local getn = table.getn --WoW API +local GetItemInfo = GetItemInfo local GetQuestGreenRange = GetQuestGreenRange local GetRealZoneText = GetRealZoneText local IsInInstance = IsInInstance @@ -62,7 +64,10 @@ QuestDifficultyColors = { } function HookScript(frame, scriptType, handler) - assert(type(frame) == "table" and frame.GetScript and type(scriptType) == "string" and type(handler) == "function", "Usage: HookScript(frame, \"type\", function)") +-- assert(type(frame) == "table" and frame.GetScript and type(scriptType) == "string" and type(handler) == "function", "Usage: HookScript(frame, \"type\", function)") + if not (type(frame) == "table" and frame.GetScript and type(scriptType) == "string" and type(handler) == "function") then + error("Usage: HookScript(frame, \"type\", function)", 2) + end local original_scipt = frame:GetScript(scriptType) if original_scipt then @@ -79,7 +84,10 @@ end function hooksecurefunc(arg1, arg2, arg3) local isMethod = type(arg1) == "table" and type(arg2) == "string" and type(arg1[arg2]) == "function" and type(arg3) == "function" - assert(isMethod or (type(arg1) == "string" and type(_G[arg1]) == "function" and type(arg2) == "function"), "Usage: hooksecurefunc([table,] \"functionName\", hookfunc)") +-- assert(isMethod or (type(arg1) == "string" and type(_G[arg1]) == "function" and type(arg2) == "function"), "Usage: hooksecurefunc([table,] \"functionName\", hookfunc)") + if not (isMethod or (type(arg1) == "string" and type(_G[arg1]) == "function" and type(arg2) == "function")) then + error("Usage: hooksecurefunc([table,] \"functionName\", hookfunc)", 2) + end if not isMethod then arg1, arg2, arg3 = _G, arg1, arg2 @@ -121,7 +129,10 @@ function tContains(table, item) end function UnitAura(unit, i, filter) - assert((type(unit) == "string" or type(unit) == "number") and (type(i) == "string" or type(i) == "number"), "Usage: UnitAura(\"unit\", index [, filter])") +-- assert((type(unit) == "string" or type(unit) == "number") and (type(i) == "string" or type(i) == "number"), "Usage: UnitAura(\"unit\", index [, filter])") + if not ((type(unit) == "string" or type(unit) == "number") and (type(i) == "string" or type(i) == "number")) then + error("Usage: UnitAura(\"unit\", index [, filter])", 2) + end if not filter or match(filter, "(HELPFUL)") then local name, rank, aura, count, duration, maxDuration = UnitBuff(unit, i, filter) @@ -159,7 +170,10 @@ function GetQuestDifficultyColor(level) end function FillLocalizedClassList(tab, female) - assert(type(tab) == "table", "Usage: FillLocalizedClassList(classTable[, isFemale])") +-- assert(type(tab) == "table", "Usage: FillLocalizedClassList(classTable[, isFemale])") + if type(tab) ~= "table" then + error("Usage: FillLocalizedClassList(classTable[, isFemale])", 2) + end for _, engClass in ipairs(CLASS_SORT_ORDER) do if female then @@ -237,7 +251,10 @@ function GetCurrentMapAreaID() end function GetMapNameByID(id) - assert(type(id) == "string" or type(id) == "number", format("Bad argument #1 to \"GetMapNameByID\" (number expected, got %s)", id and type(id) or "no value")) +-- assert(type(id) == "string" or type(id) == "number", format("Bad argument #1 to \"GetMapNameByID\" (number expected, got %s)", id and type(id) or "no value")) + if not (type(id) == "string" or type(id) == "number") then + error(format("Bad argument #1 to \"GetMapNameByID\" (number expected, got %s)", id and type(id) or "no value"), 2) + end return mapByID[tonumber(id)] end @@ -296,8 +313,13 @@ local function OnValueChanged() end function CreateStatusBarTexturePointer(statusbar) - assert(type(statusbar) == "table", format("Bad argument #1 to \"CreateStatusBarTexturePointer\" (table expected, got %s)", statusbar and type(statusbar) or "no value")) - assert(statusbar.GetObjectType and statusbar:GetObjectType() == "StatusBar", "Bad argument #1 to \"CreateStatusBarTexturePointer\" (statusbar object expected)") +-- assert(type(statusbar) == "table", format("Bad argument #1 to \"CreateStatusBarTexturePointer\" (table expected, got %s)", statusbar and type(statusbar) or "no value")) +-- assert(statusbar.GetObjectType and statusbar:GetObjectType() == "StatusBar", "Bad argument #1 to \"CreateStatusBarTexturePointer\" (statusbar object expected)") + if type(statusbar) ~= "table" then + error(format("Bad argument #1 to \"CreateStatusBarTexturePointer\" (table expected, got %s)", statusbar and type(statusbar) or "no value"), 2) + elseif not (statusbar.GetObjectType and statusbar:GetObjectType() == "StatusBar") then + error("Bad argument #1 to \"CreateStatusBarTexturePointer\" (statusbar object expected)", 2) + end local f = statusbar:CreateTexture() f.width = statusbar:GetWidth() @@ -338,7 +360,10 @@ function GetThreatStatusColor(statusIndex) end function GetThreatStatus(currentThreat, maxThreat) - assert(type(currentThreat) == "number" and type(maxThreat) == "number", "Usage: GetThreatStatus(currentThreat, maxThreat)") +-- assert(type(currentThreat) == "number" and type(maxThreat) == "number", "Usage: GetThreatStatus(currentThreat, maxThreat)") + if type(currentThreat) ~= "number" or type(maxThreat) ~= "number" then + error("Usage: GetThreatStatus(currentThreat, maxThreat)", 2) + end if not maxThreat or maxThreat == 0 then maxThreat = 1 @@ -357,14 +382,30 @@ function GetThreatStatus(currentThreat, maxThreat) end end --- Credits: @Shagu - pfUI --- https://github.com/shagu/pfUI/blob/7999f612ad464261306bbf6f309bb63b54bd44af/api/api.lua#L123 -function GetItemLinkByName(name) - for itemID = 1, 25818 do - local itemName, itemLink, itemQuality = GetItemInfo(itemID) - if itemName and itemName == name then - local hex = select(4, GetItemQualityColor(tonumber(itemQuality))) - return hex.. "|H"..itemLink.."|h["..itemName.."]|h|r" +local MAX_ITEM_ID = 24283 +local ItemInfoDB = {} + +function GetItemInfoByName(name) +-- assert(type(itemName) == "string", "Usage: GetItemInfoByName(itemName)") + if type(name) ~= "string" then + error("Usage: GetItemInfoByName(itemName)", 2) + end + + if not ItemInfoDB[name] then + local itemName + for itemID = 1, MAX_ITEM_ID do + itemName = GetItemInfo(itemID) + if itemName ~= "" then + ItemInfoDB[name] = itemID + + if name == itemName then + break + end + end end end + + if not ItemInfoDB[name] then return end + + return GetItemInfo(ItemInfoDB[name]) end \ No newline at end of file