模块:SZBUS

维基百科,自由的百科全书
跳到导航 跳到搜索
文档图示 模块文档[查看] [编辑] [历史] [清除缓存]

本模块是{{深圳巴士路线列表}}等模板的Lua语言版本。

数据[编辑]

本模块使用的数据分别存放在如下的子页面中,如需更新数据可至相应子页面修改。

数据名称 现存放位置
公司代表颜色 Module:SZBUS/color
线路编号、路线(起讫点、方向)、备注、
营运公司(分公司)、全程票价、图片
深圳本地线路 Module:SZBUS/data
深圳的东莞市线路 引用:Module:SZBUS/dongguan
数据:Module:DGBUS/data
深圳的惠州市线路 引用:Module:SZBUS/huizhou
数据:Module:HZBUS/data
表格表头 Module:SZBUS

引用方法[编辑]

不建议直接在条目空间中使用#invoke语法调用本模块,而是使用模板,并在模板中引用本模块。

调用名称 参数 引用模板
list

{{#invoke:SZBUS |list
|loc = 地区
|format = 样式
|code = 线路代码
}}

{{深圳巴士路线列表}}
simplelist

{{#invoke:SZBUS |simplelist
|loc = 地区
|code = 线路代码
}}

{{深圳巴士路线简单列表}}
title

{{#invoke:SZBUS |title
|loc = 地区
|format = 样式
}}

{{廣州巴士路線/Title}}
colorbox

{{#invoke:SZBUS |colorbox
|company = 公司代码
}}

{{深圳巴士公司色块}}

相关模块[编辑]

珠三角部分地区巴士路线资料
城市 广州 东莞 深圳 惠州 佛山 江门 中山 珠海
模块 GZBUS DGBUS SZBUS HZBUS FSBUS JMBUS ZSBUS ZHBUS
路线资料
起讫点、编号、备注、方向 是 是 是 是 是 是 是 是
运营商 是 是 是 是 是
(仅上级公司)
是 是
(仅上级公司)
是
(仅上级公司)
票价 是
(全程)
是
(全程)
是
(全程)
是 是
(全程,不完整)
是
(全程)
是
(全程)
是
BRT信息 是 否 否 否 否 否 否 否
双层巴士信息 是 否 否 否 否 否 否 否
无轨电车信息 是 否 否 否 否 否 否 否
车辆图片 否 否 是 否 否 否 否 否
运力信息 否 否 否 是 否 否 否 否
运营时间 否 否 否 否 是
(不完善)
否 是 是
发车间隔 否 否 否 否 否 否 是 否
模板
list 是
{{广州巴士路线列表}}
是
{{东莞巴士路线列表}}
是
{{深圳巴士路线列表}}
是
{{惠州巴士路线列表}}
是
{{佛山巴士路线列表}}
是
{{江门巴士路线列表}}
是
{{中山巴士路线列表}}
是
{{珠海巴士路线列表}}
simplelist 是
{{广州巴士路线简单列表}}
是
{{东莞巴士路线简单列表}}
是
{{深圳巴士路线简单列表}}
是
{{惠州巴士路线简单列表}}
是
{{佛山巴士路线简单列表}}
否 否 是
{{珠海巴士路线简单列表}}
colorbox 是
{{广州巴士公司色块}}
是
{{东莞巴士公司色块}}
是
{{深圳巴士公司色块}}
是
{{惠州巴士公司色块}}
是
{{佛山巴士公司色块}}
是
{{江门巴士公司色块}}
是
{{中山巴士公司色块}}
是
{{珠海巴士公司色块}}
title 是 是 是 是 是 是 是 是
另:香港路线已储存在模板中、澳门路线储存在页面中、肇庆路线未有资料
-- 声明模块本体
local p = {}
-- 导入数据
local c = mw.loadData('Module:SZBUS/color')
local function _loadSystemData(loc)
	local state
	if loc == "东莞" or loc == "東莞" then
		state, system = pcall(mw.loadData, "Module:SZBUS/dongguan")
	elseif loc == "惠州" then
		state, system = pcall(mw.loadData, "Module:SZBUS/huizhou")
	else
		state, system = pcall(mw.loadData, "Module:SZBUS/data")
	end
	return system
end

-- 建立线路名称反查解析表
do
    p.revName = {}
    for i, t in pairs(c.company) do
        for _, k in pairs(t) do
            p.revName[k] = t[1]
        end
    end
end

-- {{深圳巴士公司色块}}
function p._internalColorbox(compname)
	str = compname
	len = #str
	if len >18 or compname == "multi" then
		return [[width="1%" style="background:]]..c.colors['multi']..[["]]
	else
		if p.revName[compname] then
        	return [[width="1%" style="background:]]..c.colors[p.revName[compname]]..[["]]
    	else
    		return [[width="1%" style="background:]]..c.colors['other']..[["]]
    	end
    end
end
-- 处理起讫点中出现的跨粤文维基百科的链接模板({{tsl|zh-yue|...}})
function p.tsllink(name)
	str = name
	if string.find(name, "tsl") then
		start = string.find(name, "{")
		en3 = string.find(name, "}", start)
		en1 = string.find(name, "|", start+13)
		arg1 = string.sub(name, start+13, en1-1)
		en2 = string.find(name, "|", en1+1)
		arg2 = string.sub(name, en1+1, en2-1)
		arg3 = string.sub(name, en2+1, en3-1) 
		no1 = string.sub(name, 0, start-1)
		fi1 = string.find(name, "{", en2+1)
		if fi1 == nil then			-- 只引用一次tsl
			no2 = string.sub(name, en3+2, string.len(name))
			str = no1..mw.getCurrentFrame():expandTemplate{title = "tsl", args = {"zh-yue", arg1, arg2, arg3}}..no2
		else 						-- 引用两次tsl
			start1 = string.find(name, "{", en3)
			no2 = string.sub(name, en3+2, start1-1)
			en4 = string.find(name, "|", start1+13)
			arg4 = string.sub(name, start1+13, en4-1)
			en5 = string.find(name, "|", en4+1)
			arg5 = string.sub(name, en4+1, en5-1)
			en6 = string.find(name, "}", start1)
			arg6 = string.sub(name, en5+1, en6-1) 
			no3 = string.sub(name, en6+2, string.len(name))
			str = no1..mw.getCurrentFrame():expandTemplate{title = "tsl", args = {"zh-yue", arg1, arg2, arg3}}..no2..mw.getCurrentFrame():expandTemplate{title = "tsl", args = {"zh-yue", arg4, arg5, arg6}}..no3
		end
		return str
	else
		return str
	end
end

-- 生成一条线路的一列表格内容
function p._internalList(no, style, loc, image)
	local d = _loadSystemData(loc)
	if d[no] == nil then
		a = [[|width="1%"| ||align=center|''']]..no..[['''||colspan=3 align=center|''(错误:]]..'[[Module:SZBUS]]中未包含这条[['..loc.."巴士路线列表|"..loc.."]]的线路)''"
	elseif d[no].note == "已停办" or d[no].note == "已停辦" then
		a = [[|width="1%"| ||align=center|''']]..d[no].code..[['''||colspan=3 align=center|''(错误:本线路已停办或暂停服务,请移除)'']]
	else
		if image == "yes" and d[no].image then
		if d[no].note ~= nil and d[no].note ~= "" then
			note = d[no].note..'<br />'..d[no].image
		else
			note = d[no].note..d[no].image
		end
		else
			note = d[no].note
		end
		b = p._internalColorbox(d[no].company)					-- 生成颜色方块
		e1 = p.tsllink(d[no].endpoint1)							-- 处理起讫点1可能出现的{{tsl|zh-yue}}
		e2 = p.tsllink(d[no].endpoint2) 						-- 处理起讫点2可能出现的{{tsl|zh-yue}}
		-- 部分双向高峰快线(两列):
		if d[no].direction1 ~= nil then
			a = [[|rowspan="2"]]..b..[[| ||rowspan="2" align=center|''']]..d[no].code..[['''||rowspan="2" align=right|]]..e1..[[||align=center|]]..d[no].direction
			if d[no].endpoint3 ~= nil then					-- 部分双向高峰快线:去程终点和返程起点不同
				a = a..[[||]]..e2
			else												-- 部分双向高峰快线:去程终点和返程起点相同
				a = a..[[||rowspan="2"|]]..e2
			end
			if style == "noco" then								-- 不显示公司栏(noco)
				a = a..[[||rowspan="2" align=center|]]..d[no].fare
			elseif style == "nofa" then							-- 不显示票价栏(nofa)
				a = a..[[||rowspan="2" align=center|]]..d[no].company
			elseif style == "nocofa" then						-- 不显示公司和票价栏(nocofa)
				a = a
			else												-- 显示公司和票价栏(默认)
				a = a..[[||rowspan="2" align=center|]]..d[no].fare..[[||rowspan="2" align=center|]]..d[no].company
			end
			a = a..[[||rowspan="2"|]]..note.."\n|-\n"..[[|align=center|]]..d[no].direction1
			if d[no].endpoint3 ~= nil then					-- 部分双向高峰快线:去程终点和返程起点不同
				a = a..[[||]]..d[no].endpoint3
			else												-- 部分双向高峰快线:去程终点和返程起点相同
				a = a
			end			
		-- 其他(一列):
		else
			a = [[|]]..b..[[| ||align=center|''']]..d[no].code..[['''||align=right|]]..e1..[[||align=center|]]..d[no].direction..[[||align=left|]]..e2
			if style == "noco" then								-- 不显示公司栏(noco)
				a = a..[[||align=center|]]..d[no].fare
			elseif style == "nofa" then						-- 不显示票价栏(nofa)
				a = a..[[||align=center|]]..d[no].company
			elseif style == "nocofa" then						-- 不显示公司和票价栏(nocofa)
				a = a
			else												-- 显示公司和票价栏(默认)
				a = a..[[||align=center|]]..d[no].fare..[[||align=center|]]..d[no].company
			end
			a = a..[[||]]..note
		end
	end
	return a
end

-- {{深圳巴士路线列表}}
function p.list(frame)
	local bb = frame.args
	local loc = bb.loc
	if loc == "" or loc == nil then loc = "深圳" end
	local image = bb.image
	if bb.image == "yes" then image = "yes" end
	local ret = p._internalList(bb.code, bb.format, loc, image)
	return ret
end

-- 生成一条线路的一列简单表格内容
function p._internalSimpList(no, loc)
	local d = _loadSystemData(loc)
	if d[no] == nil then
		a = [[|align=center|''']]..no..[['''||colspan=3 align=center|''(错误:]]..'[[Module:SZBUS]]中未包含这条[['..loc.."巴士路线列表|"..loc.."]]的线路)''"
	elseif d[no].note == "已停办" or d[no].note == "已停辦" then
		a = [[|align=center|''']]..d[no].code..[['''||colspan=3 align=center|''(错误:本线路已停办或暂停服务,请移除)'']]
	else
		e1 = p.tsllink(d[no].endpoint1)							-- 处理起讫点1可能出现的{{tsl|zh-yue}}
		e2 = p.tsllink(d[no].endpoint2) 						-- 处理起讫点2可能出现的{{tsl|zh-yue}}
		-- 部分双向高峰快线(两列):
		if (d[no].direction1 ~= nil) then
			a = [[|rowspan="2" align=center|''']]..d[no].code..[['''||rowspan="2" align=right|]]..e1..[[||align=center|]]..d[no].direction
			if (d[no].endpoint3 ~= nil) then					-- 部分双向高峰快线:去程终点和返程起点不同
				a = a..[[||align=left|]]..e2
			else												-- 部分双向高峰快线:去程终点和返程起点相同
				a = a..[[||rowspan="2" align=left|]]..e2
			end
			a = a..[[||rowspan="2"|]].."\n|-\n"..[[|align=center|]]..d[no].direction1
			if (d[no].endpoint3 ~= nil) then					-- 部分双向高峰快线:去程终点和返程起点不同
				a = a..[[||align=left|]]..d[no].endpoint3
			else												-- 部分双向高峰快线:去程终点和返程起点相同
				a = a
			end			
		-- 其他(一列):
		else
			a = [[|''']]..d[no].code..[['''||align=right|]]..e1..[[||align=center|]]..d[no].direction..[[||align=left|]]..e2..[[||]]
		end
	end
	return a
end

-- {{深圳巴士路线简单列表}}
function p.simplelist(frame)
	local ss = frame.args
	local loc = ss.loc
	if loc == "" or loc == nil then loc = "深圳" end
	local ret = p._internalSimpList(ss.code, loc)
	return ret
end

-- 生成表格首列
function p._internalTitle(style, loc)
	if loc == "" or loc == nil then loc = "深圳" end
	if style == "noco" then										-- 不显示公司栏(noco)
		t = '!colspan="2" width="14%"|[['..loc..'巴士路线列表|编号]]!!colspan="3"|路线'..'!!width="10%"|全程收费!!width="22%"|备注\n|-style="background:#EAECF0" height=0\n|colspan="2"| ||width="25%"| || ||width="25%"| ||colspan="2"| '
	elseif style == "nofa" then									-- 不显示票价栏(nofa)
		t = '!colspan="2" width="14%"|[['..loc..'巴士路线列表|编号]]!!colspan="3"|路线'..'!!width="11%"|运营商!!width="21%"|备注\n|-style="background:#EAECF0" height=0\n|colspan="2"| ||width="25%"| || ||width="25%"| ||colspan="2"| '
	elseif style == "nocofa" then								-- 不显示公司和票价栏(nocofa)
		t = '!colspan="2" width="16%"|[['..loc..'巴士路线列表|编号]]!!colspan="3"|路线'..'!!width="24%"|备注\n|-style="background:#EAECF0" height=0\n|colspan="2"| ||width="28%"| || ||width="28%"| || '
	else														-- 显示公司和票价栏(默认)
		t = '!colspan="2" width="12%"|[['..loc..'巴士路线列表|编号]]!!colspan="3"|路线'..'!!width="8%"|全程收费!!width="10%"|运营商!!width="20%"|备注\n|-style="background:#EAECF0" height=0\n|colspan="2"| ||width="23%"| || ||width="23%"| ||colspan="3"| '
	end
	return t
end

-- {{深圳巴士路线/Title}}
function p.title(frame)
	local tt = frame.args
	local ret = p._internalTitle(tt.format, tt.loc)
	return ret
end

-- {{深圳巴士公司色块}}
function p.colorbox(frame)
	local cc = frame.args
	local ret = p._internalColorbox(cc.company)
	return ret
end

return p