模块:少女歌剧

来自萌娘文库
サンムル讨论 | 贡献2020年8月13日 (四) 19:56的版本
跳转至: 导航搜索

此模块的文档可以在模块:少女歌剧/doc创建

local module = {}

function module.scenario(frame)
	local args = frame.args
	
	local node = mw.html.create("table")
		:addClass("wikitable")
		:tag("tr")
			:tag("th")
				:css("width", "50%")
				:wikitext("原文")
				:done()
			:tag("th")
				:css("width", "50%")
				:wikitext("译文")
				:done()
			:done()
	local actor = "???"
	local counter = 0
	for index, line in ipairs(args) do
		line = mw.text.trim(line)
		
		if mw.ustring.find(mw.text.trim(line), "^@[^@]") then
			actor = mw.text.trim(mw.ustring.sub(line, 2))
			--error(mw.dumpObject({index,actor}))
			if counter == 1 then
				node:tag("td")
				node = node.done()
				counter = 0
			end
		elseif mw.ustring.find(mw.text.trim(line), "^-[^-]") then
			local chapter = mw.text.trim(mw.ustring.sub(line, 2))
			if counter == 1 then
				node:tag("td")
				error(tostring(node))
				node = node.done()
				counter = 0
			end
			node:tag("tr"):tag("th")
				:attr("colspan", 2)
				:wikitext(chapter)
			counter = 0
		else
			if counter == 0 then
				node = node:tag("tr")
			end
			local rawtext = mw.ustring.gsub(line, "[-@][-@]", function(match)
					return mw.ustring.sub(match, 1, 2)
				end)
			node:tag("td")
				:wikitext("<sup>")
				:wikitext(actor)
				:wikitext("</sup>")
				:wikitext(rawtext)
			if counter == 1 then
				node = node:done()
			end
			
			counter = math.mod(counter + 1, 2)
		end
	end
	
	return tostring(node)
end

return module