Module:Outils

De Starfield Wiki
Révision datée du 18 juillet 2022 à 21:04 par Kims (discussion | contributions) (Page créée avec « local Outils = { } --[[ trim nettoie un paramètre non nommé (supprime les espaces et retours ligne au début et à la fin) retourne nil si le texte est vide ou n'est pas du texte. Les nombres ne sont PAS considérés comme du texte. ]] function Outils.trim(texte) if type(texte) == 'string' and texte~= '' then texte = texte:gsub( '^%s*(%S?.-)%s*$', '%1' ) if texte ~= '' then return texte end end return nil end --[[ notEmpty renvoie le premier... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Documentation[voir] [modifier] [purger]
local Outils = { }

--[[
	trim nettoie un paramètre non nommé (supprime les espaces et retours ligne au début et à la fin)
	retourne  nil si le texte est vide ou n'est pas du texte. Les nombres ne sont PAS considérés 
	comme du texte.
]]
function Outils.trim(texte)
	if type(texte) == 'string' and texte~= '' then
		texte = texte:gsub( '^%s*(%S?.-)%s*$', '%1' )
		if texte ~= '' then
			return texte
		end
	end
	return nil
end

--[[
	notEmpty renvoie le premier paramètre non vide ou nul. 
	Paramètre : 
		1, ... - les variables qui doivent êtres testés.
]]
function Outils.notEmpty( var, ... )
	local tvar = type( var )
	
	if Outils.trim( var ) then
		return Outils.trim( var )
	elseif tvar == 'table' then
		local nextFunc = pairs( var )   -- n'utilise pas next car non défini par mw.loadData
		if nextFunc( var ) ~= nil then
			return var
		end 
	elseif var == true or ( tvar == 'number' and var ~= 0 ) or tvar == 'function' then
		return var
	end
	
	if select( '#', ... ) > 0 then
		return Outils.notEmpty(  ... )
	end
end

--[[
	extractArgs permet de récupérer les arguements du modèle, 
	ou la table transmise à la fonction par une autre fonction d'un module
	Paramètres : 
		1 - un objet frame ou une table contenant les paramètre
		2, ...  - une liste de nom de paramètre pour déterminé si les paramètres sont transmis 
			par #invoke. Le premier paramètre de frame sera systématiquement testé.
]]
function Outils.extractArgs ( frame, ... )
	if type( frame ) == 'table' then
		if type( frame.getParent ) == 'function' then
			if Outils.notEmpty( frame.args.invokeArgsOnly ) then
				return frame.args
			else
				local args = frame:getParent().args;
				for k,v in pairs( frame.args ) do
					args[k] = v;
				end
				return args
			end
		else
			return frame 
		end
	else
		return { frame, ... }
	end
end

--[[
	validTextArg renvoit le premier paramètre chaine non vide
	Paramètre : 
		1 - tableau contenant tous paramètres
		2, ... - les noms des paramètres qui doivent êtres testés.
]]
function Outils.validTextArg( args, name, ... ) 
	local texte = Outils.trim( args[name] )
	if texte then
		return texte
	end
	if select( '#', ... ) > 0 then
		return Outils.validTextArg( args, ... )
	end
	return nil
end

-- By PhilippeLhoste
-- See http://lua-users.org/wiki/SplitJoin for details
-- Compatibility: Lua-5.0
function Outils.split(str, delim, maxNb)
   -- Eliminate bad cases...
   if string.find(str, delim) == nil then
      return { str }
   end
   if maxNb == nil or maxNb < 1 then
      maxNb = 0    -- No limit
   end
   local result = {}
   local pat = "(.-)" .. delim .. "()"
   local nb = 0
   local lastPos
   for part, pos in string.gfind(str, pat) do
      nb = nb + 1
      result[nb] = part
      lastPos = pos
      if nb == maxNb then
         break
      end
   end
   -- Handle the last field
   if nb ~= maxNb then
      result[nb + 1] = string.sub(str, lastPos)
   end
   return result
end

--[[
	corename retourne le titre de l'article sans les termes entre
	parenthèses utilisés pour lever l'ambiguïté
]]
function Outils.corename(frame)
    return mw.ustring.gsub(mw.title.getCurrentTitle().subpageText, '%s%(.*', '')
end

--[[
	Renvoie le titre d'une page en retirant, si elle existe,
	l'indication entre parenthèse utilisée pour lever l'homonymie. 
]]
function Outils.simpletitle(frame)
	-- si un paramètre est indiqué, on l'utilise comme titre à traiter
	-- sinon on utilise le titre de la page actuelle
	local page = frame.args[1]
	if (page == nil or page == "") then
	  page = mw.title.getCurrentTitle().text
	end

	-- on enlève la partie entre parenthèses
	local npage = mw.ustring.gsub(page, " [(][^()]*[)]$", "")
	if (npage == nil or npage == "") then return "" end

	return npage
end

return Outils