“模块:Lyrics”的版本间差异

删除3,849字节 、​ 2021年8月4日 (三) 11:43
撤销Bhsd讨论)的版本31124
(// 使用Wikiplus小工具快速编辑)
(撤销Bhsd讨论)的版本31124)
标签撤销
 
(未显示3个用户的17个中间版本)
--getArgs是一个函数,作用是获取传入的args。第二参数是options的table。
 
local data = mw.loadData( "module:lyrics/data" )
local colors = {["honoka"]="#ffae00", ["eli"]="#00bbff", ["kotori"]="#a8a8a8", ["umi"]="#6d56ff", ["rin"]="#fee155", ["maki"]="#ff6239", ["nozomi"]="#e44fff", ["hanayo"]="#44cd71",["nico"]="#ff62dd",
}local colors = data.colors --角色名转换颜色的table
["chika"]="#ff791b", ["riko"]="#ff7777", ["kanan"]="#00d29e", ["dia"]="#f43232", ["you"]="#2aa4db", ["yoshiko"]="#aeaeae", ["hanamaru"]="#cfba0f", ["mari"]="#a530e0", ["ruby"]="#ee55b7",
}local fullnames = data.fullnames --角色名转换全名的table
["sarah"]="#00ccff", ["leah"]="#bbbbbb",
}local classnames = data.classnames --小队名转换角色名的table
["ayumu"]="#ed7d95", ["kasumi"]="#e7d600", ["shizuku"]="#01b7ed", ["karin"]="#485ec6", ["ai"]="#ff5800", ["kanata"]="#a664a0", ["setsuna"]="#d81c2f", ["emma"]="#84c36e", ["rina"]="#9ca5b9", ["shioriko"]="#37b484",
["kanon"]="#ff7f27", ["keke"]="#a0fff9", ["chisato"]="#ff6e90", ["sumire"]="#74f466", ["ren"]="#0000a0",
["muse"]="#e4007f", ["aqours"]="#32aaff", ["nijigaku"]="#f39800",
["printemps"]="hotpink", ['bibi']="gold", ["lilywhite"]="silver",
["cyaron"]="#ffa434", ["azalea"]="#ff5a79", ["guiltykiss"]="#825deb", ["saintsnow"]="#cb3935",
["musesmile"]="#df49a6", ["musepure"]="#37a75c", ["musecool"]="#0099ee",
["aqourssmile"]="#df49a6", ["aqourspure"]="#37a75c", ["aqourscool"]="#0099ee"
} --角色名转换颜色的table
local fullnames = {["honoka"]="高坂穗乃果", ["eli"]="绚濑绘里", ["kotori"]="南小鸟", ["umi"]="园田海未", ["rin"]="星空凛", ["maki"]="西木野真姬", ["nozomi"]="东条希", ["hanayo"]="小泉花阳", ["nico"]="矢泽妮可",
["chika"]="高海千歌", ["riko"]="樱内梨子", ["kanan"]="松浦果南", ["dia"]="黑泽黛雅", ["you"]="渡边曜", ["yoshiko"]="津岛善子", ["hanamaru"]="国木田花丸", ["mari"]="小原鞠莉", ["ruby"]="黑泽露比",
["sarah"]="鹿角圣良", ["leah"]="鹿角理亚",
["ayumu"]="上原步梦", ["kasumi"]="中须霞", ["shizuku"]="樱坂雫", ["karin"]="朝香果林", ["ai"]="宫下爱", ["kanata"]="近江彼方", ["setsuna"]="优木雪菜", ["emma"]="艾玛·维尔德", ["rina"]="天王寺璃奈", ["shioriko"]="三船栞子",
["kanon"]="涩谷花音", ["keke"]="唐可可", ["chisato"]="岚千砂都", ["sumire"]="平安名堇", ["ren"]="叶月恋",
["muse"]="μ's", ["aqours"]="Aqours", ["saintsnow"]="Saint Snow", ["nijigaku"]="虹咲学园学园偶像同好会",
["printemps"]="Printemps", ['bibi']="BiBi", ["lilywhite"]="lily white",
["cyaron"]="CYaRon!", ["azalea"]="AZALEA", ["guiltykiss"]="Guilty Kiss",
["diverdiva"]="DiverDiva", ["azuna"]="A・ZU・NA", ["qu4rtz"]="QU4RTZ",
["musesmile"]="高坂穗乃果、星空凛、矢泽妮可", ["musepure"]="南小鸟、东条希、小泉花阳", ["musecool"]="绚濑绘里、园田海未、西木野真姬",
["aqourssmile"]="高海千歌、国木田花丸、小原鞠莉", ["aqourspure"]="松浦果南、渡边曜、黑泽露比", ["aqourscool"]="樱内梨子、黑泽黛雅、津岛善子"
} --角色名转换全名的table
local classnames = {["muse"]="honoka-lyrics eli-lyrics kotori-lyrics umi-lyrics rin-lyrics maki-lyrics nozomi-lyrics hanayo-lyrics nico",
["aqours"]="chika-lyrics riko-lyrics kanan-lyrics dia-lyrics you-lyrics yoshiko-lyrics hanamaru-lyrics mari-lyrics ruby",
["nijigaku"]="ayumu-lyrics kasumi-lyrics shizuku-lyrics karin-lyrics ai-lyrics kanata-lyrics setsuna-lyrics emma-lyrics rina-lyrics shioriko",
["printemps"]="honoka-lyrics kotori-lyrics hanayo", ['bibi']="eli-lyrics maki-lyrics nico", ["lilywhite"]="umi-lyrics rin-lyrics nozomi",
["cyaron"]="chika-lyrics you-lyrics ruby", ["azalea"]="kanan-lyrics dia-lyrics hanamaru", ["guiltykiss"]="riko-lyrics yoshiko-lyrics mari", ["saintsnow"]="sarah-lyrics leah",
["diverdiva"]="karin-lyrics ai", ["azuna"]="ayumu-lyrics shizuku-lyrics setsuna", ["qu4rtz"]="kasumi-lyrics kanata-lyrics emma-lyrics rina",
["musesmile"]="honoka-lyrics rin-lyrics nico", ["musepure"]="kotori-lyrics nozomi-lyrics hanayo", ["musecool"]="eli-lyrics umi-lyrics maki",
["aqourssmile"]="chika-lyrics hanamaru-lyrics mari", ["aqourspure"]="kanan-lyrics you-lyrics ruby", ["aqourscool"]="riko-lyrics dia-lyrics yoshiko"
} --小队名转换角色名的table
 
function module.name2color(names,text,lang) --按角色名转换成的颜色给文字上色及加title和语言标识。
local errorFlag=nil
names=mw.text.split(names, ',') --将角色列表全部转为小写后,在逗号处分割成table。
local result="'<span lang=\""..lang.."\" title=\""' --放置上色结果的span。title内放置角色全名
for k,name in ipairs(names) do --将分割后的角色列表依次处理。k表示编号,从1开始。
result=result..(fullnames[name] or '') --把每个角色名转换成全名,并加入到结果。如果角色不存在,则为空。
end --因为连接过程需要转换文字,所以不使用join或listToText。
end
result=result.."\'" class=\""'
for k,name in ipairs(names) do
result=result.." "..(classnames[name] or name)..'-lyrics' --与上面的类似,加入class
end
end
result=result.." "..(errorFlag and "error" or "Lyrics_gradient").."\'" style=\"background-image:-webkit-linear-gradient(left," -- Lyrics_gradient类会添加CSS样式:"-webkit-background-clip:text;background-clip:text;-webkit-box-decoration-break:clone;-webkit-text-fill-color:transparent;text-fill-color:transparent;"'
for k,name in ipairs(names) do
result=result..(colors[name] or 'black') --与上面的类似,加入各颜色。如果颜色不存在,则为黑色。
end
end
return result..");"..(
return result..");"..( errorFlag and "'background:none;\">[[category:Lyrics中出现错误颜色参数的页面]]Wrong color key: "'..errorFlag or "\">"..module.langQuote(text, lang)).."</span>"
or '">'..module.langQuote(text, lang)
).."</span>"
else --如果颜色标识中没有逗号,则说明只有一位角色,直接上色。
return "'<span lang=\""..lang.."\" class=\"Lyrics_single "'..(classnames[names] or names).."-lyrics"..(colors[names] and '' or " error").."\" title=\""..(fullnames[names] or '').."\" style=\"color:"..(colors[names] or '')..";\">"..(colors[names] and module.langQuote(text, lang) or "[[category:Lyrics中出现错误颜色参数的页面]]Wrong color key: "..names).."</span>"
'" title="'..(fullnames[names] or '')..'" style="color:'..(colors[names] or '')..';">'..
(colors[names] and module.langQuote(text, lang) or "[[category:Lyrics中出现错误颜色参数的页面]]Wrong color key: "..names)
.."</span>"
end
end
function module.langWrap(text,lang) --改写自[[moegirl:Module:Lang]]的.wrap。给文字加上指定语言的attr。
local span = mw.html.create('span') --创建HTML标签span用于设置语言。
:attr('lang', lang) --给这个span加上lang的attr。
:wikitext( module.langQuote(text, lang) ) --给这个span加上内容,内容为langQuote确定的是否需要繁简转换的维基文本。
return tostring(span)
end
 
function module.split(text)
local result = {}
for v in mw.ustring.gmatch(text..'\n', '([^\n]*)\n') do
table.insert(result, v)
end
return result
end
 
function module._lyrics(args) --改写自[[moegirl:Module:Lyrics]]的._lyrics。args为传入参数的table。
local orig = mw.textmodule.split(args[1] or args.original or '', '\n')
local tran = mw.textmodule.split(args[2] or args.translated or '', '\n') --对传入的字符串进行初步处理。
--对传入的字符串进行初步处理。
--1. 如果没有传入字符串,则默认为空字符串。
--2. 在所有换行处分割字符串,结果为一个table。
local llang = args.llang or 'ja'
local rlang = args.rlang or 'zh' --传入的语言,没有传入则默认分别为日文与中文。
local lcolor = colors[string.lower(args.lcolor or '')] or colors[string.lower(args.color or '')] or args.lcolor or args.color or ''
local rcolor = colors[string.lower(args.rcolor or '')] or args.rcolor or '' --传入的默认颜色,没有传入则默认为空字符串。
local lstyle = '' --准备处理传入的style。
end
 
if (args[1] or args.original or ''):find('<ruby') or (args[2] or args.transaltedtranslated or ''):find('<ruby') or (args.hasRuby or '') ~= '' then
html:addClass('Lyrics_has_ruby') --如果歌词原文或疑问中有ruby,或者手动设置的hasRuby不为空,则添加Lyrics_has_ruby的class;
else
html:addClass('Lyrics_no_ruby') --否则,添加Lyrics_no_ruby的class。
local orig_line=orig[i] --准备转换颜色标识。
if orig_line:find('@') then --如果有颜色标识,
orig_line=orig_line:gsub("^([^@]+)", function(n) return module.langWrap(n,llang) end) --则把开头没有颜色表示标识的文字加上语言标识,
orig_line=orig_line:gsub("@([^@]*)@([^@]+)", function(n1,n2) return module.name2color(n1,n2,llang) end) --并把颜色标识替换成有语言标识的颜色span。
else --如果没有颜色标识,
:tag('div') --在div中创建一个div,用于放置歌词原文。
:addClass('Lyrics_original') --添加Lyrics_original的class。
:attr('lang', llang)
:cssText(lstyle) --添加设置的style。
:node(orig_line or '') --添加歌词文字。语言已在添加颜色时设定。
:addClass('Lyrics_translated')
:cssText(rstyle)
:node(rlang and module.langWraplangQuote(tran[i] or '', rlang) or tran[i])
:done()
end
16,874

个编辑