diff --git a/ecrire/public/balises.php b/ecrire/public/balises.php index 84497a4ee2b9ed36e752979cdca97ddb39b73ec0..79176d484c8d14a9da2b1fd44c3dcbdbdd52c52c 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 417c7e6a00f2842349fae31cdb42506a99ca9821..ea27aba667784fbfc4bab2c92bc876ec5e74631d 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 bfc4375c23955c17c4332b15e4691854ca701416..af5a55edd9fa75cb0f138cf6e815d330d17e4f90 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;