From fa1cf36d5aafcf83a9e08a79f8b565c54f05ffa3 Mon Sep 17 00:00:00 2001 From: Kevin Lyles Date: Sun, 31 Jan 2010 02:37:07 -0600 Subject: [PATCH] Moved all functions in Regexps.lua to the top of the file --- Regexps.lua | 170 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 85 insertions(+), 85 deletions(-) diff --git a/Regexps.lua b/Regexps.lua index 3e6829d..cab6aca 100644 --- a/Regexps.lua +++ b/Regexps.lua @@ -2,6 +2,91 @@ if not WeightsWatcher then WeightsWatcher = AceLibrary("AceAddon-2.0"):new("AceEvent-2.0", "AceHook-2.1") end +function WeightsWatcher.multipleStats(text) + local stat, stringTable + local stats = WeightsWatcher.newStatTable() + local origText = text + + start, _, value = string.find(text, " and %a[%a ]+ by (%d+)%.") + if start then + text = string.gsub(text, ".*[iI]ncrease[sd]? ", "") + text = string.gsub(text, " by (%d+)%..*", " %1") + text = string.gsub(text, ",? and ", " " .. value .. "\a") + text = string.gsub(text, ", ", " " .. value .. "\a") + else + text = string.gsub(string.gsub(text, ",? and ", "\a"), ", ", "\a") + end + stringTable = { strsplit("\a", text) } + for _, statString in ipairs(stringTable) do + stat = WeightsWatcher.singleStat(statString) + if stat then + stats = stats + stat + else + ww_unparsed_lines[origText] = true + end + end + -- Don't return an empty table + for _, _ in pairs (stats) do + return stats + end +end + +function WeightsWatcher.damageRange(textL, textR) + local speed + local stats = WeightsWatcher.newStatTable() + local start, _, added, minVal, maxVal, name = string.find(textL, "^(%+?)(%d+) %- (%d+) (%a* ?damage)$") + if start then + if added == "+" then + added = "added " + end + stats["minimum " .. added .. name] = tonumber(minVal) + stats["maximum " .. added .. name] = tonumber(maxVal) + end + if textR then + start, _, speed = string.find(textR, "^speed (%d+%.?%d*)$") + if start then + stats["speed"] = tonumber(speed) + end + end + -- Don't return an empty table + for _, _ in pairs (stats) do + return stats + end +end + +function WeightsWatcher.singleStat(text) + local stat + for _, regex in ipairs(SingleStatLines) do + if type(regex) == "table" then + local pattern, func = unpack(regex) + if string.find(text, pattern) then + stat = func(text, pattern) + if stat then + break + end + end + else + start, _, name, value = string.find(text, regex) + if start then + stat = WeightsWatcher.newStatTable({[name] = tonumber(value)}) + break + end + end + end + return stat +end + +function WeightsWatcher.singleStatValueOnly(text, pattern, name) + local start, _, value = string.find(text, pattern) + if start then + return WeightsWatcher.newStatTable({[name] = tonumber(value)}) + end +end + +function WeightsWatcher.newStatTable(tbl) + return setmetatable(tbl or {}, ww_normalStatsMetatable) +end + Preprocess = { ["|r$"] = "", ["^|c[a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9]"] = "", @@ -164,88 +249,3 @@ SingleSlotLines = { "^trinket$", "^held in off%-hand$", } - -function WeightsWatcher.multipleStats(text) - local stat, stringTable - local stats = WeightsWatcher.newStatTable() - local origText = text - - start, _, value = string.find(text, " and %a[%a ]+ by (%d+)%.") - if start then - text = string.gsub(text, ".*[iI]ncrease[sd]? ", "") - text = string.gsub(text, " by (%d+)%..*", " %1") - text = string.gsub(text, ",? and ", " " .. value .. "\a") - text = string.gsub(text, ", ", " " .. value .. "\a") - else - text = string.gsub(string.gsub(text, ",? and ", "\a"), ", ", "\a") - end - stringTable = { strsplit("\a", text) } - for _, statString in ipairs(stringTable) do - stat = WeightsWatcher.singleStat(statString) - if stat then - stats = stats + stat - else - ww_unparsed_lines[origText] = true - end - end - -- Don't return an empty table - for _, _ in pairs (stats) do - return stats - end -end - -function WeightsWatcher.damageRange(textL, textR) - local speed - local stats = WeightsWatcher.newStatTable() - local start, _, added, minVal, maxVal, name = string.find(textL, "^(%+?)(%d+) %- (%d+) (%a* ?damage)$") - if start then - if added == "+" then - added = "added " - end - stats["minimum " .. added .. name] = tonumber(minVal) - stats["maximum " .. added .. name] = tonumber(maxVal) - end - if textR then - start, _, speed = string.find(textR, "^speed (%d+%.?%d*)$") - if start then - stats["speed"] = tonumber(speed) - end - end - -- Don't return an empty table - for _, _ in pairs (stats) do - return stats - end -end - -function WeightsWatcher.singleStat(text) - local stat - for _, regex in ipairs(SingleStatLines) do - if type(regex) == "table" then - local pattern, func = unpack(regex) - if string.find(text, pattern) then - stat = func(text, pattern) - if stat then - break - end - end - else - start, _, name, value = string.find(text, regex) - if start then - stat = WeightsWatcher.newStatTable({[name] = tonumber(value)}) - break - end - end - end - return stat -end - -function WeightsWatcher.singleStatValueOnly(text, pattern, name) - local start, _, value = string.find(text, pattern) - if start then - return WeightsWatcher.newStatTable({[name] = tonumber(value)}) - end -end - -function WeightsWatcher.newStatTable(tbl) - return setmetatable(tbl or {}, ww_normalStatsMetatable) -end -- 1.7.9.5