Skip to content
Extraits de code Groupes Projets
Valider 16395ba1 rédigé par Fil's avatar Fil
Parcourir les fichiers

changement d'API des pipeline, de manière à les rapprocher de l'écriture des...

changement d'API des pipeline, de manière à les rapprocher de l'écriture des filtres dans les squelettes ; au lieu d'un Array('filtre1', 'filtre2'), un pipeline est désormais décrit sous la forme '|filtre1|filtre2'

A faire : autoriser aussi |filtre{arguments}
et pourquoi pas |?{true,false}

parent a02aa0ca
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -78,27 +78,48 @@ function include_fonction($nom) {
//
// le pipeline execute les elements disponibles pour cette action,
// les uns apres les autres, et retourne la valeur finale
//
// Cf. compose_filtres dans inc-compilo-index.php3, qui est le
// pendant "compil" de cette fonctionnalite
function pipeline($cause, $val) {
function pipeline($action, $val) {
global $spip_pipeline, $spip_matrice;
if (!is_array($spip_pipeline[$cause])) return $val;
foreach ($spip_pipeline[$cause] as $plug) {
// charger un fichier le cas echeant
if (!function_exists($plug)) {
if ($f = $spip_matrice[$plug]) {
include($f);
$ok = function_exists($plug);
}
if (!$ok) {
spip_log("Erreur - $plug n'est pas definie ($f)");
return $val;
}
static $pipe = array();
if (!strlen($spip_pipeline[$action])) return $val;
// Analyser le pipeline
// TODO - traiter les arguments |filtre{arg1,arg2}
// TODO - traiter le filtre test |?{true,false}
if (!isset($pipe[$action]))
$pipe[$action] = array_filter(explode('|',$spip_pipeline[$action]));
// Eclater le pipeline en filtres et appliquer chaque filtre
foreach ($pipe[$action] as $fonc) {
// fonction
if (function_exists($fonc))
$val = $fonc($val);
// Class::Methode
else if (preg_match("/^(\w*)::(\w*)$/", $fonc, $regs)
AND $methode = array($regs[1], $regs[2])
AND is_callable($methode))
$val = call_user_func($methode, $val);
// Charger un fichier
else if ($f = $spip_matrice[$fonc]) {
require_once($f);
// fonction (2eme chance)
if (function_exists($fonc))
$val = $fonc($val);
// Class::Methode (2eme chance)
else if (preg_match("/^(\w*)::(\w*)$/", $fonc, $regs)
AND $methode = array($regs[1], $regs[2])
AND is_callable($methode))
$val = call_user_func($methode, $val);
else
spip_log("Erreur - '$fonc' non definie !");
}
// appliquer le filtre
$val = $plug($val);
}
return $val;
......@@ -644,4 +665,5 @@ function generer_url_public($script, $args="", $no_entities=false) {
$ext = (ereg('.php[3]?$', $script) ? '' :_EXTENSION_PHP).($args ? '?' : "");
return $site . $script . $ext . $args;
}
?>
......@@ -166,12 +166,12 @@ $traiter_math = 'tex';
// les activer un par un, dans tel ordre, etc)
# les pipeline standards (traitements derivables aka points d'entree)
$spip_pipeline = array(
'pre_typo' => array('extraire_multi'),
'post_typo' => array('quote_amp'),
'pre_propre' => array('extraire_multi'),
'post_propre' => array(),
'pre_indexation' => array(),
'post_syndication' => array()
'pre_typo' => '|extraire_multi',
'post_typo' => '|quote_amp',
'pre_propre' => '|extraire_multi',
'post_propre' => '',
'pre_indexation' => '',
'post_syndication' => ''
);
# la matrice standard (fichiers definissant les fonctions a inclure)
$spip_matrice = array ();
......
......@@ -348,10 +348,13 @@ function applique_filtres($p) {
return $code;
}
// Cf. function pipeline dans ecrire/inc_utils.php
function compose_filtres($p, $code) {
foreach($p->param as $filtre) {
$fonc = array_shift($filtre);
if ($fonc) {
// recuperer les arguments du filtre, en les separant par des
// virgules, *sauf* dans le cas du filtre "?" qui demande un ":"
$arglist = compose_filtres_args($p, $filtre,
($fonc == '?' ? ':' : ','));
......
......@@ -14,7 +14,7 @@ $nom = 'ancres';
$version = 0.1;
// s'inserer dans le pipeline 'avant_propre' @ ecrire/inc_texte.php3
$GLOBALS['spip_pipeline']['post_propre'][] = 'ancres';
$GLOBALS['spip_pipeline']['post_propre'] .= '|ancres';
// la fonction est tres legere on la definit directement ici
function ancres($texte) {
......
......@@ -16,7 +16,7 @@ $nom = 'podcast_client';
$version = 0.1;
// s'inserer dans le pipeline 'post_syndication' @ ecrire/inc_sites.php3
$GLOBALS['spip_pipeline']['post_syndication'][] = 'podcast_client';
$GLOBALS['spip_pipeline']['post_syndication'] .= '|podcast_client';
$GLOBALS['spip_matrice']['podcast_client'] = dirname(__FILE__).'/podcast_client.php';
?>
......@@ -15,7 +15,7 @@ $version = 0.1;
// s'inserer dans le pipeline 'apres_typo' @ ecrire/inc_texte.php3
if (!_DIR_RESTREINT)
$GLOBALS['spip_pipeline']['post_typo'][] = 'revision_nbsp';
$GLOBALS['spip_pipeline']['post_typo'] .= '|revision_nbsp';
// la fonction est tres legere on la definit directement ici
function revision_nbsp($letexte) {
......
......@@ -14,7 +14,7 @@ $nom = 'smallcaps';
$version = 0.1;
// s'inserer dans le pipeline 'apres_typo' @ ecrire/inc_texte.php3
$GLOBALS['spip_pipeline']['post_typo'][] = 'smallcaps';
$GLOBALS['spip_pipeline']['post_typo'] .= '|smallcaps';
// la fonction est tres legere on la definit directement ici
#$GLOBALS['spip_matrice']['smallcaps'] = dirname(__FILE__).'/smallcaps.php';
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter