Skip to content
Extraits de code Groupes Projets
Valider 95661487 rédigé par esj's avatar esj
Parcourir les fichiers

Suite de [13986] sur l'analyse syntaxe de {{{#INCLURE}}} et {{{<INCLURE>}}}:...

Suite de [13986] sur l'analyse syntaxe de {{{#INCLURE}}} et {{{<INCLURE>}}}: la remise à plat des fonctions {{{phraser_arguments_inclure}}} et {{{argumenter_inclure}}} débouchent finalement sur leur fusion, autrement dit ça ne fait plus qu'une passe, ça commence à être plus lisible, on s'approche du but annoncé.

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. 
parent 4061812f
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -591,11 +591,11 @@ function balise_PAGINATION_dist($p, $liste='true') { ...@@ -591,11 +591,11 @@ function balise_PAGINATION_dist($p, $liste='true') {
array_shift($p->param); array_shift($p->param);
while(count($params)) while(count($params))
array_unshift($p->param,array_pop($params)); array_unshift($p->param,array_pop($params));
// a priori true // a priori true
// si false, le compilo va bloquer sur des syntaxes avec un filtre sans argument qui suit la balise // 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 // 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; $p->boucles[$b]->numrows = true;
$connect = $p->boucles[$b]->sql_serveur; $connect = $p->boucles[$b]->sql_serveur;
...@@ -965,7 +965,7 @@ function balise_INCLUDE_dist($p) { ...@@ -965,7 +965,7 @@ function balise_INCLUDE_dist($p) {
// http://doc.spip.org/@balise_INCLURE_dist // http://doc.spip.org/@balise_INCLURE_dist
function balise_INCLURE_dist($p) { function balise_INCLURE_dist($p) {
$id_boucle = $p->id_boucle; $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'])) { if (isset($_contexte['fond'])) {
...@@ -1039,7 +1039,8 @@ function balise_MODELE_dist($p) { ...@@ -1039,7 +1039,8 @@ function balise_MODELE_dist($p) {
// a priori true // a priori true
// si false, le compilo va bloquer sur des syntaxes avec un filtre sans argument qui suit la balise // 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 // 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 // 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 // (a priori c'est du code mort ; il servait pour #LESAUTEURS dans
...@@ -1063,7 +1064,7 @@ function balise_MODELE_dist($p) { ...@@ -1063,7 +1064,7 @@ function balise_MODELE_dist($p) {
. (isset($_contexte['ajax'])?", 'ajax'=>true":'') . (isset($_contexte['ajax'])?", 'ajax'=>true":'')
. "), " . _q($connect) . ")"; . "), " . _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 $p->interdire_scripts = false; // securite assuree par le squelette
......
...@@ -40,20 +40,39 @@ include_spip('public/balises'); ...@@ -40,20 +40,39 @@ include_spip('public/balises');
include_spip('public/jointures'); include_spip('public/jointures');
// http://doc.spip.org/@argumenter_inclure // 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(); $l = array();
foreach($params as $couple) { foreach($params as $k => $couple) {
list($var, $val) = $couple; $val = $couple[1];
if ($var == 'lang') { $var = $val[0];
$lang = $val; if ($couple[0]){
} else { if ($rejet_filtres)
$val = ($val[0]->type == 'texte' AND !$val[0]->texte) break; // on est arrive sur un filtre qui suit la balise
? index_pile($id_boucle, $var, $boucles) } elseif ($var->type != 'texte') {
: calculer_liste($val, $descr, $boucles, $id_boucle); 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' => ") $l[$var] = ($echap?"\'$var\' => ' . argumenter_squelette(":"'$var' => ")
. $val . ($echap? ") . '":" "); . $val . ($echap? ") . '":" ");
}
} }
} }
// Cas particulier de la langue : si {lang=xx} est definie, on // 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 ...@@ -62,10 +81,11 @@ function argumenter_inclure($params, $descr, &$boucles, $id_boucle, $echap=true
if ($lang === false) return $l; if ($lang === false) return $l;
$l['lang'] = ($echap?"\'lang\' => ' . argumenter_squelette(":"'lang' => ") . $l['lang'] = ($echap?"\'lang\' => ' . argumenter_squelette(":"'lang' => ") .
($lang (($lang[0]->type !== 'vide')
? calculer_liste($lang[0], $descr, $boucles, $id_boucle) ? calculer_liste($lang[0], $descr, $boucles, $id_boucle)
: '$GLOBALS["spip_lang"]' : '$GLOBALS["spip_lang"]'
) . ($echap?") . '":" "); ) . ($echap?") . '":" ");
return $l; return $l;
} }
...@@ -95,8 +115,7 @@ function calculer_inclure($p, $descr, &$boucles, $id_boucle) { ...@@ -95,8 +115,7 @@ function calculer_inclure($p, $descr, &$boucles, $id_boucle) {
} }
} }
} }
$_contexte = argumenter_inclure($p->param, false, $descr, $boucles, $id_boucle);
$_contexte = argumenter_inclure(phraser_arguments_inclure($p->param), $descr, $boucles, $id_boucle);
// Critere d'inclusion {env} (et {self} pour compatibilite ascendante) // Critere d'inclusion {env} (et {self} pour compatibilite ascendante)
if ($env = (isset($_contexte['env'])|| isset($_contexte['self']))) { if ($env = (isset($_contexte['env'])|| isset($_contexte['self']))) {
......
...@@ -38,29 +38,6 @@ define('BALISE_IDIOMES',',<:(([a-z0-9_]+):)?([a-z0-9_]+)({([^\|=>]*=[^\|>]*)})?( ...@@ -38,29 +38,6 @@ define('BALISE_IDIOMES',',<:(([a-z0-9_]+):)?([a-z0-9_]+)({([^\|=>]*=[^\|>]*)})?(
define('SQL_ARGS', '(\([^)]*\))'); define('SQL_ARGS', '(\([^)]*\))');
define('CHAMP_SQL_PLUS_FONC', '`?([A-Z_][A-Z_0-9.]*)' . 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 // http://doc.spip.org/@phraser_inclure
function phraser_inclure($texte, $ligne, $result) { function phraser_inclure($texte, $ligne, $result) {
...@@ -604,8 +581,8 @@ function public_phraser_html($texte, $id_parent, &$boucles, $nom, $ligne=1) { ...@@ -604,8 +581,8 @@ function public_phraser_html($texte, $id_parent, &$boucles, $nom, $ligne=1) {
// //
if (strncmp($soustype, TYPE_RECURSIF, strlen(TYPE_RECURSIF)) == 0) { if (strncmp($soustype, TYPE_RECURSIF, strlen(TYPE_RECURSIF)) == 0) {
$result->type_requete = TYPE_RECURSIF; $result->type_requete = TYPE_RECURSIF;
$args = phraser_arguments_inclure($result->param); phraser_criteres($result->param, $result);
$args = $result->param;
array_unshift($args, array_unshift($args,
substr($type, strlen(TYPE_RECURSIF))); substr($type, strlen(TYPE_RECURSIF)));
$result->param = $args; $result->param = $args;
......
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