From f38f4f609b2de8897e2f57c6a41e8383108a6c78 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Sun, 5 Sep 2004 11:31:42 +0000
Subject: [PATCH] =?UTF-8?q?traitement=20des=20doublons=20sans=20globale=20?=
 =?UTF-8?q?pour=20assurer=20la=20r=C3=A9entrance=20du=20compilateur=20de?=
 =?UTF-8?q?=20squelettes?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/inc_documents.php3 |   4 +-
 ecrire/inc_texte.php3     | 181 ++++++++++++++++++++++++--------------
 inc-balises.php3          |  22 +++--
 inc-calcul-outils.php3    |   3 +-
 inc-compilo-index.php3    |  41 ++++-----
 inc-compilo.php3          |  14 +--
 inc-html-squel.php3       |   1 -
 7 files changed, 154 insertions(+), 112 deletions(-)

diff --git a/ecrire/inc_documents.php3 b/ecrire/inc_documents.php3
index 47fd132eba..0ed0a5c5a6 100644
--- a/ecrire/inc_documents.php3
+++ b/ecrire/inc_documents.php3
@@ -62,7 +62,7 @@ function vignette_par_defaut($type_extension) {
 //
 
 function embed_document($id_document, $les_parametres="", $afficher_titre=true) {
-	global $id_doublons; # ne sert plus aux squelettes
+	global $id_doublons;
 
 	$id_doublons['documents'] .= ",$id_document";
 
@@ -195,7 +195,7 @@ function embed_document($id_document, $les_parametres="", $afficher_titre=true)
 //
 
 function integre_image($id_document, $align, $type_aff) {
-	global $id_doublons; # ne sert plus aux squelettes
+	global $id_doublons;
 	global $flag_ecrire;
 
 	$id_doublons['documents'] .= ",$id_document";
diff --git a/ecrire/inc_texte.php3 b/ecrire/inc_texte.php3
index 579d9d46d3..db9855bdfc 100644
--- a/ecrire/inc_texte.php3
+++ b/ecrire/inc_texte.php3
@@ -121,28 +121,33 @@ function spip_apres_typo ($letexte) {
 }
 
 
-
 // Mise de cote des echappements
-function echappe_html($letexte, $source='SOURCEPROPRE', $no_transform=false) {
-	global $flag_pcre;
 
-	if ($flag_pcre) {	// beaucoup plus rapide si on a pcre
-		$regexp_echap_html = "<html>((.*?))<\/html>";
-		$regexp_echap_code = "<code>((.*?))<\/code>";
-		$regexp_echap_cadre = "[\n\r]*<(cadre|frame)>((.*?))<\/(cadre|frame)>[\n\r]*";
-		$regexp_echap_poesie = "[\n\r]*<(poesie|poetry)>((.*?))<\/(poesie|poetry)>[\n\r]*";
-		$regexp_echap = "/($regexp_echap_html)|($regexp_echap_code)|($regexp_echap_cadre)|($regexp_echap_poesie)/si";
+// Les regexp de echappe_html, dépendant de la fonction de comparaison
+
+if ($GLOBALS['flag_pcre']) {
+	$GLOBALS['fct_match'] = 'preg_match';
+	$regexp_echap_html = "<html>((.*?))<\/html>";
+	$regexp_echap_code = "<code>((.*?))<\/code>";
+	$regexp_echap_cadre = "[\n\r]*<(cadre|frame)>((.*?))<\/(cadre|frame)>[\n\r]*";
+	$regexp_echap_poesie = "[\n\r]*<(poesie|poetry)>((.*?))<\/(poesie|poetry)>[\n\r]*";
+	$GLOBALS['regexp_echappe'] = "/($regexp_echap_html)|($regexp_echap_code)|($regexp_echap_cadre)|($regexp_echap_poesie)/si";
 	} else {
 		//echo creer_echappe_sans_pcre("cadre");
-		$regexp_echap_html = "<html>(([^<]|<[^/]|</[^h]|</h[^t]|</ht[^m]|</htm[^l]|<\/html[^>])*)<\/html>";
-		$regexp_echap_code = "<code>(([^<]|<[^/]|</[^c]|</c[^o]|</co[^d]|</cod[^e]|<\/code[^>])*)<\/code>";
-		$regexp_echap_cadre = "(<[cf][ar][da][rm]e>(([^<]|<[^/]|</[^cf]|</[cf][^ar]|</[cf][ar][^da]|</[cf][ar][da][^rm]|</[cf][ar][da][rm][^e]|<\/[cf][ar][da][rm]e[^>])*)<\/[cf][ar][da][rm]e>)()"; // parentheses finales pour obtenir meme nombre de regs que pcre
-		$regexp_echap_poesie = "(<poe[st][ir][ey]>(([^<]|<[^/]|</[^p]|</p[^o]|</po[^e]|</poe[^st]|</poe[st][^ir]|</poe[st][ir][^[ey]]|<\/poe[st][ir][ey][^>])*)<\/poe[st][ir][ey]>)()";
-		$regexp_echap = "($regexp_echap_html)|($regexp_echap_code)|($regexp_echap_cadre)|($regexp_echap_poesie)";
-	}
+	$GLOBALS['fct_match'] = 'eregi';
+	$regexp_echap_html = "<html>(([^<]|<[^/]|</[^h]|</h[^t]|</ht[^m]|</htm[^l]|<\/html[^>])*)<\/html>";
+	$regexp_echap_code = "<code>(([^<]|<[^/]|</[^c]|</c[^o]|</co[^d]|</cod[^e]|<\/code[^>])*)<\/code>";
+	$regexp_echap_cadre = "(<[cf][ar][da][rm]e>(([^<]|<[^/]|</[^cf]|</[cf][^ar]|</[cf][ar][^da]|</[cf][ar][da][^rm]|</[cf][ar][da][rm][^e]|<\/[cf][ar][da][rm]e[^>])*)<\/[cf][ar][da][rm]e>)()"; // parentheses finales pour obtenir meme nombre de regs que pcre
+	$regexp_echap_poesie = "(<poe[st][ir][ey]>(([^<]|<[^/]|</[^p]|</p[^o]|</po[^e]|</poe[^st]|</poe[st][^ir]|</poe[st][ir][^[ey]]|<\/poe[st][ir][ey][^>])*)<\/poe[st][ir][ey]>)()";
+	$GLOBALS['regexp_echappe'] = "($regexp_echap_html)|($regexp_echap_code)|($regexp_echap_cadre)|($regexp_echap_poesie)";
+ }
 
-	while (($flag_pcre && preg_match($regexp_echap, $letexte, $regs))
-		|| (!$flag_pcre && eregi($regexp_echap, $letexte, $regs))) {
+function echappe_html($letexte, $source='SOURCEPROPRE', $no_transform=false) {
+  global $flag_pcre, $fct_match, $regexp_echappe;
+
+  $debut = '';
+  $suite = $letexte;
+  while ($fct_match($regexp_echappe, $suite, $regs)) {
 		$num_echap++;
 
 		if ($no_transform) {	// echappements bruts
@@ -188,11 +193,12 @@ function echappe_html($letexte, $source='SOURCEPROPRE', $no_transform=false) {
 			$les_echap[$num_echap] = propre($lecode);
 		} 
 
-		$pos = strpos($letexte, $regs[0]);
-		$letexte = substr($letexte,0,$pos)."@@SPIP_$source$num_echap@@"
-			.substr($letexte,$pos+strlen($regs[0]));
+		$pos = strpos($suite, $regs[0]);
+		$debut .= substr($suite,0,$pos)."@@SPIP_$source$num_echap@@";
+		$suite = substr($suite, $pos+strlen($regs[0]));
+		spip_log($suite);
 	}
-
+	$letexte = $debut . $suite;
 	// Gestion du TeX
 	if (!(strpos($letexte, "<math>") === false)) {
 		include_ecrire("inc_math.php3");
@@ -200,22 +206,15 @@ function echappe_html($letexte, $source='SOURCEPROPRE', $no_transform=false) {
 	}
 
 	//
-	// Insertion d'images et de documents utilisateur
-	//
+	// Reperages d'images et de documents utilisateur 
+	// (insertion dans echappe_retour pour faciliter les doublons)
 	while (eregi("<(IMG|DOC|EMB)([0-9]+)(\|([^\>]*))?".">", $letexte, $match)) {
-		include_ecrire("inc_documents.php3");
 		$num_echap++;
 
 		$letout = quotemeta($match[0]);
 		$letout = ereg_replace("\|", "\|", $letout);
-		$id_document = $match[2];
-		$align = $match[4];
-		if (eregi("emb", $match[1]))
-			$rempl = embed_document($id_document, $align);
-		else
-			$rempl = integre_image($id_document, $align, $match[1]);
 		$letexte = ereg_replace($letout, "@@SPIP_$source$num_echap@@", $letexte);
-		$les_echap[$num_echap] = $rempl;
+		$les_echap[$num_echap] = $match;
 	}
 
 	//
@@ -241,19 +240,46 @@ function echappe_html($letexte, $source='SOURCEPROPRE', $no_transform=false) {
 				.substr($letexte,$pos+strlen($les_echap[$num_echap]));
 		}
 	}
-
 	return array($letexte, $les_echap);
 }
 
 // Traitement final des echappements
 function echappe_retour($letexte, $les_echap, $source='') {
-	while (ereg("@@SPIP_$source([0-9]+)@@", $letexte, $match)) {
-		$lenum = $match[1];
-		$cherche = $match[0];
-		$pos = strpos($letexte, $cherche);
-		$letexte = substr($letexte, 0, $pos). $les_echap[$lenum] . substr($letexte, $pos + strlen($cherche));
-	}
-	return $letexte;
+  $cherche = "@@SPIP_$source";
+  $n = strlen($cherche);
+  $debut = '';
+  while(($pos = strpos($letexte, $cherche)) !== false) {
+    ereg("^([0-9]+)@@(.*)$",substr($letexte,$pos+$n),$regs);
+    $rempl = $les_echap[$regs[1]];
+# si $rempl est un tableau, c'est le résultat (cf echappe_html) de eregi sur :
+# <(IMG|DOC|EMB)([0-9]+)(\|([^\>]*))?
+    if (is_array($rempl))
+	  {
+		    include_ecrire("inc_documents.php3");
+		    $type = strtoupper($rempl[1]);
+		    if ($type == 'EMB')
+		      $rempl = embed_document($rempl[2], $rempl[4]);
+		    else
+		      $rempl = integre_image($rempl[2], $rempl[4], $type);
+	  }
+    $debut .= substr($letexte,0,$pos) . $rempl;
+    $letexte = $regs[2];
+  }
+  return $debut . $letexte;
+}
+
+# il y a 3 couples de fonctions homonymes au prefixe _doublons pres
+# pour éviter à tous les appels de se trimbaler ce qui concerne les squelettes
+
+function echappe_retour_doublon($letexte, $les_echap, $source, &$doublons)
+{
+  if (!$les_echap)
+    return $letexte;
+  foreach($les_echap as $rempl) {
+    if (is_array($rempl)) # cf commentaires dans la fonction echappe_retour
+      $doublons['documents'] .= "," . $rempl[2];
+  }
+  return echappe_retour($letexte, $les_echap, $source);
 }
 
 function couper($texte, $taille=50) {
@@ -445,12 +471,9 @@ function typo_en($letexte) {
 
 // Typographie generale : francaise si la langue est 'cpf', 'fr' ou 'eo',
 // sinon anglaise (minimaliste)
-function typo($letexte) {
+function typo_generale($letexte) {
 	global $spip_lang, $lang_typo;
 
-	// echapper les codes <html>...</html> etc.
-	list($letexte, $les_echap) = echappe_html($letexte, "SOURCETYPO");
-
 	// Appeler la fonction de pre-traitement
 	$letexte = spip_avant_typo ($letexte);
 
@@ -465,21 +488,32 @@ function typo($letexte) {
 		$letexte = typo_en($letexte);
 
 	// Appeler la fonction de post-traitement
-	$letexte = spip_apres_typo ($letexte);
+	return spip_apres_typo ($letexte);
+}
 
+function typo($letexte) {
+	// echapper les codes <html>...</html> etc.
+	list($letexte, $les_echap) = echappe_html($letexte, "SOURCETYPO");
+	
+	$letexte = typo_generale($letexte);
 	// reintegrer les echappements
-	$letexte = echappe_retour($letexte, $les_echap, "SOURCETYPO");
-
-	return $letexte;
+	return echappe_retour($letexte, $les_echap, "SOURCETYPO");
 }
 
+function typo_doublon(&$doublons, $letexte)
+{
+	// echapper les codes <html>...</html> etc.
+	list($letexte, $les_echap) = echappe_html($letexte, "SOURCETYPO");
+	
+	$letexte = typo_generale($letexte);
+	// reintegrer les echappements
+	return echappe_retour_doublon($letexte, $les_echap, "SOURCETYPO", $doublons);
+}
 
 // cette fonction est tordue : on lui passe un tableau correspondant au match
 // de la regexp ci-dessous, et elle retourne le texte a inserer a la place
 // et le lien "brut" a usage eventuel de redirection...
 function extraire_lien ($regs) {
-	global $flag_ecrire;
-
 	$lien_texte = $regs[1];
 
 	$lien_url = trim($regs[3]);
@@ -678,10 +712,9 @@ function traiter_listes ($texte) {
 }
 
 // Nettoie un texte, traite les raccourcis spip, la typo, etc.
-function traiter_raccourcis($letexte, $les_echap = false, $traiter_les_notes = 'oui') {
+function traiter_raccourcis_generale($letexte) {
 	global $debut_intertitre, $fin_intertitre, $ligne_horizontale, $url_glossaire_externe;
 	global $compt_note;
-	global $les_notes;
 	global $marqueur_notes;
 	global $ouvre_ref;
 	global $ferme_ref;
@@ -690,10 +723,6 @@ function traiter_raccourcis($letexte, $les_echap = false, $traiter_les_notes = '
 	global $flag_pcre;
 	global $lang_dir;
 
-	// echapper les <a href>, <html>...< /html>, <code>...< /code>
-	if (!$les_echap)
-		list($letexte, $les_echap) = echappe_html($letexte, "SOURCEPROPRE");
-
 	// Appeler la fonction de pre_traitement
 	$letexte = spip_avant_propre ($letexte);
 
@@ -934,20 +963,38 @@ function traiter_raccourcis($letexte, $les_echap = false, $traiter_les_notes = '
 	// Appeler la fonction de post-traitement
 	$letexte = spip_apres_propre ($letexte);
 
-	// Reinserer les echappements
-	$letexte = echappe_retour($letexte, $les_echap, "SOURCEPROPRE");
+	return array($letexte,$mes_notes);
+}
 
-	if ($mes_notes) {
-		$mes_notes = traiter_raccourcis($mes_notes, $les_echap, 'non');
-		if (ereg('<p class="spip">',$mes_notes))
-			$mes_notes = ereg_replace('<p class="spip">', '<p class="spip_note">', $mes_notes);
-		else
-			$mes_notes = '<p class="spip_note">'.$mes_notes."</p>\n";
-		$mes_notes = echappe_retour($mes_notes, $les_echap, "SOURCEPROPRE");
-		$les_notes .= interdire_scripts($mes_notes);
-	}
+function traiter_les_notes($mes_notes, $les_echap)
+{
+  $mes_notes = traiter_raccourcis_generale($mes_notes);
+  if (ereg('<p class="spip">',$mes_notes))
+    $mes_notes = ereg_replace('<p class="spip">', '<p class="spip_note">', $mes_notes);
+  else
+    $mes_notes = '<p class="spip_note">'.$mes_notes."</p>\n";
+  $mes_notes = echappe_retour($mes_notes, $les_echap, "SOURCEPROPRE");
+  $GLOBALS['les_notes'] .= interdire_scripts($mes_notes);
+}
+
+function traiter_raccourcis($letexte)
+{
+  // echapper les <a href>, <html>...< /html>, <code>...< /code>
+  list($letexte, $les_echap) = echappe_html($letexte, "SOURCEPROPRE");
+  list($letexte, $mes_notes) = traiter_raccourcis_generale($letexte);
+  if ($mes_notes) traiter_les_notes($mes_notes, $les_echap);
+  // Reinserer les echappements
+  return trim(echappe_retour($letexte, $les_echap, "SOURCEPROPRE"));
+}
 
-	return trim($letexte);
+function traiter_raccourcis_doublon(&$doublons, $letexte)
+{
+  // echapper les <a href>, <html>...< /html>, <code>...< /code>
+  list($letexte, $les_echap) = echappe_html($letexte, "SOURCEPROPRE");
+  list($letexte, $mes_notes) = traiter_raccourcis_generale($letexte);
+  if ($mes_notes) traiter_les_notes($mes_notes, $les_echap);
+  // Reinserer les echappements
+  return trim(echappe_retour_doublon($letexte, $les_echap, "SOURCEPROPRE", $doublons));
 }
 
 
diff --git a/inc-balises.php3 b/inc-balises.php3
index 80f05ababf..1efedddfe9 100644
--- a/inc-balises.php3
+++ b/inc-balises.php3
@@ -4,9 +4,9 @@
 // Ce fichier regroupe la quasi totalite des definitions de #BALISES de spip
 // Pour chaque balise, il est possible de surcharger, dans mes_fonctions.php3,
 // la fonction balise_TOTO_dist par une fonction balise_TOTO() respectant la
-// meme API : recoit en entree plein de donnees, les modifie et les retourne.
-// Le format du bloc de donnees $p est un objet de la class ParamChamp,
-// definie dans inc-compilo-index.php3
+// meme API : 
+// elle recoit en entree un objet de classe CHAMP, le modifie et le retourne.
+// Cette classe est definie dans inc-compilo-index.php3
 //
 
 ## NB: les fonctions de forum sont definies dans inc-forum.php3
@@ -19,9 +19,9 @@ define("_INC_BALISES", "1");
 
 
 //
-// Pre-traitements standard de divers champs
+// Traitements standard de divers champs
 //
-function champs_traitements ($nom_champ) {
+function champs_traitements ($p) {
 	static $traitements = array (
 		'BIO' => 'traiter_raccourcis(%s)',
 		'CHAPO' => 'traiter_raccourcis(nettoyer_chapo(%s))',
@@ -52,8 +52,16 @@ function champs_traitements ($nom_champ) {
 		'URL_SITE' => 'htmlspecialchars(vider_url(%s))',
 		'URL_SYNDIC' => 'htmlspecialchars(vider_url(%s))'
 	);
-
-	return $traitements[$nom_champ];
+	$ps = $traitements[$p->$nom_champ];
+	if (!$ps) return $p->code;
+	if ($p->documents)
+	  {$ps = str_replace('traite_raccourcis(', 
+			     'traite_raccourcis_doublon($doublons,',
+			     str_replace('typo(', 
+					 'ttypo_doublon($doublons,',
+					 $ps));
+	  }
+	return str_replace('%s', $p->code, $ps);				
 }
 
 //
diff --git a/inc-calcul-outils.php3 b/inc-calcul-outils.php3
index 0161b8bda5..c4450778e6 100644
--- a/inc-calcul-outils.php3
+++ b/inc-calcul-outils.php3
@@ -230,8 +230,7 @@ function calcul_branche ($generation) {
 # fonction appelée par la balise #EMBED
 
 function calcule_embed_document($id_document, $filtres, &$doublons, $doubdoc){
-  // a finaliser
-  //  if ($doubdoc && $id_document) $doublons["documents"] .= ', ' . $id_document;
+  if ($doubdoc && $id_document) $doublons["documents"] .= ', ' . $id_document;
   return embed_document($id_document, $filtres, false);
 }
 
diff --git a/inc-compilo-index.php3 b/inc-compilo-index.php3
index ff57aaa9d9..191799cf64 100644
--- a/inc-compilo-index.php3
+++ b/inc-compilo-index.php3
@@ -61,14 +61,13 @@ class Champ {
 	var $fonctions;  // filtre explicites
 	var $etoile;
 	// champs pour la production de code
-	var $process; 	// processeurs standards, exemple 'propre(%s)'
 	var $id_boucle;
 	var $boucles;
 	var $type_requete;
 	var $code;	// code du calcul
 	var $statut;	// 'numerique, 'h'=texte (html) ou 'p'=script (php) ?
 			// -> definira les pre et post-traitements obligatoires
-	// champs pour des balises speciales
+	// champs pour la production de code dependant du contexte
 	var $id_mere;    // pour TOTAL_BOUCLE hors du corps
 	var $document;   // pour embed et <img dans les textes
 }
@@ -204,7 +203,6 @@ function calculer_champ($p) {
 
 // Genere l'application d'une liste de filtres
 function applique_filtres($p) {
-	$code = $p->code;
 	$statut = $p->statut;
 	$fonctions = $p->fonctions;
 	$p->fonctions = ''; # pour réutiliser la structure si récursion
@@ -223,9 +221,7 @@ function applique_filtres($p) {
 	}
 
 //  processeurs standards (cf inc-balises.php3)
-	$ps = champs_traitements($p->nom_champ);
-	if ($ps && (!$p->etoile))
-	  $code = str_replace('%s', $code, $ps);
+	$code = ($p->etoile ? $p->code : champs_traitements($p));
 	// Appliquer les filtres perso
 	if ($fonctions) {
 		foreach($fonctions as $fonc) {
@@ -233,26 +229,13 @@ function applique_filtres($p) {
 				$arglist = '';
 				if (ereg('([^\{\}]*)\{(.+)\}$', $fonc, $regs)) {
 					$fonc = $regs[1];
-					$args = $regs[2];
-					while (ereg('([^,]+),?(.*)$', $args, $regs)) {
-						$args = $regs[2];
-						$arg = trim($regs[1]);
-						if ($arg) {
-							if ($arg[0] =='#')
-							  { $p->nom_champ = substr($arg,1);
-							    $arg = calculer_champ($p);}
-							else if ($arg[0] =='$')
-								$arg = '$Pile[0][\'' . substr($arg,1) . "']";
-							$arglist .= ','.$arg;
-						}
-					}
+				        $arglist = filtres_arglist($regs[2],$p);
 				}
-				if (function_exists($fonc))
-					$code = "$fonc($code$arglist)";
-				else
+				if (!function_exists($fonc))
 					$code = "'".texte_script(
 						_T('erreur_filtre', array('filtre' => $fonc))
 					)."'";
+				else $code = "$fonc($code$arglist)";
 			}
 		}
 	}
@@ -264,6 +247,20 @@ function applique_filtres($p) {
 }
 
 
+function filtres_arglist($args, $p) {
+	while (ereg('([^,]+),?(.*)$', $args, $regs)) {
+		$arg = trim($regs[1]);
+		if ($arg) {
+			if ($arg[0] =='#')
+				{ $p->nom_champ = substr($arg,1);
+				  $arg = calculer_champ($p);}
+			else if ($arg[0] =='$')
+				$arg = '$Pile[0][\'' . substr($arg,1) . "']";
+			$arglist .= ','.$arg;
+		}
+	}
+}
+
 //
 // Reserve les champs necessaires a la comparaison avec le contexte donne par
 // la boucle parente ; attention en recursif il faut les reserver chez soi-meme
diff --git a/inc-compilo.php3 b/inc-compilo.php3
index c79883376f..b876b9ceb6 100644
--- a/inc-compilo.php3
+++ b/inc-compilo.php3
@@ -216,7 +216,7 @@ function calculer_boucle($id_boucle, &$boucles) {
 	
 	if ($lang_select AND !$constant)
 		$debut .= '
-			if ($x = $Pile[$SP]["lang"]) $spip_lang = $x; // lang_select';
+			if ($x = $Pile[$SP]["lang"]) $GLOBALS[\'spip_lang\'] = $x; // lang_select';
 
 	$corps = $debut . $invalide;
 
@@ -251,14 +251,6 @@ function calculer_boucle($id_boucle, &$boucles) {
 	if ($boucle->hierarchie)
 		$texte .= "\n	".$boucle->hierarchie;
 
-	// hack doublons documents : s'il y a quelque chose dans
-	// $GLOBALS['doublons_documents'], c'est que des documents ont
-	// ete vus par integre_image() ou autre fournisseur officiel de
-	// doublons : on les transfere alors vers la vraie variable
-	$texte .= '
-	global $spip_lang, $doublons_documents;
-	$doublons[\'documents\'].=$doublons_documents; $doublons_documents="";';
-
 	// Recherche : recuperer les hash a partir de la chaine de recherche
 	if ($boucle->hash) {
 		$texte .=  '
@@ -287,8 +279,8 @@ function calculer_boucle($id_boucle, &$boucles) {
 
 		// Memoriser la langue avant la boucle pour la restituer apres
 		if ($lang_select) {
-			$texte .= "\n	\$old_lang = \$spip_lang;";
-			$corps .= "\n	\$spip_lang = \$old_lang;";
+			$texte .= "\n	\$old_lang = \$GLOBLAS['spip_lang'];";
+			$corps .= "\n	\$GLOBAL['spip_lang'] = \$old_lang;";
 		}
 	}
 
diff --git a/inc-html-squel.php3 b/inc-html-squel.php3
index e61ae1a20f..394565fa11 100644
--- a/inc-html-squel.php3
+++ b/inc-html-squel.php3
@@ -103,7 +103,6 @@ function parser_champs_etendus($debut) {
 
 
 function parser_champs_exterieurs($debut, $sep, $nested) {
-  spip_log("$sep: $debut");
 	$res = array();
 	foreach (split("%$sep",$debut) as $v) {
 		if (!ereg("^([0-9]+)@(.*)$", $v, $m))
-- 
GitLab