From c6ea179a6a7e66709e6af325b95b0b675e799664 Mon Sep 17 00:00:00 2001 From: Kevin Lyles Date: Sat, 26 Feb 2011 20:33:06 -0600 Subject: [PATCH] Added a function to combine similar strings Took the oportunity to move ww_deepTableCopy to the new utils.lua as well --- Upgrade.lua | 19 -------------- WeightsWatcher.toc | 1 + utils.lua | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+), 19 deletions(-) create mode 100644 utils.lua diff --git a/Upgrade.lua b/Upgrade.lua index cbf3529..3c9868d 100644 --- a/Upgrade.lua +++ b/Upgrade.lua @@ -1,24 +1,5 @@ local L = ww_localization --- TODO: move this to a util(s).lua? -function ww_deepTableCopy(object) - local lookup_table = {} - local function _copy(object) - if type(object) ~= "table" then - return object - elseif lookup_table[object] then - return lookup_table[object] - end - local new_table = {} - lookup_table[object] = new_table - for index, value in pairs(object) do - new_table[_copy(index)] = _copy(value) - end - return setmetatable(new_table, _copy(getmetatable(object))) - end - return _copy(object) -end - local function stringsToFuncs(strTable) local funcTable = {} diff --git a/WeightsWatcher.toc b/WeightsWatcher.toc index 124599e..30183a0 100644 --- a/WeightsWatcher.toc +++ b/WeightsWatcher.toc @@ -10,6 +10,7 @@ ## X-Compatible-With: 40000 ## X-License: GPLv2 +utils.lua WeightsWatcher.xml Regexps.lua diff --git a/utils.lua b/utils.lua new file mode 100644 index 0000000..37d3746 --- /dev/null +++ b/utils.lua @@ -0,0 +1,72 @@ +function ww_deepTableCopy(object) + local lookup_table = {} + local function _copy(object) + if type(object) ~= "table" then + return object + elseif lookup_table[object] then + return lookup_table[object] + end + local new_table = {} + lookup_table[object] = new_table + for index, value in pairs(object) do + new_table[_copy(index)] = _copy(value) + end + return setmetatable(new_table, _copy(getmetatable(object))) + end + return _copy(object) +end + +function ww_combineStrings(strings) + local startSame, endSame = "", "" + local stringPieces = {} + for i, string in ipairs(strings) do + local pieces = { strsplit(" ", string) } + for j, piece in ipairs(pieces) do + if not stringPieces[j] then + stringPieces[j] = {} + end + stringPieces[j][piece] = (stringPieces[j][piece] or 0) + 1 + end + end + local done = false + for i = 1, #(stringPieces) do + for piece, count in pairs(stringPieces[i]) do + if count == #(strings) then + startSame = (startSame == "" and "" or startSame .. " ") .. piece + else + done = true + break + end + end + if done then + break + end + end + done = false + for i = #(stringPieces), 1, -1 do + for piece, count in pairs(stringPieces[i]) do + if count == #(strings) then + endSame = piece .. (endSame == "" and "" or " " .. endSame) + else + done = true + break + end + end + if done then + break + end + end + + if startSame ~= "" then + startSame = startSame .. " " + end + + if endSame ~= "" then + endSame = " " .. endSame + end + + for i = 1, #(strings) do + strings[i] = strings[i]:sub(startSame:len() + 1, -endSame:len() - 1) + end + return startSame .. table.concat(strings, "/") .. endSame +end -- 1.7.9.5