Szerkesztő:Pepo41/Homokozó/Modul:MCitWeb
--Version 2020_06_19 require 'Modul:No globals' 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 '' .. r .. ', '
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 --[[
--Alternatív paraméterekkel ?weblap? nincs elsődleges cím, hibás dátum, ?weblap? nincs elsődleges cím,
--]]
-- 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, ' – ') 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, ' – ') .. ': ' 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 [ ] | if forditas_cime then cim = cim .. ' [' .. forditas_cime .. '] ' end cim = string.gsub(cim, '\n', ' ') cim = string.gsub(cim, '%[', '[') cim = string.gsub(cim, '%]', ']') cim = string.gsub(cim, '%|', '|') 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 = ' ' .. oldal
else
oldal = ' ' .. 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 = '[' .. aurl .. ' arch]'
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 = 'ISSN' 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 = '.. doi .. ' doi' 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
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 tabla( table.concat(ou,'{}')) 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) end if ou and #ou > 0 then tabla( table.concat(ou,'{}')) end --nyomkövetésnél kell tabla(ou) if hibavan and (igen_magyar or not template_doc_demo) then table.insert(s, hiba_jelzes .. ) end return mw.text.trim(table.concat(s, ' '))
end --citweb
local function run(frame)
args = getArgs(frame) return _citweb()
end
return {
run = run -- az egyetlen átadandó függvény
}