Mô đun:Demo

local p = {}

--creates a frame object that cannot access any of the parent's args
--unless a table containing a list keys of not to inherit is provided
function disinherit(frame, onlyTheseKeys)
	local parent = frame:getParent() or frame
	local orphan = parent:newChild{}
	orphan.getParent = parent.getParent --returns nil
	orphan.args = {}
	if onlyTheseKeys then
		local family = {parent, frame}
		for f = 1, 2 do
			for k, v in pairs(family[f] and family[f].args or {}) do
				orphan.args[k] = orphan.args[k] or v
			end
		end
		parent.args = mw.clone(orphan.args)
		setmetatable(orphan.args, nil)
		for _, k in ipairs(onlyTheseKeys) do
			rawset(orphan.args, k, nil)
		end
	end
	return orphan, parent
end

function getSeparator(args, default)
	local br = tonumber(args.br) and ('<br>'):rep(args.br) or args.br
	local sep = args.sep or br or default
	return #sep > 0 and ' ' .. sep .. ' ' or sep
end

function p.get(frame, arg, passArgs)
	local orphan, frame = disinherit(frame, passArgs and {arg or 1})
	local code = frame.args[arg or 1] or ''
	if code:match'UNIQ%-%-nowiki' then
		code = mw.text.unstripNoWiki(code)
			:gsub('&lt;', '<')
			:gsub('&gt;', '>')
			:gsub('&quot;', '"')
			-- Replace `&#125;%-` with `}-` because of some server quirk leading to
			-- =mw.text.unstripNoWiki(mw.getCurrentFrame():preprocess('<nowiki>}-</nowiki>'))
			-- outputting `&#125;-` instead of `}-`, while it's ok with `<nowiki>} -</nowiki>`
			:gsub('&#125;%-', '}-')
			-- The same with `-&#123;`
			:gsub('%-&#123;', '-{')
	end
	local kill_categories = frame.args.demo_kill_categories or frame.args.nocat
	return {
		source = code,
		output = orphan:preprocess(code):gsub(kill_categories and '%[%[Thể loại.-%]%]' or '', ''),
		frame = frame
	}
end

function p.main(frame, demoTable)
	local show = demoTable or p.get(frame)
	local args = show.frame.args
	if show[args.result_arg] then
		return show[args.result_arg]
	end
	local yesno = require('Mô đun:Yesno')
	args.reverse = yesno(args.reverse, false)
	args.sep = getSeparator(args, '')
	local source = frame:extensionTag{
		name = 'syntaxhighlight',
		args = {
			lang = 'wikitext',
			style = args.style
		},
		content = show.source
	}
	return args.reverse and
		show.output .. args.sep .. source or
		source .. args.sep .. show.output
end

-- Alternate function to return an inline result
function p.inline(frame, demoTable)
	local show = demoTable or p.get(frame)
	local args = show.frame.args
	if show[args.result_arg] then
		return show[args.result_arg]
	end
	local yesno = require('Mô đun:Yesno')
	args.reverse = yesno(args.reverse, false)
	args.sep = getSeparator(args, args.reverse and '←' or '→')
	local source =  frame:extensionTag{
		name = 'syntaxhighlight',
		args = {
			lang = 'wikitext',
			inline = true,
			style = args.style
		},
		content = show.source
	}
	return args.reverse and
		show.output .. args.sep .. source or
		source .. args.sep .. show.output
end

--passing of args into other module without preprocessing
function p.module(frame)
	local orphan, frame = disinherit(frame, {
		'demo_template',
		'demo_module',
		'demo_module_func',
		'demo_main',
		'demo_sep',
		'demo_br',
		'demo_result_arg',
		'demo_kill_categories',
		'nocat'
	})
	local template = frame.args.demo_template and 'Bản mẫu:'..frame.args.demo_template
	local demoFunc = frame.args.demo_module_func or 'main\n'
	local demoModule = require('Mô đun:' .. frame.args.demo_module)[demoFunc:match('^%s*(.-)%s*$')]
	frame.args.br, frame.args.result_arg = frame.args.demo_sep or frame.args.demo_br, frame.args.demo_result_arg
	local kill_categories = frame.args.demo_kill_categories or frame.args.nocat
	if demoModule then
		local named = {insert = function(self, ...) table.insert(self, ...) return self end}
		local source = {insert = named.insert, '{{', frame.args.demo_template or frame.args.demo_module, '\n'}
		if not template then
			source:insert(2, '#gọi:'):insert(4, '|'):insert(5, demoFunc)
		end
		local insertNamed = #source + 1
		for k, v in pairs(orphan.args) do
			local nan, insert = type(k) ~= 'number', {v}
			local target = nan and named or source
			target:insert'|'
			if nan then
				target:insert(k):insert'=':insert'\n'
				table.insert(insert, 1, #target)
			end
			target:insert(unpack(insert))
			local nowiki = v:match('nowiki')
			if nowiki or v:match('{{.-}}') then
				orphan.args[k] = frame:preprocess(nowiki and mw.text.unstripNoWiki(v) or v)
			end
		end
		source:insert'}}'
		table.insert(source, insertNamed, table.concat(named))
		return p.main(orphan, {
			source = table.concat(source), "<>'|=~",
			output = tostring(demoModule(orphan)):gsub(kill_categories and '%[%[Thể loại.-%]%]' or '', ''),
			frame = frame
		})
	else
		return "LỖI: Chức năng mô đun không hợp lệ: "..demoFunc
	end
end

return p
Chúng tôi bán
Bài viết liên quan
Tổng hợp các shop quần áo TAOBAO đã cập bến trên Shopee
Tổng hợp các shop quần áo TAOBAO đã cập bến trên Shopee
Không cần đặt hàng qua trung gian cầu kỳ lại hay trôi nổi lạc hàng, lưu ngay 6 tọa độ đồ nam Taobao cực xịn trên shopee
Sơn mài - hình thức nghệ thuật đắt giá của Việt Nam
Sơn mài - hình thức nghệ thuật đắt giá của Việt Nam
Sơn mài là một hình thức tranh sơn phết truyền thống của Việt Nam được tạo ra từ một loại sơn độc được thu hoạch từ một vùng xa xôi của đất nước
Gunpla Warfare - Game mô phỏng lái robot chiến đấu cực chất
Gunpla Warfare - Game mô phỏng lái robot chiến đấu cực chất
Gundam Battle: Gunpla Warfare hiện đã cho phép game thủ đăng ký trước
Nhật thực: Sự kỳ diệu của tự nhiên HAY sự báo thù của quỷ dữ?
Nhật thực: Sự kỳ diệu của tự nhiên HAY sự báo thù của quỷ dữ?
Từ thời xa xưa, con người đã cố gắng để tìm hiểu xem việc mặt trời bị che khuất nó có ảnh hưởng gì đến tương lai