<?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%3AAdjacent_stations%2Fexperimental</id>
	<title>Module:Adjacent stations/experimental - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Module%3AAdjacent_stations%2Fexperimental"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Module:Adjacent_stations/experimental&amp;action=history"/>
	<updated>2026-06-30T14:10:48Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Module:Adjacent_stations/experimental&amp;diff=4079839&amp;oldid=prev</id>
		<title>imported&gt;David Xuang：​同步参数 // Edit via Wikiplus</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Module:Adjacent_stations/experimental&amp;diff=4079839&amp;oldid=prev"/>
		<updated>2023-01-30T08:24:27Z</updated>

		<summary type="html">&lt;p&gt;同步参数 // Edit via Wikiplus&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local lang = &amp;#039;zh-CN&amp;#039; -- local default language&lt;br /&gt;
&lt;br /&gt;
local i18n = require(&amp;#039;Module:Adjacent stations/i18n&amp;#039;)&lt;br /&gt;
local function getData(system, verify)&lt;br /&gt;
	if verify then&lt;br /&gt;
		local title = mw.title.new(&amp;#039;Module:Adjacent stations/&amp;#039; .. system-- .. &amp;#039;/sandbox&amp;#039;&lt;br /&gt;
		)&lt;br /&gt;
		if not (title and title.exists) then return nil end&lt;br /&gt;
	end&lt;br /&gt;
	return require(&amp;#039;Module:Adjacent stations/&amp;#039; .. system-- .. &amp;#039;/sandbox&amp;#039;&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getLine(data, lineN)&lt;br /&gt;
	if lineN then&lt;br /&gt;
		if data[&amp;#039;aliases&amp;#039;] then&lt;br /&gt;
			lineN = data[&amp;#039;aliases&amp;#039;][mw.ustring.lower(lineN)] or lineN&lt;br /&gt;
		end&lt;br /&gt;
		local default = data[&amp;#039;lines&amp;#039;][&amp;#039;_default&amp;#039;] or {}&lt;br /&gt;
		local line = data[&amp;#039;lines&amp;#039;][lineN] or {}&lt;br /&gt;
		for k, v in pairs(default) do&lt;br /&gt;
			if v then line[k] = line[k] or v end&lt;br /&gt;
		end&lt;br /&gt;
		line[&amp;#039;title&amp;#039;] = line[&amp;#039;title&amp;#039;] and mw.ustring.gsub(line[&amp;#039;title&amp;#039;], &amp;#039;%%1&amp;#039;, lineN)&lt;br /&gt;
		return line, lineN&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local lineN, typeN&lt;br /&gt;
&lt;br /&gt;
local function somethingMissing(name, key, formats)&lt;br /&gt;
	local formatKeys = {}&lt;br /&gt;
	for k in pairs(formats) do&lt;br /&gt;
		table.insert(formatKeys, k)&lt;br /&gt;
	end&lt;br /&gt;
	return name .. &amp;#039; 曾是 &amp;quot;&amp;#039; .. key .. &amp;#039;&amp;quot; 但既没有找到它的条目，也没有找到默认值。选择是： &amp;#039; ..&lt;br /&gt;
		table.concat(formatKeys, &amp;#039;, &amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getStation(station, _Format)&lt;br /&gt;
	if type(_Format) == &amp;#039;table&amp;#039; then&lt;br /&gt;
		local lineNformats = _Format&lt;br /&gt;
		_Format = lineNformats[lineN] or lineNformats[1]&lt;br /&gt;
		if not _Format then&lt;br /&gt;
			error(somethingMissing(&amp;#039;lineN&amp;#039;, lineN, lineNformats))&lt;br /&gt;
		elseif type(_Format) == &amp;#039;table&amp;#039; then&lt;br /&gt;
			local typeNformats = _Format&lt;br /&gt;
			_Format = typeNformats[typeN] or typeNformats[1]&lt;br /&gt;
			if not _Format then&lt;br /&gt;
				error(somethingMissing(&amp;#039;typeN&amp;#039;, typeN, typeNformats))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if typeN then _Format = mw.ustring.gsub(_Format, &amp;#039;%%3&amp;#039;, typeN) end&lt;br /&gt;
	if lineN then _Format = mw.ustring.gsub(_Format, &amp;#039;%%2&amp;#039;, lineN) end&lt;br /&gt;
	return (mw.ustring.match(_Format, &amp;#039;%[%[.+%]%]&amp;#039;)) and (mw.ustring.gsub(_Format, &amp;#039;%%1&amp;#039;, station)) or&lt;br /&gt;
		table.concat { &amp;#039;[[&amp;#039;, mw.ustring.gsub(_Format, &amp;#039;%%1&amp;#039;, station), &amp;#039;|&amp;#039;, station, &amp;#039;]]&amp;#039; }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
&lt;br /&gt;
local function makeInvokeFunction(funcName)&lt;br /&gt;
	-- makes a function that can be returned from #invoke, using&lt;br /&gt;
	-- [[Module:Arguments]]&lt;br /&gt;
	return function (frame)&lt;br /&gt;
		local args = getArgs(frame, {parentOnly = true})&lt;br /&gt;
		return p[funcName](args, frame)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._terminusTable(args, frame)&lt;br /&gt;
	local system = args[1] or args.system&lt;br /&gt;
	lineN = args[2] or args.line&lt;br /&gt;
	local side = mw.ustring.sub(mw.ustring.lower(args[3] or args.side or &amp;#039;&amp;#039;), 1, 1)&lt;br /&gt;
	typeN = args.type&lt;br /&gt;
	local prefix = (side == &amp;#039;r&amp;#039;) and &amp;#039;right&amp;#039; or &amp;#039;left&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	local data = args.data&lt;br /&gt;
	if system or data then&lt;br /&gt;
		data = data or getData(system, true) or error(i18n[lang][&amp;#039;error_line&amp;#039;])&lt;br /&gt;
		local line = getLine(data, lineN) or error(i18n[lang][&amp;#039;error_unknown&amp;#039;](lineN))&lt;br /&gt;
		if typeN and data and data[&amp;#039;aliases&amp;#039;] then typeN = data[&amp;#039;aliases&amp;#039;][mw.ustring.lower(typeN)] or typeN end&lt;br /&gt;
		local Type = line[&amp;#039;types&amp;#039;] and line[&amp;#039;types&amp;#039;][typeN]&lt;br /&gt;
&lt;br /&gt;
		local circular&lt;br /&gt;
		if Type then&lt;br /&gt;
			if Type[&amp;#039;circular&amp;#039;] then&lt;br /&gt;
				-- Type may override the circular status of the line&lt;br /&gt;
				circular = Type[&amp;#039;circular&amp;#039;]&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			circular = line[&amp;#039;circular&amp;#039;]&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		return Type and Type[prefix .. &amp;#039; terminus&amp;#039;] or line[prefix .. &amp;#039; terminus&amp;#039;], data[&amp;#039;station format&amp;#039;] or i18n[lang][&amp;#039;error_format&amp;#039;], circular&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._terminus(args, frame)&lt;br /&gt;
	local var, Format, circular = p._terminusTable(args, frame)&lt;br /&gt;
&lt;br /&gt;
	local function subst(var1, var2)&lt;br /&gt;
		-- var1 is the terminus or table of termini; var2 is the key for the table of termini&lt;br /&gt;
		return type(var1) == &amp;#039;string&amp;#039; and (circular and var1 or getStation(var1, (Format[var1] or Format[1])))&lt;br /&gt;
			or type(var1) == &amp;#039;table&amp;#039; and #var1 &amp;gt; 0 and (circular and var1[var2] or getStation(var1[var2], (Format[var1[var2]] or Format[1])))&lt;br /&gt;
			or &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if Format then&lt;br /&gt;
		if type(var) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			return subst(var)&lt;br /&gt;
		elseif type(var) == &amp;#039;table&amp;#039; and #var &amp;gt; 0 then&lt;br /&gt;
			local t = {subst(var, 1)}&lt;br /&gt;
&lt;br /&gt;
			for i = 2, #var - 1 do&lt;br /&gt;
				t[i] = i18n[lang][&amp;#039;comma&amp;#039;](subst(var, i))&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if #var &amp;gt; 1 then t[#var] = i18n[lang][&amp;#039;or&amp;#039;](subst(var, #var)) end&lt;br /&gt;
			if var[&amp;#039;via&amp;#039;] then&lt;br /&gt;
				if i18n[lang][&amp;#039;via-first&amp;#039;] then&lt;br /&gt;
					table.insert(t, 1, i18n[lang][&amp;#039;via&amp;#039;](subst(var, &amp;#039;via&amp;#039;)))&lt;br /&gt;
				else&lt;br /&gt;
					table.insert(t, i18n[lang][&amp;#039;via&amp;#039;](subst(var, &amp;#039;via&amp;#039;)))&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			return table.concat(t)&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;#039;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return var or &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.terminus = makeInvokeFunction(&amp;#039;_terminus&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;David Xuang</name></author>
	</entry>
</feed>