bugfix250107.1
全站通知:

模块:Setwikitable

来自恋与深空WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

此模块的文档可以在模块: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