diff --git a/ecrire/inc_filtres.php3 b/ecrire/inc_filtres.php3
index 7117e9d3db6a0fa7768ba83fcb2f2223caaf83f3..93554d44a1560063fe31e02c2df6d058fa514978 100644
--- a/ecrire/inc_filtres.php3
+++ b/ecrire/inc_filtres.php3
@@ -846,7 +846,7 @@ function multi_trad ($lang, $trads) {
 function extraire_trad ($langue_demandee, $bloc) {
 	$lang = '';
 
-	while (preg_match("/^(.*?)\[([a-z_]+)\]/si", $bloc, $regs)) {
+	while (preg_match("/^(.*?)[\{\[]([a-z_]+)[\}\]]/si", $bloc, $regs)) {
 		$texte = trim($regs[1]);
 		if ($texte OR $lang)
 			$trads[$lang] = $texte;
diff --git a/formulaires/inc-formulaire_recherche.php3 b/formulaires/inc-formulaire_recherche.php3
index 2a30be802652225de02fff136aa8e262dd3dde1f..bc38275b94c3624aff2c536d3398912985b14886 100644
--- a/formulaires/inc-formulaire_recherche.php3
+++ b/formulaires/inc-formulaire_recherche.php3
@@ -13,13 +13,15 @@ function balise_FORMULAIRE_RECHERCHE_stat($args, $filtres) {
 
 	// Seul un lien [(#FORMULAIRE_RECHERCHE|xxx.php3)] nous interesse
 	else
-		return array($filtres[0]);
+	  return array($filtres[0], $args[0]);
 }
  
-function balise_FORMULAIRE_RECHERCHE_dyn($lien) {
+function balise_FORMULAIRE_RECHERCHE_dyn($lien, $rech) {
 	include_ecrire('inc_filtres.php3');
 	if (!$recherche_securisee = entites_html(_request('recherche'))) {
+	  if (!$recherche_securisee = entites_html($rech)) {
 		$recherche_securisee = _T('info_rechercher');
+	  }
 	}
 	if (!$lien)
 		$lien = 'recherche.php3';	# par defaut
diff --git a/inc-balises.php3 b/inc-balises.php3
index 2ee04b31940388f2083f66c62be2f61a3321cefd..17f9b41d223da0145e7efeab094f0981c4b7ed81 100644
--- a/inc-balises.php3
+++ b/inc-balises.php3
@@ -359,19 +359,14 @@ function balise_EXPOSER_dist($p) {
 	}
 	$on = 'on';
 	$off= '';
-	if ($p->fonctions) {
+	if ($a = ($p->fonctions)) {
 		// Gerer la notation [(#EXPOSER|on,off)]
-		reset($p->fonctions);
-		list(, $onoff) = each($p->fonctions);
-		ereg("([^,]*)(,(.*))?", $onoff, $regs);
+		$onoff = array_shift($a);
+		ereg("([^,]*)(,(.*))?", $onoff[0], $regs);
 		$on = addslashes($regs[1]);
 		$off = addslashes($regs[3]);
-		
 		// autres filtres
-		$filtres=Array();
-		while (list(, $nom) = each($p->fonctions))
-		  $filtres[] = $nom;
-		$p->fonctions = $filtres;
+		$p->fonctions = $a;
 	}
 
 
@@ -389,10 +384,10 @@ function balise_EXPOSER_dist($p) {
 function balise_EMBED_DOCUMENT_dist($p) {
 	balise_distante_interdite($p);
 	$_id_document = champ_sql('id_document',$p);
-	$p->code = "calcule_embed_document(intval($_id_document), '" .
-	texte_script($p->fonctions ? join($p->fonctions, "|") : "") .
-	  "', \$doublons, '" . $p->descr['documents'] . "')";
-	unset ($p->fonctions);
+	$p->code = "calcule_embed_document(intval($_id_document), " .
+	  argumenter_balise($p->fonctions, "|") .
+	  ", \$doublons, '" . $p->descr['documents'] . "')";
+	$p->fonctions = array();
 	$p->statut = 'html';
 	return $p;
 }
@@ -539,10 +534,11 @@ function calculer_balise_logo ($p) {
 			$_id_objet = champ_sql("id_".strtolower($type_objet), $p);
 	}
 	// analyser les filtres
-	$flag_fichier = false;
+	$flag_fichier = 0;
 	$filtres = '';
 	if (is_array($p->fonctions)) {
-		foreach($p->fonctions as $nom) {
+		foreach($p->fonctions as $couple) {
+		  $nom = $couple[0];
 			if (ereg('^(left|right|center|top|bottom)$', $nom))
 				$align = $nom;
 			else if ($nom == 'lien') {
@@ -550,7 +546,7 @@ function calculer_balise_logo ($p) {
 				$flag_stop = true;
 			}
 			else if ($nom == 'fichier') {
-				$flag_fichier = 'true';
+				$flag_fichier = 1;
 				$flag_stop = true;
 			}
 			// double || signifie "on passe aux filtres"
@@ -563,7 +559,7 @@ function calculer_balise_logo ($p) {
 			// apres un URL ou || ou |fichier ce sont
 			// des filtres (sauf left...lien...fichier)
 			else
-				$filtres[] = $nom;
+				$filtres[] = $couple;
 		}
 		// recuperer les autres filtres s'il y en a
 		$p->fonctions = $filtres;
@@ -634,15 +630,15 @@ function balise_EXTRA_dist ($p) {
 		include_ecrire("inc_extra.php3");
 		list ($key, $champ_extra) = each($p->fonctions);	// le premier filtre
 		$type_extra = $p->type_requete;
-			// ci-dessus est sans doute un peu buggue : si on invoque #EXTRA
-			// depuis un sous-objet sans champ extra d'un objet a champ extra,
-			// on aura le type_extra du sous-objet (!)
-		if (extra_champ_valide($type_extra, $champ_extra)) {
+	// ci-dessus est sans doute un peu buggue : si on invoque #EXTRA
+	// depuis un sous-objet sans champ extra d'un objet a champ extra,
+	// on aura le type_extra du sous-objet (!)
+		if (extra_champ_valide($type_extra, $champ_extra[0])) {
 			unset($p->fonctions[$key]);
 			$p->code = "extra($p->code, '".addslashes($champ_extra)."')";
 
 			// Appliquer les filtres definis par le webmestre
-			$filtres = extra_filtres($type_extra, $champ_extra);
+			$filtres = extra_filtres($type_extra, $champ_extra[0]);
 			if ($filtres) foreach ($filtres as $f)
 				$p->code = "$f($p->code)";
 		}
@@ -696,7 +692,7 @@ function balise_PARAMETRES_FORUM_dist($p) {
 	# porter un nom et faire partie de l'API.
 	if ($retour = param_balise($p))
 		$code_retour = calculer_liste(
-			parser_champs_etendus($retour, array()),
+			phraser_champs_etendus($retour, array()),
 			$p->descr,
 			$p->boucles,
 			$p->id_boucle);
diff --git a/inc-calcul-outils.php3 b/inc-calcul-outils.php3
index 5f04574d82f342ce33a9992f2f58f9396de6d9f1..55360ce3dba23a75ebaa3aa18f718d64dba2480c 100644
--- a/inc-calcul-outils.php3
+++ b/inc-calcul-outils.php3
@@ -140,7 +140,7 @@ function calcul_introduction ($type, $texte, $chapo='', $descriptif='') {
 
 // elles sont traitees comme des inclusions
 function synthetiser_balise_dynamique($nom, $args, $file, $lang) {
-	return
+ return 
 		('<'.'?php 
 include_ecrire(\'inc_lang.php3\');
 lang_select("'.$lang.'");
@@ -170,7 +170,6 @@ function executer_balise_dynamique($nom, $args, $filtres, $lang) {
 		$r = $f($args, $filtres);
 	else
 		$r = $args;
-	
 	if (!is_array($r))
 		return $r;
 	else
@@ -323,6 +322,18 @@ function calcule_embed_document($id_document, $filtres, &$doublons, $doubdoc) {
 	return embed_document($id_document, $filtres, false);
 }
 
+// les balises dynamiques et EMBED ont des filtres sans arguments 
+// car en fait ce sont des arguments pas des filtres.
+// Si le besoin s'en fait sentir, il faudra récuperer la 2e moitie du tableau 
+
+function argumenter_balise($fonctions, $sep) {
+  $res = array();
+  if ($fonctions)
+    foreach ($fonctions as $f) $res[] =
+      str_replace('\'', '\\\'', str_replace('\\', '\\\\',$f[0]));
+  return ("'" . join($sep, $res) . "'");
+}
+
 // fonction appelee par la balise #NOTES
 function calculer_notes() {
 	$r = $GLOBALS["les_notes"];
diff --git a/inc-calcul.php3 b/inc-calcul.php3
index 57a9363b586265ae4cf6f2d1883a4eb7517d18df..c1d26000ec3aaed79bf8d52be4ccea5e5de0098f 100644
--- a/inc-calcul.php3
+++ b/inc-calcul.php3
@@ -97,7 +97,6 @@ function charger_squelette ($squelette) {
 	if (function_exists($nom)) return $nom;
 
 	$skel_code = calculer_squelette($skel, $nom, $ext, $sourcefile);
-
 	// Tester si le compilateur renvoie une erreur
 	if (is_array($skel_code))
 		erreur_squelette($skel_code[0], $skel_code[1]);
diff --git a/inc-compilo-index.php3 b/inc-compilo-index.php3
index 8792f40b79d0cb91b5fface01e07893cef8270a3..b18362708136e4c00076b83140835b0306304f53 100644
--- a/inc-compilo-index.php3
+++ b/inc-compilo-index.php3
@@ -190,15 +190,17 @@ function calculer_balise($nom, $p) {
 
 function calculer_balise_dynamique($p, $nom, $l) {
 	balise_distante_interdite($p);
-	$param = param_balise($p);
+	$param = param_balise($p); # attention: ca affecte $p
+	$param = filtres_arglist($param, $p, ','); 
+	$collecte = join(',',collecter_balise_dynamique($l, $p));
 	$p->code = "executer_balise_dynamique('" . $nom . "',\n\tarray("
-	  . join(',',collecter_balise_dynamique($l, $p))
-	  . filtres_arglist($param, $p, ',')
+	  . $collecte
+	  . ($collecte ? $param : substr($param,1)) # virer la virgule
 	  . "),\n\tarray("
-	  . (!$p->fonctions ? '' : ("'" . join("','", $p->fonctions) . "'"))
+	  . argumenter_balise($p->fonctions, "', '")
 	  . "), \$GLOBALS['spip_lang'])";
 	$p->statut = 'php';
-	$p->fonctions = '';
+	$p->fonctions = array();
 
 	// Cas particulier de #FORMULAIRE_FORUM : inserer l'invalideur
 	if ($nom == 'FORMULAIRE_FORUM')
@@ -208,16 +210,11 @@ function calculer_balise_dynamique($p, $nom, $l) {
 }
 
 function param_balise(&$p) {
-	$a = $p->fonctions;
-	if ($a) list(,$nom) = each($a) ; else $nom = '';
-	if (!ereg('^ *\{([^{}]*(\{[^{}]*\})?[^{}]*)\} *',$nom, $m))
-	  return '';
-	else {
-		$filtres= array();
-		while (list(, $f) = each($a)) if ($f) $filtres[] = $f;
-		$p->fonctions = $filtres;
-		return $m[1];
-	}
+  if (!($a=$p->fonctions)) return "";
+  $c = array_shift($a);
+  if  ($c[0]) return "";
+  $p->fonctions = $a;
+  return $c[1];
 }
 
 // construire un tableau des valeurs interessant un formulaire
@@ -233,7 +230,7 @@ function applique_filtres($p) {
 
 	$statut = $p->statut;
 	$fonctions = $p->fonctions;
-	$p->fonctions = ''; # pour réutiliser la structure si récursion
+	$p->fonctions = array(); # pour reutilisation si recursion
 
 	// pretraitements standards
 	switch ($statut) {
@@ -252,29 +249,25 @@ function applique_filtres($p) {
 	$code = ($p->etoile ? $p->code : champs_traitements($p));
 	// Appliquer les filtres perso
 	if ($fonctions) {
-		foreach($fonctions as $fonc) {
-			if ($fonc) {
-				$arglist = '';
-				if (ereg('([^{}]+)\{([^{}]*(\{[^{}]*\})?[^{}]*)\}$', $fonc, $regs)) {
-					$fonc = $regs[1];
-
-				        $arglist = filtres_arglist($regs[2],$p, ($fonc == '?' ? ':' : ','));
-				}
-				if (function_exists($fonc))
+		foreach($fonctions as $couple) {
+		  if ($couple) {
+		  $fonc = $couple[0];
+		  $arglist = filtres_arglist($couple[1],$p, ($fonc == '?' ? ':' : ','));
+
+		  if (function_exists($fonc))
 				  $code = "$fonc($code$arglist)";
-				else if (strpos("x < > <= >= == === != !== <> ? ", " $fonc "))
+		  else if (strpos("x < > <= >= == === != !== <> ? ", " $fonc "))
 				  $code = "($code $fonc "
 				    . substr($arglist,1)
 				    . ')';
-				else 
+		  else 
 				  $code = "erreur_squelette('".
 					  texte_script(
 						_T('zbug_erreur_filtre', array('filtre' => $fonc))
 					)."','" . $p->id_boucle . "')";
-			}
+		  }
 		}
 	}
-
 	// post-traitement securite
 	if ($statut == 'html')
 		$code = "interdire_scripts($code)";
@@ -287,7 +280,6 @@ function applique_filtres($p) {
 
 function filtres_arglist($args, $p, $sep) {
 	$arglist ='';
-
 	while (strlen($args = trim($args))) {
 		if ($args[0] == '"')
 			ereg ('^[[:space:]]*(")([^"]*)"[[:space:]]*,?(.*)$', $args, $regs);
@@ -300,7 +292,6 @@ function filtres_arglist($args, $p, $sep) {
 		$quote = trim($regs[1]);	// valeur = ", ', ou vide
 		$arg = $regs[2];			// le premier argument
 		$args = $regs[3];			// ceux qui restent
-
 		if ($quote)
 			$arg = "'" . texte_script($arg) . "'";
 		else {
@@ -312,11 +303,9 @@ function filtres_arglist($args, $p, $sep) {
 			else if (ereg("^" . NOM_DE_CHAMP ."(.*)$", $arg, $r2)) {
 				$p->nom_boucle = $r2[2];
 				$p->nom_champ = $r2[3];
-				$p->fonctions = array($r2[5]);
+				$p->fonctions = phraser_filtres($r2[5]);
 				$arg = calculer_champ($p);
-			} else if (is_numeric($arg))
-				$arg = $arg;
-			else
+			} else if (!is_numeric($arg))
 				$arg = "'" . texte_script($arg) . "'";
 		}
 
diff --git a/inc-compilo.php3 b/inc-compilo.php3
index 1ef24eebfc60eb6c679cb7459c9ee60524173078..d7f339908f9509c099ab10ed726a607cfcf86e04 100644
--- a/inc-compilo.php3
+++ b/inc-compilo.php3
@@ -123,7 +123,7 @@ function calculer_texte($texte, $id_boucle, &$boucles) {
 			$module = 'public/spip/ecrire';
 		$c = new Champ;
 		$c->code = "_T('$module:$chaine')";
-		$c->fonctions = explode('|', substr($match[4],1));
+		$c->fonctions = phraser_filtres(substr($match[4],1));
 		$c->id_boucle = $id_boucle;
 		$c->boucles = &$boucles;
 		$c->statut = 'php'; // ne pas manger les espaces avec trim()
@@ -536,7 +536,7 @@ function calculer_squelette($squelette, $nom, $gram, $sourcefile) {
 
 	include_local("inc-$gram-squel.php3");
 
-	$racine = parser($squelette, '',$boucles, $nom);
+	$racine = phraser($squelette, '',$boucles, $nom);
 
 	// tableau des informations sur le squelette
 	$descr = array('nom' => $nom, 'documents' => false, 'sourcefile' => $sourcefile);
diff --git a/inc-criteres.php3 b/inc-criteres.php3
index 99868909e3381ebfe247754df0616808887de315..492bd6a9d37961033b75a0d693b4d09fcde350f9 100644
--- a/inc-criteres.php3
+++ b/inc-criteres.php3
@@ -617,7 +617,7 @@ function calculer_param_dynamique($val, &$boucles, $idb) {
 		$champ->nom_boucle = $regs[2];
 		$champ->nom_champ = $regs[3];
 		$champ->etoile = $regs[4];
-		$champ->fonctions = $regs[5] ? array($regs[5]) : '';
+		$champ->fonctions = $regs[5] ? array(array('',$regs[5])) : '';
 		$champ->id_boucle = $idb;
 		$champ->boucles = &$boucles;
 		$champ = calculer_champ($champ);
diff --git a/inc-html-squel.php3 b/inc-html-squel.php3
index 830f359c1f2d2866a72bdc7ef4e6f3d7d9dec05a..414188dd7d5034b94ad2aefe5dc1d73601f4d8d2 100644
--- a/inc-html-squel.php3
+++ b/inc-html-squel.php3
@@ -15,14 +15,14 @@
 if (defined("_INC_HTML_SQUEL")) return;
 define("_INC_HTML_SQUEL", "1");
 
-# Ce fichier doit IMPERATIVEMENT contenir la fonction "parser"
+# Ce fichier doit IMPERATIVEMENT contenir la fonction "phraser"
 # qui transforme un squelette en un tableau d'objets de classe Boucle
 # il est charge par un include calcule dans inc-calcul-squel
 # pour permettre differentes syntaxes en entree
 
 define('NOM_DE_BOUCLE', "[0-9]+|[-_][-_.a-zA-Z0-9]*");
 define('NOM_DE_CHAMP', "#((" . NOM_DE_BOUCLE . "):)?([A-Z_]+)(\*?)");
-define('CHAMP_ETENDU', '\[([^]\[]*)\(' . NOM_DE_CHAMP . '([^)]*)\)([^]\[]*)\]');
+define('CHAMP_ETENDU', '\[([^]\[]*)\(' . NOM_DE_CHAMP . '([^[)]*)\)([^]\[]*)\]');
 define('PARAM_DE_BOUCLE','[[:space:]]*\{[[:space:]]*([^{}]*(\{[^\}]*\}[^\}]*)*)[[:space:]]*\}');
 define('TYPE_DE_BOUCLE', "[^)]*");
 define('BALISE_DE_BOUCLE',
@@ -42,7 +42,7 @@ define('BALISE_INCLURE',"<INCLU[DR]E[[:space:]]*\(" .
 define('DEBUT_DE_BOUCLE','/<B('.NOM_DE_BOUCLE.')>.*?<BOUCLE\1[^-_.a-zA-Z0-9]|<BOUCLE('.NOM_DE_BOUCLE.')/ms');	# preg
 
 
-function parser_inclure($texte, $result) {
+function phraser_inclure($texte, $result) {
 	while (($p=strpos($texte, '<INCLU')) !== false) {
 		$fin = substr($texte, $p);
 
@@ -51,7 +51,7 @@ function parser_inclure($texte, $result) {
 		$debut = substr($texte, 0, $p);
 		$texte = substr($fin, strlen($s));
 
-		if ($debut) $result = parser_champs($debut, $result);
+		if ($debut) $result = phraser_champs($debut, $result);
 
 		$champ = new Inclure;
 		$champ->fichier = $match[1];
@@ -70,10 +70,10 @@ function parser_inclure($texte, $result) {
 		$result[] = $champ;
 	}
 
-	return (!$texte ? $result : parser_champs($texte, $result));
+	return (!$texte ? $result : phraser_champs($texte, $result));
 }
 
-function parser_champs($texte,$result) {
+function phraser_champs($texte,$result) {
 	while (ereg(NOM_DE_CHAMP . '(.*)$', $texte, $regs)) {
 	  $p = strpos($texte, $regs[0]);
 
@@ -112,42 +112,54 @@ function parser_champs($texte,$result) {
 // %###N@ ou N indexe un tableau comportant le resultat de leur phrase
 // on recommence tant qu'il y a des [...] en substituant a l'appel suivant
 
-function parser_champs_etendus($texte, $result) {
+function phraser_champs_etendus($texte, $result) {
 	if (!$texte) return $result;
 	$sep = '##';
 	while (strpos($texte,$sep)!== false)
 		$sep .= '#';
-	return array_merge($result, parser_champs_interieurs($texte, $sep, array()));
+	return array_merge($result, phraser_champs_interieurs($texte, $sep, array()));
 }
 
 
-function parser_champs_exterieurs($debut, $sep, $nested) {
+function phraser_filtres($fonctions) {
+  $r = array();
+  if ($fonctions) {
+    $fonctions = explode('|', ereg_replace("^\|", "", $fonctions));
+    foreach($fonctions as $f) {
+      ereg("^([^{]*)?(.*)$",$f,$m);
+      $arg = $m[2];
+      $fonc = $m[1];
+      $x = ereg("^\{(.*)\} *$",$arg,$m);
+      $r[]= array($fonc, ($x ? $m[1] : $arg));
+    }
+  }
+  return $r;
+}
+
+function phraser_champs_exterieurs($debut, $sep, $nested) {
 	$res = array();
 	while (($p=strpos($debut, "%$sep"))!==false) {
-	    if ($p) $res = parser_inclure(substr($debut,0,$p), $res);
+	    if ($p) $res = phraser_inclure(substr($debut,0,$p), $res);
 	    ereg("^%$sep([0-9]+)@(.*)$", substr($debut,$p),$m);
 	    $res[]= $nested[$m[1]];
 	    $debut = $m[2];
 	}
-	return (!$debut ?  $res : parser_inclure($debut, $res));
+	return (!$debut ?  $res : phraser_inclure($debut, $res));
 
 }
 
-function parser_champs_interieurs($texte, $sep, $result) {
+function phraser_champs_interieurs($texte, $sep, $result) {
 	$i = 1;
 	while (true) {	  $j=$i;
 	  while (ereg(CHAMP_ETENDU . '(.*)$', $texte, $regs)) {
+
 		$champ = new Champ;
 		$champ->nom_boucle = $regs[3];
 		$champ->nom_champ = $regs[4];
 		$champ->etoile = $regs[5];
-		$champ->cond_avant = parser_champs_exterieurs($regs[1],$sep,$result);
-		$champ->cond_apres = parser_champs_exterieurs($regs[7],$sep,$result);
-		$fonctions = $regs[6];
-		if ($fonctions) {
-			$fonctions = explode('|', ereg_replace("^\|", "", $fonctions));
-			foreach($fonctions as $f) $champ->fonctions[]= $f;
-		}
+		$champ->cond_avant = phraser_champs_exterieurs($regs[1],$sep,$result);
+		$champ->cond_apres = phraser_champs_exterieurs($regs[7],$sep,$result);
+		$champ->fonctions = phraser_filtres($regs[6]);
 
 		$p = strpos($texte, $regs[0]);
 		if ($p) {$result[$i] = substr($texte,0,$p);$i++; }
@@ -163,11 +175,11 @@ function parser_champs_interieurs($texte, $sep, $result) {
 	      if (is_object($z)) $x .= "%$sep$j@" ; else $x.=$z ;
 	      $j++;}
 	  if (ereg(CHAMP_ETENDU, $x)) $texte = $x;
-	  else return parser_champs_exterieurs($x, $sep, $result);}
+	  else return phraser_champs_exterieurs($x, $sep, $result);}
 }
 
 
-function parser_param($params, &$result) {
+function phraser_param($params, &$result) {
 	$params2 = array();
 	$type = $result->type_requete;
 	while (ereg('^' . PARAM_DE_BOUCLE . '[[:space:]]*(.*)$', trim($params), $m)) {
@@ -208,7 +220,7 @@ function parser_param($params, &$result) {
 	$result->param = $params2;
 }
 
-function parser($texte, $id_parent, &$boucles, $nom) {
+function phraser($texte, $id_parent, &$boucles, $nom) {
 
 	$all_res = array();
 
@@ -256,7 +268,7 @@ function parser($texte, $id_parent, &$boucles, $nom) {
 			$result->param = substr($match[2], 6);
 		} else {
 			$result->type_requete = $type;
-			parser_param($match[3], $result);
+			phraser_param($match[3], $result);
 		}
 
 		//
@@ -308,12 +320,12 @@ function parser($texte, $id_parent, &$boucles, $nom) {
 			$texte = substr($texte, $p + strlen($s));
 		}
 
-		$result->cond_avant = parser($result->cond_avant, $id_parent,$boucles, $nom);
-		$result->cond_apres = parser($result->cond_fin, $id_parent,$boucles, $nom);
-		$result->cond_altern = parser($result->cond_altern,$id_parent,$boucles, $nom);
-		$result->milieu = parser($milieu, $id_boucle,$boucles, $nom);
+		$result->cond_avant = phraser($result->cond_avant, $id_parent,$boucles, $nom);
+		$result->cond_apres = phraser($result->cond_fin, $id_parent,$boucles, $nom);
+		$result->cond_altern = phraser($result->cond_altern,$id_parent,$boucles, $nom);
+		$result->milieu = phraser($milieu, $id_boucle,$boucles, $nom);
 
-		$all_res = parser_champs_etendus($debut, $all_res);
+		$all_res = phraser_champs_etendus($debut, $all_res);
 		$all_res[] = $result;
 		if ($boucles[$id_boucle]) {
 			erreur_squelette(_T('zbug_erreur_boucle_syntaxe'),
@@ -323,7 +335,7 @@ function parser($texte, $id_parent, &$boucles, $nom) {
 			$boucles[$id_boucle] = $result;
 	}
 
-	return parser_champs_etendus($texte, $all_res);
+	return phraser_champs_etendus($texte, $all_res);
 }
 
 ?>