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

删除318字节 、​ 2020年10月19日 (一) 06:05
无编辑摘要
result=result.."\" class=\"Lyrics_gradient"
for k,name in ipairs(names) do
result=result..((' '..string.gsub(string.lower(name), ' ', '_')..'-lyrics') or '') --与上面的类似,加入class
end
result=result.."\" 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;"
return result..");\">"..module.langQuote(text, lang).."</span>"
else --如果颜色标识中没有逗号,则说明只有一位角色,直接上色。
return "<span lang=\""..lang.."\" class=\"Lyrics_single"..(names and (' '..string.gsub(string.lower(names), ' ', '_')..'-lyrics') or '').."\" title=\""..(fullnames[string.lower(names)] or '').."\" style=\"color:"..(colors[string.lower(names)] or 'black')..";\">"..module.langQuote(text, lang).."</span>"
end
end
 
function module.langQuote(text, lang) --改写自萌娘百科的[[moegirl:Module:Lang]]的.quote。确定语言是否需要繁简转换。
if lang == 'zh' then --中文则需要繁简转换。方法是不做改动,直接返回。
return text
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。
end
 
function module._lyrics(args) --改写自萌娘百科的[[moegirl:Module:Lyrics]]的._lyrics。args为传入参数的table。
local orig = mw.text.split((args[1] or args.original or ''):match('^(.-)%s*$'), '\n')
local tran = mw.text.split((args[2] or args.translated or ''):match('^(.-)%s*$'), '\n') --对传入的字符串进行初步处理。
--1. 如果没有传入字符串,则默认为空字符串。
--2. 去除结尾处的所有空白。换行处分割字符串开头的空白要保留所以不使用trim结果为一个table
--^表示开头,.表示任意字符,-表示尽可能短地匹配任意个,%s表示任意空白,*表示尽可能多地匹配任意个,$表示结尾。括号内是最终留用的部分。
--3. 在所有换行处分割字符串,结果为一个table。
local llang = args.llang or 'ja'
local rlang = args.rlang or 'zh' --传入的语言,没有传入则默认分别为日文与中文。
local html = mw.html.create('div') --创建HTML标签div用于放置内容,此div为全部内容的最外层容器。
:addClass('Lyrics_box') --给这个div添加Lyrics_box的class。
:cssText('display:flow-root;'..(args.containerstyle or '')) --设置容器的其他style。
:cssText(args.containerstyle or '') --设置容器的其他style。
 
if (args[2] or args.translated or '') == '' then
end
 
if (args[1] or args.original or ''):find('<ruby') or (args[2] or args.transalted or ''):find('<ruby') or (args.hasRuby or ''):find( ~= '[^%s]') then
html:addClass('Lyrics_has_ruby') --如果歌词原文或疑问中有ruby,或者手动设置的hasRuby不为空,则添加Lyrics_has_ruby的class;
else
local orig_line=orig[i] --准备转换颜色标识。
if orig_line:find('{') then --如果有颜色标识,
orig_line=orig_line:gsub("{([^}]+)}([^{]+)", function(n1,n2) return module.name2color(n1,n2,llang) end) --则把颜色标识替换成有语言标识的颜色span,
orig_line=orig_line:gsub("^([^{<]+)", function(n) return module.langWrap(n,llang) end) --并把开头没有颜色表示的文字加上语言标识,
orig_line=orig_line:gsub("{}([^{<]+)", function(n) return module.langWrap(n,llang) end) --并把空颜色标识后的文字加上语言标识。
else --如果没有颜色标识,
orig_line=module.langWrap(orig_line,llang) --则直接添加语言标识。
end
html:tag('div') --在容器中创建一个div,代表一行歌词。
html
:tag('div') --在容器中创建一个div,代表一行歌词。
:addClass('Lyrics_line') --添加Lyrics_line的class。(这个class实际上未设置。)
:tag('div') --在div中创建一个div,用于放置歌词原文。
end
 
function module.lyrics(frame) --改写自萌娘百科的[[moegirl:Module:Lyrics]]的.lyrics。取用参数并进行计算。
--将取用参数的步骤单独列成函数,是为了让模块可以直接取用模板的参数,而使用其他方法取用参数不受此影响。
local args = getArgs(frame, {wrappers='Template:Lyrics'}) --获取传入参数。
16,874

个编辑