Module:沙盒/Economy666/CL:修订间差异

来自Arcaea中文维基
无编辑摘要
无编辑摘要
第2行: 第2行:


-- local mad = require 'Module:AnotherData'
-- local mad = require 'Module:AnotherData'
local NotJaArtist = {['旅人E']=''}


local function link(l, d)
local function link(l, d)
第10行: 第13行:
    end
    end
end
end
local NotJaArtist = {[' 旅人E']=''}
 
local function formatLangText(text)
if not text then return text end
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 function langLink(__link, display)
if display then
return link('曲师列表#' .. __link, formatLangText(display))
else
return link('曲师列表#' .. __link, formatLangText(__link))
end
end
 
local function fullCAL(__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(data.link, data.display)
else
artist = artist .. (display_lang or '')
end
end
return artist
end
 
local function defaultCAL(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(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(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
   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
 


function p.artistLink(artistName)
function p.artistLink(artistName)
第17行: 第78行:
-- 返回:带链接的曲师名称
-- 返回:带链接的曲师名称
-- 若预期返回多个链接,实际返回一个链接;或曲师使用了马甲未能正确识别,请在 Template:ComplexArtistsList.json 添加新规则
-- 若预期返回多个链接,实际返回一个链接;或曲师使用了马甲未能正确识别,请在 Template:ComplexArtistsList.json 添加新规则
--  添加示例:
--  注意事项:json转义符,如 曲师 名称有 " 需要写成 \" (点名Gram(DJ Genki) ;
  --  "LaurvsCK": [  ## 曲目的 曲师 ,空格替换为空(' ' -> '':"Laur vs CK" -> "LaurvsCK")
--       lua匹配转义符,CALv2 使用 匹配简化结构,注意默认格式下value即 显示 部分(冒号右侧) . * 需要在 之前添加%转义
  --    {
  --      "link": "Laur",  ## 第一位曲师的链接,建议 使用 曲师列表中对应<span id="xx" />位置的名称
if artistName then artistName=tostring(artistName) else return end
  --      "display": "Laur" ## 第一位曲师的 显示 名称,复制进来即可
local CALv2 = mw.loadJsonData 'Template:ComplexArtistsList.json'
  --    },
-- local CALv2 = mw.loadJsonData 'User:Economy666/ComplexArtistsList.json'
  --    {
  --      "link": false, # link为false,表示这组字 串不 需要 链接或不 曲师列表中
local artist = ''
  --      "display": " vs " # 不需要链接的字符串,空格也要包括
local artist_list = CALv2[artistName]
  --    },
if artist_list then
  --    {
if artist_list.__FullData__ then
  --      "link": "CK(しーけー)", ## 下一位曲师的链接,找到<span id="CK(しーけー)" /> 填入
artist = fullCAL(artist_list.__FullData__)
  --      "display": "CK" ## 下一位曲师的显示名称,复制进来即可,此时值与link的值不同
else
  --    }
artist = defaultCAL(artistName, artist_list)
  --  ]
end
-- 注意事项:json转义符,如曲师名称有 " 需要写成 \"(点名Gram(DJ Genki))
else
artist = langLink(artistName)
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.artistShowAll()
   local lines = '123'
   local calNew = mw.loadJsonData 'User:Economy666/ComplexArtistsList.json'
   for name,_ in pairs(calNew) do
   lines = lines .. p.artistLink(name) .. '<br>'
   end
   return lines
end
 
function p.designerLink(artistName)
if artistName then artistName=tostring(artistName) else return end
if artistName then artistName=tostring(artistName) else return end
local cal = mw.loadJsonData 'Template:ComplexArtistsList.json'
local cal = mw.loadJsonData 'Template:ComplexArtistsList.json'
第68行: 第155行:
end
end
end
end
-- local display_ja = formatJapaneseText(display)
-- if display then
-- if type(display)=='srting' then
-- artist = string.gsub(artist, display, display_ja and link('曲师列表#' .. theLink, display_ja) or '')
-- else if type(display)=='table' then
-- for d in display do
-- artist = string.gsub(artist, display, display_ja and link('曲师列表#' .. theLink, display_ja) or '')
-- end
-- else
-- end
-- end
end
end
end
end
第89行: 第164行:
end
end


function p.artistLinkFrame(frame)
function p.artistShowAll__()
    local name
    local lines = ''
    if frame and frame.args[1] then
    local slst = mw.loadJsonData 'Template:Songlist.json'
     name = frame.args[1
   local Designers = {}
   else
   for _,song in pairs(slst.songs) do
     return ''
   for _,level in pairs(song.difficulties) do
   Designers[level.chartDesigner] = nil
   end
    end
    end
   local al = p.artistLink(name)
    for _,name in ipairs(Designers) do
   return al
    lines = lines .. p.designerLink(name) .. '<br>'
end
 
function p.artistShowAll()
   local lines = '123'
   local calNew = mw.loadJsonData 'User:Economy666/ComplexArtistsList.json'
    for name,_ in pairs(calNew) do
    lines = lines .. p.artistLink(name) .. '<br>'
    end
    end
    return lines
    return lines

2024年7月23日 (二) 19:46的版本

可在Module:沙盒/Economy666/CL/doc创建此模块的帮助文档

local p = {}

-- local mad = require 'Module:AnotherData'


local NotJaArtist = {['旅人E']=''}

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
	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 function langLink(__link, display)
	if display then
		return link('曲师列表#' .. __link, formatLangText(display))
	else
		return link('曲师列表#' .. __link, formatLangText(__link))
	end
end

local function fullCAL(__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(data.link, data.display)
		else
			artist = artist .. (display_lang or '')
		end
	end
	return artist
end

local function defaultCAL(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(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(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
    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


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 CALv2 = mw.loadJsonData 'Template:ComplexArtistsList.json'
	-- local CALv2 = mw.loadJsonData 'User:Economy666/ComplexArtistsList.json'
	
	local artist = ''
	local artist_list = CALv2[artistName]
	if artist_list then
		if artist_list.__FullData__ then
			artist = fullCAL(artist_list.__FullData__)
		else
			artist = defaultCAL(artistName, artist_list)
		end
	else
		artist = langLink(artistName)
	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.artistShowAll()
    local lines = '123'
    local calNew = mw.loadJsonData 'User:Economy666/ComplexArtistsList.json'
    for name,_ in pairs(calNew) do
    	lines = lines .. p.artistLink(name) .. '<br>'
    end
    return lines
end

function p.designerLink(artistName)
	if artistName then artistName=tostring(artistName) else return end
	local cal = mw.loadJsonData 'Template:ComplexArtistsList.json'
	local calNew = mw.loadJsonData 'User:Economy666/ComplexArtistsList.json'
	local function formatJapaneseText(text)
		if not text then return text end
		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 = calNew[artistName]
	if artist_list then
		if artist_list.__FullData__ then
			for _, data in ipairs(artist_list.__FullData__) do
				local display_ja = formatJapaneseText(data.display)
				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 = artistName
			for theLink, display in pairs(artist_list) do
				if type(display)=='string' then
					local display_ja = formatJapaneseText(display)
					artist = string.gsub(artist, display, display_ja and link('曲师列表#' .. theLink, display_ja) or '')
				elseif type(display)=='table' then
					for _,d in pairs(display) do
						local d_ja = formatJapaneseText(d)
						artist = string.gsub(artist, d, d_ja and link('曲师列表#' .. theLink, d_ja) or '')
					end
				end
			end
		end
	else
    		artist = formatJapaneseText(artistName)
    		artist = link('曲师列表#' .. artistName, artist)
	end
	return artist
end

function p.artistShowAll__()
    local lines = ''
    local slst = mw.loadJsonData 'Template:Songlist.json'
    local Designers = {}
    for _,song in pairs(slst.songs) do
    	for _,level in pairs(song.difficulties) do
    		Designers[level.chartDesigner] = nil
    	end
    end
    for _,name in ipairs(Designers) do
    	lines = lines .. p.designerLink(name) .. '<br>'
    end
    return lines
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