Fix feedback from slash command and zone search
James Whitehead II [01-24-11 - 09:20]
Fix feedback from slash command and zone search
The feedback being provided by these functions was not correct, and the
fuzzy search was not functioning properly. This should resolve those
issues, particularly with two-token zone names.
diff --git a/TomTom.lua b/TomTom.lua
index d9eb8ea..ffffe60 100755
--- a/TomTom.lua
+++ b/TomTom.lua
@@ -1108,23 +1108,23 @@ SlashCmdList["TOMTOM_WAY"] = function(msg)
-- Find a fuzzy match for the zone
local matches = {}
- zone = zone:lower():gsub("[%L]", "")
+ lzone = zone:lower():gsub("[%L%S%D]", "")
for name,mapId in pairs(nameToMapId) do
local lname = name:lower()
- if lname:match(zone) then
+ if lname:match(lzone) then
table.insert(matches, name)
end
end
if #matches > 5 then
- local msg = string.format(L["Found %d possible matches for zone %s. Please be more specific"], #matches, tokens[2])
+ local msg = string.format(L["Found %d possible matches for zone %s. Please be more specific"], #matches, zone)
ChatFrame1:AddMessage(msg)
return
elseif #matches > 1 then
table.sort(matches)
- ChatFrame1:AddMessage(string.format(L["Found multiple matches for zone '%s'. Did you mean: %s"], tokens[2], table.concat(matches, ", ")))
+ ChatFrame1:AddMessage(string.format(L["Found multiple matches for zone '%s'. Did you mean: %s"], zone, table.concat(matches, ", ")))
return
end
@@ -1142,10 +1142,12 @@ SlashCmdList["TOMTOM_WAY"] = function(msg)
elseif tokens[1] and not tonumber(tokens[1]) then
-- Find the first numeric token
local zoneEnd = 1
- for idx,token in ipairs(tokens) do
+ for idx = 1, #tokens do
+ local token = tokens[idx]
if tonumber(token) then
+ -- We've encountered a number, so the zone name must have
+ -- ended at the prior token
zoneEnd = idx - 1
- break
end
end
@@ -1157,21 +1159,26 @@ SlashCmdList["TOMTOM_WAY"] = function(msg)
-- Find a fuzzy match for the zone
local matches = {}
- zone = zone:lower():gsub("[^%l%s%d]", "")
+ lzone = zone:lower():gsub("[^%l%s%d]", "")
for name,mapId in pairs(nameToMapId) do
local lname = name:lower()
- if lname:match(zone) then
+ if lname:match(lzone) then
table.insert(matches, name)
end
end
- if #matches ~= 1 then
- local msg = string.format(L["Found %d possible matches for zone %s. Please be more specific"], #matches, tokens[1])
- ChatFrame1:AddMessage(msg)
+ if #matches > 5 then
+ local msg = string.format(L["Found %d possible matches for zone %s. Please be more specific"], #matches, zone)
+ ChatFrame1:AddMessage(msg)
+ return
+ elseif #matches > 1 then
+ local msg = string.format(L["Found multiple matches for zone '%s'. Did you mean: %s"], zone, table.concat(matches, ", "))
+ ChatFrame1:AddMessage(msg)
return
end
+ -- There was only one match, so proceed
local zoneName = matches[1]
local mapId = nameToMapId[zoneName]