Module:ArtistSong:修订间差异
Economy666(讨论 | 贡献) 小 (byd song) |
Economy666(讨论 | 贡献) (排序) |
||
第83行: | 第83行: | ||
end | end | ||
-- 排序(ChatGPT) | |||
local function customSort(a, b) | |||
-- 检查字符串的第一个字符是否为字母 | |||
local function isLetter(char) | |||
return char:match("%a") ~= nil | |||
end | |||
function p.main() | -- 获取字符串的第一个字符 | ||
local a_first = a:sub(1, 1) | |||
local b_first = b:sub(1, 1) | |||
-- 如果 a 是字母开头,b 不是,则 a 排在前面 | |||
if isLetter(a_first) and not isLetter(b_first) then | |||
return true | |||
-- 如果 b 是字母开头,a 不是,则 b 排在前面 | |||
elseif isLetter(b_first) and not isLetter(a_first) then | |||
return false | |||
-- 否则,按字典顺序排序 | |||
else | |||
return string.lower(a) < string.lower(b) | |||
end | |||
end | |||
function p.main(frame) | |||
local rl, rlb = readList() | local rl, rlb = readList() | ||
local cl = convertPick(rl, rlb) | local cl = convertPick(rl, rlb) | ||
local gl = genList(cl) | local gl = genList(cl) | ||
rl,rlb,cl = nil | |||
local wikiText = "" | local wikiText = "" | ||
for name, | local a2z = {} | ||
wikiText = wikiText .. "==".. | local gl2 = {} | ||
for name in pairs(gl) do | |||
local enName | |||
if mw.ustring.match(name,'[一-龠ぁ-ゔァ-ヴー々〆〤ヶ]+') then | |||
enName = frame.args[name .. '.enName'] or 'Unknown enName: '.. name--nil | |||
gl2[enName] = gl[name] | |||
gl2[enName].jaName =name | |||
else | |||
enName = name | |||
gl2[enName] = gl[name] | |||
end | |||
table.insert(a2z,enName) | |||
end | |||
table.sort(a2z, customSort) | |||
for _, name in pairs(a2z) do | |||
local item = gl2[name] | |||
local displayName, usingName | |||
if item.jaName then | |||
usingName = item.jaName | |||
displayName = usingName ..' (' .. name ..')' | |||
else | |||
usingName = name | |||
displayName = name | |||
end | |||
wikiText = wikiText .. '<span id="' .. usingName .. '" />\n' | |||
wikiText = wikiText .. "==".. displayName .." ==\n" | |||
wikiText = wikiText .. '{| class=\"wikitable\"\n' | wikiText = wikiText .. '{| class=\"wikitable\"\n' | ||
wikiText = wikiText .. "! Artist !! Songs\n" | wikiText = wikiText .. "! Artist !! Songs\n" |
2024年7月5日 (五) 16:49的版本
可在Module:ArtistSong/doc创建此模块的帮助文档
p={}
local CAL = mw.loadJsonData 'User:Economy666/ComplexArtistsList.json'
local multiId = mw.loadJsonData 'Template:Transition.json'.multiId
local mad = require 'Module:AnotherData'
local function readList()
local pickList = {}
local pickListBYD = {}
for _, song in ipairs(mad.listOf('songs', 'mobile')) do
local artist = song.artist
pickList[song.id] = song.artist
if song.difficulties[4] and (song.difficulties[4].artist or song.difficulties[4].title_localized) then
local bydArtist = song['difficulties'][4]['artist'] or song.artist
pickListBYD[song['id']] = bydArtist
end
end
for _, song in ipairs(mad.listOf('songs', 'ns')) do
if not pickList[song.id] and not multiId[song.id] then
pickList[song.id] = song.artist
if song.difficulties[4] and song.difficulties[4].artist or song.difficulties[4].title_localized then
local bydArtist = song['difficulties'][4]['artist'] or song.artist
pickListBYD[song['id']] = bydArtist
end
end
end
return pickList, pickListBYD
end
local function convertPick(pickList, pickListBYD)
convertList = {}
for _id,_ in pairs(pickList) do
local artist = pickList[_id]
if not convertList[artist] then convertList[artist] = {} end
if not convertList[artist].normal then convertList[artist]['normal'] = {} end
table.insert(convertList[artist]['normal'], _id)
end
for _id in pairs(pickListBYD) do
local artist = pickListBYD[_id]
if not convertList[artist] then convertList[artist] = {} end
if not convertList[artist].beyond then convertList[artist]['beyond'] = {} end
table.insert(convertList[artist]['beyond'], _id)
end
return convertList
end
local function genList(convertList)
local function cate(singleList, cArtist, artist)
local artist = artist or cArtist
if not singleList[artist] then singleList[artist] = {} end
if convertList[cArtist].beyond then
if not singleList[artist].beyond then singleList[artist]['beyond'] = {} end
for _,i in pairs(convertList[cArtist]['beyond']) do
table.insert(singleList[artist]['beyond'],i)
end
end
if convertList[cArtist].normal then
if not singleList[artist].normal then singleList[artist]['normal'] = {} end
for _,i in pairs(convertList[cArtist]['normal']) do
table.insert(singleList[artist]['normal'],i)
end
end
return singleList
end
local singleList = {}
for cArtist in pairs(convertList) do
if CAL[cArtist] then
for _,text in pairs(CAL[cArtist]) do
if text.link then
artist = text['link']
singleList = cate(singleList, cArtist, artist)
end
end
else
singleList = cate(singleList, cArtist)
end
end
return singleList
end
-- 排序(ChatGPT)
local function customSort(a, b)
-- 检查字符串的第一个字符是否为字母
local function isLetter(char)
return char:match("%a") ~= nil
end
-- 获取字符串的第一个字符
local a_first = a:sub(1, 1)
local b_first = b:sub(1, 1)
-- 如果 a 是字母开头,b 不是,则 a 排在前面
if isLetter(a_first) and not isLetter(b_first) then
return true
-- 如果 b 是字母开头,a 不是,则 b 排在前面
elseif isLetter(b_first) and not isLetter(a_first) then
return false
-- 否则,按字典顺序排序
else
return string.lower(a) < string.lower(b)
end
end
function p.main(frame)
local rl, rlb = readList()
local cl = convertPick(rl, rlb)
local gl = genList(cl)
rl,rlb,cl = nil
local wikiText = ""
local a2z = {}
local gl2 = {}
for name in pairs(gl) do
local enName
if mw.ustring.match(name,'[一-龠ぁ-ゔァ-ヴー々〆〤ヶ]+') then
enName = frame.args[name .. '.enName'] or 'Unknown enName: '.. name--nil
gl2[enName] = gl[name]
gl2[enName].jaName =name
else
enName = name
gl2[enName] = gl[name]
end
table.insert(a2z,enName)
end
table.sort(a2z, customSort)
for _, name in pairs(a2z) do
local item = gl2[name]
local displayName, usingName
if item.jaName then
usingName = item.jaName
displayName = usingName ..' (' .. name ..')'
else
usingName = name
displayName = name
end
wikiText = wikiText .. '<span id="' .. usingName .. '" />\n'
wikiText = wikiText .. "==".. displayName .." ==\n"
wikiText = wikiText .. '{| class=\"wikitable\"\n'
wikiText = wikiText .. "! Artist !! Songs\n"
if item.beyond and item.normal then
wikiText = wikiText .. "|-\n| rowspan=\"2\" | " .. name .. "\n"
wikiText = wikiText .. "| " .. mw.text.jsonEncode(item.normal) .. "\n"
wikiText = wikiText .. "|-\n|'''BYD''':" .. mw.text.jsonEncode(item.beyond) .. "\n"
else
wikiText = wikiText .. "|-\n| " .. name .. " || "
if item.normal then
wikiText = wikiText .. mw.text.jsonEncode(item.normal) .. "\n"
elseif item.beyond then
wikiText = wikiText .. " '''BYD''' :" .. mw.text.jsonEncode(item.beyond) .. "\n"
end
end
wikiText = wikiText .. "|}\n"
end
return wikiText
end
return p