打开主菜单
首页
随机
登录
设置
关于Arcaea中文维基
免责声明
搜索
查看“Module:沙盒/Economy666/CL”的源代码
←
Module:沙盒/Economy666/CL
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
local p = {} -- local mad = require 'Module:AnotherData' local memory = {} local function getMemory(enType, name) if memory[enType] then if memory[enType][name] then return memory[enType][name] end else memory[enType] = {} end end local function link(l, d) if d then return '[[' .. l .. '|' .. d .. ']]' else return '[[' .. l .. ']]' end end local function formatLangText(text) if not text then return text end return mw.ustring.gsub( text, '[一-龠ぁ-ゔァ-ヴー々〆〤ヶ]+', function(v) return ('<span lang="ja">-{%s}-</span>'):format(v) end ) end local function langLink(theType, __link, display, noForm) local dis = display or __link local disForm = noForm and dis or formatLangText(dis) return link(theType..'列表#' .. __link, disForm) end local function fullCL(theType, __FullData__) local artist = '' for _, data in ipairs(__FullData__) do local display_lang = data.zh and data.display or formatLangText(data.display) if data.link then artist = artist .. langLink(theType, data.link, display_lang, true) else artist = artist .. (display_lang or '') end end return artist end local function defaultCL(theType, text, artist_list) local temp_text = text local link_placeholders = {} local placeholder_count = 0 for theLink, display in pairs(artist_list) do if type(display) == 'string' then local link_text = langLink(theType, theLink, display) local placeholder = "__LINK_PLACEHOLDER_" .. placeholder_count .. "__" link_placeholders[placeholder] = link_text temp_text = string.gsub(temp_text, display, placeholder) placeholder_count = placeholder_count + 1 elseif type(display)=='table' then for _,dis in pairs(display) do local link_text = langLink(theType, theLink, dis) local placeholder = "__LINK_PLACEHOLDER_" .. placeholder_count .. "__" link_placeholders[placeholder] = link_text temp_text = string.gsub(temp_text, dis, placeholder) placeholder_count = placeholder_count + 1 end end end if placeholder_count == 0 then return text end local formatted_text = formatLangText(temp_text) for placeholder, link_text in pairs(link_placeholders) do formatted_text = string.gsub(formatted_text, placeholder, link_text) end return formatted_text end local CALv2 local function findArtist(artistName) CALv2 = CALv2 or mw.loadJsonData 'Template:ComplexArtistsList.json' local artist_list = CALv2[artistName] local theType = '曲师' if artist_list then if artist_list.__FullData__ then artist = fullCL(theType, artist_list.__FullData__) else artist = defaultCL(theType, artistName, artist_list) end else artist = langLink(theType, artistName) end return artist end function p.artistLink(artistName) -- 将songlist中纯文本形式的曲师名称转换为带一个或多个链接的曲师名称,同时进行日文转换 -- 输入:曲师名称(需要与songlist内完全一致,或仅存在空格差异)(不要手打!!) -- 返回:带链接的曲师名称 -- 若预期返回多个链接,实际返回一个链接;或曲师使用了马甲未能正确识别,请在 Template:ComplexArtistsList.json 添加新规则 -- 注意事项:json转义符,如曲师名称有 " 需要写成 \"(点名Gram(DJ Genki)); -- lua匹配转义符,CALv2使用匹配简化结构,注意默认格式下value即显示部分(冒号右侧) . * 等符号需要在之前添加%转义 if artistName then artistName=tostring(artistName) else return end local artist = getMemory('artist', artistName) if artist then return artist end artist = findArtist(artistName) memory.artist[artistName] = artist return artist end local DL local function findDesigner(designerName) DL = DL or mw.loadJsonData 'Template:DesignersList.json' local CDL = DL.complex local SDL = DL.simple local theType = '谱师' local function defaultSDL(text) local temp_text = text local link_placeholders = {} local placeholder_count = 0 for _,data in ipairs(SDL) do local dis = data.display local name = data.link if string.find(temp_text, dis) then local link_text = langLink(theType, name, dis) local placeholder = "__LINK_PLACEHOLDER_" .. placeholder_count .. "__" link_placeholders[placeholder] = link_text temp_text = string.gsub(temp_text, dis, placeholder) placeholder_count = placeholder_count + 1 end end if placeholder_count == 0 then return text end local formatted_text = formatLangText(temp_text) for placeholder, link_text in pairs(link_placeholders) do formatted_text = string.gsub(formatted_text, placeholder, link_text) end return formatted_text end local designer local theType = '谱师' local designer_list = CDL[designerName] if designer_list then if designer_list.__FullData__ then designer = fullCL(theType, designer_list.__FullData__) else designer = defaultCL(theType, designerName, designer_list) end else designer = defaultSDL(designerName) end if designer ~= designerName then return designer end designerName = designerName==''and ' ' or designerName if songid then if DL.special[songid] then return langLink(theType,'与主线剧情相关的特殊名义', designerName) end end return langLink(theType, '其他未确认谱师名义', designerName) end function p.designerLink(designerName, songid) -- songid参数可选,用于最终区分"其他未确认谱师名义"与"与主线剧情相关的特殊名义" -- 不填默认归为"其他未确认谱师名义" if designerName then designerName=tostring(designerName) else return end local designer = getMemory('designer', designerName) if designer then return designer end local designer = findDesigner(designerName) memory.designer[designerName] = designer return designer end function p.packLink(packName, short, ns) -- 曲包名称转换成链接 -- short -- true 简短(x Collaboration y) -- false 完整(x Collaboration - Collaboration y) -- ns 适用于Arcaea和Memory Archive曲包 -- true NS版曲包 -- false 移动版曲包 if packName then packName=tostring(packName) else return end local class = 'pack_'..(ns and 'ns' or 'mobile')..(short and '_short' or '') local pack = getMemory(class, packName) if pack then return pack end local discrete_pack = {['Arcaea']='曲包', ['Memory Archive']=''} -- 分离双平台页的曲包,value为后缀附加内容: '曲包'->' (xx版曲包)' ; ''->' (xx版)' local cc = 'Collaboration %- Collaboration' local ccl = 'Collaboration#Collaboration' local linkFlag = '' if discrete_pack[packName] then if ns then linkFlag = (' (NS版%s)'):format(discrete_pack[packName]) else linkFlag = (' (移动版%s)'):format(discrete_pack[packName]) end end local packLink = string.gsub(packName, cc, ccl) .. linkFlag local packDisplay if short then local ccd = 'Collaboration' packDisplay = string.gsub(packName, cc, ccd) else packDisplay = packName end local pack = link(packLink, packDisplay) memory[class][packName] = pack return pack end local lang, VT function p.fullVersionNum(ver, date) local verClass = math.floor(date/100) local verData = getMemory('ver', verClass) if verData then return verData[1], verData[2], ymd end local function findVer() lang = lang or mw.language.getContentLanguage() -- VT = VT or mw.loadJsonData 'Template:VersionTime.json' VT = VT or mw.text.jsonDecode(mw.title.new('Template:VersionTime.json'):getContent()) local ymd = tonumber(lang:formatDate('ymd', '@' .. date)) - 1 local vt if VT[ver] then vt=VT[ver] else return ver,ymd,ymd end local dates = vt.time local version = vt.ver if #dates ~= #version then return ver,ymd,ymd end local l, r = 1, #dates while l < r do local m = math.floor((l + r) / 2) if dates[m] < ymd then l = m + 1 else r = m end end return ver.. '.' ..version[l], dates[l], ymd end verData={} verData[1], verData[2], verData[3] = findVer() memory.ver[verClass] = verData return verData[1], verData[2], verData[3] end function p.artistLinkFrame(frame) local name if frame and frame.args[1] then name = frame.args[1] else return '' end local al = p.artistLink(name) return al end function p.packLinkFrame(frame) if frame then local name = frame.args['name'] or nil local short = frame.args['short'] or nil local ns = frame.args['ns'] or nil return p.packLink(name, short, ns) else return 'none' end end function p.artistShowAll() local lines = '==Artist Show All==\n' local slst = mw.loadJsonData 'Template:Songlist.json' local Artists = {} for _,song in pairs(slst.songs) do local id = song.id local artist = song.artist if not Artists[artist] then Artists[artist] = true end end for name in pairs(Artists) do lines = lines .. p.artistLink(name) .. '<br>' end return lines end function p.designerShowAll() local lines = '==Designer Show All==\n' local slst = mw.loadJsonData 'Template:Songlist.json' local Designers = {} for _,song in pairs(slst.songs) do local id = song.id for _,level in pairs(song.difficulties) do local name = level.chartDesigner Designers[name] = id end end for name,id in pairs(Designers) do lines = lines .. p.designerLink(name,id) .. '<br>' end return lines end function p.packShowAll() local lines = '==Pack Show All==\n' local function append(t) lines = lines .. t ..'<br>' end local slst = mw.loadJsonData 'Template:Songlist.json' local mad = require 'Module:AnotherData' local trans = mw.loadJsonData 'Template:Transition.json' local Packs = {} for _,song in pairs(slst.songs) do local id = song.set local pack if not Packs[id] then pack = trans.packName[id] or mad.packQueryWrap(id).name Packs[id] = pack end end for id,name in pairs(Packs) do append(p.packLink(name)) p.packLink(name,1) end return lines end function p.verShowAll() local lines = '==Version Show All==\n' local function append(t) lines = lines .. t ..'<br>' end local slst = mw.loadJsonData 'Template:Songlist.json' for _,song in pairs(slst.songs) do local d = song.date local v = song.version local vv, dd, t = p.fullVersionNum(v, d) append(vv ..'('.. dd..') '..(t~=dd and t or '')) if song.difficulties[4] and song.difficulties[4].date then local d = song.difficulties[4].date local v = song.difficulties[4].version local vv, dd, t = p.fullVersionNum(v, d) append(vv ..'('.. dd..') '..(t~=dd and t or '')) end end local Idx={} for idx in pairs(memory.ver) do table.insert(Idx, idx) end append("\n===Summary===\n") table.sort(Idx) for _,idx in ipairs(Idx) do append(idx..' '..(memory.ver[idx][1] or '') ..' ('.. (memory.ver[idx][2] or '') .." "..(20000000+tonumber(memory.ver[idx][2])~=tonumber(os.date("%Y%m%d", idx*100)) and os.date("%Y%m%d", idx*100) or '')..')') end return lines end local function readMemory() local text = '' local function append(t) text = text .. t end for i,j in pairs(memory) do append('\n==memory.'..i..'==\n') for ii,jj in pairs(j) do if type(jj) == 'table' then append(ii..' --> '..jj[1]..' '..jj[2]..'<br>\n') else append(ii..' --> '..jj..'<br>\n') end end end return text end function p.test() local text = '' local function append(t) text = text .. t ..'\n'end -- append(p.packShowAll()) -- append(p.artistShowAll()) -- append(p.designerShowAll()) append(p.verShowAll()) append(readMemory()) return text end return p
本页使用的模板:
Module:沙盒/Economy666/CL/doc
(
查看源代码
)
返回
Module:沙盒/Economy666/CL
。