全站通知:
模块:Setwikitable
刷
历
编
跳到导航
跳到搜索
此模块的文档可以在模块:Setwikitable/doc创建
local getArgs = require('Module:Arguments').getArgs
local p = {}
-- 将表格数据转换为JSON格式的对象
local function tableToJson(args)
local result = {}
for i = 2, #args do
local row = args[i]
local key = row:match('^%s*||([^|]+)')
if key then
result[key] = row
end
end
return result
end
-- 生成SMW的subobject语法
local function generateSubobjects(data)
local result = {}
for key, properties in pairs(data) do
local subobj = {'{{#subobject:' .. key}
for prop, value in pairs(properties) do
table.insert(subobj, string.format('| %s = %s', prop, value))
end
table.insert(subobj, '}}')
table.insert(result, table.concat(subobj, '\n'))
end
return table.concat(result, '\n')
end
function p.main(frame)
local args = getArgs(frame, {
removeBlanks = false,
trim = false
})
return p._main(args)
end
function p._main(args)
-- 显示wikitable
local buffer = {'{|'}
for k, v in pairs(args) do
if type(k) ~= 'number' then
table.insert(buffer, string.format(' %s=%s', k, v))
end
end
table.insert(buffer, '\n')
for _, v in ipairs(args) do
table.insert(buffer, '|')
table.insert(buffer, v)
end
table.insert(buffer, '\n|}')
-- 转换数据并生成SMW语法
local jsonData = tableToJson(args)
local smwData = generateSubobjects(jsonData)
-- 返回表格、SMW数据和JSON数据
local jsonStr = mw.text.jsonEncode(jsonData)
local jsonDiv = string.format('<div id="wikitable-json" >%s</div>', jsonStr)
return table.concat(buffer) .. '\n' .. smwData .. '\n' .. jsonDiv
end
return p