模块:沙盒/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,请在提交前先执行用例,确保所有用例均通过再行提交。

可用性

如果下方显示错误信息,则相应功能不可用,请联系最近一次修改者修复该错误。查看编辑历史