From 72809b4f18c75f171efcd98ebc89d5f80b1eb2c8 Mon Sep 17 00:00:00 2001 From: Kevin Lyles Date: Fri, 27 Aug 2010 13:52:10 -0500 Subject: [PATCH] Rearranged patterns for efficiency --- Locales/enUS/patterns.lua | 239 ++++++++++++++++++++++----------------------- 1 file changed, 116 insertions(+), 123 deletions(-) diff --git a/Locales/enUS/patterns.lua b/Locales/enUS/patterns.lua index 4889004..3c674e7 100644 --- a/Locales/enUS/patterns.lua +++ b/Locales/enUS/patterns.lua @@ -184,6 +184,19 @@ ww_MultipleStatLines = { end, {"elixir", "enchant", "food", "useEffect"}, }, + {"^(%a+) and (%a+) spell power by (%d+)$", + function(text, pattern) + local start, _, stat1, stat2, value = string.find(text, pattern) + if start then + value = tonumber(value) + local stats = WeightsWatcher.newStatTable() + stats[stat1 .. " spell damage"] = value + stats[stat2 .. " spell damage"] = value + return stats + end + end, + {"enchant"}, + }, {"^(%a[%a ]+ rating )and (%a[%a ]+ rating )by( %d+)$", function(text, pattern, section) local start, _, stat1, stat2, value = string.find(text, pattern) @@ -214,72 +227,75 @@ ww_MultipleStatLines = { end, {"enchant"}, }, - {"^(%a+), (%a+),? and (%a+) spell power by (%d+)$", + {"^([+-]?%d+) health and mana every 5 seco?n?d?s?$", function(text, pattern) - local start, _, stat1, stat2, stat3, value = string.find(text, pattern) + local start, _, value = string.find(text, pattern) if start then value = tonumber(value) local stats = WeightsWatcher.newStatTable() - stats[stat1 .. " spell damage"] = value - stats[stat2 .. " spell damage"] = value - stats[stat3 .. " spell damage"] = value + stats["mp5"] = value + stats["hp5"] = value return stats end end, - {"elixir"}, + {"enchant"}, }, - {"^spell damage caused by (%a+), (%a+),? and (%a+) spells by up to (%d+)$", + {"^([+-]?%d+) mana and health every 5 seco?n?d?s?$", function(text, pattern) - local start, _, stat1, stat2, stat3, value = string.find(text, pattern) + local start, _, value = string.find(text, pattern) if start then value = tonumber(value) local stats = WeightsWatcher.newStatTable() - stats[stat1 .. " spell damage"] = value - stats[stat2 .. " spell damage"] = value - stats[stat3 .. " spell damage"] = value + stats["mp5"] = value + stats["hp5"] = value return stats end end, - {"elixir"}, + {"enchant"}, }, - {"^(%a+) and (%a+) spell power by (%d+)$", + {"^(%a+), (%a+),? and (%a+) spell power by (%d+)$", function(text, pattern) - local start, _, stat1, stat2, value = string.find(text, pattern) + local start, _, stat1, stat2, stat3, value = string.find(text, pattern) if start then value = tonumber(value) local stats = WeightsWatcher.newStatTable() stats[stat1 .. " spell damage"] = value stats[stat2 .. " spell damage"] = value + stats[stat3 .. " spell damage"] = value return stats end end, - {"enchant"}, + {"elixir"}, }, - {"^([+-]?%d+) mana and health every 5 seco?n?d?s?$", + {"^spell damage caused by (%a+), (%a+),? and (%a+) spells by up to (%d+)$", function(text, pattern) - local start, _, value = string.find(text, pattern) + local start, _, stat1, stat2, stat3, value = string.find(text, pattern) if start then value = tonumber(value) local stats = WeightsWatcher.newStatTable() - stats["mp5"] = value - stats["hp5"] = value + stats[stat1 .. " spell damage"] = value + stats[stat2 .. " spell damage"] = value + stats[stat3 .. " spell damage"] = value return stats end end, - {"enchant"}, + {"elixir"}, }, - {"^([+-]?%d+) health and mana every 5 seco?n?d?s?$", + {"^resistance to (%a+), (%a+), (%a+), (%a+),? and (%a+) spells by (%d+)$", function(text, pattern) - local start, _, value = string.find(text, pattern) + local start, _, school1, school2, school3, school4, school5, value = string.find(text, pattern) if start then value = tonumber(value) local stats = WeightsWatcher.newStatTable() - stats["mp5"] = value - stats["hp5"] = value + stats[school1 .. " resistance"] = value + stats[school2 .. " resistance"] = value + stats[school3 .. " resistance"] = value + stats[school4 .. " resistance"] = value + stats[school5 .. " resistance"] = value return stats end end, - {"enchant"}, + {"cooldownUseEffect"}, }, {"^(%a+), (%a+), and (%a+) by (%d+)$", function(text, pattern) @@ -308,34 +324,58 @@ ww_MultipleStatLines = { end, {"equipEffect"}, }, - {"^resistance to (%a+), (%a+), (%a+), (%a+),? and (%a+) spells by (%d+)$", - function(text, pattern) - local start, _, school1, school2, school3, school4, school5, value = string.find(text, pattern) - if start then - value = tonumber(value) - local stats = WeightsWatcher.newStatTable() - stats[school1 .. " resistance"] = value - stats[school2 .. " resistance"] = value - stats[school3 .. " resistance"] = value - stats[school4 .. " resistance"] = value - stats[school5 .. " resistance"] = value - return stats - end - end, - {"cooldownUseEffect"}, - }, } ww_SingleStatLines = { + {"^([+-]?%d+) (%a[%a ]+ rating)$", WeightsWatcher.statNumFirst, {"cooldownUseEffect", "elixir", "enchant", "equipEffect", "food", "generic", "socketBonus", "useEffect"}}, {"^([+-]?%d+) (armor)$", WeightsWatcher.statNumFirst, {"cooldownUseEffect", "elixir", "enchant", "equipEffect", "generic", "useEffect"}}, - {"^([+-]?%d+) (agility)$", WeightsWatcher.statNumFirst, {"cooldownUseEffect", "elixir", "enchant", "food", "generic", "socketBonus", "useEffect"}}, - {"^([+-]?%d+) (intellect)$", WeightsWatcher.statNumFirst, {"elixir", "enchant", "food", "generic", "socketBonus", "useEffect"}}, - {"^([+-]?%d+) (spirit)$", WeightsWatcher.statNumFirst, {"cooldownUseEffect", "elixir", "enchant", "equipEffect", "food", "generic", "socketBonus", "stackingEquipEffect", "useEffect"}}, {"^([+-]?%d+) (stamina)$", WeightsWatcher.statNumFirst, {"elixir", "enchant", "food", "generic", "socketBonus", "useEffect"}}, + {"^([+-]?%d+) (intellect)$", WeightsWatcher.statNumFirst, {"elixir", "enchant", "food", "generic", "socketBonus", "useEffect"}}, + {"^([+-]?%d+) (spell power)$", WeightsWatcher.statNumFirst, {"cooldownUseEffect", "elixir", "enchant", "equipEffect", "food", "generic", "socketBonus", "stackingEquipEffect", "useEffect"}}, + {"^([+-]?%d+) (agility)$", WeightsWatcher.statNumFirst, {"cooldownUseEffect", "elixir", "enchant", "food", "generic", "socketBonus", "useEffect"}}, {"^([+-]?%d+) (strength)$", WeightsWatcher.statNumFirst, {"cooldownUseEffect", "elixir", "enchant", "food", "generic", "socketBonus", "useEffect"}}, + {"^%(?(%d+%.?%d*) damage per second%)?$", + function(text, pattern) + return WeightsWatcher.singleStatValueOnly(text, pattern, "melee dps") + end, + {"generic"}, + }, + {"^([+-]?%d+) (attack power)$", WeightsWatcher.statNumFirst, {"cooldownUseEffect", "elixir", "enchant", "equipEffect", "food", "generic", "socketBonus", "stackingEquipEffect", "useEffect"}}, + {"^([+-]?%d+) (spirit)$", WeightsWatcher.statNumFirst, {"cooldownUseEffect", "elixir", "enchant", "equipEffect", "food", "generic", "socketBonus", "stackingEquipEffect", "useEffect"}}, + {"^([+-]?%d+) mana [ep]v?ery? 5 seco?n?d?s?%.?$", + function(text, pattern) + return WeightsWatcher.singleStatValueOnly(text, pattern, "mp5") + end, + {"cooldownUseEffect", "elixir", "enchant", "equipEffect", "food", "generic", "socketBonus", "stackingEquipEffect"}, + }, + -- druid only + {"^increases attack power by (%d+) in cat, bear, dire bear, and moonkin forms only%.$", + function(text, pattern) + return WeightsWatcher.singleStatValueOnly(text, pattern, "feral attack power") + end, + {"generic"}, + }, + {"^([+-]?%d+) (%a+ resistances?)$", WeightsWatcher.statNumFirst, {"cooldownUseEffect", "elixir", "enchant", "equipEffect", "food", "generic", "useEffect"}}, + {"^([+-]?%d+) (block value)$", WeightsWatcher.statNumFirst, {"cooldownUseEffect", "enchant", "equipEffect", "generic", "socketBonus"}}, + -- random suffix enchants + {"^([+-]?%d+) (%a+ spell damage)$", WeightsWatcher.statNumFirst, {"cooldownUseEffect", "generic"}}, + {"^([+-]?%d+) (spell penetration)$", WeightsWatcher.statNumFirst, {"enchant", "equipEffect", "generic"}}, + {"^([+-]?%d+) health [ep]v?ery? 5 seco?n?d?s?%.?$", + function(text, pattern) + return WeightsWatcher.singleStatValueOnly(text, pattern, "hp5") + end, + {"cooldownUseEffect", "elixir", "equipEffect", "food", "generic", "useEffect"}, + }, + {"^minor run speed increase$", + function(text, pattern) + return WeightsWatcher.newStatTable({["minor run speed"] = 1}) + end, + {"enchant", "equipEffect", "generic"}, + }, + {"^([+-]?%d+) (ranged attack power)$", WeightsWatcher.statNumFirst, {"equipEffect", "generic"}}, {"^([+-]?%d+) (health)$", WeightsWatcher.statNumFirst, {"cooldownUseEffect", "elixir", "enchant", "useEffect"}}, - {"^([+-]?%d+) (mana)$", WeightsWatcher.statNumFirst, {"enchant"}}, - + {"^(fishing) by ([+-]?%d+)$", WeightsWatcher.statNameFirst, {"enchant", "fishing"}}, + {"^([+-]?%d+) (all stats)$", WeightsWatcher.statNumFirst, {"cooldownUseEffect", "elixir", "enchant", "food", "generic", "useEffect"}}, {"^(%a+ spell )power by ([+-]?%d+)$", function(text, pattern) local start, _, name, value = string.find(text, pattern) @@ -345,11 +385,12 @@ ww_SingleStatLines = { end, {"elixir", "enchant"}, }, - {"^mount speed by ([+-]?%d+)%%$", + {"^([+-]?%d+) (mana)$", WeightsWatcher.statNumFirst, {"enchant"}}, + {"^([+-]?%d+) ranged damage$", function(text, pattern) - return WeightsWatcher.singleStatValueOnly(text, pattern, "mount speed (percent)") + return WeightsWatcher.singleStatValueOnly(text, pattern, "average ranged weapon damage") + WeightsWatcher.singleStatValueOnly(text, pattern, "maximum ranged weapon damage") end, - {"enchant", "equipEffect"}, + {"enchant"}, }, {"^effective stealth level by (%d+)$", function(text, pattern) @@ -357,28 +398,6 @@ ww_SingleStatLines = { end, {"enchant", "equipEffect"}, }, - {"^threat caused by (%d+)%%$", - function(text, pattern) - local start, _, value = string.find(text, pattern) - if start then - return WeightsWatcher.newStatTable({["threat (percent)"] = value}) - end - end, - {"enchant"}, - }, - {"^prismatic socket$", - function(text, pattern) - return WeightsWatcher.newStatTable({[text] = 1}) - end, - {"enchant"}, - }, - - -- profession skills - {"^(fishing) by ([+-]?%d+)$", WeightsWatcher.statNameFirst, {"enchant", "fishing"}}, - {"^(herbalism) by ([+-]?%d+)$", WeightsWatcher.statNameFirst, {"enchant", "equipEffect"}}, - {"^(mining) by ([+-]?%d+)$", WeightsWatcher.statNameFirst, {"enchant", "equipEffect"}}, - {"^(skinning) by ([+-]?%d+)$", WeightsWatcher.statNameFirst, {"enchant", "equipEffect"}}, - {"^decreases? (%a[%a ]+) by (%d+)$", function(text, pattern, section) local start, _, name, value = string.find(text, pattern) @@ -391,50 +410,27 @@ ww_SingleStatLines = { end, {"elixir", "food", "useEffect"}, }, - -- Tends to eat other stats if not last - -- TODO: split this into a separate function instead of recursing? - {"^(%a+ ?%a+ ?%a+ ?%a+) by ([+-]?%d+%%?)$", - function(text, pattern, section) - local start, _, name, value = string.find(text, pattern) - if start then - local stats = parseStats(value .. " " .. name, section) - if stats then - return stats.stats - end - end - end, - {"cooldownUseEffect", "elixir", "enchant", "equipEffect", "food", "useEffect"}, - }, - - {"^%(?(%d+%.?%d*) damage per second%)?$", - function(text, pattern) - return WeightsWatcher.singleStatValueOnly(text, pattern, "melee dps") - end, - {"generic"}, - }, - {"^([+-]?%d+) mana [ep]v?ery? 5 seco?n?d?s?%.?$", + {"^mount speed by ([+-]?%d+)%%$", function(text, pattern) - return WeightsWatcher.singleStatValueOnly(text, pattern, "mp5") + return WeightsWatcher.singleStatValueOnly(text, pattern, "mount speed (percent)") end, - {"cooldownUseEffect", "elixir", "enchant", "equipEffect", "food", "generic", "socketBonus", "stackingEquipEffect"}, + {"enchant", "equipEffect"}, }, - {"^([+-]?%d+) (%a[%a ]+ rating)$", WeightsWatcher.statNumFirst, {"cooldownUseEffect", "elixir", "enchant", "equipEffect", "food", "generic", "socketBonus", "useEffect"}}, - {"^([+-]?%d+) (attack power)$", WeightsWatcher.statNumFirst, {"cooldownUseEffect", "elixir", "enchant", "equipEffect", "food", "generic", "socketBonus", "stackingEquipEffect", "useEffect"}}, - {"^([+-]?%d+) (spell power)$", WeightsWatcher.statNumFirst, {"cooldownUseEffect", "elixir", "enchant", "equipEffect", "food", "generic", "socketBonus", "stackingEquipEffect", "useEffect"}}, - {"^([+-]?%d+) (%a+ resistances?)$", WeightsWatcher.statNumFirst, {"cooldownUseEffect", "elixir", "enchant", "equipEffect", "food", "generic", "useEffect"}}, - {"^([+-]?%d+) (block value)$", WeightsWatcher.statNumFirst, {"cooldownUseEffect", "enchant", "equipEffect", "generic", "socketBonus"}}, - {"^([+-]?%d+) health [ep]v?ery? 5 seco?n?d?s?%.?$", + {"^(herbalism) by ([+-]?%d+)$", WeightsWatcher.statNameFirst, {"enchant", "equipEffect"}}, + {"^(mining) by ([+-]?%d+)$", WeightsWatcher.statNameFirst, {"enchant", "equipEffect"}}, + {"^(skinning) by ([+-]?%d+)$", WeightsWatcher.statNameFirst, {"enchant", "equipEffect"}}, + {"^threat caused by (%d+)%%$", function(text, pattern) - return WeightsWatcher.singleStatValueOnly(text, pattern, "hp5") + local start, _, value = string.find(text, pattern) + if start then + return WeightsWatcher.newStatTable({["threat (percent)"] = value}) + end end, - {"cooldownUseEffect", "elixir", "equipEffect", "food", "generic", "useEffect"}, + {"enchant"}, }, - {"^([+-]?%d+) (spell penetration)$", WeightsWatcher.statNumFirst, {"enchant", "equipEffect", "generic"}}, - {"^([+-]?%d+) (ranged attack power)$", WeightsWatcher.statNumFirst, {"equipEffect", "generic"}}, - {"^([+-]?%d+) (all stats)$", WeightsWatcher.statNumFirst, {"cooldownUseEffect", "elixir", "enchant", "food", "generic", "useEffect"}}, - {"^([+-]?%d+) ranged damage$", + {"^prismatic socket$", function(text, pattern) - return WeightsWatcher.singleStatValueOnly(text, pattern, "average ranged weapon damage") + WeightsWatcher.singleStatValueOnly(text, pattern, "maximum ranged weapon damage") + return WeightsWatcher.newStatTable({[text] = 1}) end, {"enchant"}, }, @@ -449,18 +445,21 @@ ww_SingleStatLines = { {"equipEffect", "generic"}, }, - -- random suffix enchants - {"^([+-]?%d+) (%a+ spell damage)$", WeightsWatcher.statNumFirst, {"cooldownUseEffect", "generic"}}, - - -- druid only - {"^increases attack power by (%d+) in cat, bear, dire bear, and moonkin forms only%.$", - function(text, pattern) - return WeightsWatcher.singleStatValueOnly(text, pattern, "feral attack power") + -- Tends to eat other stats if not last + {"^(%a+ ?%a+ ?%a+ ?%a+) by ([+-]?%d+%%?)$", + function(text, pattern, section) + local start, _, name, value = string.find(text, pattern) + if start then + local stats = WeightsWatcher.parseStats(value .. " " .. name, section) + if stats then + return stats.stats + end + end end, - {"generic"}, + {"cooldownUseEffect", "elixir", "enchant", "equipEffect", "food", "useEffect"}, }, - -- meta effects + -- meta/enchant effects {"^(%d+)%% increased armor value from items$", function(text, pattern) return WeightsWatcher.singleStatValueOnly(text, pattern, "armor from items (percent)") @@ -548,12 +547,6 @@ ww_SingleStatLines = { end, {"enchant"}, }, - {"^minor run speed increase$", - function(text, pattern) - return WeightsWatcher.newStatTable({["minor run speed"] = 1}) - end, - {"enchant", "equipEffect", "generic"}, - }, {"^sometimes heal on your crits$", function(text, pattern) return WeightsWatcher.newStatTable({[text] = 1}) -- 1.7.9.5