Moduuli:Lehtiviite
Siirry navigaatioon
Siirry hakuun
Moduuli
[muokkaa wikitekstiä]Käsittely {{Lehtiviite}}-mallineen parametreille ja muotoilulle.
Tuki myös englanninkielisille parametreille helpottamaan siirtämistä.
local t={}
-- patterns copied from template Onko päiväys ISO 8601 -muodossa?
local function istimeinISO( datestring )
if not datestring then
return false
end
local result
result = mw.ustring.match( datestring, "^%s*-?%d%d%d%d%-%d%d%-%d%d%s*$", 1 ) -- 2016-05-05
if result then
return true
end
result = mw.ustring.match( datestring, "^%s*-?%d%d%d%d%-%d%d%-%d%dT%d%d:%d%d:%d%d?Z%s*$", 1 ) -- 2016-05-05T10:09:04Z
if result then
return true
end
result = mw.ustring.match( datestring, "^%s*-?%d%d%d%d%d%d%d%dT%d%d%d%d%d%d?Z%s*$", 1 ) -- 20160505T100904Z
if result then
return true
end
return false
end
local function localizedate( datestring )
local tmp = datestring
-- check for non-breakable spaces
tmp = tmp:gsub( '\194\160', ' ' ):gsub( ' ', ' ' )
local lang = mw.language.getContentLanguage()
-- same as #time parser
return lang:formatDate( "j.n.Y", tmp, true )
end
local function encbrackets( s )
local tmp = s
if mw.ustring.find(tmp, '%]') then
tmp = mw.ustring.gsub( tmp, '%]', "]" )
end
if mw.ustring.find(tmp, '%[') then
tmp = mw.ustring.gsub( tmp, '%[', "[" )
end
return tmp
end
local function formatpubmedid( pmid )
-- some extra validation that id is a number
local num = tonumber(pmid)
if num ~= nil then
return "PubMed:[https://pubmed.ncbi.nlm.nih.gov/".. pmid .. " " .. pmid .."]"
end
-- could just give error instead?
return "PubMed: <span class='error'>Virhe: ".. pmid .."</span> [[Luokka:Sivut, joissa on virheellinen PubMed-tunniste]]"
end
local function formatdoi( doiid )
local url = '//dx.doi.org/' .. mw.uri.encode( doiid )
local htmlenc = mw.text.encode(doiid)
if mw.ustring.find(htmlenc, '%]') then
-- check: what was this case for? should just give error?
htmlenc = mw.ustring.gsub( htmlenc, '%]', "]" )
end
return "[[Digital object identifier|doi]]:[" .. url .. " " .. htmlenc .."]"
end
local function formatbibcode( bibcode )
--local CheckBibcode = require('Moduuli:check bibcode')
--local err = CheckBibcode.check_bibcode(bibcode)
local url = 'http://adsabs.harvard.edu/abs/' .. mw.uri.encode( bibcode )
local htmlenc = mw.text.encode(bibcode)
return "Bibcode:[" .. url .. " " .. htmlenc .."]" -- .. err
end
-- Semantic Scholar Corpus ID
local function formats2cid( s2cid )
-- just a number
local num = tonumber(s2cid)
if num ~= nil then
return "S2CID:[https://api.semanticscholar.org/CorpusID:".. s2cid .. " " .. s2cid .."]"
end
-- could just give error instead?
return "S2CID:<span class='error'>Virhe: ".. s2cid .."</span> [[Luokka:Sivut, joissa on virheellinen S2CID-tunniste]]"
end
local function formatarxiv(arxiv)
local arxivid = mw.uri.encode( arxiv )
return '[[Arxiv|arXiv]]:[https://arxiv.org/abs/0704.0001/' .. arxivid .. ' ' .. arxivid .. ']'
end
local function formatjstor(jstor)
-- should be number only?
local jstorid = mw.uri.encode( jstor )
return '[[JSTOR]]:[http://www.jstor.org/stable/' .. jstorid .. ' ' .. jstorid .. ']'
end
local function formatissn(issn)
return '[http://www.worldcat.org/issn/' .. issn .. ' ISSN ' .. issn ..']'
--return '[[Toiminnot:Kirjalähteet/' .. issn .. ' ISSN ' .. issn ..']]'
end
local function formatlanguagecode( kielinimi )
local str = "<span style='font-size: 0.95em; color:#555; position: relative;'>(" .. kielinimi .. ")</span>"
return str
end
local function lehtiviite( args )
local wiki = {}
local function insert( value )
wiki[#wiki+1] = value
end
insert('<span class="lehtiviite" title="Lehtiviite">')
-- vauthors is just a list in vancouver system
local author = args['Tekijä'] or args['author'] or args['tekijä'] or args['vauthors'] or ""
if author ~= "" then
insert(author)
insert(": ")
else
local numeroton = false
local sukunimi = args['Sukunimi'] or args['sukunimi'] or args['last'] or ""
local etunimi = args['Etunimi'] or args['etunimi'] or args['first'] or ""
if sukunimi ~= "" and etunimi ~= "" then
insert(sukunimi)
insert(", ")
insert(etunimi)
numeroton = true
elseif sukunimi ~= "" then
insert(sukunimi)
numeroton = true
elseif etunimi ~= "" then
insert(etunimi)
numeroton = true
end
-- numeroidut rivit (jos käännös toisenkielistä wikistä)
local numeroitu = false
local rivinro = 1
while (rivinro <= 9) do
local numero = tostring(rivinro)
sukunimi = args['Sukunimi' .. numero] or args['sukunimi' .. numero] or args['last' .. numero] or ""
etunimi = args['Etunimi' .. numero] or args['etunimi' .. numero] or args['first' .. numero] or ""
if sukunimi ~= "" and etunimi ~= "" then
if (numeroton == true or rivinro > 1) then
-- päätä edellinen ennen seuraavaa nimeä
insert('; ')
end
insert(sukunimi)
insert(", ")
insert(etunimi)
numeroitu = true
end
rivinro = rivinro +1
end
if (numeroton == true or numeroitu == true) then
-- päätä tekijä(t)
insert(": ")
end
end
local otsikko = args['Otsikko'] or args['Nimeke'] or args['Nimike'] or args['nimeke'] or args['nimike'] or args['otsikko'] or args['title'] or ""
if otsikko ~= "" then
local lopetusmerkki = args['Lopetusmerkki'] or ""
insert(otsikko)
if lopetusmerkki ~= "pois" then
insert('.')
end
insert(' ')
end
local selite = args['Selite'] or args['selite'] or ""
if selite ~= "" then
insert("(")
insert(selite)
insert(") ")
end
local julkaisu = args['Julkaisu'] or args['julkaisu'] or ""
if julkaisu ~= "" then
insert('<i>')
insert(julkaisu)
insert('</i>')
insert(', ')
else
insert("<span style='color:red; font-weight:bold;'>Määritä julkaisu!</span>[[Luokka:Sivut, joiden viitemallineissa on virheitä]]")
end
local vuosikerta = args['Vuosikerta'] or args['vuosikerta'] or ""
local numero = args['Numero'] or args['numero'] or ""
local sivut = args['Sivut'] or args['sivut'] or ""
local ajankohta = args['Ajankohta'] or args['ajankohta'] or args['Vuosi'] or args['vuosi'] or ""
if ajankohta ~= "" then
if istimeinISO(ajankohta) then
ajankohta = localizedate(ajankohta)
end
insert(ajankohta)
if vuosikerta ~= "" then
insert(', ')
insert(vuosikerta)
insert('. vsk')
end
if numero ~= "" then
insert(', nro ')
insert(numero)
end
if sivut ~= "" then
insert(', s. ')
insert(sivut)
end
insert('. ')
else
insert("<span style='color:red; font-weight:bold;'>Määritä ajankohta!</span>[[Luokka:Sivut, joiden viitemallineissa on virheitä]]")
end
local julkaisija = args['Julkaisija'] or args['julkaisija'] or ""
local julkaisupaikka = args['Julkaisupaikka'] or args['julkaisupaikka'] or ""
if julkaisupaikka ~= "" then
insert(" ")
insert(julkaisupaikka)
-- semicolon if place is followed by publisher, otherwise dot
if julkaisija ~= "" then
insert(": ")
else
insert(".")
end
end
-- julkaisija (ilman julkaisupaikkaa)
if julkaisija ~= "" then
insert(" ")
insert(julkaisija)
insert(".")
end
local lainaus = args['Lainaus'] or args['lainaus'] or ""
if lainaus ~= "" then
--<span class="citation">...</span>
insert(' ”')
insert(lainaus)
insert('”')
end
local tunniste = args['Tunniste'] or args['tunniste'] or ""
if tunniste ~= "" then
insert(" ")
insert(tunniste)
insert('. ')
end
local pmid = args['PMID'] or args['Pmid'] or args['pmid'] or ""
if pmid ~= "" then
local pubmedlink = formatpubmedid(pmid)
if pubmedlink ~= "" then
insert(" ")
insert(pubmedlink)
insert('. ')
end
end
local doi = args['Doi'] or args['doi'] or ""
if doi ~= "" then
local doilink = formatdoi(doi)
if doilink ~= "" then
insert(" ")
insert(doilink)
insert('. ')
end
end
local issn = args['Issn'] or args['ISSN'] or ""
if issn ~= "" then
local issnlink = formatissn(issn)
if issnlink ~= "" then
insert(" ")
insert(issnlink)
insert('. ')
end
end
local bibcode = args['Bibcode'] or args['bibcode'] or ""
if bibcode ~= "" then
local bibcodelink = formatbibcode(bibcode)
if bibcodelink ~= "" then
insert(" ")
insert(bibcodelink)
insert('. ')
end
end
local jstor = args['JSTOR'] or args['Jstor'] or args['jstor'] or ""
if jstor ~= "" then
local jstorlink = formatjstor(jstor)
if jstorlink ~= "" then
insert(" ")
insert(jstorlink)
insert('. ')
end
end
local s2cid = args['S2CID'] or args['S2cid'] or args['s2cid'] or ""
if s2cid ~= "" then
local s2cidlink = formats2cid(s2cid)
if s2cidlink ~= "" then
insert(" ")
insert(s2cidlink)
insert('. ')
end
end
local arxiv = args['Arxiv'] or args['arxiv'] or args['arXiv'] or ""
if arxiv ~= "" then
local arxivlink = formatarxiv(arxiv)
if arxivlink ~= "" then
insert(" ")
insert(arxivlink)
insert('. ')
end
end
local viitattu = args['Viitattu'] or args['Luettu'] or args['viitattu'] or args['luettu'] or ""
local url = args['Osoite'] or args['www'] or args['url'] or args['osoite'] or args['URL'] or ""
if url ~= "" then
local linkkiteksti = args['www-teksti'] or "Artikkelin verkkoversio"
insert('[')
insert(url)
insert(' ')
insert(linkkiteksti)
insert(']')
insert('.')
local tiedostomuoto = args['Tiedostomuoto'] or args['tiedostomuoto'] or ""
if tiedostomuoto ~= "" then
insert(" ")
insert("<small>(")
insert(tiedostomuoto)
insert(")</small>")
end
if viitattu ~= "" then
if istimeinISO(viitattu) then
viitattu = localizedate(viitattu)
end
insert(" ")
insert('Viitattu ')
insert(viitattu)
insert('.')
end
end
local archiveurl = args['Arkisto'] or args['arkisto'] or args['archiveurl'] or args['archive-url'] or ""
local arkistoaika = args['Arkistoitu'] or args['arkistoitu'] or args['archivedate'] or args['archive-date'] or ""
if archiveurl ~= "" then
insert(' ')
insert('[')
insert(archiveurl)
insert(' ')
insert('Arkistoitu')
insert(']')
if arkistoaika ~= "" then
if istimeinISO(arkistoaika) then
arkistoaika = localizedate(arkistoaika)
end
insert(' ')
insert(arkistoaika)
end
insert('.')
end
local kieli = args['Kieli'] or args['kieli'] or ""
if kieli ~= "" then
insert(' ')
insert(kieli)
end
insert('</span>')
return table.concat( wiki )
end
function t.main( frame )
local origArgs
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
for k, v in pairs( frame.args ) do
origArgs = frame.args
break
end
else
origArgs = frame
end
local args = {}
for k, v in pairs( origArgs ) do
if type( k ) == 'number' or v ~= '' then
args[ k ] = v
end
end
return lehtiviite( args )
end
return t;