From 3b3a14ddfdff3d59b1c2abecd74cd3ddf91be431 Mon Sep 17 00:00:00 2001 From: Kevin Lyles Date: Sat, 19 Sep 2009 03:55:32 -0500 Subject: [PATCH] Split parsing into a separate function --- WeightsWatcher.lua | 98 +++++++++++++++++++++++++++------------------------- 1 file changed, 51 insertions(+), 47 deletions(-) diff --git a/WeightsWatcher.lua b/WeightsWatcher.lua index e694f43..58551af 100644 --- a/WeightsWatcher.lua +++ b/WeightsWatcher.lua @@ -66,9 +66,9 @@ function WeightsWatcher:OnDisable() end function WeightsWatcher:displayItemStats(tooltip, ttname) - local itemType, ttleft, ttright, origTextL, textL, textR, pattern, func, stat, start - -- Stats tables: normal stats, socket bonus, gem-given stats, current stat table - local normalStats, socketBonusStat, gemStats, statTable = {}, {}, {} + local itemType, stat, name, value + -- Stats: normal stats, socket bonus, gem-given stats + local normalStats, socketBonusStat, gemStats = {}, {}, {} local _, link = tooltip:GetItem() if link == nil then @@ -77,30 +77,51 @@ function WeightsWatcher:displayItemStats(tooltip, ttname) _, _, _, _, _, itemType, _, stackSize = GetItemInfo(link) if (IsEquippableItem(link) and itemType ~= "Container" and itemType ~= "Quiver") or (itemType == "Gem" and stackSize == 1) or (itemType == "Consumable") or (itemType == "Recipe") then - -- Skip item name and "currently equipped" - if getglobal(ttname .. "TextLeft1"):GetText() == CURRENTLY_EQUIPPED then - start = 3 - else - start = 2 + normalStats, socketBonusStat = WeightsWatcher:getItemStats(link, tooltip, ttname) + for _, stat in pairs(normalStats) do + tooltip:AddDoubleLine(unpack(stat)) end - for i = start, tooltip:NumLines() do - ttleft = getglobal(ttname .. "TextLeft" .. i) - ttright = getglobal(ttname .. "TextRight" .. i) - origTextL = ttleft:GetText() - textR = ttright:GetText() - textL = WeightsWatcher:preprocess(origTextL) - - -- Determine which table this line of stats should go in - -- TODO: add the other two types - start, _, value = string.find(textL, socketBonus) - if start then - textL = value - statTable = socketBonusStat - else - statTable = normalStats + if socketBonusStat then + tooltip:AddLine("Socket Bonus:") + name, value = unpack(socketBonusStat) + tooltip:AddDoubleLine(" " .. name, value) + end + if #(gemStats) > 0 then + tooltip:AddLine("Gem Stats:") + for _, stat in pairs(gemStats) do + name, value = unpack(stat) + tooltip:AddDoubleLine(" " .. name, value) end + end + tooltip:Show() + end +end + +function WeightsWatcher:getItemStats(link, tooltip, ttname) + local ttleft, ttright, origTextL, textL, textR, pattern, func, start + local normalStats, socketBonusStat = {} + + -- Skip item name and "currently equipped" + if getglobal(ttname .. "TextLeft1"):GetText() == CURRENTLY_EQUIPPED then + start = 3 + else + start = 2 + end + + for i = start, tooltip:NumLines() do + ttleft = getglobal(ttname .. "TextLeft" .. i) + ttright = getglobal(ttname .. "TextRight" .. i) + origTextL = ttleft:GetText() + textR = ttright:GetText() + textL = WeightsWatcher:preprocess(origTextL) - matched = false + matched = false + start, _, value = string.find(textL, socketBonus) + if start then + matched = true + socketBonusStat = WeightsWatcher:singleStat(value) + end + if not matched then for _, regex in pairs(IgnoredLines) do if string.find(textL, regex) then matched = true @@ -111,8 +132,8 @@ function WeightsWatcher:displayItemStats(tooltip, ttname) for _, regex in pairs(DoubleSlotLines) do if string.find(textL, regex) then matched = true - table.insert(statTable, {"Slot", textL}) - table.insert(statTable, {"Subslot", textR}) + table.insert(normalStats, {"Slot", textL}) + table.insert(normalStats, {"Subslot", textR}) break end end @@ -120,7 +141,7 @@ function WeightsWatcher:displayItemStats(tooltip, ttname) for _, regex in pairs(SingleSlotLines) do if string.find(textL, regex) then matched = true - table.insert(statTable, {"Slot", textL}) + table.insert(normalStats, {"Slot", textL}) break end end @@ -131,7 +152,7 @@ function WeightsWatcher:displayItemStats(tooltip, ttname) statsList = func(textL, textR) if statsList then for _, stat in pairs(statsList) do - table.insert(statTable, stat) + table.insert(normalStats, stat) end matched = true break @@ -141,7 +162,7 @@ function WeightsWatcher:displayItemStats(tooltip, ttname) if not matched then stat = WeightsWatcher:singleStat(textL) if stat then - table.insert(statTable, stat) + table.insert(normalStats, stat) else ttleft:SetText(origTextL .. " *") end @@ -150,25 +171,8 @@ function WeightsWatcher:displayItemStats(tooltip, ttname) end end end - for _, stat in pairs(normalStats) do - tooltip:AddDoubleLine(unpack(stat)) - end - if #(socketBonusStat) > 0 then - tooltip:AddLine("Socket Bonus:") - for _, stat in pairs(socketBonusStat) do - name, value = unpack(stat) - tooltip:AddDoubleLine(" " .. name, value) - end - end - if #(gemStats) > 0 then - tooltip:AddLine("Gem Stats:") - for _, stat in pairs(gemStats) do - name, value = unpack(stat) - tooltip:AddDoubleLine(" " .. name, value) - end - end - tooltip:Show() end + return normalStats, socketBonusStat end function WeightsWatcher:preprocess(text) -- 1.7.9.5