Mòdul:StringToSort: diferència entre les revisions

De la Viquipèdia, l'enciclopèdia lliure
Contingut suprimit Contingut afegit
taula concatenada millor que un string modificat en un bucle
err.
Línia 38: Línia 38:
for w in mw.ustring.gmatch(arg, "%w+") do
for w in mw.ustring.gmatch(arg, "%w+") do
w = capitalize(w)
w = capitalize(w)
if not nosort_words(w) then
if not nosort_words[w] then
if del_first ~= '' then
if del_first ~= '' then
if w ~= del_first then
if w ~= del_first then

Revisió del 09:19, 30 oct 2015

Icona de documentació de mòdul Documentació del mòdul [ mostra ] [ modifica el codi ] [ mostra l'historial ] [ refresca ]

Mòdul StringToSort (codi · ús · discussió · proves · tests · casos prova | subpàgines · enllaços)

A continuació es mostra la documentació transclosa de la subpàgina /ús. [salta a la caixa de codi]


Mòdul utilitzat per obtenir una clau d'ordenació tot eliminant preposicions i articles en el cas d'una frase. Traient els diacrítics (majorment accents de les lletres) i posat la primera paraula a majúscules.

Utilitzat per: {{StringToSort}}, {{StringToSortDelFirst}} i {{StringToSortDelBegin}}.

local s = {}

function s._getParameters(frame_args, arg_list)
	local new_args = {}
	local index = 1
	local value
	for i, arg in ipairs(arg_list) do
		value = frame_args[arg]
		if value == nil then
			value = frame_args[index]
			index = index + 1
		end
		new_args[arg] = value
	end
	return new_args
end                

function capitalize(arg)
	local long = mw.ustring.len(arg)
	if long == 0 then
		arg = ''
	else
		local str1 = mw.ustring.sub(arg, 1, 1)
		str1 = mw.ustring.upper(str1)
		if long == 1 then
			arg = str1
		else	
			local str2 = mw.ustring.sub(arg, 2,long)
			arg = str1 .. str2
		end
	end   
	return arg
end

function capitalize2(arg, del_first)
	local sort_key = {}
	local nosort_words = require("Module:Utilitats").llista({'','De','Del','Dels','El','Els','La','Les','Per','A','D','I','L','O'})
	for w in mw.ustring.gmatch(arg, "%w+") do
		w = capitalize(w)
		if not nosort_words[w] then
			if del_first ~= '' then
				if w ~= del_first then
					table.insert(sort_key, w)
				end
				del_first = ''
			else
				table.insert(sort_key, w)
			end
		end
	end
	return table.concat(sort_key, ' ')
end

function without_diacritics_loc(str)
	local with_diacritics    = 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝàáâãäåçèéêëìíîïñòóôõöøùúûüý·-'
	local without_diacritics = 'AAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuy'
	for j = 1, mw.ustring.len(with_diacritics) do
		ch1 = mw.ustring.sub(with_diacritics, j, j)
		ch2 = mw.ustring.sub(without_diacritics, j, j) or ''
		str = mw.ustring.gsub(str, ch1, ch2)
	end
	return str
end

function s.without_diacritics (frame)
	local new_args = s._getParameters(frame.args, {'str'})
	local arg = new_args['str'] or ''
	if type(arg) == 'string' then
		without_diacritics_loc(arg)
		return arg
	else
		local error_str = type(arg)
		return error_str
	end        
end

function s.unaccent_firstcap (frame)
	local new_args = s._getParameters(frame.args, {'str', 'del_first'})
	local arg = new_args['str'] or ''
	local del_first = new_args['del_first'] or ''
	if type( arg ) == 'string' then
		arg = mw.ustring.gsub(arg, "'", " ")
		arg = without_diacritics_loc(arg)
		arg = capitalize2(arg, del_first)
		return arg
	else
		local error_str = type(arg)
		return error_str
	end        
end

return s