915
edits
(Fix name clash between parameters and module name) |
(Issue finally found...) |
||
(9 intermediate revisions by 2 users not shown) | |||
Line 50: | Line 50: | ||
end | end | ||
-- Function to sort a dictionary-like structure where items are added like tbl['key'] = value | |||
-- We need to turn this structure into a table first, in order to sort it. | |||
function p.sortDictionary(dict, comparer) | |||
local sortedTable = {} | |||
for k, v in pairs(dict) do | |||
table.insert(sortedTable, {key = k, value = v}) | |||
end | |||
table.sort(sortedTable, comparer) | |||
return sortedTable | |||
end | |||
--General purpose function for going through a table after sorting based on a custom sort order | --General purpose function for going through a table after sorting based on a custom sort order | ||
Line 76: | Line 89: | ||
end | end | ||
-- | -- Takes an input string and returns the same string with title case-like | ||
-- | -- formatting (that is, the first letter of every word becomes uppercase, | ||
-- while the remainder becomes lowercase) | |||
-- Examples: | |||
-- titleCase('ALL CAPS') = 'All Caps' | |||
-- titleCase('all lowercase') = 'All Lowercase' | |||
-- titleCase('A MiXTUre') = 'A Mixture' | |||
-- Note that non-alphanumeric characters are treated as a word boundary, so: | |||
-- titleCase('a!b(c)d') = 'A!B(C)D' (not 'A!b(c)d') | |||
--Originally snagged this from Module:VoidByReward written by User:NoBrainz | --Originally snagged this from Module:VoidByReward written by User:NoBrainz | ||
function p.titleCase(head, tail) | function p.titleCase(head, tail) | ||
Line 148: | Line 168: | ||
end | end | ||
--Splits a string based on a sent in separating character | --- Splits a string based on a sent in separating character | ||
--For example calling splitString ("Lith V1 Relic", " ") would return {"Lith", "V1", "Relic"} | --- For example calling splitString ("Lith V1 Relic", " ") would return {"Lith", "V1", "Relic"} | ||
function p.splitString(inputstr, sep) | -- @param inputstr (string) The input to separate. | ||
-- @param sep (string/char) The separation character. | |||
-- @param trim (boolean) TRUE to trim the leading/trailing whitespaces | |||
function p.splitString(inputstr, sep, trim) | |||
if sep == nil then | if sep == nil then | ||
sep = "%s" | sep = "%s" | ||
Line 156: | Line 179: | ||
local t = {} | local t = {} | ||
for str in string.gmatch(inputstr, "([^"..sep.."]+)") do | for str in string.gmatch(inputstr, "([^"..sep.."]+)") do | ||
if trim == true then | |||
str = str:gsub("^%s*(.-)%s*$", "%1") | |||
end | |||
table.insert(t, str) | table.insert(t, str) | ||
end | end | ||
Line 413: | Line 439: | ||
end | end | ||
return namespace, localID | return namespace, localID | ||
end | |||
-- Compares two strings, optionally ignoring case | |||
function p.compareString(left, right, ignoreCase) | |||
-- Both are nil (equal) | |||
if left == nil and right == nil then return true end | |||
-- Only one is nil (not equal) | |||
if left == nil or right == nil then return false end | |||
-- Convert inputs to strings, just in case | |||
left = tostring(left) | |||
right = tostring(right) | |||
if ignoreCase == true then | |||
return left:upper() == right:upper() | |||
else | |||
return left == right | |||
end | |||
end | |||
function p._replace(str, searchTerm, replacementTerm) | |||
if str == nil then | |||
return str | |||
end | |||
local escapedSearch = searchTerm:gsub("[%^%$%(%)%%%.%[%]%*%+%-%?]", "%%%1") | |||
local result = str:gsub(escapedSearch, replacementTerm) | |||
return result | |||
end | |||
function p.replace(frame) | |||
local args = frame:getParent().args | |||
return p._replace( | |||
frame.args[1], | |||
frame.args[2] or '', | |||
frame.args[3] or '') | |||
end | end | ||
return p | return p |
edits