Modul:Levde/test

Frå Wikipedia – det frie oppslagsverket

Testmodul for å gjera det lettare å røyna ut oppdateringar av skriptet.




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)   
    arg = ramme:getParent().args
    hArg = arg[1]
    if hArg then
        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, ' ')
    else
        arg_spl = {''}
    end
    
    
    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?
    
    maanadsliste = sams.maanader()
    eining = mw.wikibase.getEntity()
    if eining and eining.claims and eining.claims.p569 then
        WDfoedd = eining.claims.p569[0].mainsnak.datavalue.value['time']
        WDsplitta = mw.text.split(WDfoedd, '-')
        plussminus = WDsplitta[1]:sub(1, 1)
        aarstal_i = WDsplitta[1]:find('[^+-0]')
        datoTabFoedd = {}
        datoTabFoedd['år'] = WDsplitta[1]:sub(aarstal_i, -1)
        datoTabFoedd['månad'] = maanadsliste[tonumber(WDsplitta[2])]
        datoTabFoedd['dag'] = WDsplitta[3]:sub(1, 2):gsub('0', '') .. '.'
        datoTabFoedd['dato'] = '[[' .. datoTabFoedd['dag'] .. ' ' .. datoTabFoedd['månad'] .. ']] [[' .. datoTabFoedd['år'] .. ']]'
    end
    
    if eining and eining.claims and eining.claims.p570 then
        WDdaud = eining.claims.p570[0].mainsnak.datavalue.value['time']
        WDsplitta = mw.text.split(WDdaud, '-')
        plussminus = WDsplitta[1]:sub(1, 1)
        aarstal_i = WDsplitta[1]:find('[^+-0]')
        datoTabDaud = {}
        datoTabDaud['år'] = WDsplitta[1]:sub(aarstal_i, -1)
        datoTabDaud['månad'] = maanadsliste[tonumber(WDsplitta[2])]
        datoTabDaud['dag'] = WDsplitta[3]:sub(1, 2):gsub('0', '') .. '.'
        datoTabDaud['dato'] = '[[' .. datoTabDaud['dag'] .. ' ' .. datoTabDaud['månad'] .. ']] [[' .. datoTabDaud['år'] .. ']]'
    end
    
    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 then --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
                datoindeks = n+2                
            elseif arget == 'fødd' then
                datoindeks = n+1
            else
                datoindeks = n
            end
            if not arg_spl[1] == '' then
                datoTabFoedd, hopp = p.dato(arg_spl, datoindeks)                   
            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
                datoindeks = n+2                
            else
                datoindeks = n+1
            end
            if not arg_spl[1] == '' then
                datoTabDaud, hopp = p.dato(arg_spl, datoindeks)
            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

    foedd_dato = datoTabFoedd['dato'] or ''
    if foedd_dato ~= '' and datoTabFoedd['år'] then
        kat1 = '[[Kategori:Fødde i ' .. datoTabFoedd['år'] .. ']]'
        if datoTabFoedd['dag'] then
            kat2 = '[[Kategori:Fødde den ' .. datoTabFoedd['dag'] .. ' ' .. datoTabFoedd['månad'] .. ']]'
        end
    end    

    daud_dato = datoTabDaud['dato']
    if daud_dato ~= '' and datoTabDaud['år'] then
        kat3 = '[[Kategori:Døde i ' .. datoTabDaud['år'] .. ']]'
        if datoTabDaud['dag'] then
            kat4 = '[[Kategori:Døde den ' .. datoTabDaud['dag'] .. ' ' .. datoTabDaud['månad'] .. ']]'
        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
    return tekst
end

return p