From 95661487a2fa0406e0d90ec3fda3668dba9d14d2 Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Thu, 14 May 2009 21:20:49 +0000 Subject: [PATCH] =?UTF-8?q?Suite=20de=20[13986]=20sur=20l'analyse=20syntax?= =?UTF-8?q?e=20de=20{{{#INCLURE}}}=20et=20{{{<INCLURE>}}}:=20la=20remise?= =?UTF-8?q?=20=C3=A0=20plat=20des=20fonctions=20{{{phraser=5Farguments=5Fi?= =?UTF-8?q?nclure}}}=20et=20{{{argumenter=5Finclure}}}=20d=C3=A9bouchent?= =?UTF-8?q?=20finalement=20sur=20leur=20fusion,=20autrement=20dit=20=C3=A7?= =?UTF-8?q?a=20ne=20fait=20plus=20qu'une=20passe,=20=C3=A7a=20commence=20?= =?UTF-8?q?=C3=A0=20=C3=AAtre=20plus=20lisible,=20on=20s'approche=20du=20b?= =?UTF-8?q?ut=20annonc=C3=A9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La fonction {{{phraser_arguments_inclure}}} disparaît complètement, son seul appel non suivi de l'appel de sa congénère étant dans l'analyse des rares critères d'une boucle récursive, lesquels auraient toujours dû être analysés par {{{phraser_criteres}}}, ce qui est fait à présent. --- ecrire/public/balises.php | 11 ++++---- ecrire/public/compiler.php | 47 ++++++++++++++++++++++++---------- ecrire/public/phraser_html.php | 27 ++----------------- 3 files changed, 41 insertions(+), 44 deletions(-) diff --git a/ecrire/public/balises.php b/ecrire/public/balises.php index 84497a4ee2..79176d484c 100644 --- a/ecrire/public/balises.php +++ b/ecrire/public/balises.php @@ -591,11 +591,11 @@ function balise_PAGINATION_dist($p, $liste='true') { array_shift($p->param); while(count($params)) array_unshift($p->param,array_pop($params)); - + // a priori true // si false, le compilo va bloquer sur des syntaxes avec un filtre sans argument qui suit la balise // si true, les arguments simples (sans truc=chose) vont degager - $code_contexte = argumenter_inclure(phraser_arguments_inclure($p->param, true), $p->descr, $p->boucles, $p->id_boucle, false); + $code_contexte = argumenter_inclure($p->param, true, $p->descr, $p->boucles, $p->id_boucle, false); $p->boucles[$b]->numrows = true; $connect = $p->boucles[$b]->sql_serveur; @@ -965,7 +965,7 @@ function balise_INCLUDE_dist($p) { // http://doc.spip.org/@balise_INCLURE_dist function balise_INCLURE_dist($p) { $id_boucle = $p->id_boucle; - $_contexte = argumenter_inclure(phraser_arguments_inclure($p->param, 'all'), $p->descr, $p->boucles, $id_boucle, false, false); + $_contexte = argumenter_inclure($p->param, 'all', $p->descr, $p->boucles, $id_boucle, false, false); if (isset($_contexte['fond'])) { @@ -1039,7 +1039,8 @@ function balise_MODELE_dist($p) { // a priori true // si false, le compilo va bloquer sur des syntaxes avec un filtre sans argument qui suit la balise // si true, les arguments simples (sans truc=chose) vont degager - $_contexte = argumenter_inclure(phraser_arguments_inclure($p->param, true), $p->descr, $p->boucles, $p->id_boucle, false); + + $_contexte = argumenter_inclure($p->param, true, $p->descr, $p->boucles, $p->id_boucle, false); // Si le champ existe dans la pile, on le met dans le contexte // (a priori c'est du code mort ; il servait pour #LESAUTEURS dans @@ -1063,7 +1064,7 @@ function balise_MODELE_dist($p) { . (isset($_contexte['ajax'])?", 'ajax'=>true":'') . "), " . _q($connect) . ")"; - $p->code = "(((\$recurs=(isset(\$Pile[0]['recurs'])?\$Pile[0]['recurs']:0))>=5)? '' : $page)"; + $p->code = "\n\t(((\$recurs=(isset(\$Pile[0]['recurs'])?\$Pile[0]['recurs']:0))>=5)? '' :\n\t$page)\n"; $p->interdire_scripts = false; // securite assuree par le squelette diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php index 417c7e6a00..ea27aba667 100644 --- a/ecrire/public/compiler.php +++ b/ecrire/public/compiler.php @@ -40,20 +40,39 @@ include_spip('public/balises'); include_spip('public/jointures'); // http://doc.spip.org/@argumenter_inclure -function argumenter_inclure($params, $descr, &$boucles, $id_boucle, $echap=true , $lang = ''){ +function argumenter_inclure($params, $rejet_filtres, $descr, &$boucles, $id_boucle, $echap=true , $lang = ''){ $l = array(); - foreach($params as $couple) { - list($var, $val) = $couple; - if ($var == 'lang') { - $lang = $val; - } else { - $val = ($val[0]->type == 'texte' AND !$val[0]->texte) - ? index_pile($id_boucle, $var, $boucles) - : calculer_liste($val, $descr, $boucles, $id_boucle); + foreach($params as $k => $couple) { + $val = $couple[1]; + $var = $val[0]; + if ($couple[0]){ + if ($rejet_filtres) + break; // on est arrive sur un filtre qui suit la balise + } elseif ($var->type != 'texte') { + if ($rejet_filtres) + break; // on est arrive sur un filtre sans argument qui suit la balise + else + erreur_squelette(_T('zbug_parametres_inclus_incorrects'),$var); + } else { preg_match(",^([^=]*)(=?)(.*)$,", $var->texte,$m); + $var = $m[1]; + if ($m[2]) { + $v = $m[3]; + if (preg_match(',^[\'"](.*)[\'"]$,', $v, $m)) $v = $m[1]; + $val[0]->texte = $v; + } else $val[0]->type = 'vide'; + + if ($var == 'lang') { + $lang = $val; + } else { + + $val = ($val[0]->type === 'vide') + ? index_pile($id_boucle, $var, $boucles) + : calculer_liste($val, $descr, $boucles, $id_boucle); - $l[$var] = ($echap?"\'$var\' => ' . argumenter_squelette(":"'$var' => ") - . $val . ($echap? ") . '":" "); + $l[$var] = ($echap?"\'$var\' => ' . argumenter_squelette(":"'$var' => ") + . $val . ($echap? ") . '":" "); + } } } // Cas particulier de la langue : si {lang=xx} est definie, on @@ -62,10 +81,11 @@ function argumenter_inclure($params, $descr, &$boucles, $id_boucle, $echap=true if ($lang === false) return $l; $l['lang'] = ($echap?"\'lang\' => ' . argumenter_squelette(":"'lang' => ") . - ($lang + (($lang[0]->type !== 'vide') ? calculer_liste($lang[0], $descr, $boucles, $id_boucle) : '$GLOBALS["spip_lang"]' ) . ($echap?") . '":" "); + return $l; } @@ -95,8 +115,7 @@ function calculer_inclure($p, $descr, &$boucles, $id_boucle) { } } } - - $_contexte = argumenter_inclure(phraser_arguments_inclure($p->param), $descr, $boucles, $id_boucle); + $_contexte = argumenter_inclure($p->param, false, $descr, $boucles, $id_boucle); // Critere d'inclusion {env} (et {self} pour compatibilite ascendante) if ($env = (isset($_contexte['env'])|| isset($_contexte['self']))) { diff --git a/ecrire/public/phraser_html.php b/ecrire/public/phraser_html.php index bfc4375c23..af5a55edd9 100644 --- a/ecrire/public/phraser_html.php +++ b/ecrire/public/phraser_html.php @@ -38,29 +38,6 @@ define('BALISE_IDIOMES',',<:(([a-z0-9_]+):)?([a-z0-9_]+)({([^\|=>]*=[^\|>]*)})?( define('SQL_ARGS', '(\([^)]*\))'); define('CHAMP_SQL_PLUS_FONC', '`?([A-Z_][A-Z_0-9.]*)' . SQL_ARGS . '?`?'); -// http://doc.spip.org/@phraser_arguments_inclure -function phraser_arguments_inclure($param,$rejet_filtres = false){ - // on assimile {var=val} a une liste de un argument sans fonction - foreach ($param as $k => $v) { - $var = $v[1][0]; - if ($var==NULL){ - if ($rejet_filtres) - break; // on est arrive sur un filtre sans argument qui suit la balise - } elseif ($var->type != 'texte') { - if ($rejet_filtres) - break; // on est arrive sur un filtre sans argument qui suit la balise - else - erreur_squelette(_T('zbug_parametres_inclus_incorrects'),$var); - } elseif (preg_match(",^([^=]*)=?(.*)$,", $var->texte,$m)) { - $param[$k][0] = $m[1]; - $val = $m[2]; - if (preg_match(',^[\'"](.*)[\'"]$,', $val, $m)) $val = $m[1]; - $param[$k][1][0]->texte = $val; - } - } - return $param; -} - // http://doc.spip.org/@phraser_inclure function phraser_inclure($texte, $ligne, $result) { @@ -604,8 +581,8 @@ function public_phraser_html($texte, $id_parent, &$boucles, $nom, $ligne=1) { // if (strncmp($soustype, TYPE_RECURSIF, strlen(TYPE_RECURSIF)) == 0) { $result->type_requete = TYPE_RECURSIF; - $args = phraser_arguments_inclure($result->param); - + phraser_criteres($result->param, $result); + $args = $result->param; array_unshift($args, substr($type, strlen(TYPE_RECURSIF))); $result->param = $args; -- GitLab