Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:Linie dla przystanków/opis
local p = {}
local baza_przystankow_i_linii_ZTM = mw.loadData( 'Module:Przystanki-linie' )
local baza_przystankow_i_linii_poza_ZTM = mw.loadData( 'Moduł:Przystanki-linie-poza-ZTM' )
function p.split_string_2_table( list )
local tab = mw.text.split(list,'%p')
return tab
end
function p.formatuj_linie(linia, typ)
local wyjscie = ""
local frame = mw.getCurrentFrame()
return frame:expandTemplate{ title = typ, args = { linia } } .. ' '
end
function sortuj_linie(a, b)
local an = tonumber(a)
local bn = tonumber(b)
if an~=nil and bn~=nil then
return an < bn
end
if an~=nil then
return true
end
if bn~=nil then
return false
end
return string.lower(a) < string.lower(b)
end
function istnieje_linia(typ,linia)
local strona_linii = "Linia " .. typ .. "owa "
if tonumber( linia ) ~= nil then
strona_linii = strona_linii .. "nr "
end
local strona = mw.title.makeTitle( "", strona_linii .. linia )
if strona.exists then
local zawartosc = strona:getContent()
zawartosc = mw.ustring.lower(mw.ustring.gsub(zawartosc, "%s", "" ))
if mw.ustring.find(zawartosc,"historyczna=tak")==nil then
return true
end
end
return false
end
function zawiera(tab, el)
for _, value in pairs(tab) do
if value == el then
return true
end
end
return false
end
function p.formatuj_tabele(tab, typ)
local wyjscie = ""
table.sort(tab, sortuj_linie)
for k, v in pairs(tab) do
wyjscie = wyjscie .. p.formatuj_linie(v, typ)
end
return wyjscie
end
function p.konwertuj_przystanki( frame )
local hash = {}
local res = {}
local typ = frame.args[1] or ""
local lista_przystankow = string.upper(frame.args[2] or "")
local tablica_przystankow = p.split_string_2_table(lista_przystankow,'%p')
for k, v in pairs( tablica_przystankow ) do
local przystanek = v or ""
if baza_przystankow_i_linii_ZTM[przystanek] ~= nil then
local linie_dla_przystanku = baza_przystankow_i_linii_ZTM[przystanek]
for k1, v1 in pairs( linie_dla_przystanku ) do
local linia = v1 or ""
if istnieje_linia(typ,linia) and
(not hash[linia]) then
res[#res+1] = linia
hash[linia] = true
end
end
end
if baza_przystankow_i_linii_poza_ZTM[przystanek] ~= nil then
local linie_dla_przystanku = baza_przystankow_i_linii_poza_ZTM[przystanek]
for k1, v1 in pairs( linie_dla_przystanku ) do
local linia = v1 or ""
if istnieje_linia(typ,linia) and
(not hash[linia]) then
res[#res+1] = linia
hash[linia] = true
end
end
end
end
return p.formatuj_tabele(res, typ)
end
function p.konwertuj_linie( frame )
local typ = frame.args[1] or ""
local tab = p.split_string_2_table(frame.args[2] or "")
return p.formatuj_tabele(tab, typ)
end
function p.test_linii( frame )
local hash = {}
local wszystkie_linie = {}
local brakujace_linie = {}
for k, v in pairs( baza_przystankow_i_linii_ZTM ) do
local przystanek = k or ""
local linie_dla_przystanku = v or {}
for k1, v1 in pairs( linie_dla_przystanku ) do
local linia = v1 or ""
if not hash[linia] then
wszystkie_linie[#wszystkie_linie+1] = linia
hash[linia] = true
end
end
end
for k, v in pairs( baza_przystankow_i_linii_poza_ZTM ) do
local przystanek = k or ""
local linie_dla_przystanku = v or {}
for k1, v1 in pairs( linie_dla_przystanku ) do
local linia = v1 or ""
if not hash[linia] then
wszystkie_linie[#wszystkie_linie+1] = linia
hash[linia] = true
end
end
end
for k, v in pairs( wszystkie_linie ) do
local linia = v or ""
akceptowalne = {
"1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
"11", "12", "13", "14", "15", "16", "17", "18", "19", "20",
"45", "46", "47", "48", "49", "50", "51", "52", "54", "55",
"56", "57", "58", "59", "60", "61", "62", "63", "64", "65",
"66", "67", "68", "69", "70", "71", "72", "73", "74", "75",
"76", "77", "78", "79", "80", "81", "82", "83", "84", "85",
"87", "89", "90", "91", "92", "93", "94", "95", "96", "97",
"98",
"231","232","233","234","235","236","237","238","239","240"
}
if ( not zawiera( akceptowalne, linia ) ) and
( not istnieje_linia("tramwaj",linia) ) and
( not istnieje_linia("autobus",linia) ) then
brakujace_linie[#brakujace_linie+1] = linia
end
end
table.sort(brakujace_linie, sortuj_linie)
return mw.text.listToText( brakujace_linie , ", ", " i ")
end
return p