置顶公告:【置顶】关于临时开启评论区所有功能的公告(2022.10.22) | 【置顶】关于本站Widget恢复使用的公告
  • 你好~!欢迎来到萌娘百科镜像站!如需查看或编辑,请联系本站管理员注册账号。
  • 本镜像站和其他萌娘百科的镜像站无关,请注意分别。

Module:Lyrics/colors/sub

猛汉♂百科,万男皆可猛的百科全书!转载请标注来源页面的网页链接,并声明引自猛汉百科。内容不可商用。
跳到导航 跳到搜索
Template-info.svg 模块文档  [创建] [刷新]
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;">&emsp;</span>'
	end

	return productWiki
end

function module.charaBlock(frame)
	local args = getArgs(frame)
	return module._charaBlock(args)
end

return module