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