לדלג לתוכן

יחידה:פרמטרים: הבדלים בין גרסאות בדף

מתוך צפונות ויקי
אין תקציר עריכה
שקט הוא רפש שקט הוא רפש שקט הוא רפש שקט הוא רפש שקט הוא רפש שקט הוא רפש שקט הוא רפש שקט הוא רפש שקט הוא רפש שקט הוא רפש שקט הוא רפש שקט הוא רפש ש
שורה 1: שורה 1:
kipod = {"אלבום", "תותח", "סטטיסטיקה עירונית", "סינגל", "טבלת אירוויזיון", "חומצת אמינו"}
kipod = {"אלבום", "תותח", "סטטיסטיקה עירונית", "סינגל", "טב, לת אירוויזיון", "חומצת אמינו"}


-- This is the main module function
-- This is the main module function

גרסה מ־13:42, 24 במרץ 2016


kipod = {"אלבום", "תותח", "סטטיסטיקה עירונית", "סינגל", "טב, לת אירוויזיון", "חומצת אמינו"}

-- This is the main module function
function main(frame)
	if mw.title.getCurrentTitle()["namespace"] ~= 0
		then return "" end
	ans = "" -- answer to be printed

	namespace = "תבנית:" -- template namespace
	pframe = frame:getParent() -- Article frame
	errors = 0 -- errors counter
	local template = pframe:getTitle() -- template full name
	templatename = template -- template name to remove namespace
	if find1(templatename, namespace) == 1 --remove namespace from template name
		then templatename = mw.ustring.sub(templatename, len1(namespace) + 1) end
	
	for p, pp in pairs(kipod) do
		if pp == templatename then
			local modulevalid = require('Module:ParamValidator')
			return modulevalid.validateparams(frame)
		end
	end
	
	local data
	local subpageName = 'יחידה:פרמטרים/' .. templatename
	local tdReader = require( 'Module:ReadTd' )
	data = tdReader.compat( template )
	if not data and mw.title.makeTitle( 0, subpageName ).exists then
		data = mw.loadData(subpageName) -- read template variables data
	end
	if not data then
		error( 'Template ' .. templatename .. " can't be verified, no subpage and no templatedata" )
	end
	if frame.args[1] then
		table.insert(data[2], frame.args[1])
	end

	local numbered = 0 -- real nonnamed parameters counter
	local parnum = 0 -- template data parameters counter
	local mustnum = data[1] -- template data maximum unnamed parameters number
	parameters = data[2] -- template data parameters list
	must = data[3] -- template data must parameters list
	local suggestionslist = require( 'Module:פרמטרים/הצעות' )
	suggestions = suggestionslist[templatename] -- template data suggestions table
	for tt, t in pairs(must) do -- check all must parameters indeed here
		checkmust(t) end
	for k, v in pairs(pframe.args) do -- for each real parameter
		if type(k) == "string" -- if named
			then checknamed(k) -- check it
			elseif not isempty(v) -- if unnamed and not empty
					then numbered = k end end -- remember last such parameter number
	if mustnum < numbered -- too many unnamed parameters
		then out("צריך מקסימום " .. mustnum .. " פרמטרים ללא שם, ישנם " .. numbered .. ', והם:')
		errors = errors + 1 -- an error
		for k, v in pairs(pframe.args) do -- print all unnamed parameters
			if type(k) ~= "string" then
				if not isempty(v)
					then out("''" .. k .. "'': " .. '<span style="color:green">"</span>' .. v
						.. '<span style="color:green">"</span>')
				else out("''" .. k .. "'' ריק") end end end end

	if ans == "" -- no problems
		then return ans end
	if errors > 1 -- plural
		then errors = "ו"
		else errors = "" end
	return '<div class="error parameters"><small>' .. " '''שגיא" .. errors .. "ת פרמטרים ב[["
		.. template .. "]]:<br/>" .. ans .. "'''</td></tr></table></small></div>" -- answer
		.. "[[קטגוריה:שגיאות פרמטריות]][[קטגוריה:שגיאות פרמטריות בתבנית " .. templatename .. "]]"
end

-- This function checks each template data must parameter
function checkmust(must)
	for g, h in pairs(pframe.args) do -- for each real parameters
		if must == g .. "" -- found
			then if isempty(h) -- but empty
					then out("פרמטר חובה ריק: ''" .. g .. "''")
						errors = errors + 1 end
				return end end
	out("פרמטר חובה חסר: ''" .. must .. "''") -- not found
	errors = errors + 1
end

-- This function checks each named real parameter
function checknamed(k)
	local answer = "פרמטר לא ידוע: ''" .. k .. "''" -- answer if will be needed
	for p1, p in pairs(parameters) do -- for each template data parameter
		if p == k -- match
			then return end end
	errors = errors + 1
	if suggestions == nil or suggestions[k] == nil or suggestions[k] == "" -- is there a suggestion
		then needsug = true -- if no, need more suggestions
		else answer = answer .. ', <span style = "color:green">מומלץ ' .. "''" .. suggestions[k] .. "''</span>" end
	out(answer) -- output
end

-- This procedure checks is the argument is nothing then whitespace
function isempty(v)
	for i = 1, len1(v) do -- each character
		if mw.ustring.byte(v, i, i) > 32 -- real text
			then return false end end
	return true -- indeed empty
end

-- This function add a line to the output
function out(new)
	ans = ans .. new .. "</br>"
end

-- This functions finds substring in string
function find1(str, what, where)
	return mw.ustring.find(str, what, where, true) or 0
end

-- This function calculates string length
function len1(s)
	if s == nil -- no string
		then return 0 end
	return mw.ustring.len(s)
end

function sub1(str, from, to)
	return mw.ustring.sub(str, from, to)
end

function equal(frame)
	local pframe = frame:getParent()
	type = sub1(pframe:getTitle(), 7)
	oldargs = pframe.args
	local newargs = {}
	local kinds = frame.args
	local stop
	for p, pp in pairs(oldargs) do
		stop = false
		if tostring(p) == tostring(kinds[1]) and newargs[p] == nil
			then newargs[p] = pp
				stop = true
		elseif tostring(p) == tostring(kinds[1])
			then equalerror("תוכן כפול: " .. newargs[p] .. " וגם " .. pp)
				stop = true
		else for z, zz in ipairs(kinds) do
				if tostring(p) == tostring(zz)
					then newargs[p] = pp
						stop = true
						do break end end
			end end
		if not stop
			then local kind = newargs[kinds[1]] or newargs[tonumber(kinds[1])]
				if kind ~= nil
					then equalerror("תוכן כפול: " .. kind .. " וגם " .. p .. "=" .. pp)
					else newargs[kinds[1]] = p .. "=" .. pp end end
	end
	return frame:expandTemplate({title = frame.args["קוד"], args = newargs})
end

function short(frame)
	local pframe = frame:getParent()
	type = sub1(pframe:getTitle(), 7)
	local found
	for p, pp in pairs(pframe.args) do
		found = false
		for z, zz in ipairs(frame.args) do
			if tostring(p) == tostring(zz)
				then found = true
			end
		end
		if not found and not (p == 1 and pp == "")
			then equalerror("פרמטר לא ידוע: " .. p .. " = '" .. pp ..  "'")
		end
	end
end

function equalerror(message)
	error("[[קטגוריה:שגיאות קריאה לתבנית " .. type .. "]] (בקריאה ל[[תבנית:" .. type .. "]]) " .. message, 0)
end

function decode(frame)
	return mw.uri.decode(frame.args[1])
end

function biur(frame)
	pframe = frame:getParent()
	local newargs = {}
	for a, aa in pairs(pframe.args) do
		if a == "קבוצה" then
			error('פרמטר "קבוצה" כפול[[category:' ..
				tostring(mw.message.new("Cite-tracking-category-cite-error")) .. ']]', 0)
		end
		newargs[a] = aa
	end
	newargs["קבוצה"] = frame.args[1] or "hebrew"
	return frame:expandTemplate{title = "הערה", args = newargs}
end

function biurim(frame)
	pframe = frame:getParent()
	local newargs = {}
	for a, aa in pairs(pframe.args) do
		if a == "קבוצה" then
			error('פרמטר "קבוצה" כפול[[category:' ..
				tostring(mw.message.new("Cite-tracking-category-cite-error")) .. ']]', 0)
		end
		newargs[a] = aa
	end
	newargs["קבוצה"] = frame.args[1] or "hebrew"
	return frame:expandTemplate{title = "הערות שוליים", args = newargs}
end
function checktemplatedata(frame)
end
function test(frame)
	return mw.language.fetchLanguageName( "no", "he" )
end
return {main = main, equal = equal, decode = decode, short = short, biur = biur, biurim = biurim,
	checktemplatedata = checktemplatedata, test = test}