<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Module%3ANamespace</id>
	<title>Module:Namespace - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Module%3ANamespace"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Module:Namespace&amp;action=history"/>
	<updated>2026-07-10T14:21:14Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Module:Namespace&amp;diff=3609110&amp;oldid=prev</id>
		<title>imported&gt;Hamish：​自Module:Namespace/sandbox合并Pseudo Classes的版本89679958</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Module:Namespace&amp;diff=3609110&amp;oldid=prev"/>
		<updated>2025-10-26T14:53:36Z</updated>

		<summary type="html">&lt;p&gt;自&lt;a href=&quot;/wiki/Module:Namespace/sandbox&quot; title=&quot;Module:Namespace/sandbox&quot;&gt;Module:Namespace/sandbox&lt;/a&gt;合并&lt;a href=&quot;/wiki/Special:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE/Pseudo_Classes&quot; title=&quot;Special:用户贡献/Pseudo Classes&quot;&gt;Pseudo Classes&lt;/a&gt;的&lt;a href=&quot;/wiki/Special:%E5%9B%BA%E5%AE%9A%E9%93%BE%E6%8E%A5/89679958&quot; title=&quot;Special:固定链接/89679958&quot;&gt;版本89679958&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
local data = mw.loadData(&amp;#039;Module:Namespace/data&amp;#039;)&lt;br /&gt;
local mLan = require(&amp;#039;Module:Lan2&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local function Error(msg)&lt;br /&gt;
	return mError.error { &amp;#039;[[Module:Namespace]]錯誤：&amp;#039; .. msg }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function ifempty(ret, val)&lt;br /&gt;
	return ret ~= &amp;#039;&amp;#039; and ret or val&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function inArray(str, arr)&lt;br /&gt;
	for i, v in ipairs(arr) do&lt;br /&gt;
		if str == v then&lt;br /&gt;
			return v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._lan(args, lang)&lt;br /&gt;
	return mLan.main(args,&lt;br /&gt;
		ifempty(lang and lang:lower(), mw.getCurrentFrame():callParserFunction { name = &amp;#039;int&amp;#039;, args = { &amp;#039;Lang&amp;#039; } }), {&lt;br /&gt;
		[&amp;#039;def&amp;#039;] = { &amp;#039;en&amp;#039; }&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._isNamespace(id)&lt;br /&gt;
	id = tostring(id)&lt;br /&gt;
	local PNS, _PNSIsTalk = p._isPseudoNamespace(id)&lt;br /&gt;
	return&lt;br /&gt;
		PNS&lt;br /&gt;
		or mw.site.namespaces[tonumber(id) or id:lower()] and mw.site.namespaces[tonumber(id) or id:lower()].id&lt;br /&gt;
		or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.namespace(frame)&lt;br /&gt;
	local args&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 not getArgs then&lt;br /&gt;
			getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
		end&lt;br /&gt;
		args = getArgs(frame, { parentFirst = true })&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;
		args = frame&lt;br /&gt;
		if type(args) ~= type({}) then args = { frame } end&lt;br /&gt;
	end&lt;br /&gt;
	id = tostring(args.namespace or args[1])&lt;br /&gt;
	local PNS, _PNSIsTalk = p._isPseudoNamespace()&lt;br /&gt;
	return (PNS or mw.title.getCurrentTitle().namespace) == p._isNamespace(id) and (args[&amp;#039;then&amp;#039;] or args[2]) or (args[&amp;#039;else&amp;#039;] or args[3])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local MsgCallFunc = {&lt;br /&gt;
	[&amp;#039;NamespacesDisplay&amp;#039;] = (function(nsid)&lt;br /&gt;
		return data.Namespace[tostring(nsid)]&lt;br /&gt;
	end),&lt;br /&gt;
	[&amp;#039;NamespacesConversionDisplay&amp;#039;] = (function(nsid)&lt;br /&gt;
		return data.Namespace[tostring(nsid) .. &amp;#039;-display&amp;#039;] or data.Namespace[tostring(nsid)]&lt;br /&gt;
	end),&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p._PseudoNamespaceDisplay(lang, ns, isTalk)&lt;br /&gt;
	if not inArray(ns, data[&amp;#039;PseudoNamespace&amp;#039;][&amp;#039;list&amp;#039;]) then&lt;br /&gt;
		error(&amp;#039;Input pseudo namespace error.&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local display = p._lan(data.PseudoNamespace.messages[isTalk and &amp;#039;talk&amp;#039; or &amp;#039;main&amp;#039;], lang)&lt;br /&gt;
	display = mw.ustring.gsub(display, &amp;#039;$1&amp;#039;, p._lan(data.PseudoNamespace[ns], lang))&lt;br /&gt;
	return display&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for key, func in pairs(MsgCallFunc) do&lt;br /&gt;
	p[&amp;#039;_&amp;#039; .. key] = function(lang, ns)&lt;br /&gt;
		if type(lang) == &amp;#039;table&amp;#039; then&lt;br /&gt;
			ns = lang[2]&lt;br /&gt;
			lang = lang[1]&lt;br /&gt;
		end&lt;br /&gt;
		local PNS, PNSIsTalk&lt;br /&gt;
		local lang = lang&lt;br /&gt;
		local nsid&lt;br /&gt;
		if ns then&lt;br /&gt;
			if ns == &amp;#039;&amp;#039; then&lt;br /&gt;
				nsid = -3&lt;br /&gt;
			else&lt;br /&gt;
				local nsid_info = mw.site.namespaces[tonumber(ns)] or mw.site.namespaces[ns]&lt;br /&gt;
				if not nsid_info then&lt;br /&gt;
					PNS, PNSIsTalk = p._isPseudoNamespace(ns, false)&lt;br /&gt;
					nsid = -3&lt;br /&gt;
				else&lt;br /&gt;
					nsid = nsid_info.id&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			local title = mw.title.getCurrentTitle()&lt;br /&gt;
			nsid = title.namespace&lt;br /&gt;
			if nsid == 0 or nsid == 1 then&lt;br /&gt;
				PNS, PNSIsTalk = p._isPseudoNamespace(title, true)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if PNS then&lt;br /&gt;
			return p._pseudoNamespaceDisplay(lang, PNS, PNSIsTalk)&lt;br /&gt;
		elseif nsid &amp;lt; -2 then&lt;br /&gt;
			error(&amp;#039;Input namespace error.&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		return p._lan(MsgCallFunc[key](nsid), lang)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	p[key] = function(frame)&lt;br /&gt;
		local args = require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame, {&lt;br /&gt;
			valueFunc = function(key, value)&lt;br /&gt;
				if key == 2 then&lt;br /&gt;
					return type(value) == &amp;#039;string&amp;#039; and mw.text.trim(value) or value&lt;br /&gt;
				elseif value then&lt;br /&gt;
					value = mw.text.trim(value)&lt;br /&gt;
					if value ~= &amp;#039;&amp;#039; then&lt;br /&gt;
						return value&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				return nil&lt;br /&gt;
			end&lt;br /&gt;
		})&lt;br /&gt;
		local statue, wt = pcall(p[&amp;#039;_&amp;#039; .. key], args)&lt;br /&gt;
		if statue then&lt;br /&gt;
			return wt&lt;br /&gt;
		end&lt;br /&gt;
		return tostring(mw.html.create(&amp;#039;span&amp;#039;):attr(&amp;#039;style&amp;#039;, &amp;#039;color:red;&amp;#039;):wikitext(&lt;br /&gt;
			p._lan({&lt;br /&gt;
				[&amp;#039;en&amp;#039;] = &amp;#039;Input namespace error&amp;#039;,&lt;br /&gt;
				[&amp;#039;zh-hans&amp;#039;] = &amp;#039;输入命名空间错误&amp;#039;,&lt;br /&gt;
				[&amp;#039;zh-hant&amp;#039;] = &amp;#039;輸入命名空間錯誤&amp;#039;&lt;br /&gt;
			}, lang)&lt;br /&gt;
		):done())&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._isPseudoNamespace(ns, isPage)&lt;br /&gt;
	if not ns then&lt;br /&gt;
		ns = mw.title.getCurrentTitle()&lt;br /&gt;
		isPage = true&lt;br /&gt;
	elseif ns == &amp;#039;&amp;#039; then&lt;br /&gt;
		return nil, false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local success, titleObj&lt;br /&gt;
	if type(ns) == type(&amp;#039;&amp;#039;) then&lt;br /&gt;
		if not ns:match(&amp;#039;:&amp;#039;) then&lt;br /&gt;
			ns = ns .. &amp;#039;:&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		success, titleObj = pcall(mw.title.new, ns)&lt;br /&gt;
		if not success or not titleObj or not titleObj:inNamespaces(0, 1) then&lt;br /&gt;
			return nil, false&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local split = mw.text.split(titleObj.text, &amp;#039;:&amp;#039;)&lt;br /&gt;
		if not isPage and (#split &amp;gt; 2 or (split[2] ~= &amp;#039;&amp;#039; and split[2] ~= nil)) then&lt;br /&gt;
			-- isPage = false 時僅允許：&lt;br /&gt;
			-- 1. PNS&lt;br /&gt;
			-- 2. PNS:&lt;br /&gt;
			return nil, false&lt;br /&gt;
		end&lt;br /&gt;
		ns = split[1] -- 移除冒號後的東西&lt;br /&gt;
	elseif type(ns) == type({}) and type(ns.text) == type(&amp;#039;&amp;#039;) and isPage then&lt;br /&gt;
		-- 如果傳入頁面物件，則 isPage 必然要是 true&lt;br /&gt;
		if not ns:inNamespaces(0, 1) then&lt;br /&gt;
			return nil, false&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		ns = mw.text.split(ns.text, &amp;#039;:&amp;#039;)[1] -- 移除冒號後的東西&lt;br /&gt;
	else&lt;br /&gt;
		error(string.format(&lt;br /&gt;
			&amp;#039;bad argument #1 to \&amp;#039;_isPseudoNamespace[isPage=%s]\&amp;#039; (%s expected, got %s)&amp;#039;,&lt;br /&gt;
			isPage and &amp;#039;true&amp;#039; or &amp;#039;false&amp;#039;,&lt;br /&gt;
			isPage and &amp;#039;string or mw.title object&amp;#039; or &amp;#039;string&amp;#039;,&lt;br /&gt;
			type(ns)&lt;br /&gt;
		))&lt;br /&gt;
	end&lt;br /&gt;
	if inArray(ns, data[&amp;#039;PseudoNamespace&amp;#039;][&amp;#039;list&amp;#039;]) then&lt;br /&gt;
		return ns, titleObj.namespace == 1&lt;br /&gt;
	end&lt;br /&gt;
	return nil, false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.ispseudo(frame)&lt;br /&gt;
	local arg = require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame)[&amp;#039;1&amp;#039;]&lt;br /&gt;
	local PNS, _isTalk = p._isPseudoNamespace(arg, true)&lt;br /&gt;
	return PNS or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p._PNSArray = data[&amp;#039;PseudoNamespace&amp;#039;][&amp;#039;list&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Hamish</name></author>
	</entry>
</feed>