Moduł:odmiana-rzeczownik-łaciński

Z Wikisłownika – wolnego słownika wielojęzycznego

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

]]