16,874
个编辑
LLWiki正在建设中,欢迎加入我们!
小 |
标签:撤销 |
||
(未显示4个用户的48个中间版本) | |||
--getArgs是一个函数,作用是获取传入的args。第二参数是options的table。
local data = mw.loadData( "module:lyrics/data" )
local classnames = data.classnames --小队名转换角色名的table
▲} --角色名转换颜色的table
▲} --角色名转换全名的table
function module.name2color(names,text,lang) --按角色名转换成的颜色给文字上色及加title和语言标识。
if names=='' then
if names:find(',') then --如果颜色标识中有逗号,则说明有多位角色,使用渐变色。▼
return module.langWrap(text, lang)
names=mw.text.split(string.lower(names), ',') --将角色列表全部转为小写后,在逗号处分割成table。▼
local result="<span title=\"" --放置上色结果的span。title内放置角色全名▼
local errorFlag=nil
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
if colors[name]==nil then
errorFlag=(errorFlag and errorFlag..", " or '')..name
end
result=result.." "..(errorFlag and "error" or "Lyrics_gradient")..'" style="background-image:-webkit-linear-gradient(left,'
for k,name in ipairs(names) do
result=result..(colors[name] or 'black') --与上面的类似,加入各颜色。如果颜色不存在,则为黑色。
end
end
return result..");
errorFlag and 'background:none;">[[category:Lyrics中出现错误颜色参数的页面]]Wrong color key: '..errorFlag
or '">'..module.langQuote(text, lang)
).."</span>"
else --如果颜色标识中没有逗号,则说明只有一位角色,直接上色。
return
'" 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.langQuote(text, lang) --改写自
if lang == 'zh' then --中文则需要繁简转换。方法是不做改动,直接返回。
return text
end
function module.langWrap(text,
local span = mw.html.create('span') --创建HTML标签span用于设置语言。
:
return tostring(span)▼
▲ return span
end
function module.split(text)
function module._lyrics(args) --改写自萌娘百科的Module:Lyrics的._lyrics。args为传入参数的table。▼
local result = {}
local orig = mw.text.split((args[1] or args.original or ''):match('^(.-)%s*$'), '\n')▼
for v in mw.ustring.gmatch(text..'\n', '([^\n]*)\n') do
local tran = mw.text.split((args[2] or args.translated or ''):match('^(.-)%s*$'), '\n') --对传入的字符串进行初步处理。▼
table.insert(result, v)
end
return result
end
▲ local tran =
--对传入的字符串进行初步处理。
--1. 如果没有传入字符串,则默认为空字符串。
--2.
local llang = args.llang or 'ja'
local rlang = args.rlang
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。
local html = mw.html.create('div') --创建HTML标签div用于放置内容,此div为全部内容的最外层容器。
:addClass('Lyrics_box') --给这个div添加Lyrics_box的class。
:cssText(args.containerstyle or '') --设置容器的其他style。
if
html:addClass('
end
if (args[1] or args.original or ''):find('<ruby') or (args[2] or args.translated 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。
for i=1,len do --为每一行进行一次。
local orig_line=orig[i] --准备转换颜色标识。
if orig_line:find('
orig_line=
orig_line=orig_line:gsub("
orig_line=module.langWrap(orig_line,llang) --则直接添加语言标识。
▲ html
end
:addClass('Lyrics_line') --添加Lyrics_line的class。(这个class实际上未设置。)
:tag('div') --在div中创建一个div,用于放置歌词原文。
:addClass('Lyrics_original') --添加Lyrics_original的class。
:attr('lang', llang)
:cssText(lstyle) --添加设置的style。
:node
:done() --完成这个div。
:tag('div') --与上面的类似,用于放置歌词译文。
:addClass('Lyrics_translated')
:cssText(rstyle)
:node(rlang and module.
:done()
end
end
function module.lyrics(frame) --改写自
--将取用参数的步骤单独列成函数,是为了让模块可以直接取用模板的参数,而使用其他方法取用参数不受此影响。
local args = getArgs(frame, {wrappers='Template:Lyrics'}) --获取传入参数。
|