Modul:Navboks hundreår
Utsjånad
Dokumentasjon for modulen kan opprettast på Modul:Navboks hundreår/dok
local utdata = {}
local SIDENAMN = mw.title.getCurrentTitle().text
local HUNDREAAR = {
['namn'] = nil,
['byrjing'] = nil,
['ende'] = nil
}
local AAR = nil
function utdata.erArtikkelForAar()
return tonumber(SIDENAMN) ~= nil and math.floor(tonumber(SIDENAMN)) == tonumber(SIDENAMN)
end
local ER_ARTIKKEL_FOR_AAR = utdata.erArtikkelForAar()
if ER_ARTIKKEL_FOR_AAR then
AAR = tonumber(SIDENAMN)
else
HUNDREAAR['namn'] = SIDENAMN
end
function utdata.aaretErPositivt()
if ER_ARTIKKEL_FOR_AAR then
return AAR > 0
else
return not (mw.ustring.match(HUNDREAAR['namn'], 'fvt.') or mw.ustring.match(HUNDREAAR['namn'], 'f.Kr.'))
end
end
local AARET_ER_POSITIVT = utdata.aaretErPositivt()
function utdata.erFyrsteHundreaaret()
if ER_ARTIKKEL_FOR_AAR then
return AAR <= 100 and AAR >= 1
else
return AARET_ER_POSITIVT and mw.ustring.match(HUNDREAAR['namn'], 'hundreåret')
end
end
function utdata.erFyrsteHundreaaretMinus()
if ER_ARTIKKEL_FOR_AAR then
return AAR >= -100 and AAR <= -1
else
return (not AARET_ER_POSITIVT) and mw.ustring.match(HUNDREAAR['namn'], 'hundreåret')
end
end
local ER_FYRSTE_HUNDREAARET = utdata.erFyrsteHundreaaret()
local ER_FYRSTE_HUNDREAARET_MINUS = utdata.erFyrsteHundreaaretMinus()
function utdata.finnHundreaar()
if ER_FYRSTE_HUNDREAARET_MINUS then
HUNDREAAR['namn'] = '1. hundreåret fvt.'
elseif ER_FYRSTE_HUNDREAARET then
HUNDREAAR['namn'] = '1. hundreåret'
else
local forteikn = AAR >= 0 and 1 or -1
local absoluttverdi = math.abs(AAR)
local byrjing = forteikn * math.floor(absoluttverdi / 100) * 100
local namn = byrjing .. '-talet'
HUNDREAAR['byrjing'] = byrjing
if not AARET_ER_POSITIVT then
namn = namn .. ' fvt.'
end
HUNDREAAR['namn'] = namn
end
end
if ER_ARTIKKEL_FOR_AAR then
utdata.finnHundreaar()
end
function utdata.lagAarliste()
local aarliste = {}
for i = HUNDREAAR['byrjing'], HUNDREAAR['ende'] do
table.insert(aarliste, i)
end
return aarliste
end
function utdata.aarlisteSomTekst()
local aarliste = utdata.lagAarliste()
local tekst = ""
local aarNo = tonumber(os.date("%Y"))
local aartekst = ''
for i, aar in ipairs(aarliste) do
if i > 1 then
tekst = tekst .. " | "
end
aartekst = "[[" .. aar .. "]]"
if aar > aarNo then
aartekst = "''" .. aartekst .. "''"
end
tekst = tekst .. aartekst
end
return tekst
end
function utdata.finnByrjingPaaHundreaar()
if ER_FYRSTE_HUNDREAARET then
return 1
elseif ER_FYRSTE_HUNDREAARET_MINUS then
return -100
elseif AARET_ER_POSITIVT then
return tonumber(HUNDREAAR['namn']:match("^%d+"))
else
return tonumber(('-' .. HUNDREAAR['namn']:match("^%d+")) - 99)
end
end
HUNDREAAR['byrjing'] = utdata.finnByrjingPaaHundreaar()
HUNDREAAR['ende'] = HUNDREAAR['byrjing'] + 99
function utdata.foerreHundreaaret()
local data = {}
if ER_FYRSTE_HUNDREAARET then
data['namn'] = '1. hundreåret fvt.'
data['ende'] = -1
elseif ER_FYRSTE_HUNDREAARET_MINUS then
data['namn'] = '100-talet fvt.'
data['ende'] = -101
elseif AARET_ER_POSITIVT then
if HUNDREAAR['byrjing'] - 100 == 0 then
data['namn'] = '1. hundreåret'
data['ende'] = 99
else
data['namn'] = HUNDREAAR['byrjing'] - 100 .. '-talet'
data['ende'] = HUNDREAAR['byrjing'] - 1
end
else
data['namn'] = math.abs(HUNDREAAR['byrjing']) + 1 .. '-talet fvt.'
data['ende'] = HUNDREAAR['byrjing'] - 1
end
return data
end
function utdata.nesteHundreaaret()
local data = {}
if ER_FYRSTE_HUNDREAARET then
data['namn'] = '100-talet'
data['byrjing'] = 101
elseif ER_FYRSTE_HUNDREAARET_MINUS then
data['namn'] = '1. hundreåret'
data['byrjing'] = 1
elseif not AARET_ER_POSITIVT then
if HUNDREAAR['byrjing'] == -199 then
data['namn'] = '1. hundreåret fvt.'
data['byrjing'] = -99
else
data['namn'] = math.abs(HUNDREAAR['byrjing']) - 199 .. '-talet fvt.'
data['byrjing'] = HUNDREAAR['byrjing'] + 100
end
else
data['namn'] = HUNDREAAR['byrjing'] + 100 .. '-talet'
data['byrjing'] = HUNDREAAR['byrjing'] + 100
end
return data
end
function utdata.lagSortertingsnykelForHundreaar()
local sorteringsnykel = nil
if HUNDREAAR['byrjing'] >= 1000 then
sorteringsnykel = nil
elseif AARET_ER_POSITIVT and HUNDREAAR['byrjing'] < 1000 then
sorteringsnykel = '0' .. HUNDREAAR['byrjing']
else
local aarAbs = nil
if ER_FYRSTE_HUNDREAARET_MINUS then
aarAbs = 0
else
aarAbs = -(HUNDREAAR['ende'])
end
local alfabet = 'zyxwvutsrqponmlkjihgfedcba'
local indeks1 = math.floor(aarAbs / 2600) + 1
local indeks2 = (aarAbs/100 % 26) + 1
sorteringsnykel = '-' .. alfabet:sub(indeks1, indeks1) .. alfabet:sub(indeks2, indeks2)
end
return sorteringsnykel
end
function utdata.lagSortertingsnykelForAar()
local sorteringsnykel = nil
if AARET_ER_POSITIVT then
sorteringsnykel = string.format('%04d', AAR)
else
local aarAbs = math.abs(AAR)
local alfabet = 'abcdefghijklmnopqrstuvwxyz'
local indeks1 = math.mod((25 - math.floor(aarAbs / 27)), 26) + 1
local indeks2 = math.mod((26 - aarAbs), 26) + 1
sorteringsnykel = '-' .. alfabet:sub(indeks1, indeks1) .. alfabet:sub(indeks2, indeks2)
end
return sorteringsnykel
end
function utdata.kategoriar()
local kategoristreng = ''
local sorteringsnykelstreng = ''
if ER_ARTIKKEL_FOR_AAR then
sorteringsnykelstreng = '|' .. utdata.lagSortertingsnykelForAar()
else
sorteringsnykelstreng = '| '
end
if ER_FYRSTE_HUNDREAARET then
kategoristreng = '[[Kategori:Første hundreåret' .. sorteringsnykelstreng .. ']]'
elseif ER_FYRSTE_HUNDREAARET_MINUS then
kategoristreng = '[[Kategori:Første hundreåret fvt.' .. sorteringsnykelstreng .. ']]'
else
kategoristreng = '[[Kategori:' .. HUNDREAAR['namn'] .. sorteringsnykelstreng .. ']]'
end
if not ER_ARTIKKEL_FOR_AAR then
local sortertingsnykelHundreaar = utdata.lagSortertingsnykelForHundreaar()
local sorteringsnykelstreng = ''
if sortertingsnykelHundreaar ~= nil then
sorteringsnykelstreng = '|' .. sortertingsnykelHundreaar
end
local kategoriHundreaar = '[[Kategori:Hundreår' .. sorteringsnykelstreng .. ']]'
kategoristreng = kategoristreng .. kategoriHundreaar
end
return kategoristreng
end
function utdata.hovud(frame)
local namnerom = mw.title.getCurrentTitle().nsText
if namnerom ~= '' then
return ''
end
local byrjing = [[<div class="toccolours" style="text-align: center; clear: both; margin-top: 2em;">
<div style="color:black; background-color: #efefef;">'''{{{1}}}'''</div>]]
local ende = '</div>'
local args = frame:getParent().args
local visAar = args['visÅr'] == nil or args['visÅr'] == 1 or args['visÅr'] == 'ja' or args['vis_år'] == 1 or args['vis_år'] == 'ja'
local dataFoerre = utdata.foerreHundreaaret()
local dataNeste = utdata.nesteHundreaaret()
local namnestreng = HUNDREAAR['namn']
if ER_ARTIKKEL_FOR_AAR then
namnestreng = '[[' .. namnestreng .. ']]'
end
local byrjing = byrjing:gsub('{{{1}}}','\'\'' .. '[[' .. dataFoerre['namn'] .. '|<]]\'\' ' .. namnestreng .. ' \'\'[[' .. dataNeste['namn'] .. '|>]]\'\'')
local maltekst = byrjing
if visAar then
aarliste = utdata.aarlisteSomTekst()
aarliste = '[[' .. dataFoerre['ende'] .. '|<<]] ' .. aarliste .. ' [[' .. dataNeste['byrjing'] .. '|>>]]'
maltekst = maltekst .. aarliste .. ende
else
maltekst = maltekst .. ende
end
maltekst = maltekst .. utdata.kategoriar()
return maltekst
end
return utdata