<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans">
	<id>https://wiki.ottohub.cn/index.php?action=history&amp;feed=atom&amp;title=Module%3ASpecial_wikitext</id>
	<title>Module:Special wikitext - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ottohub.cn/index.php?action=history&amp;feed=atom&amp;title=Module%3ASpecial_wikitext"/>
	<link rel="alternate" type="text/html" href="https://wiki.ottohub.cn/index.php?title=Module:Special_wikitext&amp;action=history"/>
	<updated>2026-09-13T10:12:21Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://wiki.ottohub.cn/index.php?title=Module:Special_wikitext&amp;diff=7962&amp;oldid=prev</id>
		<title>OctoberSama：​创建页面，内容为“--//源代码来自维基百科:https://zh.wikipedia.org/w/index.php?title=Module:Special_wikitext&amp;oldid=65986479 --//该部分代码使用CC BY-SA 4.0许可证 (https://creativecommons.org/licenses/by-sa/4.0/) local p={ 	--會被抓取wikitext的關鍵字，此處請設定為與Module:Module wikitext一致 	wikiTextKey = &#039;_addText&#039; }  function p.displayWikitext() 	local body = &#039;&#039; 	local title = mw.title.getCurrentTitle() 	local this_frame = mw.getCurrentFr…”</title>
		<link rel="alternate" type="text/html" href="https://wiki.ottohub.cn/index.php?title=Module:Special_wikitext&amp;diff=7962&amp;oldid=prev"/>
		<updated>2025-06-17T11:52:30Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“--//源代码来自维基百科:https://zh.wikipedia.org/w/index.php?title=Module:Special_wikitext&amp;amp;oldid=65986479 --//该部分代码使用CC BY-SA 4.0许可证 (https://creativecommons.org/licenses/by-sa/4.0/) local p={ 	--會被抓取wikitext的關鍵字，此處請設定為與&lt;a href=&quot;/Module:Module_wikitext&quot; title=&quot;Module:Module wikitext&quot;&gt;Module:Module wikitext&lt;/a&gt;一致 	wikiTextKey = &amp;#039;_addText&amp;#039; }  function p.displayWikitext() 	local body = &amp;#039;&amp;#039; 	local title = mw.title.getCurrentTitle() 	local this_frame = mw.getCurrentFr…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--//源代码来自维基百科:https://zh.wikipedia.org/w/index.php?title=Module:Special_wikitext&amp;amp;oldid=65986479&lt;br /&gt;
--//该部分代码使用CC BY-SA 4.0许可证 (https://creativecommons.org/licenses/by-sa/4.0/)&lt;br /&gt;
local p={&lt;br /&gt;
	--會被抓取wikitext的關鍵字，此處請設定為與[[Module:Module wikitext]]一致&lt;br /&gt;
	wikiTextKey = &amp;#039;_addText&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.displayWikitext()&lt;br /&gt;
	local body = &amp;#039;&amp;#039;&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	local this_frame = mw.getCurrentFrame()&lt;br /&gt;
	&lt;br /&gt;
	local pagename = title.nsText..&amp;#039;:&amp;#039;..title.rootText&lt;br /&gt;
	local pagesubname = mw.ustring.gsub(title.fullText,&amp;quot;[^:\/]*:[^\/]+&amp;quot;,&amp;#039;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	--[[en:mediawiki:clearyourcache]] --[[en:special:diff/332947732]]&lt;br /&gt;
	local notice = this_frame:preprocess(&amp;#039;{{#invoke:Special wikitext/Template|getNotices|&amp;#039;..pagename..&amp;#039;|&amp;#039;..pagesubname..&amp;#039;}}&amp;#039;) or &amp;#039;&amp;#039;&lt;br /&gt;
	body = body .. &amp;#039;&amp;lt;div class=&amp;quot;mw-editnotice-content&amp;quot;&amp;gt;&amp;#039;..notice..&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	--將原有函數結果外邊以div包裹&lt;br /&gt;
	local wikitext = p.check() or &amp;#039;&amp;#039;&lt;br /&gt;
	body = body .. &amp;#039;&amp;lt;div class=&amp;quot;mw-_addText-content&amp;quot;&amp;gt;&amp;#039;..wikitext..&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	return body&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.check()&lt;br /&gt;
	--使用頁面內容模型來判斷格式&lt;br /&gt;
	local content_model = mw.ustring.lower(mw.title.getCurrentTitle().contentModel)&lt;br /&gt;
	--根據文檔格式選用適當的解析模式&lt;br /&gt;
	if content_model == &amp;#039;json&amp;#039; then&lt;br /&gt;
		return _getJSONwikitext()&lt;br /&gt;
	elseif content_model == &amp;#039;js&amp;#039; or content_model == &amp;#039;javascript&amp;#039; or content_model == &amp;#039;text&amp;#039; then&lt;br /&gt;
		return _getJSwikitext()&lt;br /&gt;
	elseif content_model == &amp;#039;css&amp;#039; or content_model == &amp;#039;sanitized-css&amp;#039; then&lt;br /&gt;
		return _getCSSwikitext()&lt;br /&gt;
	end&lt;br /&gt;
	--若不是json、js、css則返回空字串&lt;br /&gt;
	return &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--//合併多個wikitext字串，並以換行分隔&lt;br /&gt;
local TemplateParameters = {}&lt;br /&gt;
function _addText(input_str,new_str,escape)&lt;br /&gt;
	if not TemplateParameters._get_escape then TemplateParameters = require(&amp;#039;Module:TemplateParameters&amp;#039;) end&lt;br /&gt;
	if new_str~=&amp;#039;&amp;#039; then&lt;br /&gt;
		if input_str~=&amp;#039;&amp;#039; then input_str = input_str .. &amp;#039;\n&amp;#039; end&lt;br /&gt;
		local text = new_str&lt;br /&gt;
		if escape then text = TemplateParameters._get_escape(new_str) end&lt;br /&gt;
		input_str = input_str .. text&lt;br /&gt;
	end&lt;br /&gt;
	return input_str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--//讀取wikitext字串，並忽略註解尾部&lt;br /&gt;
function _getString(str)&lt;br /&gt;
	local test_str = mw.ustring.match(str, &amp;quot;[^\n]*%*/&amp;quot;)&lt;br /&gt;
	if test_str then test_str = mw.ustring.sub(test_str,1,-3) &lt;br /&gt;
	else test_str = str end&lt;br /&gt;
	local trim_check = mw.text.trim(test_str)&lt;br /&gt;
	local first_char = mw.ustring.sub(trim_check,1,1)&lt;br /&gt;
	if first_char == mw.ustring.sub(trim_check,-1,-1) and (first_char == &amp;quot;&amp;#039;&amp;quot; or first_char == &amp;#039;&amp;quot;&amp;#039;) then&lt;br /&gt;
		return mw.ustring.sub(trim_check,2,-2)&lt;br /&gt;
	else&lt;br /&gt;
		return test_str&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--//讀取CSS之 _addText { content:&amp;quot;XXX&amp;quot; } 模式的字串&lt;br /&gt;
function _getContentText(str)&lt;br /&gt;
	local wikitext = &amp;#039;&amp;#039;&lt;br /&gt;
	xpcall( function()&lt;br /&gt;
		local it=mw.ustring.gmatch(str, p.wikiTextKey .. &amp;quot;%s*%{[^c%}]*content%s*:%s*[^\n]*&amp;quot;)&lt;br /&gt;
		local text=it()&lt;br /&gt;
		while text do&lt;br /&gt;
			local temp_text = mw.ustring.gsub(mw.text.trim(&lt;br /&gt;
				mw.ustring.match(text,&amp;quot;content%s*:%s*[^\n]*&amp;quot;), &amp;quot;\t\r\n\f ;}&amp;quot;&lt;br /&gt;
			),&amp;quot;%s*content%s*:%s*&amp;quot;,&amp;quot;&amp;quot;)&lt;br /&gt;
			if wikitext ~= &amp;#039;&amp;#039; then wikitext = wikitext .. &amp;#039;\n&amp;#039; end&lt;br /&gt;
			wikitext = wikitext .. _getString(temp_text)&lt;br /&gt;
			text=it()&lt;br /&gt;
		end&lt;br /&gt;
	end, function()end )&lt;br /&gt;
	return wikitext&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--//讀取物件定義模式為 _addText=XXX 或 _addText:XXX 模式的字串&lt;br /&gt;
function _getObjText(str)&lt;br /&gt;
	local wikitext = &amp;#039;&amp;#039;&lt;br /&gt;
	xpcall( function()&lt;br /&gt;
		local it=mw.ustring.gmatch(str, p.wikiTextKey .. &amp;quot;%s*[%=:]%s*[^\n]*&amp;quot;)&lt;br /&gt;
		local text=it()&lt;br /&gt;
		while text do&lt;br /&gt;
			local temp_text = mw.ustring.gsub(&lt;br /&gt;
				mw.text.trim(text, &amp;quot;\t\r\n\f ;}&amp;quot;),&lt;br /&gt;
			p.wikiTextKey .. &amp;quot;%s*[%=:]%s*&amp;quot;,&amp;quot;&amp;quot;)&lt;br /&gt;
			if wikitext ~= &amp;#039;&amp;#039; then wikitext = wikitext .. &amp;#039;\n&amp;#039; end&lt;br /&gt;
			wikitext = wikitext .. _getString(temp_text)&lt;br /&gt;
			text=it()&lt;br /&gt;
		end&lt;br /&gt;
	end, function()end )&lt;br /&gt;
	return wikitext&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--//分析CSS中符合條件的wikitext&lt;br /&gt;
function _getCSSwikitext(input_string)&lt;br /&gt;
	local this_frame = mw.getCurrentFrame()&lt;br /&gt;
	local wikitext = &amp;#039;&amp;#039;&lt;br /&gt;
	local css_text = input_string or mw.title.getCurrentTitle():getContent()&lt;br /&gt;
	--匹配 _addText { content:&amp;quot;XXX&amp;quot; } 模式&lt;br /&gt;
	wikitext = _addText(wikitext, _getContentText(css_text), true)&lt;br /&gt;
	--同時亦匹配 /* _addText:XXX */ 模式&lt;br /&gt;
	wikitext = _addText(wikitext, _getObjText(css_text), true)&lt;br /&gt;
	--若讀到有效字串，則呼叫解析器&lt;br /&gt;
	if wikitext ~= &amp;#039;&amp;#039; then wikitext = this_frame:preprocess(wikitext) end&lt;br /&gt;
	return wikitext&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--//分析JavaScript中符合條件的wikitext&lt;br /&gt;
function _getJSwikitext(input_string)&lt;br /&gt;
	local this_frame = mw.getCurrentFrame()&lt;br /&gt;
	local wikitext = &amp;#039;&amp;#039;&lt;br /&gt;
	local js_text = input_string or mw.title.getCurrentTitle():getContent()&lt;br /&gt;
	wikitext = _addText(wikitext, _getObjText(js_text), true)&lt;br /&gt;
	--若讀到有效字串，則呼叫解析器&lt;br /&gt;
	if wikitext ~= &amp;#039;&amp;#039; then wikitext = this_frame:preprocess(wikitext) end&lt;br /&gt;
	return wikitext&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--//分析JSON中符合條件的wikitext&lt;br /&gt;
function _getJSONwikitext(input_string)&lt;br /&gt;
	local this_frame = mw.getCurrentFrame()&lt;br /&gt;
	local wikitext = &amp;#039;&amp;#039;&lt;br /&gt;
	xpcall( function()&lt;br /&gt;
		local json_data = mw.text.jsonDecode(input_string or mw.title.getCurrentTitle():getContent())&lt;br /&gt;
		for k,v in pairs(json_data) do &lt;br /&gt;
			if mw.ustring.match(k,p.wikiTextKey) and type(v) == type(&amp;#039;&amp;#039;)then&lt;br /&gt;
				wikitext = _addText(wikitext, v)&lt;br /&gt;
			end&lt;br /&gt;
			--//如果是陣列物件會多包一層&lt;br /&gt;
			if type(v) == type({}) then&lt;br /&gt;
				for testArr_k,testArr_v in pairs(v) do &lt;br /&gt;
					if mw.ustring.match(testArr_k,p.wikiTextKey) and type(testArr_v) == type(&amp;#039;&amp;#039;)then&lt;br /&gt;
						wikitext = _addText(wikitext, testArr_v)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end, function()end )&lt;br /&gt;
	if wikitext ~= &amp;#039;&amp;#039; then wikitext = this_frame:preprocess(wikitext) end&lt;br /&gt;
	return wikitext&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--除錯模式 : 使用 #invoke 或 console 除錯的呼叫方式 (預設模式會直接讀取頁面內容)&lt;br /&gt;
local lib_arg = {}&lt;br /&gt;
function _getTestFromFrame(frame)&lt;br /&gt;
	-- For calling from #invoke.&lt;br /&gt;
    local str = &amp;#039;&amp;#039;&lt;br /&gt;
    if frame == mw.getCurrentFrame() then&lt;br /&gt;
        -- We&amp;#039;re being called via #invoke. The args are passed through to the module&lt;br /&gt;
        -- from the template page, so use the args that were passed into the template.&lt;br /&gt;
        if lib_arg.getArgs == nil then lib_arg = require(&amp;#039;Module:Arguments&amp;#039;) end&lt;br /&gt;
        local args = lib_arg.getArgs(frame) --frame&lt;br /&gt;
        str = args[1] or args[&amp;#039;1&amp;#039;] or args.str&lt;br /&gt;
    else&lt;br /&gt;
        -- We&amp;#039;re being called from another module or from the debug console, so assume&lt;br /&gt;
        -- the args are passed in directly.&lt;br /&gt;
        if type(frame) == type({}) then str = frame[1] or frame[&amp;#039;1&amp;#039;] or frame.str&lt;br /&gt;
        else str = tostring(frame) end&lt;br /&gt;
    end&lt;br /&gt;
    if mw.text.trim(str or &amp;#039;&amp;#039;) == &amp;#039;&amp;#039; then str = mw.title.getCurrentTitle():getContent() end&lt;br /&gt;
    return str&lt;br /&gt;
end&lt;br /&gt;
function p.getCSSwikitext(frame) return _getCSSwikitext(_getTestFromFrame(frame)) end&lt;br /&gt;
function p.getJSwikitext(frame) return _getJSwikitext(_getTestFromFrame(frame)) end&lt;br /&gt;
function p.getJSONwikitext(frame) return _getJSONwikitext(_getTestFromFrame(frame)) end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>OctoberSama</name></author>
	</entry>
</feed>