Poznańska Wiki
Advertisement
Poznańska Wiki

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
Advertisement