มอดูล:WrapIndexAttribute

จาก วิกิซอร์ซ

เอกสารการใช้งานสำหรับมอดูลนี้อาจสร้างขึ้นที่ มอดูล:WrapIndexAttribute/doc

p = {}

--[=[

Use getContent() as suggested by User:Tpt in,
https://www.mediawiki.org/wiki/User_talk:Tpt#Proofread_Page_Index_attributes

Note: result from getContent() is generated by,
https://github.com/wikimedia/mediawiki-extensions-ProofreadPage/blob/e7101acc5a5b7e3ba2a3705bc29226a0d480fb9f/includes/Index/IndexContentHandler.php#L111

Result of mw.title.makeTitle('Index', 'พระราชบัญญัติจราจรทางบก พ.ศ. ๒๕๒๒.pdf'):getContent() is as follow,

{{:MediaWiki:Proofreadpage_index_template
|ประเภท=วารสาร
|ชื่อ=[[{{เลขอารบิก|{{basefilename}}}}]]
|ภาษา=th
|เล่ม=ราชกิจจานุเบกษา, เล่ม 96, ตอน 8, ฉบับพิเศษ หน้า 1–59, 29 มกราคม 2522
|ผู้สร้างสรรค์={{ลสย|สภานิติบัญญัติแห่งชาติ (พ.ศ. 2520)}}; {{ลผส|พระบาทสมเด็จพระปรมินทรมหาภูมิพลอดุลยเดช}}; {{ลผส|เกรียงศักดิ์ ชมนันทน์}}
|ผู้แปล=
|บรรณาธิการ=
|ผู้วาดภาพประกอบ=
|สถานศึกษา=
|ผู้เผยแพร่={{ลสย|สำนักเลขาธิการคณะรัฐมนตรี}}
|สถานที่=กรุงเทพฯ{{ดัชนีที่ผสานแล้ว|yes}}
|ปี=2522
|รหัส=
|ISBN=
|OCLC=
|LCCN=
|BNF_ARK=
|ARC=
|ที่มา=pdf
|ภาพ=1
|ความคืบหน้า=C
|หน้า=<pagelist
1 = 1
1to9999 = thai
/>
|จำนวน=
|หมายเหตุ=
|Width=
|Css=
|Header={{หรก|5|น={{{pagenum}}}|ล=๙๖|ต=๘|ว=๒๙ มกราคม ๒๕๒๒}}
|Footer=
}}

--]=]

-- This get called for every {{#invoke:...}} invocation, as the module's p object is not cached.
--local content = mw.title.makeTitle('Index', mw.title.getCurrentTitle().baseText):getContent()

function p.new()
	local self = {
		content = mw.title.makeTitle('Index', mw.title.getCurrentTitle().baseText):getContent()
	}
	function self:preprocess0(frame, v)
		-- need to use frame:getParent(), as p.arg2() below not work
		return frame:getParent():preprocess(
			-- not use string.gsub(s, p, '%'), as it will convert '%' to '\000'
			mw.ustring.gsub(self.content, '^{{:MediaWiki:Proofreadpage_index_template(.*)\n}}.*$', v, 1)
		)
	end
	function self:preprocess(frame, v)
		---- need to use frame:getParent(), as p.arg2() below not work
		--return frame:getParent():preprocess(
		--	self.content:gsub('^{{:MediaWiki:Proofreadpage_index_template\n', '{{'..v..'\n', 1)
		--)
		return self:preprocess0(frame, '{{'..v:gsub('%%', '%%%%')..'%1\n}}')
	end
	return self
end

-- Usage: {{#invoke:WrapIndexAttribute|byTemplate|template name 1|template name 2|...}}
function p.byTemplate(frame)
	local r = {}; local c = p.new()
	for i, v in ipairs(frame.args) do
		r[i] = c:preprocess(frame, mw.text.nowiki(v))
	end
	return table.concat(r)
end

-- Usage: {{#invoke:WrapIndexAttribute|byWikitextAndTemplate|wikitext 1|template name 1|wikitext 2|template name 2|...}}
function p.byWikitextAndTemplate(frame)
	local r = {}; local c = p.new()
	do local func, static, var = ipairs(frame.args) while true do
		local i, v = func(static, var)
		var = i; if var == nil then break end
		r[i] = v

		local i, v = func(static, var)
		var = i; if var == nil then break end
		r[i] = c:preprocess(frame, mw.text.nowiki(v))
	end end
	return table.concat(r)
end

-- Usage: {{#invoke:WrapIndexAttribute|byInvoke|module name 1|module func 1|module name 2|module func 2|...}}
function p.byInvoke(frame)
	local r = {}; local c = p.new()
	do local func, static, var = ipairs(frame.args) while true do
		local i, v = func(static, var)
		var = i; if var == nil then break end
		local i, v2 = func(static, var)
		var = i; if var == nil then break end
		table.insert(r, c:preprocess(frame, '#invoke:'..mw.text.nowiki(v)..'|'..mw.text.nowiki(v2)))
	end end
	return table.concat(r)
end

-- Usage: {{#invoke:WrapIndexAttribute|byWikitextAndInvoke|wikitext 1|module name 1|module func 1|wikitext 2|module name 2|module func 2|...}}
function p.byWikitextAndInvoke(frame)
	local r = {}; local c = p.new()
	do local func, static, var = ipairs(frame.args) while true do
		local i, v = func(static, var)
		var = i; if var == nil then break end
		table.insert(r, v)

		local i, v = func(static, var)
		var = i; if var == nil then break end
		local i, v2 = func(static, var)
		var = i; if var == nil then break end
		table.insert(r, c:preprocess(frame, '#invoke:'..mw.text.nowiki(v)..'|'..mw.text.nowiki(v2)))
	end end
	return table.concat(r)
end

-- Usage: {{#invoke:WrapIndexAttribute|byPattern|... %1 ... %1 ... ...}}
-- Example: {{#invoke:WrapIndexAttribute|byPattern|... {{((}}t1%1{{))}} {{((}}t2%1{{))}} ... {{((}}#invoke:m1{{!}}f1%1{{))}} ... ...}}
function p.byPattern(frame)
	return p.new():preprocess0(frame, frame.args[1])
end

--[[
-- This is a helper function.  It is used by Template:INDEX as follow,
--    {{#invoke:WrapIndexAttribute|byInvoke|WrapIndexAttribute|arg}}
--]]
function p.arg(frame)
	--mw.logObject(frame.args)
	--mw.logObject(frame:getParent().args)
	--mw.logObject(frame:getParent():getParent())
	--mw.logObject(frame:getParent():getParent().args)
	return frame.args[frame:getParent().args[1]]
end

-- Not work, frame:getParent():getParent() always return nil
--function p.arg2(frame)
--	return frame.args[frame:getParent():getParent().args[1]]
--end

return p