Module:ConvertLink:修订间差异
Economy666(讨论 | 贡献) 小 (Economy666移动页面Module:沙盒/Economy666/ConvertLink至Module:ConvertLink,不留重定向:done) |
Economy666(讨论 | 贡献) (优化) |
||
第10行: | 第10行: | ||
end | end | ||
end | end | ||
local NotJaArtist = {['旅人E']=''} | |||
function p.artistLink(artistName) | function p.artistLink(artistName) | ||
第35行: | 第36行: | ||
local cal = mw.loadJsonData 'Template:ComplexArtistsList.json' | local cal = mw.loadJsonData 'Template:ComplexArtistsList.json' | ||
local function formatJapaneseText(text) | local function formatJapaneseText(text) | ||
if NotJaArtist[text] then return text end | |||
return mw.ustring.gsub( | |||
text, '[一-龠ぁ-ゔァ-ヴー々〆〤ヶ]+', | |||
function(v) return ('<span lang="ja">-{%s}-</span>'):format(v) end | |||
) | |||
end | end | ||
local artist = '' | local artist = '' | ||
local artist_list = cal[string.gsub(artistName, ' ' , '')] | local artist_list = cal[artistName] or cal[string.gsub(artistName, ' ' , '')] | ||
if artist_list then | if artist_list then | ||
for _, data in ipairs(artist_list) do | for _, data in ipairs(artist_list) do | ||
local display_ja = formatJapaneseText(data.display) | local display_ja = formatJapaneseText(data.display) or nil | ||
if data.link then | if data.link then | ||
artist = artist .. link('曲师列表#' .. data.link, display_ja) | artist = artist .. (display_ja and link('曲师列表#' .. data.link, display_ja) or '') | ||
else | else | ||
artist = artist .. display_ja | artist = artist .. (display_ja or '') | ||
end | end | ||
end | end |
2024年7月7日 (日) 00:48的版本
可在Module:ConvertLink/doc创建此模块的帮助文档
local p = {}
-- local mad = require 'Module:AnotherData'
local function link(l, d)
if d then
return '[[' .. l .. '|' .. d .. ']]'
else
return '[[' .. l .. ']]'
end
end
local NotJaArtist = {['旅人E']=''}
function p.artistLink(artistName)
-- 将songlist中纯文本形式的曲师名称转换为带一个或多个链接的曲师名称,同时进行日文转换
-- 输入:曲师名称(需要与songlist内完全一致,或仅存在空格差异)(不要手打!!)
-- 返回:带链接的曲师名称
-- 若预期返回多个链接,实际返回一个链接;或曲师使用了马甲未能正确识别,请在 Template:ComplexArtistsList.json 添加新规则
-- 添加示例:
-- "LaurvsCK": [ ## 曲目的曲师,空格替换为空(' ' -> '':"Laur vs CK" -> "LaurvsCK")
-- {
-- "link": "Laur", ## 第一位曲师的链接,建议使用曲师列表中对应<span id="xx" />位置的名称
-- "display": "Laur" ## 第一位曲师的显示名称,复制进来即可
-- },
-- {
-- "link": false, # link为false,表示这组字符串不需要链接或不在曲师列表中
-- "display": " vs " # 不需要链接的字符串,空格也要包括
-- },
-- {
-- "link": "CK(しーけー)", ## 下一位曲师的链接,找到<span id="CK(しーけー)" />填入
-- "display": "CK" ## 下一位曲师的显示名称,复制进来即可,此时值与link的值不同
-- }
-- ]
-- 注意事项:json转义符,如曲师名称有 " 需要写成 \"(点名Gram(DJ Genki))
if artistName then artistName=tostring(artistName) else return end
local cal = mw.loadJsonData 'Template:ComplexArtistsList.json'
local function formatJapaneseText(text)
if NotJaArtist[text] then return text end
return mw.ustring.gsub(
text, '[一-龠ぁ-ゔァ-ヴー々〆〤ヶ]+',
function(v) return ('<span lang="ja">-{%s}-</span>'):format(v) end
)
end
local artist = ''
local artist_list = cal[artistName] or cal[string.gsub(artistName, ' ' , '')]
if artist_list then
for _, data in ipairs(artist_list) do
local display_ja = formatJapaneseText(data.display) or nil
if data.link then
artist = artist .. (display_ja and link('曲师列表#' .. data.link, display_ja) or '')
else
artist = artist .. (display_ja or '')
end
end
else
artist = formatJapaneseText(artistName)
artist = link('曲师列表#' .. artistName, artist)
end
return artist
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.packLink(packName, short, ns)
-- 曲包名称转换成链接
-- short
-- true 简短(x Collaboration y)
-- false 完整(x Collaboration - Collaboration y)
-- ns 适用于Arcaea和Memory Archive曲包
-- true NS版曲包
-- false 移动版曲包
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)
return pack
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
return p