Przejdź do zawartości

Moduł:regionalizm

Z Wikisłownika – wolnego słownika wielojęzycznego
[edytuj] [odśwież] Dokumentacja modułu

Tablice danych

[edytuj]

Podstrony modułu opisują kodowanie regionów dla poszczególnych regionów według zasad tutaj opisanych.

Nowe regiony należy dodawać zgodnie z instrukcjami podanymi w Szablon:reg-es#Użycie. Struktura tablicy jest następująca:

regiony = {
    …
    identyfikator = { pozycja, polska_nazwa, (kategoria), (szablon = nazwa_szablonu) },
    …
}

Standardowy wpis w tablicy regiony – identyfikator z polską, pełną nazwą regionu – zawiera podtablicę z co najmniej dwoma pierwszymi elementami:

  1. pozycja: liczba określająca pozycję danego regionu w spisie; skrypt pobiera tę wartość dla każdego wpisanego regionu i uporządkowuje je w kolejności rosnącej
  2. polska_nazwa: ciąg znaków zawierający polską nazwę regionu, która będzie widoczna na stronie z użytym szablonem; jeżeli różni się od identyfikatora (np. dla skrótowych nazw jak Ameryka Płd), należy podać trzeci parametr
  3. kategoria (niewymagany, zob. pkt 2): ciąg znaków oznaczający podkategorię regionalizmów, w której zostanie umieszczona strona z szablonem, w postaci Kategoria:Regionalizmy hiszpańskie - [kategoria]
  4. nazwa_szablonu (wartość nazwanego elementu szablon): nazwa wywoływanego szablonu; np. szablon = hiszpam wstawia {{hiszpam}} do listy regionów podczas transkluzji {{reg-es}}

Bezpośrednio pod tabelką należy podać alternatywne nazwy regionów, których można użyć w szablonie zamiast polskich nazw. Powinno się znaleźć co najmniej hiszpańskie tłumaczenie regionu (jeżeli różni się od polskiego):

regiony[nazwa_alternatywna] = regiony[identyfikator_z_polską_nazwą]

Dodawszy nowy region, należy uzupełnić tabelkę w Szablon:reg-es#Spis regionów i kategorii.

Błędy

[edytuj]

Należy je zgłaszać na stronie: WS:PROG.

Zobacz też

[edytuj]
local p = {}

-- 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( d, t, gw, przym, op, frame )
    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 = 'Kategoria:' .. ( gw and 'Dialektyzmy' or 'Regionalizmy' ) .. ' ' .. przym .. ' - '
    
    -- 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
    local kod = frame.args[ 1 ]
    local rodzaj = frame.args[ 2 ]
    local przym = frame.args[ 3 ]
    
    if not arg1 then return '<b>nie podano listy regionów w pierwszym argumencie</b>' end
    
    local d = mw.loadData('Moduł:regionalizm/' .. kod )   -- ustalona lista regionów
    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ą
            d,
            tablica,
            rodzaj == 'gw',
            przym,
            ( 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 ' .. przym .. ']]')
                		or ( rodzaj == 'reg' and '[[Kategoria:Regionalizmy ' .. przym .. ']]' )
                	)
                or  ''
        ) .. (
            ( op2 and ns ) -- regionu/ów nie ma na liście
                and '[[Kategoria:Nieznany region|' .. przym .. ']]'
                or  ''
        ) .. (
            ( arg2 and arg2 ~= '_nocat_' ) -- podano drugi parametr?
                and ' ' .. linkuj( arg2 )
                or  ''
        )
end

return p