Moduł:odmiana-rzeczownik-łaciński
Moduł wykorzystywany przez szablon {{odmiana-rzeczownik-łaciński}}.
local modul = {}
function modul.konczy_sie(a, b)
return a:sub(-#b) == b
end
function modul.generuj_tabele(p)
local tabela = string.format([[{{odmiana-rzeczownik-łaciński
|Mianownik lp=%s
|Mianownik lm=%s
|Dopełniacz lp=%s
|Dopełniacz lm=%s
|Celownik lp=%s
|Celownik lm=%s
|Biernik lp=%s
|Biernik lm=%s
|Ablatyw lp=%s
|Ablatyw lm=%s
|Wołacz lp=%s
|Wołacz lm=%s]],
p['Mianownik lp'],
p['Mianownik lm'],
p['Dopełniacz lp'],
p['Dopełniacz lm'],
p['Celownik lp'],
p['Celownik lm'],
p['Biernik lp'],
p['Biernik lm'],
p['Ablatyw lp'],
p['Ablatyw lm'],
p['Wołacz lp'],
p['Wołacz lm'])
if p['Miejscownik lp'] or p['Miejscownik lm'] then
-- TODO: Co, jeśli podano tylko jeden parametr z tych dwu?
tabela = tabela .. string.format("\n|Miejscownik lp=%s\n|Miejscownik lm=%s",
p['Miejscownik lp'], p['Miejscownik lm']);
end
tabela = tabela .. "\n}}"
return tabela
end
function modul.dobierz_koncowki(mianownik, dopelniacz, rodzaj)
local tabela = {}
local koncowka_d
local temat
if (modul.konczy_sie(dopelniacz, 'ae'))
or (modul.konczy_sie(dopelniacz, 'es')) then
temat = dopelniacz:sub(1, -3)
-- I deklinacja
tabela['typ'] = 'I'
tabela['Mianownik lp'] = mianownik
tabela['Dopełniacz lp'] = dopelniacz
tabela['Celownik lp'] = temat .. 'ae'
if mianownik:sub(-1, -1) == 'e' or
mianownik:sub(-2, -1) == 'es' then
tabela['Biernik lp'] = temat .. 'en'
else
tabela['Biernik lp'] = temat .. 'am'
end
if mianownik:sub(-1, -1) == 'e' then
tabela['Ablatyw lp'] = temat .. 'e / ' .. temat .. 'a'
elseif mianownik:sub(-2, -1) == 'es' then
tabela['Ablatyw lp'] = temat .. 'a'
else
tabela['Ablatyw lp'] = temat .. 'ā'
end
tabela['Wołacz lp'] = mianownik
tabela['Mianownik lm'] = temat .. 'ae'
tabela['Dopełniacz lm'] = temat .. 'ārum'
tabela['Celownik lm'] = temat .. 'is'
tabela['Biernik lm'] = temat .. 'as'
tabela['Ablatyw lm'] = temat .. 'is'
tabela['Wołacz lm'] = temat .. 'ae'
elseif modul.konczy_sie(dopelniacz, 'i')
or modul.konczy_sie(dopelniacz, 'ī') then
-- II deklinacja
tabela['typ'] = 'II'
temat = ((modul.konczy_sie(dopelniacz, 'ī') and dopelniacz:sub(1, -3))
or dopelniacz:sub(1, -2)) -- Lua nie obługuje UTF-8
tabela['Mianownik lp'] = mianownik
tabela['Dopełniacz lp'] = dopelniacz
tabela['Celownik lp'] = temat .. 'ō'
tabela['Biernik lp'] = ((rodzaj == 'n' and mianownik) or temat .. 'um')
tabela['Ablatyw lp'] = temat .. 'ō'
if (modul.konczy_sie(mianownik, 'ius')) then
tabela['Wołacz lp'] = temat:sub(0, -2) .. 'ī'
elseif (modul.konczy_sie(mianownik, 'us')
and not modul.konczy_sie(mianownik, 'ius')) then
tabela['Wołacz lp'] = temat .. 'e'
else
tabela['Wołacz lp'] = mianownik
end
tabela['Mianownik lm'] = temat .. ((rodzaj == 'n' and 'a') or 'ī')
tabela['Dopełniacz lm'] = temat .. 'ōrum'
tabela['Celownik lm'] = temat .. 'īs'
tabela['Biernik lm'] = temat .. ((rodzaj == 'n' and 'a') or 'ōs')
tabela['Ablatyw lm'] = temat .. 'īs'
tabela['Wołacz lm'] = tabela['Mianownik lm']
elseif modul.konczy_sie(dopelniacz, 'is') then
-- III deklinacja
elseif modul.konczy_sie(dopelniacz, 'us') or modul.konczy_sie(dopelniacz, 'ūs') then
-- IV deklinacja
elseif modul.konczy_sie(dopelniacz, 'es') then -- TODO
-- V deklinacja
end
return tabela
end
function modul.main(frame)
-- Pobieranie argumentów
local argumenty = frame:getParent().args
local mianownik = argumenty['1']
local dopelniacz = argumenty['2']
local rodzaj = argumenty['3']
-- Generowanie zestawu form
local tabela = modul.dobierz_koncowki(mianownik, dopelniacz, rodzaj)
-- Podmiany
for x, y in ipairs({'Mianownik lp', 'Dopełniacz lp', 'Celownik lp',
'Biernik lp', 'Ablatyw lp', 'Wołacz lp', 'Miejscownik lp',
'Mianownik lm', 'Dopełniacz lm', 'Celownik lm',
'Biernik lm', 'Ablatyw lm', 'Wołacz lm', 'Miejscownik lm'})
do
if (argumenty[y]) then
tabela[y] = argumenty[y]
end
end
-- Generowanie kodu tabeli
local kod_tabeli = modul.generuj_tabele(tabela)
-- Generowanie {{deklinacjaLA}}
local deklinacja = (
mianownik .. ', ' .. dopelniacz .. ' {{deklinacjaLA|' ..
tabela['typ'] .. (tabela['podtyp'] and
('|' .. tabela['podtyp'].. '}}') or ('}}'))
)
-- Zwrócenie wyjścia
return(frame:preprocess(deklinacja .. kod_tabeli))
end
return modul
--[[
HISTORIA ZMIAN:
* 2022-12-01 – +podmiany
* 2022-11-13 – dalszy rozwój
* 2022-11-10 – dalszy rozwój
* 2022-10-25 – dalszy rozwój, szczątkowa obsługa I deklinacji
* 2022-03-21 – pierwsza wersja
]]