Mô đun:ParameterAliasNormalizer/sandbox
From Wikipedia, the free encyclopedia
local ModuleObj = {} local getArgs = require("Module:Arguments").getArgs
--[[ Hàm dùng để chuẩn bị dữ liệu --]] function ModuleObj.main(frame)
local moduleArgs = getArgs(frame, {frameOnly = true}) local callerArgs = getArgs(frame, {parentOnly = true}) return ModuleObj._main(frame, moduleArgs, callerArgs)
end
--[[ Chuẩn hóa tên của tham số về tên gốc --]] function ModuleObj._main(frame, moduleArgs, callerArgs)
-- Replace dấu dollar thành số nếu có replaceDollar(moduleArgs) -- Lowercase hóa key của bảng callerArgs callerArgs = lowerKey(callerArgs)
-- Hàm kiểm tra chuỗi có rỗng không
local function isEmpty(s) return s == nil or mw.text.trim(s) ==
end
-- Lấy tên bản mẫu gốc
local templateName = moduleArgs.__template
moduleArgs.__template = nil;
-- Lấy giá trị của đối số ánh xạ gán cho đối số gốc
for baseParam, aliasesStr in pairs(moduleArgs) do for alias in mw.text.gsplit(aliasesStr, '/', true) do alias = mw.ustring.lower(mw.text.trim(alias)) if callerArgs[alias] ~= nil then local value = callerArgs[alias] if isEmpty(value) == false then callerArgs[baseParam] = value end
callerArgs[alias] = nil end
end
end -- Tạo bản mẫu với bảng đối số callerArgs
local content = frame:expandTemplate{ title = templateName, args = callerArgs } return content end
--[[ Hàm lowercase hóa key của các pair trong một table --]] function lowerKey(table)
local lowercased = {} for key, value in pairs(table) do lowercased[mw.ustring.lower(key)] = value end return lowercased
end
--[[ Hàm thay dấu dollar thành số Ví dụ: "combatant${1,3} = bên $" sẽ sinh ra 3 đối số: "combatant1 = bên 1", "combatant2 = bên 2", "combatant3 = bên 3" --]] function replaceDollar(table) local temp = {}
-- Tìm các key có pattern phù hợp, sinh các cặp key-value tương ứng -- và xóa cặp key-value ban đầu for key, value in pairs(table) do if (mw.ustring.match(key, "${(%d+,%d+)}")) then local points = mw.text.split(mw.ustring.match(key, "${(%d+,%d+)}"), ",", true) for i = points[1], points[2], 1 do local k = mw.ustring.gsub(key, "(${%d+,%d+})", i) local v = mw.ustring.gsub(value, "%$", i) temp[k] = v end table[key] = nil end end
for key, value in pairs(temp) do table[key] = value end end
return ModuleObj