模块:Lyrics/colors/sub
此模块的文档可以在模块:Lyrics/colors/sub/doc创建
local module = {}
local getArgs = require('Module:Arguments').getArgs
function module._charaBlock(args)
local colors = mw.text.split(mw.ustring.gsub(args.colors, ';+$', ''), ';')
for i, v in ipairs(colors) do
colors[i] = mw.ustring.match(v, '^%s*([^=]+)%f[%s=%z]') -- %f边界判断
end
local charas = mw.text.split(mw.ustring.gsub(args.charas, ';+$', ''), ';')
local groupColor = args.groupColor or ''
local hasGroupColor = false
for k,v in ipairs(charas)do
if v == '合唱' then
charas[k] = v .. '(@nolink)'
break
end
end
if string.find(groupColor, '^color:([^;]+)') then
table.insert(colors, string.match(groupColor, '^color:([^;]+)'))
hasGroupColor = true
end
if string.find(charas[#colors] or '', '^%s*$') then
charas[#colors] = '合唱(@nolink)'
end
if hasGroupColor and charas[#colors]:find('%(@nolink%)$') == nil then
charas[#colors] = charas[#colors]..'(@nolink)'
end
if args['groupName'] then
charas[#colors] = args['groupName']..'(@nolink)'
end
local product = {}
for i, v in ipairs(colors) do
v = string.gsub(v, '\n', '')
repeat
local ban = {
'lg%(.+%)', 'rg%(.+%)', 'rlg%(.+%)', 'rrg%(.+%)', 'co%(.+%)', 'rb%(.+%)', '^%s*$'
}
local flag = false
for index, ptn in ipairs(ban) do
if string.find(v, ptn) then
flag = true
break
end
end
if flag then break end
local charaName = ' '..string.gsub(charas[i], '(.+)%(.+%)', '%1')
local arg = string.gsub(charas[i], '.+%((.-)%)', '%1')
local block = mw.html.create('span')
:css('display', 'inline-block')
:css('color', v)
:tag('span'):css({
width = '10px',
height = '10px',
background = v,
display = 'inline-block'
})
:done():wikitext(charaName)
:allDone()
function link(link, block)
return '[['..link..'|'..tostring(block)..']]'
end
if arg == '@nolink' then
table.insert(product, tostring(block))
elseif arg:find('^@link:.+') then
table.insert(product, link(arg:match('^@link:(.+)'), block))
else
table.insert(product, link(charas[i], block))
end
until true
end
local productWiki = ''
for i, v in ipairs(product) do
productWiki = productWiki..v..'<span style="cursor:default; -webkit-user-select:none; -moz-user-select:none; -ms-user-select:none; -o-user-select:none; user-select:none;"> </span>'
end
return productWiki
end
function module.charaBlock(frame)
local args = getArgs(frame)
return module._charaBlock(args)
end
return module