模組:沙盒/TimWu007/RailSystems/doc

此頁面為 Module:沙盒/TimWu007/RailSystems 的說明文件

調用

本模塊支持調用下列函數來獲取數據(或 MediaWiki 內容)。

調用名稱 參數 說明
stationLink

{{#invoke:RailSystems | stationLink
| name=車站名
| system=鐵道系統名
}}

通過車站名獲取車站在鐵道系統中的連結,用於處理條目名不規則或消歧義後的條目。

例如從「朝陽門」轉換至「[[朝阳门站 (北京)|朝阳门]]」。

lineColor

{{#invoke:RailSystems | lineColor
| name=線路編號
| prefix=是否有「#」前綴
| system=鐵道系統名
}}

通過線路編號獲取線路顏色。若 prefix=1 則加上「#」前綴。
lineTitle

{{#invoke:RailSystems | lineTitle
| name=線路編號
| link=0/1
| system=鐵道系統名
}}

通過線路編號獲取線路條目連結。若 link=0 則只返回條目名,否則返回條目連結 Wiki Text,默認 link=1。
lineRichTitle

{{#invoke:RailSystems | lineRichTitle
| name=線路編號
| degrade=無標誌色時,是否自動降級為 lineTitle 結果
| system=鐵道系統名
}}

通過線路編號獲取帶有標誌色裝飾(默認為前置彩色小方塊)的線路條目連結。若 degrade 為 1,則在標誌色未定義時自動返回 lineTitle 的結果。
lineTerminal

{{#invoke:RailSystems | lineTerminal
| name=線路編號
| side=左側(填left)或右側(填right)
| type=終點站類型,可為空
| branch=終點站支線,可為空
| system=鐵道系統名
}}

通過線路編號、方向、類型(可選)及支線(可選)獲得線路終點站連結。
lineTerminalName

{{#invoke:RailSystems | lineTerminalName
| name=線路編號
| side=左側(填left)或右側(填right)
| type=終點站類型,可為空
| branch=終點站支線,可為空
| system=鐵道系統名
}}

通過線路編號、方向、類型(可選)及支線(可選)獲得線路終點站站名。
trainTime

{{#invoke:RailSystems | trainTime
| name=線路編號
| dir=運營方向
| type=首班(填first或F)或末班(填last或L)
| delta=起點站發車到本站到站的時間
| system=鐵道系統名
}}

通過線路編號、運營方向(預定義)、首/末班及始發站到達本站的時間獲得車站首班/末班車時間。
trainDirectionTime

{{#invoke:RailSystems | trainDirectionTime
| name=線路編號
| dir=運營方向
| type=首班(填first或F)或末班(填last或L)
| delta=起點站發車到本站到站的時間
| system=鐵道系統名
}}

通過線路編號、運營方向(預定義)、首/末班及始發站到達本站的時間獲得車站首班/末班車終點站名連結及時間組成的 WikiText。
lineDateMessage

{{#invoke:RailSystems | lineDateMessage
| 日期/時間格式串,可用多個管道符號分隔,
| name=線路編號
| type=線路期數,可為空
| auto_hide=0(超過給定日期不隱藏)/1(超過給定日期自動隱藏),默認為1
| auto_defer=0(比較時按給定日期比較)/1(比較時按給定日期延後一個時間單位比較),默認為0
}}

通過線路編號和期數,顯示距離開通需要的時間。本函數支持自定義日期格式,year、month、day分別表示年、月、日(含單位),ym、date分別表示年月組合、日期,可通過管道符號「|」和其他自定義字符相連。如果 auto_hide 未指定或值為「1」,當該日期已過時,文字將自動隱藏,條目會被加入Category:需要去除時間判斷模板的頁面

使用建議

不建議直接在條目空間中使用 #invoke 語法調用本模塊,而是為每個系統建立自己的系列模板,在模板中引用本模塊。例如,北京地鐵系列條目使用 {{BJS color}} 調用本模塊的 lineColor 方法。

一部分其他模板也集成了本模板,包括參數 lua=1 條件下的 {{鐵道路線}} 模板(參見 Module:RouteSequence)以及 {{S-line}} 中的一部分功能。{{RenderStations}} 利用了模塊中的 renderStationLinks 方法,可以方便地對一段 WikiText 中的站名進行轉換。

子模塊列表

下面為已有的子模塊列表,支持不同的鐵道系統。注意,以「/doc」為後綴的是文檔,而「UseCase」是測試用例


建立系統模板

將本模塊引入鐵道系統前,你需要首先創建一個系統數據模塊。該模塊為本模塊的子模塊,名稱為 Module:RailSystems/<系統名> ,基本框架為

local p = {}

p.lines = {
	-- 线路列表
}

-- 开通日期,用于为未开通线路标记日期,可有多行,非必需
p.lines['线路名'].openDates = { ['#default'] = '默认开通日期', ['2'] = '二期开通日期' }
p.lines['线路名2'].openDates = '单一开通日期'

local lineAliases = {
	-- 线路别名(用于简繁转换)
}
-- 用于处理别名的代码,勿删
for k, v in pairs(lineAliases) do p.lines[k] = p.lines[v] end
-- 起讫站信息必需代码,勿删
for k, v in pairs(p.lines) do v.terminals = {} end
-- 首末班车信息必需代码,勿删
for k, v in pairs(p.lines) do v.trainTime = {} end

p.stationNames = {
	-- 站名链接
}

local stationAliases = {
	-- 车站别名
}
-- 用于处理别名的代码,勿删
for k, v in pairs(stationAliases) do p.stationNames[k] = p.stationNames[v] end

-- 起讫站
p.lines['1'].terminals = { left = 'XXX', right = 'XXX' }
p.lines['2'].terminals = {
	left = { ['#field'] = 'type', ['#default'] = 'XXX', F = 'XXX'},
	right = { 'XXX' },
}

-- 首末班车
p.lines['1'].trainTime = {
	['SE'] = { first = '06:00', last = '23:00', startService = 'XXX', endService = 'XXX' },
	['ES'] = { first = '06:00', last = '23:00', startService = 'XXX', endService = 'XXX' },
}

return p

線路列表

本模塊線路列表的例子如下

p.lines = {
	['1'] = { title = "宁波轨道交通1号线|1号线", color = '3180b7' },
	['2'] = { title = "宁波轨道交通2号线|2号线", color = 'cc0000' },
}

其中,title 表示線路的條目名稱及顯示名稱,使用「|」分隔。color 表示線路的標誌色。

線路開通日期

本模塊線路開通日期的例子如下。如果系統中無此需求可省略這部分。

p.lines['1'].openDates = { ['#default'] = '2014-05-30', ['2'] = '2016-03-19' }
p.lines['2'].openDates = '2020-12-28'

對於不分期線路,可採用「yyyy-mm-dd」字符串。對於分期線路,可以使用一個 Lua Table 指定各個分期的開通日期。

站名連結

本模塊站名連結的例子如下

p.lines = {
	['朝阳门'] = '朝阳门站 (北京)|朝阳门',
	['北京南站'] = '北京南站|北京南站',
	['大兴线天宫院'] = {'天宫院站|天宫院', '([[北京地铁大兴线|大兴线]])'},
}

第一例中,站名「朝陽門」對應了連結 [[朝阳门站 (北京)|朝阳门]],使得調用 {{#invoke:RailSystems|stationLink|name=朝阳门|system=BJS}} 時能夠返回重定向後正確的連接(而非 [[朝阳门站|朝阳门]])。

第二例中,站名「北京南站」對應的條目名為自身,因而 stationLink 返回「[[北京南站|北京南站]]」而非「[[北京南站站|北京南站]]」。需要注意的是,stationLink 根據字符串中是否存在「[[」外的「|」符號判斷是否需要將字符串轉換為連結。因而,單寫「['北京南站'] = '北京南站',」只會返回「北京南站」的文字。

第三例中,站名「大興線天宮院」是為了在北京地鐵4號線車站條目中顯示終點站為「[[天宫院站|天宫院]]([[北京地铁大兴线|大兴线]])」。這裏使用了 Lua table 取代字符串。模塊會自動掃描 table,將其中屬於連結的部分組裝為連結,並將所有部分拼裝在一起。

起訖站

本模塊起訖站的例子如下

p.lines['1'].terminals = { 
	left = '湘湖',
	right = { ['#field'] = 'branch',
		['#default'] = { ['#field'] = 'type', ['#default'] = '临平、文泽路', future = '临平、下沙江滨' },
		['临平'] = '临平',
		['下沙'] = { ['#field'] = 'type', ['#default'] = '文泽路', future = '下沙江滨' },
	},
}
p.lines['2'].terminals = { 
	left = '朝阳',
	right = { ['#field'] = 'type', ['#default'] = '钱江路', ['future'] = '良渚'},
}

起訖站名中,terminals 中的 left 屬性表示起點站,right 屬性表示終點站。兩個屬性的值均為迭代定義。若值為字符串,則返回站名。否則根據 '#field' 的值,判定輸入參數是否符合當前 table 的某一個屬性名。如果符合,取出值。否則取出 '#default' 屬性的值。最後,對該值重複上述處理,直至返回結果為字符串為止。

首末班車

本模塊起訖站的例子如下

p.lines['1'].trainTime = {
	-- 东环南路首班车
	['东高'] = { first = '06:00', startService = '东环南路', endService = '高桥西' },
	['东霞'] = { first = '06:00', startService = '东环南路', endService = '霞浦' },
	-- 起讫站首末班车
	['霞高'] = { first = '06:00', last = '22:00', startService = '霞浦', endService = '高桥西' },
	['高霞'] = { first = '06:00', last = '22:00', startService = '高桥西', endService = '霞浦' },
}

其中,trainTime 的每個屬性值表示線路上的一種服務,名稱可自定。此後 first 和 last 分別表示該服務首末班車的時間,而 startService 和 endService 表示服務的始發/終點站。

增加新功能

編者可為本模塊增加新功能。但需要注意,新增的功能不應影響原有功能。為了便於維護和復用,請在完成功能編寫後更新用例和幫助文檔。本模塊的用例位於 p.testCase,請在提交前先執行用例,確保所有用例均通過再行提交。

可用性

如果下方顯示錯誤信息,則相應功能不可用,請聯繫最近一次修改者修復該錯誤。查看編輯歷史