Modul:Sandkasse/Njardarlogar/levde

Frå Wikipedia – det frie oppslagsverket

Dokumentasjon for modulen kan opprettast på Modul:Sandkasse/Njardarlogar/levde/dok


--[[
Krav:

{{levde|1. januar 1901 - 30. desember 1974}}
{{levde|fødd 1. januar 1901 i Harstad som Lars Larsen, daud 30. desember 1974 i Haslebygd}}
{{levde|? i Harstad, daud ? 1974 i Haslebygd}} 
]]--

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]) then
        datoTab['år'] = arg_spl[n]
        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: «,», «som», «-», «–»
    for i, ele in ipairs(arg_spl) do
        if i > n then
            if ele == ',' or ele == 'som' or ele == '-' or ele == '–' 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», «-», «–»
    for i, ele in ipairs(arg_spl) do
        if i > n then
            if ele == ',' or ele == 'som' or ele == '-' or ele == '–' 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)   
    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 = ''
    foedenamn = ''
    kat1 = ''
    kat2 = ''
    kat3 = ''
    kat4 = ''
    
    for n, arget in ipairs(arg_spl) do
        if arget == 'fødd' or n == 1 then
            if arget == 'fødd' then
                byrj = n + 1
            else
                byrj = n
            end
            if arg_spl[byrj] == 'i' or arg_spl[byrj] == 'på' then -- ukjend fødedato
                foedd_dato = ''
            else
                datoTab, hopp = p.dato(arg_spl, byrj)
                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
            datoTab, hopp = p.dato(arg_spl, n+1)
            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 not stad1 then
                stad1 = p.stad(arg_spl, n)
            else
                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 stad1 == '' and stad2 == '' and foedenamn == '' then -- stuttversjon
        tekst = '(' .. foedd_dato .. '–' .. daud_dato .. ')'
    else -- langversjon
        tekst = '(fødd ' .. foedd_dato .. stad1 .. foedenamn .. ', daud ' .. daud_dato .. stad2 .. ')'
    end
    tekst = tekst .. kat1 .. kat2 .. kat3 .. kat4
    return tekst
end

return p