Mô đun:ParameterAliasNormalizer/sandbox
Đây là trang chỗ thử mô đun cho Mô đun:ParameterAliasNormalizer (khác). |
Tài liệu mô đun[tạo]
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
Wiki - Keonhacai copa chuyên cung cấp kiến thức thể thao, keonhacai tỷ lệ kèo, bóng đá, khoa học, kiến thức hằng ngày được chúng tôi cập nhật mỗi ngày mà bạn có thể tìm kiếm tại đây có nguồn bài viết: https://vi.wikipedia.org/wiki/M%C3%B4_%C4%91un:ParameterAliasNormalizer/sandbox