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

-- A modul wikilinks fájlok formázásához ad segédletet.
-- Feltételezzük, hogy a paraméter neve megegyezik a paraméter kulccsal (key)

local yesno = require('Modul:Yesno')
local checkType = require('libraryUtil').checkType

local p = {}

function p._main(args)
	checkType('_main', 1, args, 'table')

	-- Ez itt lényegében a libraryUtil.checkTypeForNamedArg függvény, csak itt mi akarjuk a karakterlánchibákat kezelni
	local function checkArg(key,level)
		if type(args[key]) ~= 'string' then
			error(string.format(
				"típus hiba a _main függvény '%s' paraméterében (stringet vártunk de, %s-t kaptunk)",
				key,type(args[key])
			), level)
		end
	end

	local ret = {}

	-- felveszünk egy paranacssori paramétert a pufferbe, amgayar megfeleőjével együtt.
	local function addPositional(key,kulcs)
		local val = args[key]
		local ert = args[kulcs]
		if val then
			checkArg(key, 4)
			ret[#ret + 1] = val
		elseif ert then
			checkArg(kulcs, 4)
			ret[#ret + 1] = ert
	    end
	end

	-- Hozzáadunk egy nevesített paramétert a pufferhez, illetve annak angol megfelelőjét. 
	local function addNamed(key,kulcs)
		local val = args[key]
		local ert = args[kulcs]
		if val then
			checkArg(key, 4)
			ret[#ret + 1] = key .. '=' .. val
		elseif ert then
			checkArg(kulcs, 4)
			ret[#ret + 1] = key.. '=' .. ert --igen, az angol paramétert használjuk!
	    end
	end

	-- Fájlnév
	if args['file'] then
    	checkArg('file', 3)
        ret[#ret + 1] = 'File:' .. args['file']
    elseif args['fájl'] then
		checkArg('fájl', 3)
        ret[#ret + 1] = 'File:' .. args['fájl']
    end

	-- Formátum
	if args['format'] then
		checkArg('format')
    elseif args['formátum'] then
		checkArg('formátum')
	end

	if args['format'] or args['formátum'] then
		if args['formatfile'] then
			checkArg('formatfile')
			if args['format'] then
				ret[#ret + 1] = args['format'] .. '=' .. args['formatfile']
            elseif args['formátum'] then
				ret[#ret + 1] = args['formátum'] .. '=' .. args['formatfile']
			end
	    elseif args['fromátumfájl'] then
			if args['format'] then
				ret[#ret + 1] = args['format'] .. '=' .. args['formátumfájl']
            elseif args['formátum'] then
				ret[#ret + 1] = args['formátum'] .. '=' .. args['formátumfájl']
	       end
	    else
	    	if args['format'] then
	    		ret[#ret + 1] = args['format']
            elseif args['formátum'] then
	    		ret[#ret + 1] = args['formátum']
        	end
	    end
    end

	-- Keret
	if yesno(args['border']) or yesno(args['keret']) then
		ret[#ret + 1] = 'border'
	end

	addPositional('location','hely')
	addPositional('alignment','igazítás')
	addPositional('size','méret')
	addNamed('upright','álló')
	addNamed('link','hivatkozás')
	addNamed('alt','helyszöveg')
	addNamed('page','oldal')
	addNamed('class','os7tály')
	addNamed('lang','nyelv')
	addNamed('start','eleje')
	addNamed('end','vége')
	addNamed('thumbtime','bélyegképidő')
	addPositional('caption','felirat')

	return string.format('[[%s]]', table.concat(ret, '|'))
end

function p.main(frame)
	local origArgs = require('Module:Arguments').getArgs(frame, {
		wrappers = 'Sablon:File link'
	})

	-- A paramétereket átmásoljuk  egy új táblába
	-- hogy ne kelljen a programkeretben annyi félét keresgélni.
	-- illetve lehetővé tesszük a magyar neveket is, de angolra portoljuk
	local args = {}
	local file_exists = false;
	for k, v in pairs(origArgs) do
		-- A _BLANK, vagy _ÜRES speciális argumentumot létrehozzuk,
		-- Ez olyan feltételes sablonokban használható jól, amelyeknél hasznos figyelmen kívül hagyni az üres paramétereket
		-- de paramétert magát meg kell adni, és erre módot kell találnuk,
		-- mint pl. [[File:Example.png|link=]].
		if v == '_BLANK' or v== '_ÜRES' then
			v = ''
	    end
	    -- megnézzük van- file vagy fájl argumentum deklarálva
		if k == 'file' or k == 'fájl' then
		    file_exists = true
		end
		args[k] = v
	end
	if not file_exists then
		error("a 'file' vagy 'fájl' paraméter hiányzik a [[Sablon:File link]] sablonból", 0)
	end
    local r = p._main(args)
	return r
end --p.main

return p