- }
- break;
-
- // boucle
- case 'boucle':
- $nom = $p->id_boucle;
- $newdescr = $descr;
- $newdescr['id_mere'] = $nom;
- $newdescr['niv']++;
- $avant = calculer_liste($p->avant,
- $newdescr, $boucles, $id_boucle);
- $apres = calculer_liste($p->apres,
- $newdescr, $boucles, $id_boucle);
- $newdescr['niv']--;
- $altern = calculer_liste($p->altern,
- $newdescr, $boucles, $id_boucle);
- if (($avant === false) OR ($apres === false) OR ($altern === false)) {
- $err_e_c = true;
- $code = "''";
- } else {
- $code = 'BOUCLE' .
- str_replace("-","_", $nom) . $descr['nom'] .
- '($Cache, $Pile, $doublons, $Numrows, $SP)';
- $commentaire= "?$nom";
- if (!$boucles[$nom]->milieu
- AND $boucles[$nom]->type_requete <> 'boucle') {
- if ($altern != "''") $code .= "\n. $altern";
- if ($avant<>"''" OR $apres<>"''")
- spip_log("boucle $nom toujours vide, code superflu dans $id");
- $avant = $apres = $altern = "''";
- } else if ($altern != "''") $altern = "($altern)";
- }
- break;
+ break;
+
+ case 'polyglotte':
+ $code = "";
+ foreach ($p->traductions as $k => $v){
+ $code .= ",'" .
+ str_replace(array("\\", "'"), array("\\\\", "\\'"), $k) .
+ "' => '" .
+ str_replace(array("\\", "'"), array("\\\\", "\\'"), $v) .
+ "'";
+ }
+ $code = "choisir_traduction(array(" .
+ substr($code, 1) .
+ "))";
+ $commentaire = '&';
+ $avant = '';
+ $apres = '';
+ $altern = "''";
+ break;
+
+ // inclure
+ case 'include':
+ $p->descr = $descr;
+ $code = calculer_inclure($p, $boucles, $id_boucle);
+ if ($code===false){
+ $err_e_c = true;
+ $code = "''";
+ } else {
+ $commentaire = '<INCLURE ' . addslashes(str_replace("\n", ' ', $code)) . '>';
+ $avant = '';
+ $apres = '';
+ $altern = "''";
+ }
+ break;
+
+ // boucle
+ case 'boucle':
+ $nom = $p->id_boucle;
+ $newdescr = $descr;
+ $newdescr['id_mere'] = $nom;
+ $newdescr['niv']++;
+ $avant = calculer_liste($p->avant,
+ $newdescr, $boucles, $id_boucle);
+ $apres = calculer_liste($p->apres,
+ $newdescr, $boucles, $id_boucle);
+ $newdescr['niv']--;
+ $altern = calculer_liste($p->altern,
+ $newdescr, $boucles, $id_boucle);
+ if (($avant===false) OR ($apres===false) OR ($altern===false)){
+ $err_e_c = true;
+ $code = "''";
+ } else {
+ $code = 'BOUCLE' .
+ str_replace("-", "_", $nom) . $descr['nom'] .
+ '($Cache, $Pile, $doublons, $Numrows, $SP)';
+ $commentaire = "?$nom";
+ if (!$boucles[$nom]->milieu
+ AND $boucles[$nom]->type_requete<>'boucle'
+ ){
+ if ($altern!="''") $code .= "\n. $altern";
+ if ($avant<>"''" OR $apres<>"''")
+ spip_log("boucle $nom toujours vide, code superflu dans $id");
+ $avant = $apres = $altern = "''";
+ } else if ($altern!="''") $altern = "($altern)";
+ }
+ break;
+
+ case 'idiome':
+ $l = array();
+ $code = '';
+ foreach ($p->arg as $k => $v){
+ $_v = calculer_liste($v, $descr, $boucles, $id_boucle);
+ if ($k)
+ $l[] = _q($k) . ' => ' . $_v;
+ else $code = $_v;
+ }
+ /// Si le module n'est pas fourni,
+ /// l'expliciter sauf si calcule
+ if ($p->module) {
+ $m = $p->module .':'.$p->nom_champ;
+ } elseif ($p->nom_champ) {
+ $m = MODULES_IDIOMES .':'.$p->nom_champ;
+ } else $m = '';
+
+ $code = (!$code ? "'$m'" :
+ ($m ? "'$m' . $code" :
+ ("(strpos(\$x=$code, ':') ? \$x : ('" . MODULES_IDIOMES . ":' . \$x))")))
+ . (!$l ? '' : (", array(" . implode(",\n", $l) . ")"));
+ $code = "_T($code)";
+ if ($p->param){
+ $p->id_boucle = $id_boucle;
+ $p->boucles = &$boucles;
+ $code = compose_filtres($p, $code);
+ }
+ $commentaire = ":";
+ $avant = '';
+ $apres = '';
+ $altern = "''";
+ break;