From bc3dcd7218e76cc3a7d380ce53cb9bac06e3b43c Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Sun, 22 Jan 2006 23:16:54 +0000
Subject: [PATCH] =?UTF-8?q?prendre=20en=20compte=20$spip=5Fmatrice=20au=20?=
 =?UTF-8?q?niveau=20du=20compilateur=20(n=C3=A9cessite=20d'appeler=20une?=
 =?UTF-8?q?=20fonction=20filtrer($filtre,=20$arguments)=20qui=20chargera?=
 =?UTF-8?q?=20le=20fichier=20de=20d=C3=A9finition=20de=20$filtre=20avant?=
 =?UTF-8?q?=20d'appeler=20la=20fonction=20avec=20les=20arguments)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/inc_filtres.php3 | 17 ++++++++++++++---
 inc-compilo-index.php3  | 10 ++++++++--
 2 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/ecrire/inc_filtres.php3 b/ecrire/inc_filtres.php3
index 9577777681..b7b5e606ee 100644
--- a/ecrire/inc_filtres.php3
+++ b/ecrire/inc_filtres.php3
@@ -13,6 +13,17 @@
 
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
+// Appliquer un filtre (eventuellement defini dans la matrice) aux donnees
+// et arguments
+function filtrer($filtre) {
+	if ($f = $GLOBALS['spip_matrice'][$filtre])
+		include_local($f);
+
+	$tous = func_get_args();
+	array_shift($tous); # enlever $filtre
+	return call_user_func_array($filtre, $tous);
+}
+
 // Echappement des entites HTML avec correction des entites "brutes"
 // (generees par les butineurs lorsqu'on rentre des caracteres n'appartenant
 // pas au charset de la page [iso-8859-1 par defaut])
@@ -2106,9 +2117,9 @@ function tags2dcsubject($tags) {
 }
 // fabrique un bouton de type $t de Name $n, de Value $v et autres attributs $a
 function boutonne($t, $n, $v, $a='') {
-  return "\n<input type='$t'" .
-    (!$n ? '' : " name='$n'") .
-    " value=\"$v\" $a />";
+	return "\n<input type='$t'"
+	. (!$n ? '' : " name='$n'")
+	. " value=\"$v\" $a />";
 }
 
 ?>
diff --git a/inc-compilo-index.php3 b/inc-compilo-index.php3
index c26652f146..619e8d12e6 100644
--- a/inc-compilo-index.php3
+++ b/inc-compilo-index.php3
@@ -363,8 +363,14 @@ function compose_filtres($p, $code) {
 			$arglist = compose_filtres_args($p, $filtre,
 				($fonc == '?' ? ':' : ','));
 
-			// le filtre existe sous forme de fonction ou de methode
-			if (function_exists($fonc)
+			// le filtre est defini dans la matrice ? il faut alors l'appeler
+			// de maniere indirecte, pour charger au prealable sa definition
+			if (isset($GLOBALS['spip_matrice'][$fonc])) {
+				$code = "filtrer('$fonc',$code$arglist)";
+			}
+			// le filtre est defini sous forme de fonction ou de methode
+			// par ex. dans inc_texte, inc_filtres ou mes_fonctions
+			else if (function_exists($fonc)
 				OR (preg_match("/^(\w*)::(\w*)$/", $fonc, $regs)                            
 					AND is_callable(array($regs[1], $regs[2]))
 			))
-- 
GitLab