Module:Stitchete

Èn årtike di Wiccionaire.
I gn a nén co di dzo-pådje /doc pol notule d’ esplikêyes. Clitchîz cial po l’ ahiver.
local p = {}
local base = require("Module:Base")
local builder = require("Module:Builder"); 
local language = require("Module:Lingaedje");

local _affixes = {
	caw	= "cawete",
	bet	= "betchete", 
	ris	= "ristitchete"
}
local _grammars = {
	a 	= "addjectifs",
	adv = "adviebes", 
	c	= "codjowas",
	d = "divancetes",
	npl	= "nos d' plaece", 
	ndj	= "nos d' djin",
	np = "nos prôpes",
	pn = "prezintoes-nombes",
	p	= "pårticipes erireces",
	pp = "pårticipes prezintreces",
	s	= "sustantifs", 
	v	= "viebes",
	v1	= "viebes del prumire troke",
	v2	= "viebes del deujhinme troke",
	v3	= "viebes del troejhinme troke",
	v4	= "viebes del cwatrinme troke",
	v5	= "viebes del cénkinme troke"
}
local _long = {[2]="dobe", [3]="tripe"}

function render (afftyp, affix, gram, lang, ritch, long, anchor, di, fwaitso, rif, lim)
		
	local out = ""
	local cat = "avou l' "
	local di_ = "di"
	local fwaitso_ = ""
	
	gram = mw.text.trim(gram)
	afftyp = _affixes[afftyp]
	long = tonumber(long)

	-- test for values (lang based)
	if di or fwaitso then
		local langvals = base.load_data("Stitchete/"..lang)
		local badvals = false
		if langvals then
			if afftyp == _affixes["caw"] and langvals['cawetes'] then
				vals = langvals['cawetes']
			elseif afftyp == _affixes["bet"] and langvals['betchetes'] then
				vals = langvals['betchetes']
			end
			if di and di ~= "" and vals['di'] and
				(not vals['di'][affix] or not vals['di'][affix][di]) then
					badvals = true
			end
			if fwaitso and fwaitso ~= "" and vals['fwaitso'] and
				(not vals['fwaitso'][affix] or not vals['fwaitso'][affix][fwaitso]) then
					badvals = true
			end
		end
		if badvals == true then
			builder.add_category( 'Årtikes avou des valixhances di paramete nén cnoxhowes' )
		end
	end
	
	-- (-)affix(-)
	if afftyp == _affixes["caw"] then
		affix =  "-" .. affix 
	elseif afftyp == _affixes["bet"] then
		affix =  affix .. "-"
		if di and (di == "rafoircixhaedje" or di == "rfoircixhaedje") then
			afftyp = "rafoircixhante " .. afftyp
			di = ""
		end
	elseif afftyp == _affixes["ris"] then
		affix =  "-" .. affix .. "-"
	end
	
	-- isse 2 po l' categoreye et pol loyén
	affixl = affix -- affix loyén
	if lim ~= nil and lim ~= "" then
		affix = affix .. " " .. lim
		if anchor == nil or anchor =="" then
			anchor = "Etimolodjeye_"..lim
		end
	end
	
	-- dobe/tripe cawete
	if _long[long] then
		cat = cat .. _long[long] .. " "
		local cat_long_word = "avou ene " .. _long[long] .. " " ..afftyp
		builder.add_category( language.grammar({args={"Mots", lang, cat_long_word, vowel="1"}}), 0)
	end


	
	cat = cat ..  afftyp .. " " .. affix

	if di and di ~="" then
		if mw.ustring.match( di, "^[aåeéêiîoôuû]") then	di_ = "d'"	end
		cat = table.concat({cat, di_, di}," ")
	end

	if rif and rif ~="" then
		if afftyp == _affixes["caw"] then
			rif =  "-" .. rif
		elseif afftyp == _affixes["bet"] then
			rif =  rif .. "-"
		elseif afftyp == _affixes["ris"] then
			rif =  "-" .. rif .. "-"
		end
		cat = table.concat({cat, " (", rif, ")"},"")
	end
	
	if fwaitso and fwaitso ~="" then
		if fwaitso == "a" then
			fwaitso_ = "èn addjectif"
		elseif fwaitso == "s" or fwaitso == "n" then
			fwaitso_ = "on no"
		elseif fwaitso == "v" then
			fwaitso_ = "on viebe"
		end
		cat = table.concat({cat, "acawêye a", fwaitso_}," ")
	end

	if anchor and anchor ~="" then
		affix = affixl.."#"..anchor.."|"..affix
	end 
	
	if ritch ~= "0" then
		out = "l’ "
		
		-- dobe/tripe cawete
		if _long[long] then
			afftyp = _long[long] .. " " .. afftyp
		end
		
		-- di codjowaedje (viebe or codjowa(s)) avou cawete
		-- v+p+... ???
		if afftyp == _affixes["caw"] and gram == "v" or gram == "c" then
			afftyp = afftyp .. " di codjowaedje"
		end
		if afftyp == _affixes["caw"] and gram:sub(1,1) == "v" then
			afftyp = afftyp .. " d’ infinitif"
		end

		out = out .. "[[Wiccionaire:Cawetes et betchetes|"..afftyp.."]] « [[".. affix .."]] »"
		if di and di ~="" then
			-- special case for comaptibility and nicer display
			if di == "metaedje a fé" then
				out = out .. " (ki fwait fé l’ accion)"
			elseif di_ == "d'" then
				out = out .. " d’ " .. di
			else
				out = out .. " di " .. di
			end
		end 

		if ritch ~= "1" then
			out = "avou ".. out
			if gram == "npl" or gram =="ndj" then
				out = out .. " des " .. string.gsub(_grammars[gram],"' ","’ ")
			end
			if gram:sub(1,1) == "v" then
				out = out .. " des " .. _grammars["v"]
			end

			-- "rif"
			if rif and rif ~="" then
				if lang == "wa-fel" then
					out = out .. " (disfondowe di « [[".. rif .."]] » )"
				else
					out = out .. " (e rfondou « [[".. rif .."]] » )"
				end
			end
			-- "fwaitso"
			if (fwaitso == "s" or fwaitso == "n") and gram == "s" then
				out = out .. " (des sustantifs fwaits so des nos)"
			elseif fwaitso == "v" and gram == "s" then
				out = out .. " (des sustantifs fwaits so des viebes)"
			end

		end
	else
		out = "[[".. affix .."]]"
	end
	
	if gram ~= "" then
		local grams = mw.text.split(gram, "+", true)
		for k,g in ipairs(grams) do	
			if _grammars[g] then
				builder.add_category( language.grammar({args={_grammars[g], lang, cat}}), 0)
			else
				builder.error("li croejhete « ".. g .." » n' est nén rkinoxhowe")
			end
		end
	else
		builder.add_category( language.grammar({args={"Mots", lang, cat, vowel="1"}}), 0)
	end

	-- some special extra categories
	if lang == "wa" then
		if affix == "-reye" then
			builder.add_category( language.grammar({args={"Mots", lang, "avou l' betchfessî ey"}}), 0)
		end
	end
		
	builder.add_content(out)	
end

function p.init(frame)	
	local args = frame.args
	local afftip, affix, gram, lang, anchor, di, fwaitso, rif, lim = nil
	builder.init(frame, "Årtikes avou ene flotche dins ene stitchete")
		
	if args[1] then afftyp = args[1] end
	if args[2] then affix = args[2] end
	if args[3] then gram = args[3] end
	if args[4] then lang = args[4] end
	if args.ritch then ritch = args.ritch end
	if args.long then long = args.long end
	if args.anke then anchor = args.anke end
	if args.di then di = args.di end
	if args.fwaitso then fwaitso = args.fwaitso end
	if args.rif then rif = args.rif end
	if args.lim then lim = args.lim end
	
	if not args[1] then
		builder.error("li stitchete est vude")
	elseif not _affixes[afftyp] then
		builder.error("li stitchete n' est nén rkinoxhowe")
	else
		render(afftyp, affix, gram, lang, ritch, long, anchor, di, fwaitso, rif, lim)
	end
	
	return builder.get_content()
end

return p