Saltu al enhavo

Modulo:CatUtil

El Vikipedio, la libera enciklopedio
Dokumentado Dokumentado


Ŝablona programado Diskutoj Lua Testoj Subpaĝoj
Modulo Esperanto English

Modulo: Dokumentado


Se vi havas demandon pri ĉi tiu Lua-modulo, tiam vi povas demandi en la diskutejo pri Lua-moduloj. La Intervikiaj ligiloj estu metataj al Vikidatumoj. (Vidu Helpopaĝon pri tio.)
-- modul CatUtil -- 2015-12-23

local p = {}

-- delinks the text from v and returns [[Ulo]] or [[Artikolo|Ulo]] like Ulo.
-- this is needed, because a link in a category is not possible
-- s - is a helping variable
 
function p.delink (v)
     s = v:match( "%[%[[^|%]]*| *([^%]]+) *%]%]" )
     if not s then
     s = v:match( "%[%[%s*([^%]]+)%s*%]%]" )
     end
     if not s then
     s = v
     end
     return mw.text.trim(s) -- removes spaces
end  -- delink ()

-- for invoke
function p.category(frame)
	
	-- creates a category from some specified textes, but removes link coding
	local begin = frame.args.begin or frame.args.komenco       -- eg. Libroj de
	local xyz = frame.args.xyz                                 -- eg. Zamenhof
	local ending = frame.args.ending or frame.args.fino        -- eg. en 1887
	local sortkey = frame.args.sortkey or frame.args.ordigilo  -- eg. |Unua Libro]]
	return p._category(begin, xyz, ending, sortkey)
end	

-- for other functions and modules
function p._category(begin, xyz, ending, sortkey)	
	local catbegin = "[[Kategorio:"
	local catend = "]]"
	local r = ""
	
	-- addes the begining part to the category, if it is specified
	if begin ~= nil and begin ~= "" then
		begin = p.delink(begin)
		r = catbegin .. begin
	else
		r = catbegin
	end
	
	-- addes the variable part to the category name
	if xyz ~= nil and xyz ~= "" then
		xyz = p.delink(xyz)
		r = r .. " " .. xyz
	end
	
	-- addes the end part to the category, if it is needed
	if ending ~= nil and ending ~= "" then
		ending = p.delink(ending)
		r = r .. " " .. ending
	end
	
	-- addes the sortkey, if it is specified
	if sortkey ~= nil and sortkey ~= "" then
		sortkey = p.delink(sortkey)
		r = r .. "|" .. sortkey .. catend
	else
		r = r .. catend
	end
	
	return r
end	

function p.city(frame)
	local typ = frame.args.typ or frame.args.tipo or ""
	local country = frame.args.country or frame.args.lando or ""
	local sortkey = frame.args.sortkey or frame.args.ordigilo or ""
	local template = frame.args.template or frame.args["ŝablono"] or ""
	-- other
	local begin = ""
	local xyz = ""
	local ending = ""
	local r = ""
	
	-- removes link from country 
	local c = p.delink(country)
	-- changes typ into lower case
	local t = mw.ustring.lower(typ)
	local t1 = "" -- singularo
	local t2 = "" -- pluralo
	if t == "vilaĝoj" or t == "vilaĝo" then
		t1 = "vilaĝo"
		t2 = "vilaĝoj"
	elseif t == "vilaĝoj " or t == "vilaĝo " then
		t1 = "vilaĝo"
		t2 = ""	
	elseif t == "grandvilaĝoj" or t == "grandvilaĝo" then
		t1 = "vilaĝo"
		t2 = "grandvilaĝoj"
	elseif t == "urboj" or t == "urbo" then
		t1 = "urbo"
		t2 = "urboj"
	elseif t == "urboj " or t == "urbo " then
		t1 = "urbo"
		t2 = ""		
	elseif t == "komunumoj"	or t == "komunumo" then
		t1 = "komunumo"
		t2 = "komunumoj"
	elseif t == "komunumoj "	or t == "komunumo " then
		t1 = "komunumo"
		t2 = ""	
	elseif t == "municipoj" or t == "municipo"	then
		t1 = "municipo"
		t2 = ""
	else
		t1 = ""
		t2 = ""
	end
	
	if t1 ~= "" and c ~= "" and template ~= "" then
		begin = t1 .. " kun " .. template
		r = p._category(begin, xyz, ending, sortkey)
		if t2 == "grandvilaĝoj" then
			begin = t2 .. " en " .. c
		elseif t2 == "" then
			return r
		else	
			begin = t2 .. " de " .. c
		end
		r = r .. p._category(begin, xyz, ending, sortkey)
		return r
	end
	
	return ""

end

return p