(Translated by https://www.hiragana.jp/)
Modul:CitLib – Wikipédia Ugrás a tartalomhoz

Modul:CitLib

A Wikipédiából, a szabad enciklopédiából
A lap korábbi változatát látod, amilyen Oliv0 (vitalap | szerkesztései) 2017. május 13., 14:08-kor történt szerkesztése után volt. Ez a változat jelentősen eltérhet az aktuális változattól. (hibajavítás, ld. Special:Diff/18740412)

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

--Version 2014_09_02
local ds =require("Modul:Dátumszűrés") 
local chISBN = require("Modul:CheckISBN")

local args = {} 
local lang = mw.getContentLanguage()

local ou = ''
function pop(mi,mv1,mv2,mv3,mv4,mv5)  -- idézőjeles rész és 5 bővítmény az ou számára
    	if not mi then return else ou = ou..mi..'\n ' end
      if not mv1 then return else ou = ou..mv1..'\n' end
	if not mv2 then return else ou = ou..mv2..'\n' end
	if not mv3 then return else ou = ou..mv3..'\n' end
	if not mv4 then return else ou = ou..mv4..'\n' end
	if not mv5 then return else ou = ou..mv5..'\n' end
end 

function isRoman(v)
    if type(v) ~= 'string' then return false end -- római számok stringek
    for i = 1,string.len(v) do -- végig a stringen
    	j, l = string.find ("IVXLCDM",string.sub(v,i,i)) -- az i-edik római? 
    	if j == nil then return false  end 
		end --do ciklus, lejárt, tehát minden karakter római számnak felel meg
	return true
end

	local lans={}
	lans["an"] = "van"
    lans["ar"] = "van"
    lans["aze"] = "van"
    lans["be"] = "van"
    lans["bg"] = "van"
    lans["bn"] = "van"
    lans["bs"] = "van" 
    lans["ca"] = "van" 
    lans["chm"] = "van"
    lans["cy"] = "van"
    lans["cs"] = "van"
    lans["da"] = "van"
    lans["de"] = "van"
    lans["ee"] = "van"
    lans["el"] = "van"
    lans["en"] = "van"
    lans["eo"] = "van"
    lans["es"] = "van"
    lans["et"] = "van"
    lans["eu"] = "van"
    lans["fa"] = "van"
    lans["fi"] = "van"
    lans["fo"] = "van"
    lans["fr"] = "van"
    lans["fy"] = "van"
    lans["ga"] = "van"
    lans["gd"] = "van"
    lans["gl"] = "van"
    lans["grc"] = "van"
    lans["gu"] = "van"
    lans["he"] = "van"
    lans["hi"] = "van"
    lans["hr"] = "van"
    lans["ht"] = "van"
    lans["hu"] = "van"
    lans["hy"] = "van"
    lans["hz"] = "van"
    lans["id"] = "van"
    lans["is"] = "van"
    lans["it"] = "van"
    lans["ja"] = "van"
    lans["jp"] = "van"
    lans["ka"] = "van"
    lans["kk"] = "van" 
    lans["km"] = "van"
    lans["kn"] = "van"
    lans["ko"] = "van"
    lans["ku"] = "van"
    lans["ky"] = "van"
    lans["lat"] = "van"
    lans["lb"] = "van"
    lans["lo"] = "van"
    lans["lit"] = "van"
    lans["lv"] = "van"
    lans["mk"] = "van"
    lans["mn"] = "van"
    lans["mo"] = "van"
    lans["ms"] = "van"
    lans["mt"] = "van"
    lans["my"] = "van"
    lans["ne"] = "van"
    lans["nl"] = "van"
    lans["nn"] = "van"
    lans["no"] = "van"
    lans["oc"] = "van"
    lans["pa"] = "van"
    lans["pl"] = "van"
    lans["pt"] = "van"
    lans["rm"] = "van"
    lans["ro"] = "van"
    lans["ru"] = "van"
    lans["rue"] = "van"
    lans["sa"] = "van"
    lans["sah"] = "van"
    lans["scn"] = "van"
    lans["se"] = "van"
    lans["sh"] = "van"
    lans["sk"] = "van"
    lans["slo"] = "van"
    lans["sm"] = "van"
    lans["sq"] = "van"
    lans["sr"] = "van"
    lans["sv"] = "van" 
    lans["tam"] = "van"
    lans["te"] = "van"
    lans["tet"] = "van"
    lans["tg"] = "van"
    lans["th"] = "van"
    lans["tk"] = "van"
    lans["tag"] = "van"
    lans["to"] = "van"
    lans["tr"] = "van"
    lans["tat"] = "van"
    lans["ty"] = "van"
    lans["uk"] = "van"
    lans["ur"] = "van"
    lans["uz"] = "van"
    lans["vi"] = "van"
    lans["yi"] = "van"
    lans["zh"] = "van"
 


function val_to_str(v) 
    if type(v) == 'string' then 
        v = mw.ustring.gsub(v, '\n', '\\n')
        if mw.ustring.match(mw.ustring.gsub(v, '[^\'"]', ''), '^"+$') then
            return "'" .. v .. "'"
        end
        return '"' .. mw.ustring.gsub(v, '"', '\\"' ) .. '"'
    else 
        return type(v) == 'table' and table_to_str(v) or tostring(v)
    end
end 

hibavan = false  
kategorizalas_van = false  

 function error(kategorizalas_kell,about )
    -- Enclose errorMsg with <span>
    -- Precondition:
    --     about  -- string
    hibavan = true
    if kategorizalas_kell then kategorizalas_van = true end  
    local r = about
    if type( about ) == "string" then
        if #about == 0 then
            r = "Error in Lua"
        end
    else
        r = tostring( about )
    end
    return  "<span class=\'error\'>" .. r .. "</span>, "
           -- "<font color=\"red\">" ..' ('.. r..') ' .. "</font> "
           --"<small><font color=\"black\">" ..' ('.. r..') ' .. "</font></small> "
end -- error()

function trim(str)
    if str.args then
        str = str.args[1]  
    end
    if str == nil then
        return nil
    else
        return (str:gsub("^%s*(.-)%s*$", "%1")) -- extra brackets are necessary because gsub returns multiple values
    end
end

function isArabic(v)
    if tonumber(v)== nil then return false else return true end 
end

local function getArg(le,arg,alternativarg, assign ) -- itt eredetileg a frame nem paraméter
    -- Retrieve template argument
    -- Precondition:
    -- 	    le true értékkel jelzi, hogy levágható a paraméter végéről a felesleges vessző és pont
    --     arg     -- string or number; argument identifier
    --     alternativarg -- a paraméternek a másik neve
    --     assign  -- any, optional; default value
    
    local r1 = args[ arg ] 
    local r2 = nil
    if alternativarg ~= nil then  r2 = args[ alternativarg ] end
    if r1 == '' or r1 ==nil then r =  r2  else r = r1 end
    if r  == '' then r =  nil  end
    if type( r ) ~= "string" then
        if type( assign ) == nil then
            r = "{{{<" .. arg .. ">}}}"  --ha r nem string tipus, azaz és assign nil érték
        else
            r = assign -- ha r nem string tipus, és assign nem nil
        end
    else -- r típusa string
    	if #r > 1 then -- ha r strint típus és legalább két karaktert tartalmaz
    		local utso_karakter = string.sub(r,-1,-1); 
    		if le then 
    			if utso_karakter == '.' or utso_karakter == ',' then r=string.sub(r,1,-2) end --lecsípjük az utólsó pontot, vagy vesszőt 
    		end
    	end
    end
    return r  
end

local function getConf(conf,alternativconf, assign ) -- itt eredetileg a frame nem paraméter
    -- Retrieve template argument
    -- Precondition:
    -- 	    le true értékkel jelzi, hogy levágható a paraméter végéről a felesleges vessző és pont
    --     arg     -- string or number; argument identifier
    --     alternativarg -- a paraméternek a másik neve
    --     assign  -- any, optional; default value
    
    local r1 = config[ conf ]
    local r2 = nil
    if alternativconf ~= nil then  r2 = config[ alternativconf ] end
    if r1 == '' or r1 ==nil then r =  r2  else r = r1 end
    if r  == '' then r =  nil  end
    if type( r ) ~= "string" then
        if type( assign ) == nil then
            r = "{{{<" .. conf .. ">}}}"  --ha r nem string tipus, azaz és assign nil érték
        else
            r = assign -- ha r nem string tipus, és assign nem nil
        end
    else -- r típusa string
    	
    end
    return r  
end

local function is_set( var ) -- lekérdezi, hogy a változónak adtunk-e értéket. 
                                --Ha a változó értéke nil, vagy üres string, akkor false értéket ad, kben true
                                -- azaz a var sem nil, sem üres
    return not (var == nil or var == '');
end

-- Gets the display text for a wikilink like [[A|B]] or [[B]] gives B
function removewikilink( str )
    return (str:gsub( "%[%[([^%[%]]*)%]%]", function(l)
        return l:gsub( "^[^|]*|(.*)$", "%1" ):gsub("^%s*(.-)%s*$", "%1");
    end));
end


local OCinSoutput = setmetatable( {}, {
        __newindex = function(self, key, value)
        
            if is_set(value) then
            	rawset( self, #self+1, table.concat{ key, '=', mw.uri.encode( removewikilink( value ) ) } );
                 --> OCinSoutput[1],[2],[3]... dagad
                -- az egész konstrukció a rawset és a __newindex  segítségével növeli e táblát a key value párokkal 
                -- pop("mit tesz a concat:", self[#self]); --> rft_val_fmt=info:ofi/fmt:kev:mtx:book
            end
        end
    });
 
--local function isISBN10( str)
--local function isISBN13( str)
--local function isI(str)
--local function isISBN( str)
  



local function _citlib(frame)
    local alkategoriak = {}
	
	
	
	
  local cap,capaut, capaut2, capaut3,szerzo, szerzo2, szerzo3,tit,subtit, cim, alcim = nil
  local  ass,ass2,ass3,  edi,red, red2, loc, loc2,  ev, oldal,ser,ser2,isbn,misc, url,accd,aurl,archd, lan=nil 
  local  aut,aut2,aut3 =nil 
  local hiba_jelzes = ''
  local alkategoriak_kellenek=getConf('alkategóriák kellenek')
  --pop("Kellenek az alkategóriák??", alkategoriak_kellenek) -- igen, vagy nem a lehetséges válasz
  if alkategoriak_kellenek then
  	 if alkategoriak_kellenek == 'igen' then 
  	 	--pop("Kellenek az alkategóriák", alkategoriak_kellenek)
  	 	alkategoriak_kellenek=true 
   	else alkategoriak_kellenek=false
   	end
  end	
  
  local sablon_kimenetek_kellenek=getConf('sablon kimenetek kellenek') -- kívánságra kikapcsolható
  --pop("Sablon kimenetek kellenek?", sablon_kimenetek_kellenek) -- igen, vagy nem a lehetséges válasz
  if sablon_kimenetek_kellenek then
  	 if sablon_kimenetek_kellenek == 'igen' then 
  	 	--pop("Kellenek az alkategóriák", alkategoriak_kellenek)
  	 	sablon_kimenetek_kellenek=true 
   	 else sablon_kimenetek_kellenek=false
   	 end
  else sablon_kimenetek_kellenek=true -- ha a getConf nil értékkel tért vissza.	 
  end
  
  cap= getArg(true,'cap','fejezetcím')  
  capaut= getArg(true,'capaut','fejezetszerző')
  capaut2= getArg(true,'capaut2','fejezetszerző2')
  capaut3= getArg(true,'capaut3','fejezetszerző3')
  szerzo= getArg(true,"szerző","aut") 
  szerzo2= getArg(true,"szerző2","aut2") 
  szerzo3= getArg(true,"szerző3","aut3")
  cim= getArg(true,"cím","tit")    
  alcim= getArg(true,"alcím","subtit")
  ass = getArg(true,'ass','közreműködők')
  ass2 = getArg(true,'ass2','közreműködők2')
  ass3 = getArg(true,'ass3','közreműködők3')
  isbn = getArg(true,'isbn')
  edi = getArg(true,'edi','kiadás')
  loc = getArg(true,'loc','hely')
  loc2 = getArg(true,'loc2','hely2')
  red = getArg(true,'red','kiadó')
  red2 = getArg(true,'red2','kiadó2')
  ev= getArg(true,"év","ann")
  --if ev then ev = string.gsub(ev,"[%[%]]",'')end Pasztilla közlése szerint
  oldal= getArg(true,"oldal","pag")
  ser = getArg(true,'ser','sorozat')
  sernr = getArg(true,'sernr','sorozatszám')
  misc=getArg(true,"egyéb","misc")
  url= getArg(false,"url") 
  accd=getArg(true,"elér","accd")
  if accd then accd = string.gsub(accd,"[%[%]]",'') end
  aurl=getArg(true,"archívurl","aurl") 
  archd=getArg(true,"archívdátum","archd")
  if archd then archd = string.gsub(archd,"[%[%]]",'') end
  lan=getArg(true,"nyelvkód","lan")
  
  -- fejezetszerzők összeállítása capautban    
  
 	local c=''
  	if capaut then c = capaut end
  	if capaut2 then 
  					if c == '' then c = capaut2 else c = c..'&#8201;&#8211;&#8201;'..capaut2 end
  	           end
    if capaut3 then 
  					if c == '' then c = capaut3 else c = c..'&#8201;&#8211;&#8201;'..capaut3 end
  	           end
    if c == '' then capaut = nil else capaut = c..': 'end 
 -- fejezetcím
 
 if cap then CoinS_cap = cap end
 
 -- szerzők összeállítása
 
 	local c=''
 	local CoinS_szerzo = nil
  	if szerzo then c = szerzo ; OCinSoutput["rft.au"] = szerzo;end
  	if szerzo2 then OCinSoutput["rft.au"] = szerzo2
  					if c == '' then c = szerzo2; else c = c..'&#8201;&#8211;&#8201;'..szerzo2 end
  	           end
    if szerzo3 then OCinSoutput["rft.au"] = szerzo3
  					if c == '' then c = szerzo3 else c = c..'&#8201;&#8211;&#8201;'..szerzo3 end
  	           end
    if c == '' then szerzo = nil 	else CoinS_szerzo = c ; szerzo = c..': '	end
    	
 
 --cím és alcím
 
 local terminator
 local CoinS_cim = nil
  if cim  
     then cim = trim(lang:ucfirst(cim))
     else cim = "(cím?)";
     	 hiba_jelzes = hiba_jelzes..' '.. error (true,"nincs elsődleges cím")
     	 table.insert(alkategoriak,"[[Kategória: Hibásan használt CitLib – cím nélkül]]") 
	
  end
  --pop("megkérdőjelezte a címet", cim)
  if alcim   then 
              	alcim=lang:ucfirst(alcim)  
              	if (cim ~= nil and string.sub(cim,-1,-1) ~= ":")then
               									cim= cim..": "..alcim 
           										else cim= cim.." "..alcim
           										end	
           		
              end 
  terminator = string.sub(cim,-1,-1)
  
  if (terminator ~= '.') then CoinS_cim = string.sub(cim, 1,-2) end
  if (terminator ~= '?' and terminator ~= '!'and terminator ~= ',' and terminator ~= '.' and terminator ~= '\166' ) 
                then      cim= cim..". "  end   
                  
  cim ="\'\'"..cim.."\'\'"
  --pop("cím in italic", cim)
  
  -- asszisztencia

local c=''
  	if ass then c = ass end
  	if ass2 then 
  					if c == '' then c = ass2 else c = c.."&#8211;"..ass2 end
  	           end
    if ass3 then 
  					if c == '' then c = ass3 else c = c.."&#8211;"..ass3 end
  	           end
    if c == '' then ass = nil else ass = lang:ucfirst(c)..'. 'end
  	
  -- edi
  local CoinS_edi = nil 
  if edi then CoinS_edi = edi ; edi =  edi .. '. 'end
  
c = ''
if loc then
	if loc2 then
			if red then
				if red2 then --loc,loc2,red,red2   
					c = c..' '..loc..': '.. red..'; '.. loc2..': '.. red2..'.'
					            CoinS_loc = loc ; CoinS_red = red
				else         --loc,loc2,red,not red2
					c = c..' '..loc..'; '.. loc2..': '.. red..'.'     
				end
			else
				if red2 then --loc,loc2,not red, red2
					c = c..' '..loc..': (kiadó nélkül); '.. loc2..': '.. red2..'.'     
					            CoinS_loc = loc2 ; CoinS_red = red2
				else         --loc,loc2,not red, not red2
					c = c..' '..loc..'; '.. loc2..': '.. '(kiadó nélkül)'..'.'     
				end
			end
	else                  
			if red then      
				if red2 then  --loc,not loc2, red, red2    
					c = c..' '..loc..': '.. red..'; '.. '(hely nélkül)'..': '.. red2..'.'     
					            CoinS_loc = loc ; CoinS_red = red
				else          --loc,not loc2, red, not red2      
					c = c..' '..loc..': '.. red..'.'
					            CoinS_loc = loc ; CoinS_red = red
				end
			else
				if red2 then  --loc,not loc2, not red, red2    
					c = c..' '..loc..': '.. '(kiadó nélkül)'..'; '..'(hely nélkül)'..': '.. red2..'.'     
				else          --loc,not loc2, not red, not red2    
					c = c..' '..loc..': '.. '(kiadó nélkül)'..'.'     
				end
			end
	end
 else
	if loc2 then
		if red then
			if red2 then  --not loc,loc2, red,red2
					c = c..' '..'(hely nélkül)'..': '.. red..'; '..loc2..': '.. red2..'.'     
								CoinS_loc = loc2 ; CoinS_red = red2
			else          --not loc,loc2,red, not red2  
				c = c..' '..'(hely nélkül)'..': '.. red..'; '..loc2..': '.. '(kiadó nélkül)'..'.'      
			end
		else
			if red2 then   --not loc,loc2, not red,red2
					c = c..' '..loc2..': '.. red2..'.'     
					            CoinS_loc = loc2 ; CoinS_red = red2
			else           --not loc,loc2, not red,not red2   
					c = c..' '..loc2..': '.. '(kiadó nélkül).'     
			end
		end
	else
		if red then        
			if red2 then   --not loc, not loc2,  red,red2 
					c = c..' '..'(hely nélkül)'..': '.. red..';'.. red2..'.'
			else           --not loc, not loc2,  red, not red2 
					c = c..' '..'(hely nélkül)'..': '.. red..'.'     
			end
		else
			if red2 then   --not loc, not loc2,  not red,red2 
					c = c..' '..'(hely nélkül)'..': '.. red2..'.'     
			else   			--not loc, not loc2,  not red, not red2 
 
			end
		end
	end
end

local kiadas = c

--]]
--==============================================================================================================
  
  --[=[ loc és red párok EZ VOLT AZ EREDETI. FENTEBB AZ ÚJ.
  local c= ''
  if loc2 then c = loc2 end
  if red2 then 
  	            if c == '' then 
  	            	if not loc then c = '(Hely nélkül):'..red2 else end
  	            	
  	            	c = '(Hely nélkül):'..red2 else c = c..': '..red2 end
  	      else   
  	      	    if loc2 then 
  	      	    	if red then c = c..': '..red 
  	      	    		else 
  	      	    		c = c..': '..('kiadó nélkül')-- hiba_jelzes = hiba_jelzes..' '.. error(true,'Hely kiadó nélkül') 
  	      	    		-- table.insert(alkategoriak,"[[Kategória:Hibásan használt CitLib – hely kiadó nélkül]]")
  	      	    	end
	      	    end
  	      end      	
  local locred2 
  if c == '' then locred2 = nil else locred2  = c  end  -- "hely2: red2" 
  --kiadás: hely: kiadó; hely2: kiadó2. 
  c= ''
  if loc  then c = loc  end
  if red  then 
  				if c == '' then c = '(Hely nélkül):'..red  else CoinS_loc = c ;c = c..': '..red ; CoinS_red = red end
  		  else   
  	      	    if loc then c = "(kiadó?)" ; CoinS_red = nil
  	      	    	hiba_jelzes = hiba_jelzes..' '.. error(true,'Hely kiadó nélkül') 
  	      	    	table.insert(alkategoriak, "[[Kategória:Hibásan használt CitLib – hely kiadó nélkül]]")
	      	    end			
  		  end			
  local locred  
  if c == '' then locred  = nil else locred   = c end --"hely: red" 
  
  local c= ''
  if locred then c = locred end
  if locred2  then 
  				if c == '' then c = locred2 else  c = c ..'; '..locred2 end
  end			
  
  local kiadas
  
  if c == '' then kiadas = nil else kiadas = c..'. '	end  -- a loc:red párok végén a .
  
  --]=]
  -- év
  
 local CoinS_ev = nil 
 if ev then  
           local    count=''  -- szämlälja a csereeket
            ev = string.gsub(ev,"[%-]",'–') -- kiskötőjelből nagy kötőjel
            ev, count=string.gsub(ev,"[^%–%[%]0123456789]",'') -- az évben csak számjegyek és nagy kötőjel valamint szögletes zárójelek maradhat
            if count == 0 then 
        	else 
        	    table.insert(alkategoriak,"[[Kategória:Hibásan használt CitLib – tiltott karakter az év paraméterben]]")
                    hiba_jelzes = hiba_jelzes..' '.. error (false,"tiltott karakter az év paraméterben")
            end
        pop('ev a gsubolása után után', ev)
		CoinS_ev = ev	
end 	
  	-- oldal adatok
  	local CoinS_oldal = nil
  	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 kovető vesszőt
    CoinS_oldal = oldal
  	oldal ="&#x20;"..oldal..". o. " 
  	end
  
  -- sorozat lekezelése
  local sernum_van_de_ser_nincs = false  
  local CoinS_ser = nil
  local CoinS_sernr = nil
  if sernr~=nil and ser==nil  then sernum_van_de_ser_nincs  = true end
  if ser then CoinS_ser = ser ;ser = '= '..ser..', ' end 
  local proba_sernr
  if  sernum_van_de_ser_nincs then 
  			sernr="(sorozatszám?)" ; 
  			hiba_jelzes=hiba_jelzes..' '.. error(true,"sorozatszám sorozat nélkül") 
  			table.insert(alkategoriak,"[[Kategória:Hibásan használt CitLib – sorozatszám sorozat nélkül]]")
	else
                 if sernr then   proba_sernr=string.gsub(sernr,'[^%dIVXLCDM]','')
                 			local nr= tonumber(proba_sernr)
                           if nr then CoinS_sernr = sernr
                 	        sernr= sernr..'. '
         	     	        else
         	     	        	if not isRoman(proba_sernr) then 
         	     	        	hiba_jelzes=hiba_jelzes..' '.. error(true,"helytelen sorozatszám ")
         	     	        	table.insert(alkategoriak,"[[Kategória:Hibásan használt CitLib – helytelen sorozatszám]]")
         	     	        	end
         	     	       	end 
         	     	   
         	     end	 
   end	
 
	-- ISBN lekezelése
	local CoinS_isbn= nil
	if isbn then 
		pop("van isbn paraméter", isbn)
		isbn=string.gsub(isbn,"ISBN",'') -- a beleírt ISBN szövegeket kivesszük
		local helyes=true
		local isbn_str, hiba_str=''
		helyes,isbn_str, hiba_str= chISBN.isISBN(isbn) 
		
		isbn = string.gsub(isbn_str, 'ISBN ([%dXx]+)', '[[Speciális:Könyvforrások/%1|ISBN %1]]') .. ' '
		CoinS_isbn = isbn_str
		hiba_jelzes=hiba_jelzes..hiba_str
		
		if helyes then pop ("helyesek  a paraméterek") else 
			hibavan = true	
			table.insert(alkategoriak,"[[Kategória:Hibásan használt CitLib – helytelen ISBN kód]]")
		end                       
	end
   	
   	-- URL lekezelése
   	local CoinS_url= nil
    if url then CoinS_url= url
   		-- SZÜKSÉGES CSERÉK:cím=[http://crypto.com/papers/jbug-Usenix06-final.pdf Keyboards and Covert Channels"]
	--newline 	[ 	     ] 	     |    Ezek kellenek, mert az URL ráhúzásakor bezavarnak
	--space    &#91; 	&#93; 	&#124;
   		--pop("tud-e az url-ről?", url)
   		url = string.gsub(url, '%s','%%20')-- URL kódolása
		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')
        --pop("ráhúzás előtti cím", cim)
        if cap then 
        	    cap = string.gsub(cap,'\n',' ')
				cap = string.gsub(cap,'%[','&#91;')  
				cap = string.gsub(cap,'%]','&#93;')
				cap = string.gsub(cap,'%|','&#124;')
	   			
        	cap = "[" .. url .. " " .. cap .. "]" 
        else 
   			if cim then --QQQQQQQQQQQQQQQQQQQQQQQQ
   				cim = string.gsub(cim,'\n',' ')
				cim = string.gsub(cim,'%[','&#91;')  
				cim = string.gsub(cim,'%]','&#93;')
				cim = string.gsub(cim,'%|','&#124;')
	   			cim = "[" .. url .. " " .. cim .. "]" 
	   			--pop("ráhúzza?", cim)
	   		end  -- nem nil a cím
	   	end -- ha cap nem üres
	end	 -- nem nil az url
	if cap then
		cap = cap .. '. In '
	end

local LetezoLansablon = false
  if lan then 
  			if  (lan ~= nil ) and  (cim==nil)  --ha nincs cím akkor értelmetlen 
             	then -- hiba_jelzes = hiba_jelzes..' '..error(true,"nyelv cím nélkül")..' ' 
             	else  
             			if lans[lan] ~= nil then  -- ha fenn van a listánkon, akkor nem jöhet PARANCSFÁJL HIBA
             				     LetezoLansablon = frame:callParserFunction{ name = '#ifexist',args = { 'lan', lan }}
			                     if LetezoLansablon then nyelv = frame:expandTemplate{ title = lan, args = {lan } } ..' 'end
						--frame:expandTemplate{ title = 'template', args = { 'arg1', 'arg2', name = 'arg3' } }
						else -- különben mi magunk kiírjuk , mert így beszédesebb
								  nyelv = lan -- legyen maga a megadott paraméter pl. "krixkrax"
							      hiba_jelzes = hiba_jelzes..' '..error(true,"ismeretlen nyelvkód")..' '
				                  table.insert(alkategoriak,"[[Kategória:Hibásan használt CitLib – ismeretlen nyelvkód]]") 	
						end
			 end	
   end 

-- archívdátum -- archívurl
  
   	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 
					aurl = string.gsub(aurl, '%s','%%20')  -- URL ÁTKÓDOLÁSA 
					aurl = string.gsub(aurl, '\"','%%22')
					aurl = string.gsub(aurl, "\'",'%%27')
					aurl = string.gsub(aurl, "<",'%%3c')
					aurl = string.gsub(aurl, ">",'%%3e')
					aurl = string.gsub(aurl, "%[",'%%5b')
					aurl = string.gsub(aurl, "%]",'%%5d')
					aurl = string.gsub(aurl, "{",'%%7b')
					aurl = string.gsub(aurl, "|",'%%7c')
					aurl = string.gsub(aurl, "}",'%%7d')
					archd = "<span title=\""..outarchd.."\">["..aurl.." arch".."]</span>"
	  				else hiba_jelzes  = hiba_jelzes..' '..error(true,"archívdátum van, de archívurl nélkül")
						table.insert(alkategoriak,"[[Kategória:Hibásan használt CitLib – archívdátum archívurl nélkül]]") 
	  			end
			else hiba_jelzes  = hiba_jelzes..' '..error(true,"hibás archívdátum")
				 table.insert(alkategoriak,"[[Kategória:Hibásan használt CitLib – hibás archívdátum]]") 
		end  -- if dou  	 	
	end	-- if archd 

         
    -- elérés dátuma 
 
if accd then -- ha van elérés
    	local outaccd
    	local nyom=''
	local nyom,dou= ds.datumszuro(accd)
	--pop("a dátumszűrés eredménye",nyom)
	if dou 
		then outaccd = ds.honapnevesdate(dou)
		accd = "Hozzáférés: "..outaccd ..' '	
	else 
		hiba_jelzes = hiba_jelzes..' '..error(true,"hibás elérési dátum")
		table.insert(alkategoriak,"[[Kategória:Hibásan használt CitLib – hibás elérési dátum]]") 
	end  -- if dou  	 	
end	-- if accd

-- Coins
    local empty_span = '<span style="display:none;">&nbsp;</span>';
    local this_page = mw.title.getCurrentTitle();  
    local ctx_ver = "Z39.88-2004";
    local coins=nil
    OCinSoutput["rft.atitle"] = CoinS_cap; 
	OCinSoutput.rft_val_fmt = "info:ofi/fmt:kev:mtx:book";
	OCinSoutput["rft.genre"] = "book"
	--OCinSoutput["rft.au"] = CoinS_szerzo;
	OCinSoutput["rft.btitle"] = CoinS_cim;
	OCinSoutput["rft.place"] = CoinS_loc
    OCinSoutput["rft.date"] = CoinS_ev
    OCinSoutput["rft.series"] = CoinS_ser
    OCinSoutput["rft.issue"] = CoinS_sernr
    OCinSoutput["rft.pages"] = CoinS_oldal
    OCinSoutput["rft.edition"] = CoinS_edi
    OCinSoutput["rft.pub"] = CoinS_red;
    OCinSoutput["rft.isbn"] = CoinS_isbn;
    OCinSoutput.rft_id = CoinS_url
    OCinSoutput.rfr_id = table.concat{ "info:sid/", mw.site.server:match( "[^/]*$" ), ":", this_page.prefixedText };
    OCinSoutput = setmetatable( OCinSoutput, nil );
    
    -- sort with version string always first, and combine.
    table.sort( OCinSoutput );
    table.insert( OCinSoutput, 1, "ctx_ver=" .. ctx_ver );  -- such as "Z39.88-2004"
    coins = table.concat(OCinSoutput, "&");
    --<small><font color=\"red\">" ..' ('.. r..') ' .. "</font></small> "
    coins = '<small><span title="' .. coins .. '" class="Z3988">' .. empty_span .. '</span></small>';
    
    
 -- output összeállítása
 
s=' '
if sablon_kimenetek_kellenek then 
 	if capaut  then s = s..capaut..'  '  end 
	if cap  then s = s..cap..'  '  end 
	if szerzo then s = s.. szerzo..'  '  end
	if cim  then s = s..cim..'  '  end
	if nyelv  then s = s..nyelv..'  ' end
	if ass  then s = s..ass..'  '  end 
	if edi  then s = s..edi..'  ' end 
	if kiadas then s = s..kiadas..'  ' end 
	if ev  then s = s..' '..ev..'. '  end 
	if oldal  then s = s..oldal..'  '  end 
	if ser  then s = s..ser..'  '  end 
    if sernr  then s = s..sernr..'  '  end
    if isbn  then s = s..isbn..'  '  end 
	if archd then s = s..archd..'  '  end
	if accd then s = s..accd..'  ' end
	if misc  then s = s..misc..'  '  end
	if coins  then s = s..coins..'  '  end
	-- if ou  then s = s..ou  end  --ez csak nyomkövetésnél kell, de akkor nagyon
end	
	
	if alkategoriak_kellenek then s = s ..' '..table.concat(alkategoriak,";")..'  ' end
		-- vagy, vagy: azaz,ha az alkategóriák kellenek, 
		--akkor nem adunk hibajelzést, különben igen
    --else 	if hibavan then s = s ..' '..hiba_jelzes..' '
    if hibavan then s = s ..' '..hiba_jelzes..' ' end
        	
			-- a fölérendelt kategória marad hiba esetén
			
	if kategorizalas_van then s = s .. ' '.. "[[Kategória:Hibás paraméterezésű CitLib-et tartalmazó lapok]]" end
	        		
			 
	 	
    return trim(s)
 end

 
function run(frame)
	local pframe = frame:getParent()
    args = pframe.args -- azok a paraméterek, amelyek a sablont kisérik a Pepo41/CCitPer               	--sablon hivása oldalon
    config = frame.args -- az #invoke utasításban átadott paraméterek 
 return _citlib(frame)
end

local p = {
    run = run, -- az egyetlen átadadndó funkció a táblából
}

return p