Modul:Levde
Utsjånad
Modul for {{Levde-lua}}. For å sjekka om modulen verkar som han skal, gå til Moduldiskusjon:Levde/test.
local sams = require('Modul:Sams')
local p = {}
function p.erDag(oppg)
if oppg:find('^%d%d%.$') or oppg:find('^%d%.$') then
return true
else
return false
end
end
function p.erMaanad(oppg)
if sams.erI(oppg, sams.maanader()) then
return true
else
return false
end
end
function p.erAarstal(oppg)
if oppg:find('^%-*%d+$') then
return true
else
return false
end
end
function p.dato(arg_spl, n)
-- Henta ut datoen
datoTab = {}
if p.erDag(arg_spl[n]) then
datoTab['dag'] = arg_spl[n]
datoTab['månad'] = arg_spl[n+1]
datoTab['år'] = arg_spl[n+2]
datoTab['dato'] = '[[' .. datoTab['dag'] .. ' ' .. datoTab['månad'] .. ']]' .. ' [[' .. datoTab['år'] .. ']]'
hopp = n+2
elseif p.erMaanad(arg_spl[n]) then
datoTab['månad'] = arg_spl[n]
datoTab['år'] = arg_spl[n+1]
datoTab['dato'] = datoTab['månad'] .. ' [[' .. datoTab['år'] .. ']]'
hopp = n+1
elseif p.erAarstal(arg_spl[n]:gsub(',$', '')) then
datoTab['år'] = arg_spl[n]:gsub(',$', '')
datoTab['dato'] = '[[' .. datoTab['år'] .. ']]'
hopp = n
elseif arg_spl[n] == '?' then
datoTab['dato'] = 'ukjend fødedato'
hopp = n
end
return datoTab, hopp
end
function p.namn(arg_spl, n)
-- Henta ut namnet
-- Mogelege avgrensingar: «,», «-», «–» og «og»
for i, ele in ipairs(arg_spl) do
if i > n then
if ele == ',' or ele == '-' or ele == '–' or ele == 'og' then
ende = i-1
break
else
ende = i
end
if ele:find(',$') then
ende = i
length = ele:len()
arg_spl[ende] = ele:sub(1, length-1)
break
end
end
end
namnet = table.concat(arg_spl, ' ', n+1, ende)
return namnet
end
function p.stad(arg_spl, n)
-- Henta ut stad
-- Mogelege avgrensingar: «,», «som», «-», «–» og «og»
for i, ele in ipairs(arg_spl) do
if i > n then
if ele == ',' or ele == 'som' or ele == '-' or ele == '–' or ele == 'og' then
ende = i-1
break
else
ende = i
end
if ele:find(',$') then
ende = i
length = ele:len()
arg_spl[ende] = ele:sub(1, length-1)
break
end
end
end
if ende == n + 1 and not arg_spl[ende]:find(']]') then
arg_spl[ende] = '[[' .. arg_spl[ende] .. ']]'
end
stadnamn = ' ' .. table.concat(arg_spl, ' ', n, ende)
return stadnamn
end
function p.hovud(ramme)
sidenamn = mw.title.getCurrentTitle().fullText
if sidenamn == 'Mal:Levde-lua' then
return ''
end
arg = ramme:getParent().args
hArg = arg[1]
if hArg:find('%d–%d') then -- syrg for mellomrom
hArg = hArg:gsub('–', ' - ')
elseif hArg:find('%d%-%d') then
hArg = hArg:gsub('-', ' - ')
elseif hArg:find('%?.%d') then
hArg = hArg:gsub('%?.', '? - ')
end
arg_spl = mw.text.split(hArg, ' ')
l = table.maxn(arg_spl)
hopp = 0
stad1 = nil
stad2 = nil
foedd_dato = ''
daud_dato = ''
foedenamn = ''
foedd_kring = ''
daud_kring = ''
kat1 = ''
kat2 = ''
kat3 = ''
kat4 = ''
side = 'fødd' -- kva dato jobbar me med?
i_hovudNR = mw.title.getCurrentTitle():inNamespace(0) -- er me i hovudnamnerommet?
for n, arget in ipairs(arg_spl) do
if arget == 'kring' or arget == 'ca.' or arget == 'cirka' then
if side == 'fødd' then
foedd_kring = 'kring '
elseif side == 'daud' then
daud_kring = 'kring '
end
elseif arget == 'fødd' or n == 1 or (n == 2 and foedd_kring ~= '') then
if arg_spl[n+1] == 'kring' or arg_spl[n+1] == 'ca.' or arg_spl[n+1] == 'cirka' then
dato_indeks = n+2
elseif arget == 'fødd' then
dato_indeks = n+1
else
dato_indeks = n
end
if arg_spl[dato_indeks] == 'i' or arg_spl[dato_indeks] == 'på' then -- ukjend fødedato
foedd_dato = ''
else
datoTab, hopp = p.dato(arg_spl, dato_indeks)
foedd_dato = datoTab['dato']
end
if foedd_dato ~= '' and datoTab['år'] then
kat1 = '[[Kategori:Fødde i ' .. datoTab['år'] .. ']]'
if datoTab['dag'] then
kat2 = '[[Kategori:Fødde den ' .. datoTab['dag'] .. ' ' .. datoTab['månad'] .. ']]'
end
end
elseif arget == 'daud' or arget == 'død' or arget == '-' then
side = 'daud'
if arg_spl[n+1] == 'kring' or arg_spl[n+1] == 'ca.' or arg_spl[n+1] == 'cirka' then
dato_indeks = n+2
else
dato_indeks = n+1
end
datoTab, hopp = p.dato(arg_spl, dato_indeks)
daud_dato = datoTab['dato']
if daud_dato ~= '' and datoTab['år'] then
kat3 = '[[Kategori:Døde i ' .. datoTab['år'] .. ']]'
if datoTab['dag'] then
kat4 = '[[Kategori:Døde den ' .. datoTab['dag'] .. ' ' .. datoTab['månad'] .. ']]'
end
end
elseif arget == 'i' or arget == 'på' then
if side == 'fødd' then
stad1 = p.stad(arg_spl, n)
elseif side == 'daud' then
stad2 = p.stad(arg_spl, n)
end
elseif arget == 'som' then
foedenamn, hopp = p.namn(arg_spl, n)
foedenamn = ' som ' .. "'''" .. foedenamn .. "'''"
end
end
if not stad1 then
stad1 = ''
end
if not stad2 then
stad2 = ''
end
if not i_hovudNR then
kat1 = ''
kat2 = ''
kat3 = ''
kat4 = ''
end
if stad1 == '' and stad2 == '' and foedenamn == '' then -- stuttversjon
tekst = foedd_kring .. foedd_dato .. '–' .. daud_kring .. daud_dato
else -- langversjon
tekst = 'fødd ' .. foedd_kring .. foedd_dato .. stad1 .. foedenamn .. ', daud ' .. daud_kring .. daud_dato .. stad2
end
tekst = tekst .. kat1 .. kat2 .. kat3 .. kat4
tekst = tekst:gsub(',]]', ']]') -- snøggløysing for å få bort uynskte komma
tekst = tekst:gsub(' ', ' ')
return tekst
end
return p