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

Module:SectionEmbed

猛汉♂百科,万男皆可猛的百科全书!转载请标注来源页面的网页链接,并声明引自猛汉百科。内容不可商用。
跳到导航 跳到搜索
Template-info.svg 模块文档  [创建] [刷新]
local module = {}

local getArgs = require('Module:Arguments').getArgs

function errorMsg(text)
	error(text..'[[分类:含有错误嵌入片段的页面]]')
end

function module._main(args, frame)
	local titleName = args['page'] or ''
	if titleName == '' then errorMsg('请传入要载入内容所在的页面!') end
	local section = args['id'] or ''
	section = string.gsub(section, '([%%%(%)%.%+%-%*%?%[%]%^%$])', '%%%1')
	local params = args
	params['page'] = nil
	params['id'] = nil
	
	local title = mw.title.new(titleName)
	local redirect = ''
	local content = title:getContent()
	if content == nil then errorMsg('页面名无效,请确认传入的页面名是否正确!') end
	if string.find(content, '^#REDIRECT%s+%[%[.+%]%]%s*$') or string.find(content, '^#重定向%s+%[%[.+%]%]%s*$') then
		redirect = string.gsub(content, '.+%[%[(.+)%]%]%s*$', '%1')
		title = mw.title.new(redirect)
		content = title:getContent()		
		if content == nil then errorMsg('传入的页面【'..titleName..'】为一个重定向页,并且它指向的页面【'..redirect..'】无效!') end
	end
	
	local redirectMsg = ''
	if redirect ~= '' then redirectMsg = '(重定向至'..redirect..')' end

	local ptn = '^(.-)<!%-%-%s*embed:?%s*'..(((section ~= '') and section) or '.-')..
				'%s*%-%->%s*(.-)%s*<!%-%-%s*embed%-end:?%s*'..(((section ~= '') and section) or '.-')..
				'%s*%-%->.-$'
	local sample = content
	content = mw.ustring.gsub(content, ptn, function(s1, s2) 
		s1 = string.gsub(s1, '([^\n]*)\n', function(s3)
			if string.find(s3, '^(==?=?=?[^\n]-==?=?=?)$') then 
				return s3..'\n'
			else
				return ''
			end
		end)
		
		local frame_child = frame:newChild({ title = (((redirect ~= '') and redirect) or titleName), args = params })		
		return string.gsub(frame_child:preprocess(s1..'\n@@@sectionEmbed-target@@@sectionEmbed-target@@@\n'..s2),
				'^.-\n@@@sectionEmbed%-target@@@sectionEmbed%-target@@@\n(.-)$', '%1')
	end)
	if sample == content then
		if section ~= '' then
			errorMsg('嵌入失败,请确认在页面【'..titleName..'】'..redirectMsg..'是否存在id为“'..section..'”的embed嵌入标记,并检查书写是否正确!')	
		else
			errorMsg('嵌入失败,请确认在页面【'..titleName..'】'..redirectMsg..'是否存在embed嵌入标记,并检查书写是否正确!')	
		end
	end
	return content
end

function module.main(frame)
	local args = getArgs(frame)
	return module._main(args, frame)
end

return module