CitWeb[mi ez?] • [dokumentáció: mutat, szerkeszt] • [tesztek: létrehozás]

--Version 2020_06_19
require('strict')
local nyksz = require('Modul:Nyelvkódszűrő')
local ds = require('Modul:Dátumszűrés')
local getArgs = require('Modul:Arguments').getArgs
local args = {}
local lang = mw.getContentLanguage()


local hibavan = false

-- ou hibakeresésre szolgáló globális változó, ami tartalmazza az analízisre
-- szolgáló üzeneteket, az alábbi pop() függvény gyűjtögeti a tartalmát
local  popmax = 500 -- a tesztüzenetek számának maximuma
local oumarad = popmax
local ou = {}



local function pop(...)    -- idézőjeles rész és bővítmények az ou számára
                           -- memóriatúllépést okozhat, csak teszteléshez
	--[[local list = {...}
	oumarad = oumarad - 1 -- előre csökkentjük, így mindig a maradék lehetséges pop hívások számát mutatja
	if oumarad == 0 then return end -- hogy ne legyen memóriatúllépés
	for _, var in pairs(list) do
		table.insert(ou,tostring(var)..'\n')
		mw.log(ou)
	end --]]

end




-- Egy hibaüzenet kezelése.
-- Igazra állítja a hibavan változót és visszatér a megjeleníthető hibaüzenettel
-- @argument about: A hibaüzenet (string)
local function error(about)
        hibavan = true  
        local r = about
    if type( about ) == 'string' then
        if #about == 0 then
            r = 'Lua-hiba'
        end
    else
        r = tostring( about )
    end
    return '<span class="error">' .. r .. '</span>, '
end


-- URL-ben nem használható paraméterek (szóköz, macskaköröm stb.) kódolása
local function encodeURL(url)
        if type(url) ~= 'string' then
                return url
        end
        url = string.gsub(url, '%s','%%20')
        url = string.gsub(url, '"', '%%22')
        url = string.gsub(url, "'", '%%27')
        url = string.gsub(url, '<', '%%3c')
        url = string.gsub(url, '>', '%%3e')
        url = string.gsub(url, '%[','%%5b')
        url = string.gsub(url, '%]','%%5d')
        url = string.gsub(url, '{', '%%7b')
        url = string.gsub(url, '|', '%%7c')
        url = string.gsub(url, '}', '%%7d')
        return url
end

local function isISSN(str)
        local v, chsum
        str = string.gsub(str, '–' , '-') -- nagykötőjelből kicsi lesz
        str = string.gsub(str, '—' , '-') -- hetvenkvirtesből kicsi lesz
        local i, j = string.find(str, '-')
        if i == j and i == 5 then -- rendben, az ötödik helyen van a kötőjel
                v = string.sub(str,1,4) .. string.sub(str,6,8)
                chd = string.sub (str,-1,-1)
        else
                return false
        end
        if chd == 'X' or tonumber(chd) then
                if chd == 'X' then
                        chnum = 10
                else
                        chnum = string.byte(chd, 1) - string.byte('0', 1)
                end 
        else
                return false
        end 
        if tonumber(v) then 
                chsum = 0
                for j = 8, 2, -1 do
                        local elsbyte = string.byte(v, (9 - j))
                        chsum = chsum + (elsbyte - string.byte('0', 1)) * j
                end
        else
                return false -- nem számjegyek
        end
        local chnumdo = 11 - (chsum % 11)    
        if chnumdo == chnum then
                return true
        else
                return false 
        end
end

--CitWeb
--[[
    {{citweb |url= |szerző= |szerző2= |szerző3= |cím= |alcím=  |közreműködők= 
    {{citweb |url= |aut=    |aut2=    |aut3=    |tit= |subtit= |ass=   --Alternatív paraméterekkel 
    |weblap= |nyelvkód= |hely= |kiadó= |dátum= vagy év= |oldal= |elér= 
    |work=   |lan=      |loc=  |red=   |date= vagy ann= |pag=   |accd=  
    |formátum= |méret= |archívurl= |archívdátum= |doi= |egyéb= |idézet= }}
        |form=     |siz=        |aurl=      |archd=       |doi= |misc=  |quote= }}  
--]]            

-- Egy sablonparaméter lekérdezése.
-- Az üres paramétereket nilként adja át.
-- A sablonhívásban fel kell sorolni a paraméterneveket:
-- pl. getArg('aut', 'szerző', 'author')
local function getArg(...)
        for _, v in ipairs{...} do
                if args[v] and args[v] ~= '' then
                        return args[v]
                end
        end
        return nil
end

local url, szerzo, szerzo2, szerzo3, szerzo4, szerzo5, szerzo6, szerzo7, szerzo8, szerzo9
local cim, alcim, forditas_cime, datum, publication_date, outdatum, nyelv, lan, english
local ass,weblap,red,loc, publication_place, ev, ho,nap, oldal, deadurl, form,size,formsiz,aurl,archd,doi, isbn, issn, accd,misc,quote
local szerzolink,szerzolink2,szerzolink3,szerzolink4,szerzolink5,szerzolink6,szerzolink7,szerzolink8,szerzolink9
local month, year, origyear, at, template_doc_demo, _format, tipus, sorozat, nopp
-- local id, arxiv, _asin, _asin_tld, bibcode, doi_brokendate, jfm, jstor
-- local lccn, mr, oclc, ol, osti, pmc, embargo, pmid, rfc, ssrn, zbl
local layurl, laysource, laydate, author_mask, author_name_separator, author_separator
local display_authors, display_editors, lastauthoramp, postscript, separator

local function _nilez()
        szerzo, szerzo2, szerzo3, szerzo4, szerzo5 = nil
        szerzo6, szerzo7, szerzo8, szerzo9, cim, alcim = nil
        ass, weblap, lan, loc, red, ev, datum, accd, form, size, aurl, archd, misc = nil
end

local function angol_parameterek()
        local szerzo_csaladneve, szerzo2_csaladneve, szerzo3_csaladneve, szerzo4_csaladneve
        local szerzo5_csaladneve, szerzo6_csaladneve, szerzo7_csaladneve, szerzo8_csaladneve, szerzo9_csaladneve
        local szerzo_keresztneve, szerzo2_keresztneve, szerzo3_keresztneve, szerzo4_keresztneve
        local szerzo5_keresztneve, szerzo6_keresztneve, szerzo7_keresztneve, szerzo8_keresztneve, szerzo9_keresztneve
        local szerkeszto_csaladneve, szerkeszto2_csaladneve, szerkeszto3_csaladneve, szerkeszto4_csaladneve
        local szerkeszto_keresztneve, szerkeszto2_keresztneve, szerkeszto3_keresztneve, szerkeszto4_keresztneve

        cim = getArg('title')
        datum = getArg('date')
        accd = getArg('accessdate')
        aurl = encodeURL(getArg('archiveurl'))
        archd = getArg('archivedate')
        weblap = getArg('website', 'work')
        red = getArg('publisher')
        szerzo_csaladneve  = getArg('last', 'author', 'last1', 'author1', 'authors')
        szerzo2_csaladneve = getArg('last2', 'author2')
        szerzo3_csaladneve = getArg('last3', 'author3')
        szerzo4_csaladneve = getArg('last4', 'author4')
        szerzo5_csaladneve = getArg('last5', 'author5')
        szerzo6_csaladneve = getArg('last6', 'author6')
        szerzo7_csaladneve = getArg('last7', 'author7')
        szerzo8_csaladneve = getArg('last8', 'author8')
        szerzo9_csaladneve = getArg('last9', 'author9')

    szerzo_keresztneve  = getArg('first', 'first1')
        szerzo2_keresztneve = getArg('first2')
        szerzo3_keresztneve = getArg('first3')
        szerzo4_keresztneve = getArg('first4')
        szerzo5_keresztneve = getArg('first5')
        szerzo6_keresztneve = getArg('first6')
        szerzo7_keresztneve = getArg('first7')
        szerzo8_keresztneve = getArg('first8')
        szerzo9_keresztneve = getArg('first9')
        
        if szerzo_csaladneve then
                szerzo = szerzo_csaladneve
                if szerzo_keresztneve then
                        szerzo = szerzo .. ', ' .. szerzo_keresztneve
                end
        end
    if szerzo2_csaladneve then
                szerzo2 = szerzo2_csaladneve
                if szerzo2_keresztneve then
                        szerzo2 = szerzo2 .. ', ' .. szerzo2_keresztneve
                end
        end
    if szerzo3_csaladneve then
                szerzo3 = szerzo3_csaladneve
                if szerzo3_keresztneve then
                        szerzo3 = szerzo3 .. ', ' .. szerzo3_keresztneve
                end
        end
    if szerzo4_csaladneve then
                szerzo4 = szerzo4_csaladneve
                if szerzo4_keresztneve then
                        szerzo4 = szerzo4 .. ', ' .. szerzo4_keresztneve
                end
        end
    if szerzo5_csaladneve then
                szerzo5 = szerzo5_csaladneve
                if szerzo5_keresztneve then
                        szerzo5 = szerzo5 .. ', ' .. szerzo5_keresztneve
                end
        end
    if szerzo6_csaladneve then
                szerzo6 = szerzo6_csaladneve
                if szerzo6_keresztneve then
                        szerzo6 = szerzo6 .. ', ' .. szerzo6_keresztneve
                end
        end
    if szerzo7_csaladneve then
                szerzo7 = szerzo7_csaladneve
                if szerzo7_keresztneve then
                        szerzo7 = szerzo7 .. ', ' .. szerzo7_keresztneve
                end
        end
    if szerzo8_csaladneve then
                szerzo8 = szerzo8_csaladneve
                if szerzo8_keresztneve then
                        szerzo8 = szerzo8 .. ', ' .. szerzo8_keresztneve
                end
        end
    if szerzo9_csaladneve then
                szerzo9 = szerzo9_csaladneve
                if szerzo9_keresztneve then
                        szerzo9 = szerzo9 .. ', ' .. szerzo9_keresztneve
                end
        end
        
        szerzolink = getArg('authorlink', 'authorlink1', 'author-link1', 'author1-link', 'author1link')
        if szerzolink then szerzo = '[[' .. szerzolink .. ']]' end
        szerzolink2 = getArg('authorlink2', 'author2-link')
        if szerzolink2 then szerzo2 = '[[' .. szerzolink2 .. ']]' end
        szerzolink3 = getArg('authorlink3', 'author3-link')
        if szerzolink3 then szerzo3 = '[[' .. szerzolink3 .. ']]' end
        szerzolink4 = getArg('authorlink4', 'author4-link')
        if szerzolink4 then szerzo4 = '[[' .. szerzolink4 .. ']]' end
        szerzolink5 = getArg('authorlink5', 'author5-link')
        if szerzolink5 then szerzo5 = '[[' .. szerzolink5 .. ']]' end
        szerzolink6 = getArg('authorlink6', 'author6-link')
        if szerzolink6 then szerzo6 = '[[' .. szerzolink6 .. ']]' end
        szerzolink7 = getArg('authorlink7', 'author7-link')
        if szerzolink7 then szerzo7 = '[[' .. szerzolink7 .. ']]' end
        szerzolink8 = getArg('authorlink8', 'author8-link')
        if szerzolink8 then szerzo8 = '[[' .. szerzolink8 .. ']]' end
        szerzolink9 = getArg('authorlink9', 'author9-link')
        if szerzolink9 then szerzo9 = '[[' .. szerzolink9 .. ']]' end
        datum = getArg('date', 'year')
        origyear = getArg('origyear')

        ass = getArg('others')
        lan = getArg('language')
        cim = getArg('title')
        forditas_cime = getArg('trans_title')
        loc = getArg('place','location')
        red = getArg('publisher')
        publication_date = getArg('publication-date')
        if publication_date then 
                if select(2, ds.datumszuro(publication_date)) == select(2, ds.datumszuro(datum)) then
                        publication_date = nil 
                else
                        datum = publication_date
                end
        end -- csak akkor tekintjük létezőnek, ha különbözik a dátumtól         
        publication_place = getArg('publication-place')

        szerkeszto_csaladneve = getArg('editor-last','editor1-last', 'editor', 'editors')
        szerkeszto_keresztneve = getArg('editor-first', 'editor1-first')
        szerkeszto2_csaladneve = getArg('editor2-last')
        szerkeszto2_keresztneve = getArg('editor2-first')
        szerkeszto3_csaladneve = getArg('editor3-last')
        szerkeszto3_keresztneve = getArg('editor3-first')
        szerkeszto4_csaladneve = getArg('editor4-last')
        szerkeszto4_keresztneve = getArg('editor4-first')

        local szerkesztok = {}
        if szerkeszto_csaladneve then
                szerkeszto = szerkeszto_csaladneve
                if szerkeszto_keresztneve then
                        szerkeszto = szerkeszto .. ', ' .. szerkeszto_keresztneve
                end
                table.insert(szerkesztok, szerkeszto)
        end
        if szerkeszto2_csaladneve then
                szerkeszto2 = szerkeszto2_csaladneve
                if szerkeszto2_keresztneve then
                        szerkeszto2 = szerkeszto2 .. ', ' .. szerkeszto2_keresztneve
                end
                table.insert(szerkesztok, szerkeszto2)
        end
        if szerkeszto3_csaladneve then
                szerkeszto3 = szerkeszto3_csaladneve
                if szerkeszto3_keresztneve then
                        szerkeszto3 = szerkeszto3 .. ', ' .. szerkeszto3_keresztneve
                end
                table.insert(szerkesztok, szerkeszto3)
        end
        if szerkeszto4_csaladneve then
                szerkeszto4 = szerkeszto4_csaladneve
                if szerkeszto4_keresztneve then
                        szerkeszto4 = szerkeszto4 .. ', ' .. szerkeszto4_keresztneve
                end
                table.insert(szerkesztok, szerkeszto4)
        end
        if #szerkesztok > 0 then
                szerkeszto = 'szerk.: ' .. table.concat(szerkesztok, '&#8201;&#8211;&#8201;')
        end
        
        oldal = getArg('page', 'pages')
        nopp = getArg('nopp')
        if not oldal then
                at = getArg('at')
        end
        deadurl = getArg(' deadurl')
        template_doc_demo = (getArg('template doc demo') == 'true')
        _format = getArg('format')
        if _format then
                _format= '( '.._format..') '
        end
        isbn = getArg('isbn')
        issn = getArg('issn')
        
        --Quote
        quote = getArg('quote')
        doi = getArg('doi')
        tipus = getArg('type')
        sorozat = getArg('series', 'version')
        if sorozat then
                sorozat = 'Sorozat: ' .. sorozat .. ' '
        else
                sorozat = getArg('agency')
        end
        
        --[[ nem használja semmi
        id = getArg('id')   
        if not id then  
                arxiv = getArg('arxiv')
                _asin = getArg('asin')
                _asin_tld = getArg('asin-tld')
                
                bibcode = getArg('bibcode')
                doi_brokendate = getArg('doi_brokendate')
                jfm = getArg('jfm')
                jstor = getArg('jstor')
                lccn = getArg('lccn') 
                mr = getArg('mr')
                oclc = getArg('oclc')
                ol = getArg('ol')
                osti = getArg('osti')
                pmc = getArg('pmc')
                embargo = getArg('embargo')
                pmid = getArg('pmid')
                rfc = getArg('rfc')
                ssrn = getArg('ssrn')
                zbl = getArg('zbl')
        end
        --]]
         
        --Laysummary
        layurl = getArg('layurl')
        laysource = getArg('laysource')
        laydate = getArg('laydate')
        
        --Display options
        author_mask = getArg('author-mask')
        author_name_separator = getArg('author-name-separator')
        author_separator = getArg('author-separator')
        display_authors = getArg('display-authors')
        display_editors = getArg('display-editors')
        lastauthoramp = getArg('lastauthoramp')
        postscript = getArg('postscript')
        separator = getArg('separator')
end

local function magyar_e()
        local function cleanArg(...)
                local arg = getArg(...)
                if arg then
                        return (string.gsub(arg, '[%[%]]', ''))
                else
                        return nil
                end
        end
        url = getArg('url')
        szerzo  = getArg('szerző',  'aut' )
        szerzo2 = getArg('szerző2', 'aut2')
        szerzo3 = getArg('szerző3', 'aut3')
        szerzo4 = getArg('szerző4', 'aut4')
        szerzo5 = getArg('szerző5', 'aut5')
        szerzo6 = getArg('szerző6', 'aut6')
        szerzo7 = getArg('szerző7', 'aut7')
        szerzo8 = getArg('szerző8', 'aut8')
        szerzo9 = getArg('szerző9', 'aut9')
        cim = getArg('cím', 'tit')
        alcim = getArg('alcím', 'subtit')
        ass = getArg('ass', 'közreműködők')
        weblap = getArg('weblap', 'work')
        lan = getArg('lan', 'nyelvkód')
        loc = getArg('loc', 'hely')
        red = getArg('red', 'kiadó')
        ev = cleanArg('év', 'ann')
        datum = cleanArg('dátum', 'date')
        oldal = getArg('oldal', 'pag')
        accd = cleanArg('elér', 'accd')
        form = getArg('form', 'formátum')
        size = getArg('siz', 'méret')
        aurl = getArg('aurl', 'archívurl')
        archd = cleanArg('archd', 'archívdátum')
        doi = getArg('doi') 
        misc = getArg('egyéb', 'misc')
        quote = getArg('quote', 'idézet')
        local x = szerzo or szerzo2 or szerzo3 or szerzo4 or szerzo5 or szerzo6
                or szerzo7 or szerzo8 or szerzo9 or cim or alcim or ass or lan or loc
                or red or ev or accd or form or size or aurl or archd  or misc
        return (x ~= nil)
end

local function _citweb()
        _nilez()
        local hiba_jelzes = nil
        local igen_magyar = magyar_e()
 
        if not igen_magyar then
                angol_parameterek()
        end


        hiba_jelzes = ''

        -- a szerzőket előre lépteti, társszerzőből szerzőt csinál stb.
        local szerzok = {}
        if szerzo then
                table.insert(szerzok, szerzo)
        end
        if szerzo2 then
                table.insert(szerzok, szerzo2)
        end
        if szerzo3 then
                table.insert(szerzok, szerzo3)
        end
        if szerzo4 then
                table.insert(szerzok, szerzo4)
        end
        if szerzo5 then
                table.insert(szerzok, szerzo5)
        end
        if szerzo6 then
                table.insert(szerzok, szerzo6)
        end
        if szerzo7 then
                table.insert(szerzok, szerzo7)
        end
        if szerzo8 then
                table.insert(szerzok, szerzo8)
        end
        if szerzo9 then
                table.insert(szerzok, szerzo9)
        end
        if #szerzok > 0 then
                szerzo = table.concat(szerzok, '&#8201;&#8211;&#8201;') .. ': '
        else
                szerzo = nil
        end
        
        --cím és alcím
        local terminator
        if cim then
                cim = mw.text.trim(lang:ucfirst(cim))
        else
                hiba_jelzes = hiba_jelzes .. error('nincs elsődleges cím')
        end
        if cim and alcim then
                alcim = lang:ucfirst(alcim)
                if string.sub(cim, -1, -1) ~= ':' then
                        cim = cim .. ': ' .. alcim
                else
                        cim = cim .. ' ' .. alcim
                end
        end
        if cim then
                terminator = string.sub(cim, -1, -1)
                if terminator ~= '?' and terminator ~= '!' and terminator ~= ',' and terminator ~= '.' and terminator ~= '\166' then
                        cim = cim .. '.'
                end   
                
                -- SZÜKSÉGES CSERÉK:
                --newline       [            ]       |    Ezek kellenek, mert az URL ráhúzásakor bezavarnak
                --space    &#91;        &#93;   &#124;
                if forditas_cime then
                        cim = cim .. ' [' .. forditas_cime .. '] '
                end
                cim = string.gsub(cim, '\n', ' ')
                cim = string.gsub(cim, '%[', '&#91;')  
                cim = string.gsub(cim, '%]', '&#93;')
                cim = string.gsub(cim, '%|', '&#124;')
        end
        
        -- asszisztencia
        if ass then
                ass = lang:ucfirst(ass) .. ' '
        end
        
        url = getArg('url'); --pop('url', url)
        url = encodeURL(url)
        
        -- weblap
        -- pop('weblap', weblap or 'nincs eddig') 
        local function weboldalkereso(rest)
			local wl,j,i
						--pop("maradek="..rest)
                        j, i = string.find(rest, '/')
                        if i then  
                                wl = string.sub(rest, 1, i-1)
                                --pop("weblap="..wl)  
                        else
                                wl = rest
                        end
			return wl
        end	
        
        if not(weblap) then -- ha nincs megadva
           if url then 
                local maradek, i,j
                j, i = string.find(url, '//')
                --pop("j és i=",j,i)
                if i then
                        maradek = string.sub(url, i+1, -1)
                        --pop("maradek1=",maradek)
                        weblap = weboldalkereso (maradek)
                                        else 
                                            i = nil
                                                j, i = string.find(url, ':')
                                                if i then 
                                                
                                                        maradek = string.sub(url, i+1, -1) -- kett0spont ös a k0vetü / utäni rösz egösze
                                                        maradek = string.gsub(maradek, "^/",'')
                                                        --pop("maradek : utän=",maradek)
                                                        weblap = weboldalkereso (maradek)
                                                else    
                                                        error ("helytelen url szerkezet")
                                                        --pop("helytelen url szerkezet")
                                                        weblap = "?weblap?"
                                                        --pop("weblap=    ",weblap)
                                                end --if i belsü
                                        end     -- if i kßlsü
           else         
           	        error ("nincs url")
                    weblap = "?weblap?"    
                    --pop("weblap nem volt=" ,weblap)
           end  -- if url             
         --  pop ("weblap a végén=    ",weblap)
        end  -- if nincs weblap megadva      
     
 
    -- nyelv kezelése


if lan then    
    local   nyelvek,hibak,nyomok = nil
    nyelvek,hibak,nyomok = nyksz.nyelvszuro(lan)
       if hibak then
          pop("kapott hibalista=", nyomok)
          hiba_jelzes = hiba_jelzes .. ' ' ..error(hibak ..'hibás nyelvkód') 
          
       end 
       if nyelvek then
          pop("kapott nyelvlista=", nyelvek)
          lan = nyelvek
       end          
       if nyomok then
          pop("nyomkövetés a nyelvszűrésen belül=", nyomok)
       end   
       if not(weblap) then
          hiba_jelzes = hiba_jelzes .. ' ' .. error('nyelv weblap nélkül')          
       end         
       if cim == nil then
          hiba_jelzes = hiba_jelzes .. ' ' .. error('nyelv cím nélkül')
       end
        
end --if lan
        
        -- loc, red
        local kiadas = loc
        if red then
                kiadas = (kiadas and kiadas .. ': ' or '') .. red
        end

        if kiadas and nyelv then
                nyelv = nyelv .. '.'
        elseif kiadas and weblap then
                weblap = weblap .. '.'
        end
        
        -- form és size
        
        local c = ''
        if form then
                c = form
        end
        if size then
                if string.sub(size, -5, -1) == 'oldal' then
                        size = string.sub(size, 1, -6)
                end
                if c ~= '' then
                        c = c .. ': ' .. size .. ' oldal '
                else
                        c = size .. ' oldal '
                end
        end
        if c ~= '' then
                formsiz = '(' .. c .. ')'
        end
        
        if ev and not datum then
                datum = ev -- ha nincs dátum, akkor az év legyen a dátum
        end             

        if datum then -- ha van dátum (most már vagy a dátum, vagy ennek hiányában az év)
                local nyom =''
                local nyom, dou = ds.datumszuro(datum)
                if dou then
                        outdatum =  '(' .. ds.honapnevesdate(dou) .. ') '
                else
                        hiba_jelzes = hiba_jelzes .. ' ' .. error('hibás dátum')
                end
        end
        
        -- oldaladatok
        if oldal then
                oldal = string.gsub(oldal, '-' ,  '–') -- kiskötőjelből nagy
                oldal = string.gsub(oldal, '—' ,  '–') -- hetvenkvirtesből nagy
                oldal = string.gsub(oldal, '%.,', ',') -- pontot követő veszőből vesszőt
                oldal = string.gsub(oldal, '%.',  '' ) -- pontból üreset
                oldal = string.gsub(oldal, ',',  '.,') -- végül vesszőből ponot követő vesszőt
                if nopp == 'y' then
                        oldal = '&#x20;' .. oldal
                else
                        oldal = '&#x20;' .. oldal .. '. o. '
                end
        end
        
        -- Archiválva
        aurl = encodeURL(aurl)
        if archd then -- ha van dátum
                local outarchd, dou
                dou = select(2, ds.datumszuro(archd))
                if dou then
                        outarchd = ds.honapnevesdate(dou)
                        if aurl then 
                                archd = '<span title="' .. outarchd .. '">[' .. aurl .. ' arch]</span>'
                        else
                                hiba_jelzes  = hiba_jelzes .. ' ' .. error('archívdátum van, de archívurl nélkül')
                        end
                else
                        hiba_jelzes  = hiba_jelzes .. ' ' .. error('hibás archívdátum')
                end  -- if dou                  
        end     -- if archd
        
        -- elérés
        if not accd then
                accd = getArg('accessdate')
        end
        if accd then -- ha van elérés
                local outaccd, dou
                dou = select(2, ds.datumszuro(accd))
                if dou then
                        outaccd = ds.honapnevesdate(dou)
                        accd = '(Hozzáférés: ' .. outaccd .. ')'
                else
                        hiba_jelzes = hiba_jelzes .. ' ' .. error('hibás elérés')
                end  -- if dou                  
        end     -- if accd

        if issn then 
                if isISSN (issn) then
                        issn = '<span title="' .. issn .. '" style="color:blue;">ISSN</span>'
                else
                        hiba_jelzes = hiba_jelzes .. ' ' .. error('hibás ISSN: ') .. issn
                end    
        else
                issn = '' -- ha nem létezik, legyen üres
        end
        isbn = getArg('isbn'); pop('isbn=', isbn)
        if isbn then
                local isbn_helyes, hibas
                isbn_helyes, isbn, hibas = require('Modul:CheckISBN').isISBN(isbn, true) -- linkelve az ISBN-ek
                if not isbn_helyes then
                        hiba_jelzes = hiba_jelzes .. ' ' .. error('hibás ISBN: ') .. isbn
                end
        end
        
        if doi then 
                local doicontrol
                doicontrol = string.sub(doi,1,2)
                if doicontrol ~= '10' then
                        hiba_jelzes = hiba_jelzes .. ' ' .. error('doi kötelezően 10-zel kezdődik!')
                else
                        doi = '<span title="' .. doi .. '">[http://dx.doi.org/' .. doi .. ' doi]</span>'
                end
        end
        
        -- misc lekezelése
        if misc then
                misc = misc .. '.'
        end
        
        -- URL lekezelése
        if url and cim then
                url = encodeURL(url)
                if deadurl and deadurl ~= 'no' and aurl then
                        cim = '[' .. aurl .. ' ' .. cim .. ']'
                else
                        cim = '[' .. url .. ' ' .. cim .. ']'
                end
        end
        
        --idézet
        if quote then
                quote = " ''„" .. quote .. "”''"
        end
        
        -- eredmény összeállítása
        local s = {}
        local function tabla(x)
                if x then
                        table.insert(s, x)
                end
        end
        
        local mi = nil

        if igen_magyar then
                tabla(szerzo)
                tabla(cim)
                tabla(ass)
                tabla(weblap)
                tabla(lan)
                tabla(kiadas)
                tabla(outdatum)
                tabla(oldal)
                tabla(accd)
                tabla(formsiz)
                tabla(archd)
                tabla(doi)
                tabla(misc)
                tabla(quote)
                tabla(isbn)
                if ou and #ou > 0 then mi = table.concat(ou,'{}') end
                if mi then tabla(mi ) end --nyomkövetésnél kell
        else
                tabla(szerzo)
                tabla(cim)
                tabla(_format)
                tabla(lan)
                if tipus then table.insert(s, ' (' .. tipus .. ')') end
                tabla(ass)
                tabla(weblap)
                tabla(kiadas)
                tabla(outdatum)
                if origyear then table.insert(s, ' (' .. origyear .. ')') end
                tabla(oldal)
                tabla(at)
                tabla(sorozat)
                tabla(accd)
                tabla(formsiz)
                tabla(archd)
                tabla(doi)
                tabla(isbn)
                tabla(issn)
                if ou and #ou > 0 then mi = table.concat(ou,'{}') end
                if mi then tabla(mi ) end --nyomkövetésnél kell
        
        end          
        if hibavan and (igen_magyar or not template_doc_demo) then
                table.insert(s, hiba_jelzes .. '[[Kategória:Hibás paraméterezésű CitWeb sablont tartalmazó lapok]]')
        end
        local text
        text=table.concat(s, ' ')
        return mw.text.trim(text)
end --citweb

local function run(frame)
        args = getArgs(frame)
        return _citweb()
end

return {
        run = run -- az egyetlen átadandó függvény
}