Module:Rotaeno Data:修订间差异
(// Edit via Wikiplus) |
小 (简化代码) |
||
(未显示4个用户的13个中间版本) | |||
第1行: | 第1行: | ||
local lang = mw.language.getContentLanguage() | |||
local p = {} | local p = {} | ||
function | local function songClosure(info) | ||
-- 返回一个函数用于查询内容。 | |||
-- | |||
return function(key) | return function(key) | ||
-- 如果info无值即无法在songlist中查找到索引值,则返回nil。 | |||
if info == nil then return nil end | |||
if info == nil | |||
-- 此处定义一个switch table以达到switch函数的效用。如果需要查找的参数在switch中不存在,返回nil。 | -- 此处定义一个switch table以达到switch函数的效用。如果需要查找的参数在switch中不存在,返回nil。 | ||
local switch = { | local switch = { | ||
["id"] = function() return info["id"] end, | ["id"] = function() return info["id"] end, | ||
["title"] = function() return info['title_localized']['default'] end, | ["title"] = function() | ||
["title-en"] = function() return info['title_localized']['en'] end, | return info['title_localized']['default'] | ||
["title-zh-Hans"] = function() return info['title_localized']['zh-Hans'] end, | end, | ||
["title-zh-Hant"] = function() return info['title_localized']['zh-Hant'] end, | ["title-en"] = function() | ||
["title-ja"] = function() return info['title_localized']['ja'] end, | return info['title_localized']['en'] | ||
["title-ko"] = function() return info['title_localized']['ko'] end, | end, | ||
["title-list"] = function() | ["title-zh-Hans"] = function() | ||
local list = | return info['title_localized']['zh-Hans'] | ||
for i,k in | end, | ||
["title-zh-Hant"] = function() | |||
if k ~= nil and k ~= info['title_localized']['default'] | return info['title_localized']['zh-Hant'] | ||
end, | |||
list | ["title-ja"] = function() | ||
return info['title_localized']['ja'] | |||
end, | |||
["title-ko"] = function() | |||
return info['title_localized']['ko'] | |||
end, | |||
["title-list"] = function() | |||
local list = {} | |||
for i, k in pairs(info['title_localized']) do | |||
if k ~= nil and k ~= "" and k ~= info['title_localized']['default'] and | |||
k ~= "en" then | |||
table.insert(list, i .. ":" .. "-{" .. k .. "}-") | |||
end | end | ||
end | end | ||
return list | |||
if list[1] then | |||
return table.concat(list, " | ") | |||
else | |||
return nil | |||
end | |||
end, | end, | ||
["artist"] = function() return info["artist"] end, | ["artist"] = function() return info["artist"] end, | ||
-- Rotaeno谱师 | |||
-- Rotaeno谱师 在v2.0.0后可能不同难度不同 , 这里为了兼容性保留 | |||
["ChartDesigner"] = function() | ["ChartDesigner"] = function() | ||
return info["difficulties"][1]['chartDesigner'] | return info["difficulties"][1]['chartDesigner'] | ||
end, | end, | ||
["ChartDesigner1"] = function() | |||
return info["difficulties"][1]['chartDesigner'] | |||
end, | |||
["ChartDesigner2"] = function() | |||
return info["difficulties"][2]['chartDesigner'] | |||
end, | |||
["ChartDesigner3"] = function() | |||
return info["difficulties"][3]['chartDesigner'] | |||
end, | |||
["ChartDesigner4"] = function() | |||
return info["difficulties"][4]['chartDesigner'] | |||
end, | |||
["ChartDesignerA"] = function() | |||
if info["difficulties"][5] then | |||
return info["difficulties"][5]['chartDesigner'] | |||
end | |||
end, | |||
-- Rotaeno画师目前都一样,所以随便找一个读取 | |||
["JacketDesigner"] = function() | ["JacketDesigner"] = function() | ||
return info["difficulties"][1]['jacketDesigner'] | return info["difficulties"][1]['jacketDesigner'] | ||
end, | end, | ||
["source"] = function() | ["source"] = function() | ||
if info['source_localized'] | if info['source_localized'] then | ||
return info['source_localized']['default'] | |||
return info['source_localized']['default'] | |||
end | end | ||
end, | end, | ||
["rating1"] = function() | ["rating1"] = function() | ||
return info["difficulties"][1][' | return info["difficulties"][1]['ratingReal'] | ||
end, | end, | ||
["rating2"] = function() | ["rating2"] = function() | ||
return info["difficulties"][2][' | return info["difficulties"][2]['ratingReal'] | ||
end, | end, | ||
["rating3"] = function() | ["rating3"] = function() | ||
return info["difficulties"][3][' | return info["difficulties"][3]['ratingReal'] | ||
end, | end, | ||
["rating4"] = function() | ["rating4"] = function() | ||
return info["difficulties"][4][' | return info["difficulties"][4]['ratingReal'] | ||
end, | end, | ||
["ratingA"] = function() | |||
if info["difficulties"][5] then | |||
return info["difficulties"][5]['ratingReal'] | |||
end | |||
end | |||
} | } | ||
if | if info["difficulties"] == nil or info["difficulties"][1] == nil then | ||
mw.log("尝试检 索 参数:" .. key) | |||
mw.log( | mw.log("Songlist.json出现数据缺漏 , 终止全部数据检索。 请 使用参数填充 。") | ||
return nil | return nil | ||
end | end | ||
if switch[key] == nil then | |||
mw.log('未定义的索引类型,请检查是否拼写错误。') | |||
return nil | |||
if switch[key] == nil | |||
mw.log( '未定义的索引类型,请检查是否拼写错误。' ) | |||
return nil | |||
end | end | ||
return switch[key]() | return switch[key]() | ||
end | end | ||
end | end | ||
-- 传入JSON文件,索引值和索引值类型(索引是ID还是曲名)。分析JSON文件以 获得 曲目信息,返回的是 一个查 找单一曲目中 信息的函数 。仅获取单一 曲目 的信息。table中的索引名请查看 下 方switch表 。 | |||
-- Songlist是以数字为索引值,因此遍历Songlist , 直到发现需要 找 的 曲目 ,将信息存入info变量中。 | |||
-- 如果模式是ID则遍历songlist直至发现id值为 索引值 为止,并获取内容。曲名同理。 | |||
local function findFirstByTitle(src, title) | |||
title = lang:lc(title) | |||
for _, k in ipairs(src) do | |||
if lang:lc(k['title_localized']['default']) == title then return k end | |||
end | end | ||
end | end | ||
local | local function findFirstById(src, id) | ||
for _, k in ipairs(src) do | |||
function | if k['id'] == id then return k end | ||
end | end | ||
end | end | ||
function p.singleSongInformation(index, indexTyped) | |||
-- 传入曲名或ID,获得一个查阅信息的函数。 直接 在下一个模块使用。 | |||
function p. | -- index:曲目的索引字符串,和typed一致 indexTyped:id或name,查找曲目的索引值类型 | ||
-- | local findFirst = indexTyped == "id" and findFirstById or findFirstByTitle | ||
-- | local append = findFirst( | ||
mw.text.jsonDecode(mw.title.new('Songlist append.json', 'Template'):getContent())['songs'], | |||
end | index) | ||
if append ~= nil then return songClosure(append) end | |||
append = findFirst( | |||
mw.text.jsonDecode(mw.title.new('Songlist.json', 'Template'):getContent())['songs'], | |||
index) | |||
if append == nil then mw.log('无法在Songlist中发现目标,索引值为:' .. index) end | |||
return | return songClosure(append) | ||
end | end | ||
return p | return p |
2024年7月29日 (一) 14:14的版本
可在Module:Rotaeno Data/doc创建此模块的帮助文档
local lang = mw.language.getContentLanguage() local p = {} local function songClosure(info) -- 返回一个函数用于查询内容。 return function(key) -- 如果info无值即无法在songlist中查找到索引值,则返回nil。 if info == nil then return nil end -- 此处定义一个switch table以达到switch函数的效用。如果需要查找的参数在switch中不存在,返回nil。 local switch = { ["id"] = function() return info["id"] end, ["title"] = function() return info['title_localized']['default'] end, ["title-en"] = function() return info['title_localized']['en'] end, ["title-zh-Hans"] = function() return info['title_localized']['zh-Hans'] end, ["title-zh-Hant"] = function() return info['title_localized']['zh-Hant'] end, ["title-ja"] = function() return info['title_localized']['ja'] end, ["title-ko"] = function() return info['title_localized']['ko'] end, ["title-list"] = function() local list = {} for i, k in pairs(info['title_localized']) do if k ~= nil and k ~= "" and k ~= info['title_localized']['default'] and k ~= "en" then table.insert(list, i .. ":" .. "-{" .. k .. "}-") end end if list[1] then return table.concat(list, " | ") else return nil end end, ["artist"] = function() return info["artist"] end, -- Rotaeno谱师在v2.0.0后可能不同难度不同,这里为了兼容性保留 ["ChartDesigner"] = function() return info["difficulties"][1]['chartDesigner'] end, ["ChartDesigner1"] = function() return info["difficulties"][1]['chartDesigner'] end, ["ChartDesigner2"] = function() return info["difficulties"][2]['chartDesigner'] end, ["ChartDesigner3"] = function() return info["difficulties"][3]['chartDesigner'] end, ["ChartDesigner4"] = function() return info["difficulties"][4]['chartDesigner'] end, ["ChartDesignerA"] = function() if info["difficulties"][5] then return info["difficulties"][5]['chartDesigner'] end end, -- Rotaeno画师目前都一样,所以随便找一个读取 ["JacketDesigner"] = function() return info["difficulties"][1]['jacketDesigner'] end, ["source"] = function() if info['source_localized'] then return info['source_localized']['default'] end end, ["rating1"] = function() return info["difficulties"][1]['ratingReal'] end, ["rating2"] = function() return info["difficulties"][2]['ratingReal'] end, ["rating3"] = function() return info["difficulties"][3]['ratingReal'] end, ["rating4"] = function() return info["difficulties"][4]['ratingReal'] end, ["ratingA"] = function() if info["difficulties"][5] then return info["difficulties"][5]['ratingReal'] end end } if info["difficulties"] == nil or info["difficulties"][1] == nil then mw.log("尝试检索参数:" .. key) mw.log("Songlist.json出现数据缺漏,终止全部数据检索。请使用参数填充。") return nil end if switch[key] == nil then mw.log('未定义的索引类型,请检查是否拼写错误。') return nil end return switch[key]() end end -- 传入JSON文件,索引值和索引值类型(索引是ID还是曲名)。分析JSON文件以获得曲目信息,返回的是一个查找单一曲目中信息的函数。仅获取单一曲目的信息。table中的索引名请查看下方switch表。 -- Songlist是以数字为索引值,因此遍历Songlist,直到发现需要找的曲目,将信息存入info变量中。 -- 如果模式是ID则遍历songlist直至发现id值为索引值为止,并获取内容。曲名同理。 local function findFirstByTitle(src, title) title = lang:lc(title) for _, k in ipairs(src) do if lang:lc(k['title_localized']['default']) == title then return k end end end local function findFirstById(src, id) for _, k in ipairs(src) do if k['id'] == id then return k end end end function p.singleSongInformation(index, indexTyped) -- 传入曲名或ID,获得一个查阅信息的函数。直接在下一个模块使用。 -- index:曲目的索引字符串,和typed一致 indexTyped:id或name,查找曲目的索引值类型 local findFirst = indexTyped == "id" and findFirstById or findFirstByTitle local append = findFirst( mw.text.jsonDecode(mw.title.new('Songlist append.json', 'Template'):getContent())['songs'], index) if append ~= nil then return songClosure(append) end append = findFirst( mw.text.jsonDecode(mw.title.new('Songlist.json', 'Template'):getContent())['songs'], index) if append == nil then mw.log('无法在Songlist中发现目标,索引值为:' .. index) end return songClosure(append) end return p