Uwaga
Serwis Wedariusz jest portalem tematycznym prowadzonym przez Grupę Wedamedia. Aby zostać wedapedystą, czyli Użytkownikiem z prawem do tworzenia i edycji artykułów, wystarczy zarejestrować się na witrynie poprzez złożenie wniosku o utworzenie konta, co można zrobić tutaj. Liczymy na Waszą pomoc oraz wsparcie merytoryczne przy rozwoju także naszych innych serwisów tematycznych.

Moduł:reg-pl

Z Wedariusz, słownik
Przejdź do nawigacji Przejdź do wyszukiwania

Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:reg-pl/opis

local p = {}

local rodzaj

-- przenosi wykryte ciągi znaków oddzielone przecinkami do tablicy "words"
function analizujLancuch( s )
    local words = {}
    for w in string.gmatch( s, '%s*([^,]+)%s*' ) do words[ #words + 1 ] = w end
    return words
end

-- porównuje tablicę zawierającą listę regionów podanych przez uzytkownika do ustalonej w kodzie
-- tablicy z regionami, uporządkowuje je i tworzy kategorie
function znajdzRegiony( t, op, frame )
    local d = mw.loadData 'Module:reg-pl/dane'   -- ustalona lista regionów
    local regs = {}    -- tablica pomocnicza do przechowywania regionów obecnych w tablicy "d"
    local no_regs = {} -- tablica pomocnicza do przechowywania regionów nieobecnych w tablicy "d"
    local j = 1
    
    -- iteracja przechodzi przez wszystkie elementy w tablicy "t"
    for i = 1, #t do
        if d[ t[ i ] ] then
            regs[ j ] = d[ t[ i ] ]       -- jeśli dany element występuje w tablicy "d", wpisuje go do tablicy "regs"
            j = j + 1
        else
            no_regs[ i - j + 1 ] = t[ i ] -- w przeciwnym wypadku wpisuje go do "no_regs"
        end
    end

    -- uporządkowuje regiony według kolejności ustalonej w tablicy "d"
    if #t ~= 1 then table.sort( regs, function( a, b ) return a[ 1 ] < b[ 1 ] end ) end
    
    local _regs, op_sz = #regs, false
    local kat
    if rodzaj == 'reg' then kat = 'Kategoria:Regionalizmy polskie - ' end
    if rodzaj == 'gw'  then kat = 'Kategoria:Dialektyzmy polskie - ' end
    
    -- przenosi elementy tablic "regs" i "no_regs" do "t"
    for i = 1, #t do
        if i <= _regs then                
            if regs[ i ].szablon then
                t[ i ] = frame:expandTemplate{ title = regs[ i ].szablon } .. ( op
                    and '[[' .. kat .. ( regs[ i ][ 3 ] or regs[ i ][ 2 ] ) .. ']]'
                    or '' )
                op_sz = true
            else
                t[ i ] = '[[:' .. kat .. ( regs[ i ][ 3 ] or regs[ i ][ 2 ] ) .. '|' .. regs[ i ][ 2 ] .. ']]' .. ( op
                    and '[[' .. kat .. ( regs[ i ][ 3 ] or regs[ i ][ 2 ] ) .. ']]'
                    or '' )
            end
        else
            t[ i ] = no_regs[ i - _regs ]
        end
    end
    
    -- zwraca wartości logiczne TRUE, jeśli tablice "regs" i "no_regs" nie są puste,
    -- i gdy jedyny wpisany region zwracany jest w postaci szablonu skrótu (jak {{hiszpam}})
    return ( op and ( _regs ~= 0 ) ), ( #no_regs ~= 0 ), ( op_sz and ( #t == 1 ) or false )

end

-- podlinkowuje podany łańcuch, jeżeli pierwszym znakiem jest nawias otwierający ("[", "<" lub "(")
function linkuj( s )
    local znak = string.sub( mw.text.killMarkers( s ), 1, 1 )
    if znak == '[' or znak == '<' or znak == '(' or znak == '\'' then return s
    else return '[[' .. s .. ']]' end
end

function p.main( frame )
    local pframe = frame:getParent()
    local arg1, arg2 = pframe.args[ 1 ], pframe.args[ 2 ] -- pierszy i drugi argument z szablonu
    rodzaj = frame.args[ 1 ]
    
    if not arg1 then return '<b>nie podano listy regionów w pierwszym argumencie</b>' end
    
    local tablica = analizujLancuch( arg1 )                -- regiony zawarte w łańcuchu przenosi do nowej tablicy
    local ns = mw.title.getCurrentTitle():inNamespace( 0 ) -- ns = TRUE jeśli szablon wywoływany jest w {{ns:0}}
    local op1, op2, op3 = znajdzRegiony(                   -- porównuje owe regiony z ustaloną w kodzie listą
            tablica,
            ( ns and not arg2 ),
            frame
        )

    return (
            op3
                and tablica[ 1 ]
                or  '<i>(' .. mw.text.listToText( tablica, ', ', ' i ' ) .. ')</i>'
        ) .. (
            ( op1 and ns ) -- region/y jest/są na liście
                and (
                		( rodzaj == 'gw' and '[[Kategoria:Dialektyzmy polskie]]')
                		or ( rodzaj == 'reg' and '[[Kategoria:Regionalizmy polskie]]' )
                	)
                or  ''
        ) .. (
            ( op2 and ns ) -- regionu/ów nie ma na liście
                and '[[Kategoria:reg-pl/nieznane]]'
                or  ''
        ) .. (
            ( arg2 and arg2 ~= '_nocat_' ) -- podano drugi parametr?
                and ' ' .. linkuj( arg2 )
                or  ''
        )
end

return p