From 37b9835444819a45262ec11d7b8497bef5e048c0 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Fri, 14 Dec 2007 18:31:05 +0000
Subject: [PATCH] =?UTF-8?q?Simplification=20de=20la=20compilation=20des=20?=
 =?UTF-8?q?filtres=20d'image:=20tout=20filtre=20commen=C3=A7ant=20par=20im?=
 =?UTF-8?q?age=5F=20ou=20=5Fcouleur=5F=20se=20compilent=20par=20un=20appel?=
 =?UTF-8?q?=20de=20filtrer(),=20qui=20est=20suppos=C3=A9=20n'appeler=20que?=
 =?UTF-8?q?=20ces=20fonctions,=20ce=20qui=20supprime=20le=20besoin=20de=20?=
 =?UTF-8?q?la=20matrice.=20L'optimisation=20de=20find=5Fin=5Fpath=20permet?=
 =?UTF-8?q?=20=C3=A0=20pr=C3=A9sent=20de=20ses=20dispenser=20d'une=20stati?=
 =?UTF-8?q?tique=20sur=20l'inclusion=20qui=20doublonnerait=20celle=20de=20?=
 =?UTF-8?q?find=5Fin=5Fpath.=20L'id=C3=A9al=20toutefois=20serait=20de=20d?=
 =?UTF-8?q?=C3=A9porter=20l'inclusion=20dans=20le=20code=20compil=C3=A9=20?=
 =?UTF-8?q?=C3=A0=20l'ext=C3=A9rieur=20de=20la=20boucle.=20A=20suivre,=20o?=
 =?UTF-8?q?n=20ne=20sait=20quand.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/inc/filtres.php       | 62 ++++++------------------------------
 ecrire/public/interfaces.php |  1 -
 ecrire/public/references.php | 33 +++++++++----------
 3 files changed, 26 insertions(+), 70 deletions(-)

diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php
index aff2061a73..1f285c0548 100644
--- a/ecrire/inc/filtres.php
+++ b/ecrire/inc/filtres.php
@@ -14,44 +14,6 @@
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
 include_spip('inc/charsets');
-// signaler les filtres ayant besoin d'inclure inc/filtres_images
-
-$GLOBALS['spip_matrice']['image_valeurs_trans'] = '';
-$GLOBALS['spip_matrice']['image_reduire'] = '';
-$GLOBALS['spip_matrice']['image_reduire_par'] = '';
-$GLOBALS['spip_matrice']['image_recadre'] = '';
-$GLOBALS['spip_matrice']['image_alpha'] = '';
-$GLOBALS['spip_matrice']['image_flip_vertical'] = '';
-$GLOBALS['spip_matrice']['image_flip_horizontal'] = '';
-$GLOBALS['spip_matrice']['image_masque'] = '';
-$GLOBALS['spip_matrice']['image_nb'] = '';
-$GLOBALS['spip_matrice']['image_flou'] = '';
-$GLOBALS['spip_matrice']['image_RotateBicubic'] = '';
-$GLOBALS['spip_matrice']['image_rotation'] = '';
-$GLOBALS['spip_matrice']['image_distance_pixel'] = '';
-$GLOBALS['spip_matrice']['image_decal_couleur'] = '';
-$GLOBALS['spip_matrice']['image_gamma'] = '';
-$GLOBALS['spip_matrice']['image_decal_couleur_127'] = '';
-$GLOBALS['spip_matrice']['image_sepia'] = '';
-$GLOBALS['spip_matrice']['image_aplatir'] = '';
-$GLOBALS['spip_matrice']['image_couleur_extraire'] = '';
-$GLOBALS['spip_matrice']['image_select'] = '';
-$GLOBALS['spip_matrice']['image_renforcement'] = '';
-$GLOBALS['spip_matrice']['image_imagick'] = '';
-$GLOBALS['spip_matrice']['image_ramasse_miettes'] = '';
-$GLOBALS['spip_matrice']['image_passe_partout'] = '';
-
-$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) {
@@ -71,20 +33,6 @@ function appliquer_filtre($arg, $filtre) {
 	return $f($arg);
 }
 
-// Appliquer un filtre de la matrice
-// http://doc.spip.org/@filtrer
-function filtrer($filtre) {
-	include_spip('inc/filtres_images');
-
-	$tous = func_get_args();
-	if (substr($filtre,0,6)=='image_')
-		return image_filtrer($tous);
-	else{
-		array_shift($tous); # enlever $filtre
-		return call_user_func_array($filtre, $tous);
-	}
-}
-
 function filtre_text_txt_dist($t) {
 	return '<pre>' . echapper_tags($t) . '</pre>';
 }
@@ -139,17 +87,25 @@ function version_svn_courante($dir) {
 // Fonctions graphiques
 //
 
+// charge les fonctions graphiques et applique celle demandee
+// http://doc.spip.org/@filtrer
+function filtrer() {
+	find_in_path('filtres_images.php', 'inc/', true);
+	return image_filtrer(func_get_args());
+}
+
 // fonction generique d'entree des filtres images
 // accepte en entree un texte complet, un img-log (produit par #LOGO_XX),
 // un tag <img ...> complet, ou encore un nom de fichier *local* (passer
 // le filtre |copie_locale si on veut l'appliquer a un document)
-// applique le filtre demande a chacune des occurences
+// applique le filtre demande a chacune des occurrences
 
 // http://doc.spip.org/@image_filtrer
 function image_filtrer($args){
 	$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)) {
 		array_unshift($args,"<img src='$texte' />");
diff --git a/ecrire/public/interfaces.php b/ecrire/public/interfaces.php
index c3a205805f..ddd6cc3bbd 100644
--- a/ecrire/public/interfaces.php
+++ b/ecrire/public/interfaces.php
@@ -114,7 +114,6 @@ class Champ {
 	var $type_requete;
 	var $code;	// code du calcul
 	var $interdire_scripts = true; // false si on est sur de cette balise
-	var $ramasser_miettes = false;
 	// tableau pour la production de code dependant du contexte
 	// id_mere;  pour TOTAL_BOUCLE hors du corps
 	// document; pour embed et img dans les textes
diff --git a/ecrire/public/references.php b/ecrire/public/references.php
index ab90a713df..15e6b7550c 100644
--- a/ecrire/public/references.php
+++ b/ecrire/public/references.php
@@ -412,10 +412,6 @@ function applique_filtres($p) {
 	if (isset($p->descr['session']))
 		$code = "$code . invalideur_session(\$Cache)";
 
-	// ramasser les images intermediaires inutiles et graver l'image finale
-	if ($p->ramasser_miettes)
-		$code = "filtrer('image_graver',$code)";
-
 	// Securite
 	if ($p->interdire_scripts
 	AND $p->etoile != '**')
@@ -428,15 +424,16 @@ function applique_filtres($p) {
 // http://doc.spip.org/@compose_filtres
 function compose_filtres(&$p, $code) {
 	global $table_criteres_infixes;
+	$image_miette = false;
 	foreach($p->param as $filtre) {
 		$fonc = array_shift($filtre);
 		if ($fonc) {
 			$is_filtre_image = (substr($fonc,0,6)=='image_') AND ($fonc!='image_graver');
-			if ($p->ramasser_miettes AND !$is_filtre_image){
-				// il faut graver maintenant car apres le filtre en cours
-				// on est pas sur d'avoir encore le nom du fichier dans le pipe
-				$code = "filtrer('image_graver',$code)";
-				$p->ramasser_miettes = false;
+			if ($image_miette AND !$is_filtre_image){
+	// il faut graver maintenant car apres le filtre en cours
+	// on est pas sur d'avoir encore le nom du fichier dans le pipe
+				$code = "filtrer('image_graver', $code)";
+				$image_miette = false;
 			}
 			// recuperer les arguments du filtre, les separer par des virgules
 			// *sauf* dans le cas du filtre "?" qui demande un ":"
@@ -448,15 +445,15 @@ function compose_filtres(&$p, $code) {
 			} else
 				$arglist = compose_filtres_args($p, $filtre, ',');
 
-			// 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)";
-				if ($is_filtre_image) $p->ramasser_miettes = true;
-			}
 			// est-ce un test ?
-			else if (in_array($fonc, $table_criteres_infixes))
+			if (in_array($fonc, $table_criteres_infixes))
 				$code = "($code $fonc " . substr($arglist,1) . ')';
+
+			elseif ((substr($fonc,0,6)=='image_') OR (substr($fonc,0,8)=='couleur_')){
+				$code = "filtrer('$fonc',$code$arglist)";
+				if ($is_filtre_image) $image_miette = true;
+			}
+
 			// le filtre est defini sous forme de fonction ou de methode
 			// par ex. dans inc_texte, inc_filtres ou mes_fonctions
 			else if ($f = chercher_filtre($fonc)) {
@@ -472,6 +469,10 @@ function compose_filtres(&$p, $code) {
 
 		}
 	}
+	// ramasser les images intermediaires inutiles et graver l'image finale
+	if ($image_miette)
+		$code = "filtrer('image_graver',$code)";
+
 	return $code;
 }
 
-- 
GitLab