From 9034f707b98df6fa60e0a6dbcab3a26281d66c63 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Thu, 13 Dec 2007 13:55:00 +0000
Subject: [PATCH] =?UTF-8?q?Avec=202=20statiques,=20find=5Fin=5Fpath=20reto?=
 =?UTF-8?q?urne=20imm=C3=A9diatement=20si=20le=20fichier=20demand=C3=A9=20?=
 =?UTF-8?q?a=20d=C3=A9j=C3=A0=20=C3=A9t=C3=A9=20examin=C3=A9.=20Du=20coup,?=
 =?UTF-8?q?=20son=20non=20appel=20dans=20filtrer()=20est=20superflu.=20A?=
 =?UTF-8?q?=20noter=20qu'il=20serait=20bon=20de=20cloner=20include=5Fspip?=
 =?UTF-8?q?=20sur=20la=20signature=20de=20charger=5Ffonction,=20=C3=A7a=20?=
 =?UTF-8?q?=C3=A9viterait=20des=20allocations=20de=20chaines=20superflues.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/inc/filtres.php | 41 ++++++++++++++---------------------------
 ecrire/inc/utils.php   | 21 ++++++++++-----------
 2 files changed, 24 insertions(+), 38 deletions(-)

diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php
index 02f2c4649e..d4ed32962a 100644
--- a/ecrire/inc/filtres.php
+++ b/ecrire/inc/filtres.php
@@ -14,9 +14,7 @@
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
 include_spip('inc/charsets');
-// on definit la matrice pour les filtres images : le compilateur fera passer l'appel par filtrer
-// on ne definit pas de fichier a inclure : l'inclusion sera faite dans image_filtrer
-// par un include_spip unique en cas d'appel multiple
+// signaler les filtres ayant besoin d'inclue inc/filtres_images
 
 $GLOBALS['spip_matrice']['image_valeurs_trans'] = '';
 $GLOBALS['spip_matrice']['image_reduire'] = '';
@@ -43,18 +41,17 @@ $GLOBALS['spip_matrice']['image_imagick'] = '';
 $GLOBALS['spip_matrice']['image_ramasse_miettes'] = '';
 $GLOBALS['spip_matrice']['image_passe_partout'] = '';
 
-$inc_filtres_images = _DIR_RESTREINT."inc/filtres_images.php"; # find_in_path('inc/filtres_images');
-$GLOBALS['spip_matrice']['couleur_dec_to_hex'] = $inc_filtres_images;
-$GLOBALS['spip_matrice']['couleur_hex_to_dec'] = $inc_filtres_images;
-$GLOBALS['spip_matrice']['couleur_extreme'] = $inc_filtres_images;
-$GLOBALS['spip_matrice']['couleur_inverser'] = $inc_filtres_images;
-$GLOBALS['spip_matrice']['couleur_eclaircir'] = $inc_filtres_images;
-$GLOBALS['spip_matrice']['couleur_foncer'] = $inc_filtres_images;
-$GLOBALS['spip_matrice']['couleur_foncer_si_claire'] = $inc_filtres_images;
-$GLOBALS['spip_matrice']['couleur_eclaircir_si_foncee'] = $inc_filtres_images;
-$GLOBALS['spip_matrice']['couleur_web'] = $inc_filtres_images;
-$GLOBALS['spip_matrice']['couleur_4096'] = $inc_filtres_images;
-$GLOBALS['spip_matrice']['couleur_saturation'] = $inc_filtres_images;
+$GLOBALS['spip_matrice']['couleur_dec_to_hex'] ='';
+$GLOBALS['spip_matrice']['couleur_hex_to_dec'] ='';
+$GLOBALS['spip_matrice']['couleur_extreme'] ='';
+$GLOBALS['spip_matrice']['couleur_inverser'] ='';
+$GLOBALS['spip_matrice']['couleur_eclaircir'] ='';
+$GLOBALS['spip_matrice']['couleur_foncer'] ='';
+$GLOBALS['spip_matrice']['couleur_foncer_si_claire'] ='';
+$GLOBALS['spip_matrice']['couleur_eclaircir_si_foncee'] ='';
+$GLOBALS['spip_matrice']['couleur_web'] ='';
+$GLOBALS['spip_matrice']['couleur_4096'] ='';
+$GLOBALS['spip_matrice']['couleur_saturation'] ='';
 
 // http://doc.spip.org/@chercher_filtre
 function chercher_filtre($fonc, $default=NULL) {
@@ -78,9 +75,8 @@ function appliquer_filtre($arg, $filtre) {
 // et arguments
 // http://doc.spip.org/@filtrer
 function filtrer($filtre) {
-	if (isset($GLOBALS['spip_matrice'][$filtre])
-	AND $f = $GLOBALS['spip_matrice'][$filtre])
-		include_once($f);
+	if (isset($GLOBALS['spip_matrice'][$filtre]))
+		include_spip('inc/filtres_images');
 
 	$tous = func_get_args();
 	if (substr($filtre,0,6)=='image_')
@@ -153,16 +149,11 @@ function version_svn_courante($dir) {
 
 // http://doc.spip.org/@image_filtrer
 function image_filtrer($args){
-	static $inclure = true;
 	$filtre = array_shift($args); # enlever $filtre
 	$texte = array_shift($args);
 	if (!$texte) return;
 	// Cas du nom de fichier local
 	if (preg_match(',^('._DIR_IMG .'|'. _DIR_IMG_PACK .'|'. _DIR_VAR .'),', $texte)) {
-		if ($inclure){
-			include_spip('inc/filtres_images');
-			$inclure = false;
-		}
 		array_unshift($args,"<img src='$texte' />");
 		return call_user_func_array($filtre, $args);
 	}
@@ -171,10 +162,6 @@ function image_filtrer($args){
 	if (preg_match_all(
 		',(<([a-z]+) [^<>]*spip_documents[^<>]*>)?\s*(<img\s.*>),UimsS',
 		$texte, $tags, PREG_SET_ORDER)) {
-		if ($inclure){
-			include_spip('inc/filtres_images');
-			$inclure = false;
-		}
 		foreach ($tags as $tag) {
 			$class = extraire_attribut($tag[3],'class');
 			if (!$class || (strpos($class,'no_image_filtrer')===FALSE)){
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 85e9359803..89de11e7fb 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -625,23 +625,22 @@ function memoriser_fichiers($dir) {
 
 // http://doc.spip.org/@find_in_path
 function find_in_path ($file, $dirname='') {
-	static $ram;
+	static $files=array(), $dirs=array();
 
 	$a = strrpos($file,'/');
 	if ($a !== false) {
-		$dirname .= substr($file, 0, $a+1);
-		$file = substr($file, $a+1);
+		$dirname .= substr($file, 0, ++$a);
+		$file = substr($file, $a);
 	}
 
+	if (isset($files[$dirname][$file])) return $files[$dirname][$file];
+
 	foreach(creer_chemin() as $dir) {
-		if (!isset($ram[$s = $dir . $dirname]))
-			$ram[$s] = is_dir($s) ? array() : false;
-		if (isset($ram[$s][$file])) {
-			if ($a = $ram[$s][$file]) return $a;
-		} elseif (is_array($ram[$s])) {
-			$a = $s . $file;
-			if ($ram[$s][$file]=(is_readable($a)?$a:''))
-				return $a;
+		if (!isset($dirs[$a = $dir . $dirname]))
+			$dirs[$a] = is_dir($a);
+		if ($dirs[$a]) {
+			if (is_readable($a .= $file))
+				return $files[$dirname][$file] = $a;
 		}
 	}
 }
-- 
GitLab