模块:沙盒/TimWu007/RailSystems/doc
这是Module:沙盒/TimWu007/RailSystems的文档页面
调用
本模块支持调用下列函数来获取数据(或 MediaWiki 内容)。
调用名称 | 参数 | 说明 |
---|---|---|
stationLink |
{{#invoke:RailSystems | stationLink |
通过车站名获取车站在铁道系统中的链接,用于处理条目名不规则或消歧义后的条目。
例如从“朝阳门”转换至“[[朝阳门站 (北京)|朝阳门]]”。 |
lineColor |
{{#invoke:RailSystems | lineColor |
通过线路编号获取线路颜色。若 prefix=1 则加上“#”前缀。 |
lineTitle |
{{#invoke:RailSystems | lineTitle |
通过线路编号获取线路条目链接。若 link=0 则只返回条目名,否则返回条目链接 Wiki Text,默认 link=1。 |
lineRichTitle |
{{#invoke:RailSystems | lineRichTitle |
通过线路编号获取带有标志色装饰(默认为前置彩色小方块)的线路条目链接。若 degrade 为 1,则在标志色未定义时自动返回 lineTitle 的结果。 |
lineTerminal |
{{#invoke:RailSystems | lineTerminal |
通过线路编号、方向、类型(可选)及支线(可选)获得线路终点站链接。 |
lineTerminalName |
{{#invoke:RailSystems | lineTerminalName |
通过线路编号、方向、类型(可选)及支线(可选)获得线路终点站站名。 |
trainTime |
{{#invoke:RailSystems | trainTime |
通过线路编号、运营方向(预定义)、首/末班及始发站到达本站的时间获得车站首班/末班车时间。 |
trainDirectionTime |
{{#invoke:RailSystems | trainDirectionTime |
通过线路编号、运营方向(预定义)、首/末班及始发站到达本站的时间获得车站首班/末班车终点站名链接及时间组成的 WikiText。 |
lineDateMessage |
{{#invoke:RailSystems | lineDateMessage |
通过线路编号和期数,显示距离开通需要的时间。本函数支持自定义日期格式,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,请在提交前先执行用例,确保所有用例均通过再行提交。
可用性
如果下方显示错误信息,则相应功能不可用,请联系最近一次修改者修复该错误。查看编辑历史