From 4835d7a7a5bd56b0f782f1ba6802c5a365a516d0 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Fri, 7 Sep 2007 21:50:28 +0000
Subject: [PATCH] =?UTF-8?q?Eclater=20le=20fichier=20balises.php,=20en=20en?=
 =?UTF-8?q?levant=20surtout=20les=20balises=20qui=20pose=20un=20pb=20en=20?=
 =?UTF-8?q?compilation=20distante.=20Leur=20code=20n'a=20pas=20chang=C3=A9?=
 =?UTF-8?q?=20dans=20ce=20d=C3=A9pot.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .gitattributes               |   2 +
 ecrire/balise/logo_.php      | 141 +++++++++++++++++
 ecrire/balise/url_.php       | 172 +++++++++++++++++++++
 ecrire/public/balises.php    | 284 +----------------------------------
 ecrire/public/references.php |   8 +-
 5 files changed, 322 insertions(+), 285 deletions(-)
 create mode 100644 ecrire/balise/logo_.php
 create mode 100644 ecrire/balise/url_.php

diff --git a/.gitattributes b/.gitattributes
index ea50ac54c6..30b22a98e8 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -413,6 +413,8 @@ ecrire/action/tester_taille.php -text
 ecrire/action/tourner.php -text
 ecrire/action/virtualiser.php -text
 ecrire/balise/index.php -text
+ecrire/balise/logo_.php -text
+ecrire/balise/url_.php -text
 ecrire/base/admin_repair.php -text
 ecrire/base/convert_sql_utf8.php -text
 ecrire/base/convert_utf8.php -text
diff --git a/ecrire/balise/logo_.php b/ecrire/balise/logo_.php
new file mode 100644
index 0000000000..ff408b2cba
--- /dev/null
+++ b/ecrire/balise/logo_.php
@@ -0,0 +1,141 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2007                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+//
+// Fonction des balises #LOGO_XXXX
+// (les balises portant ce type de nom sont traitees en bloc ici)
+//
+
+function balise_logo__dist ($p) {
+
+	preg_match(",^LOGO_([A-Z]+)(_.*)?$,i", $p->nom_champ, $regs);
+	$type_objet = $regs[1];
+	$suite_logo = @$regs[2];	
+
+	// cas de #LOGO_SITE_SPIP
+	if (preg_match(",^_SPIP(.*)$,", $suite_logo, $regs)) {
+		$type_objet = 'SITE';
+		$suite_logo = $regs[1];
+		$_id_objet = "\"'0'\"";
+		$id_objet = 'id_syndic'; # parait faux mais donne bien "siteNN"
+	} else {
+		if ($type_objet == 'SITE')
+			$id_objet = "id_syndic";
+		else
+			$id_objet = "id_".strtolower($type_objet);
+		$_id_objet = champ_sql($id_objet, $p);
+	}
+
+	// analyser les faux filtres
+	$flag_fichier = $flag_stop = $flag_lien_auto = $code_lien = $filtres = $align = $lien = $params = '';
+
+	if (is_array($p->fonctions)) {
+		foreach($p->fonctions as $couple) {
+			if (!$flag_stop) {
+				$nom = trim($couple[0]);
+
+				// double || signifie "on passe aux vrais filtres"
+				if ($nom == '') {
+					if ($couple[1]) {
+						$params = $couple[1]; // recuperer #LOGO_DOCUMENT{20,30}
+						array_shift($p->param);
+					}
+					else
+						$flag_stop = true;
+				} else {
+					// faux filtres
+					array_shift($p->param);
+					switch($nom) {
+						case 'left':
+						case 'right':
+						case 'center':
+						case 'top':
+						case 'bottom':
+							$align = $nom;
+							break;
+						
+						case 'lien':
+							$flag_lien_auto = 'oui';
+							$flag_stop = true; # apres |lien : vrais filtres
+							break;
+
+						case 'fichier':
+							$flag_fichier = 1;
+							$flag_stop = true; # apres |fichier : vrais filtres
+							break;
+
+						default:
+							$lien = $nom;
+							$flag_stop = true; # apres |#URL... : vrais filtres
+							break;
+					}
+				}
+			}
+		}
+	}
+
+	//
+	// Preparer le code du lien
+	//
+	// 1. filtre |lien
+	if ($flag_lien_auto AND !$lien)
+		$code_lien = '($lien = generer_url_'.$type_objet.'('.$_id_objet.')) ? $lien : ""';
+	// 2. lien indique en clair (avec des balises : imprimer#ID_ARTICLE.html)
+	else if ($lien) {
+		$code_lien = "'".texte_script(trim($lien))."'";
+		while (preg_match(",^([^#]*)#([A-Za-z_]+)(.*)$,", $code_lien, $match)) {
+			$c = new Champ();
+			$c->nom_champ = $match[2];
+			$c->id_boucle = $p->id_boucle;
+			$c->boucles = &$p->boucles;
+			$c->descr = $p->descr;
+			$c = calculer_champ($c);
+			$code_lien = str_replace('#'.$match[2], "'.".$c.".'", $code_lien);
+		}
+		// supprimer les '' disgracieux
+		$code_lien = preg_replace("@^''\.|\.''$@", "", $code_lien);
+	}
+
+	if ($flag_fichier)
+		$code_lien = "'',''" ; 
+	else {
+		if (!$code_lien)
+			$code_lien = "''";
+		$code_lien .= ", '". $align . "'";
+	}
+
+	// cas des documents
+	if ($type_objet == 'DOCUMENT') {
+		$p->code = "calcule_logo_document($_id_objet, '" .
+			$p->descr['documents'] .
+			'\', $doublons, '. intval($flag_fichier).", $code_lien, '".
+			// #LOGO_DOCUMENT{x,y} donne la taille maxi
+			texte_script($params)
+			."')";
+	}
+	else {
+		$p->code = "affiche_logos(calcule_logo('$id_objet', '" .
+			(($suite_logo == '_SURVOL') ? 'off' : 
+			(($suite_logo == '_NORMAL') ? 'on' : 'ON')) .
+			"', $_id_objet," .
+			(($suite_logo == '_RUBRIQUE') ? 
+			champ_sql("id_rubrique", $p) :
+			(($type_objet == 'RUBRIQUE') ? "quete_parent($_id_objet)" : "''")) .
+			",  '$flag_fichier'), $code_lien)";
+	}
+
+	$p->interdire_scripts = false;
+	return $p;
+}
+?>
diff --git a/ecrire/balise/url_.php b/ecrire/balise/url_.php
new file mode 100644
index 0000000000..56a775d967
--- /dev/null
+++ b/ecrire/balise/url_.php
@@ -0,0 +1,172 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2007                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+function balise_URL__dist($p) {
+
+	if ($f = charger_fonction($p->nom_champ, 'balise', true))
+		return $f($p);
+	else return NULL;
+}
+
+// http://doc.spip.org/@balise_URL_SITE_SPIP_dist
+function balise_URL_SITE_SPIP_dist($p) {
+	$p->code = "sinon(\$GLOBALS['meta']['adresse_site'],'.')";
+	$p->code = "htmlspecialchars(".$p->code.")";
+	$p->interdire_scripts = false;
+	return $p;
+}
+
+// http://doc.spip.org/@balise_URL_ARTICLE_dist
+function balise_URL_ARTICLE_dist($p) {
+
+	// Cas particulier des boucles (SYNDIC_ARTICLES)
+	if ($p->type_requete == 'syndic_articles') {
+		$p->code = champ_sql('url', $p);
+	} else  $p->code = generer_generer_url('article', $p);
+
+	$p->interdire_scripts = false;
+	return $p;
+}
+
+// http://doc.spip.org/@balise_URL_AUTEUR_dist
+function balise_URL_AUTEUR_dist($p) {
+
+	$p->code = generer_generer_url('auteur', $p);
+	$p->interdire_scripts = false;
+	return $p;
+}
+
+// http://doc.spip.org/@balise_URL_RUBRIQUE_dist
+function balise_URL_RUBRIQUE_dist($p) {
+
+	$p->code = generer_generer_url('rubrique', $p);
+	$p->interdire_scripts = false;
+	return $p;
+}
+
+// http://doc.spip.org/@balise_URL_BREVE_dist
+function balise_URL_BREVE_dist($p) {
+
+	$p->code = generer_generer_url('breve', $p);
+	$p->interdire_scripts = false;
+	return $p;
+}
+
+// http://doc.spip.org/@balise_URL_MOT_dist
+function balise_URL_MOT_dist($p) {
+
+	$p->code = generer_generer_url('mot', $p);
+	$p->interdire_scripts = false;
+	return $p;
+}
+
+// http://doc.spip.org/@balise_URL_FORUM_dist
+function balise_URL_FORUM_dist($p) {
+
+	$p->code = generer_generer_url('forum', $p);
+	$p->interdire_scripts = false;
+	return $p;
+}
+
+// http://doc.spip.org/@balise_URL_DOCUMENT_dist
+function balise_URL_DOCUMENT_dist($p) {
+
+	$p->code = generer_generer_url('document', $p);
+	$p->interdire_scripts = false;
+	return $p;
+}
+
+# URL_SITE est une donnee "brute" tiree de la base de donnees
+# URL_SYNDIC correspond a l'adresse de son backend.
+# Il n'existe pas de balise pour afficher generer_url_site($id_syndic),
+# a part [(#ID_SYNDIC|generer_url_site)]
+
+
+//
+// #URL_PAGE{backend} -> backend.php3 ou ?page=backend selon les cas
+// Pour les pages qui commencent par "spip_", il faut eventuellement
+// aller chercher spip_action.php?action=xxxx
+//
+// http://doc.spip.org/@balise_URL_PAGE_dist
+function balise_URL_PAGE_dist($p) {
+
+	if ($p->boucles[$p->id_boucle]->sql_serveur) {
+		$p->code = 'generer_url_public("404")';
+		return $p;
+	}
+
+	$p->code = interprete_argument_balise(1,$p);
+	$args = interprete_argument_balise(2,$p);
+	if ($args != "''" && $args!==NULL)
+		$p->code .= ','.$args;
+
+	// autres filtres (???)
+	array_shift($p->param);
+
+	$p->code = 'generer_url_public(' . $p->code .')';
+
+	#$p->interdire_scripts = true;
+	return $p;
+}
+
+//
+// #URL_ECRIRE{naviguer} -> ecrire/?exec=naviguer
+//
+// http://doc.spip.org/@balise_URL_ECRIRE_dist
+function balise_URL_ECRIRE_dist($p) {
+
+	if ($p->boucles[$p->id_boucle]->sql_serveur) {
+		$p->code = 'generer_url_public("404")';
+		return $p;
+	}
+
+	$p->code = interprete_argument_balise(1,$p);
+	$args = interprete_argument_balise(2,$p);
+	if ($args != "''" && $args!==NULL)
+		$p->code .= ','.$args;
+
+	// autres filtres (???)
+	array_shift($p->param);
+
+	$p->code = 'generer_url_ecrire(' . $p->code .')';
+
+	#$p->interdire_scripts = true;
+	return $p;
+}
+
+//
+// #URL_ACTION_AUTEUR{converser,arg,redirect} -> ecrire/?action=converser&arg=arg&hash=xxx&redirect=redirect
+//
+// http://doc.spip.org/@balise_URL_ACTION_AUTEUR_dist
+function balise_URL_ACTION_AUTEUR_dist($p) {
+
+	if ($p->boucles[$p->id_boucle]->sql_serveur) {
+		$p->code = 'generer_url_public("404")';
+		return $p;
+	}
+
+	$p->code = interprete_argument_balise(1,$p);
+	$args = interprete_argument_balise(2,$p);
+	if ($args != "''" && $args!==NULL)
+		$p->code .= ".'\",\"'.".$args;
+	$redirect = interprete_argument_balise(3,$p);
+	if ($redirect != "''" && $redirect!==NULL)
+		$p->code .= ".'\",\"'.".$redirect;
+
+	$p->code = "'<"."?php echo generer_action_auteur(\"'." . $p->code .".'\"); ?>'";
+
+	$p->interdire_scripts = false;
+	return $p;
+}
+?>
diff --git a/ecrire/public/balises.php b/ecrire/public/balises.php
index d42991db34..f69b5e1b82 100644
--- a/ecrire/public/balises.php
+++ b/ecrire/public/balises.php
@@ -10,7 +10,6 @@
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
-
 //
 // Ce fichier regroupe la quasi totalite des definitions de #BALISES de spip
 // Pour chaque balise, il est possible de surcharger, dans mes_fonctions,
@@ -26,9 +25,9 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 function interprete_argument_balise($n,$p) {
 	if (($p->param) && (!$p->param[0][0]) && (count($p->param[0])>$n))
 		return calculer_liste($p->param[0][$n],
-									$p->descr,
-									$p->boucles,
-									$p->id_boucle);	
+			$p->descr,
+			$p->boucles,
+			$p->id_boucle);	
 	else 
 		return NULL;
 }
@@ -161,78 +160,6 @@ function balise_SPIP_VERSION_dist($p) {
 	return $p;
 }
 
-// http://doc.spip.org/@balise_URL_SITE_SPIP_dist
-function balise_URL_SITE_SPIP_dist($p) {
-	$p->code = "sinon(\$GLOBALS['meta']['adresse_site'],'.')";
-	$p->code = "htmlspecialchars(".$p->code.")";
-	$p->interdire_scripts = false;
-	return $p;
-}
-
-// http://doc.spip.org/@balise_URL_ARTICLE_dist
-function balise_URL_ARTICLE_dist($p) {
-
-	// Cas particulier des boucles (SYNDIC_ARTICLES)
-	if ($p->type_requete == 'syndic_articles') {
-		$p->code = champ_sql('url', $p);
-	} else  $p->code = generer_generer_url('article', $p);
-
-	$p->interdire_scripts = false;
-	return $p;
-}
-
-// http://doc.spip.org/@balise_URL_AUTEUR_dist
-function balise_URL_AUTEUR_dist($p) {
-
-	$p->code = generer_generer_url('auteur', $p);
-	$p->interdire_scripts = false;
-	return $p;
-}
-
-// http://doc.spip.org/@balise_URL_RUBRIQUE_dist
-function balise_URL_RUBRIQUE_dist($p) {
-
-	$p->code = generer_generer_url('rubrique', $p);
-	$p->interdire_scripts = false;
-	return $p;
-}
-
-// http://doc.spip.org/@balise_URL_BREVE_dist
-function balise_URL_BREVE_dist($p) {
-
-	$p->code = generer_generer_url('breve', $p);
-	$p->interdire_scripts = false;
-	return $p;
-}
-
-// http://doc.spip.org/@balise_URL_MOT_dist
-function balise_URL_MOT_dist($p) {
-
-	$p->code = generer_generer_url('mot', $p);
-	$p->interdire_scripts = false;
-	return $p;
-}
-
-// http://doc.spip.org/@balise_URL_FORUM_dist
-function balise_URL_FORUM_dist($p) {
-
-	$p->code = generer_generer_url('forum', $p);
-	$p->interdire_scripts = false;
-	return $p;
-}
-
-// http://doc.spip.org/@balise_URL_DOCUMENT_dist
-function balise_URL_DOCUMENT_dist($p) {
-
-	$p->code = generer_generer_url('document', $p);
-	$p->interdire_scripts = false;
-	return $p;
-}
-
-# URL_SITE est une donnee "brute" tiree de la base de donnees
-# URL_SYNDIC correspond a l'adresse de son backend.
-# Il n'existe pas de balise pour afficher generer_url_site($id_syndic),
-# a part [(#ID_SYNDIC|generer_url_site)]
 
 // #NOM_SITE affiche le nom du site, ou sinon l'URL ou le titre de l'objet
 // http://doc.spip.org/@balise_NOM_SITE_dist
@@ -648,134 +575,6 @@ function balise_GRAND_TOTAL_dist($p) {
 }
 
 
-
-//
-// Fonction commune aux balises #LOGO_XXXX
-// (les balises portant ce type de nom sont traitees en bloc ici)
-//
-// http://doc.spip.org/@calculer_balise_logo_dist
-function calculer_balise_logo_dist ($p) {
-
-	preg_match(",^LOGO_([A-Z]+)(_.*)?$,i", $p->nom_champ, $regs);
-	$type_objet = $regs[1];
-	$suite_logo = @$regs[2];	
-
-	// cas de #LOGO_SITE_SPIP
-	if (preg_match(",^_SPIP(.*)$,", $suite_logo, $regs)) {
-		$type_objet = 'SITE';
-		$suite_logo = $regs[1];
-		$_id_objet = "\"'0'\"";
-		$id_objet = 'id_syndic'; # parait faux mais donne bien "siteNN"
-	} else {
-		if ($type_objet == 'SITE')
-			$id_objet = "id_syndic";
-		else
-			$id_objet = "id_".strtolower($type_objet);
-		$_id_objet = champ_sql($id_objet, $p);
-	}
-
-	// analyser les faux filtres
-	$flag_fichier = $flag_stop = $flag_lien_auto = $code_lien = $filtres = $align = $lien = $params = '';
-
-	if (is_array($p->fonctions)) {
-		foreach($p->fonctions as $couple) {
-			if (!$flag_stop) {
-				$nom = trim($couple[0]);
-
-				// double || signifie "on passe aux vrais filtres"
-				if ($nom == '') {
-					if ($couple[1]) {
-						$params = $couple[1]; // recuperer #LOGO_DOCUMENT{20,30}
-						array_shift($p->param);
-					}
-					else
-						$flag_stop = true;
-				} else {
-					// faux filtres
-					array_shift($p->param);
-					switch($nom) {
-						case 'left':
-						case 'right':
-						case 'center':
-						case 'top':
-						case 'bottom':
-							$align = $nom;
-							break;
-						
-						case 'lien':
-							$flag_lien_auto = 'oui';
-							$flag_stop = true; # apres |lien : vrais filtres
-							break;
-
-						case 'fichier':
-							$flag_fichier = 1;
-							$flag_stop = true; # apres |fichier : vrais filtres
-							break;
-
-						default:
-							$lien = $nom;
-							$flag_stop = true; # apres |#URL... : vrais filtres
-							break;
-					}
-				}
-			}
-		}
-	}
-
-	//
-	// Preparer le code du lien
-	//
-	// 1. filtre |lien
-	if ($flag_lien_auto AND !$lien)
-		$code_lien = '($lien = generer_url_'.$type_objet.'('.$_id_objet.')) ? $lien : ""';
-	// 2. lien indique en clair (avec des balises : imprimer#ID_ARTICLE.html)
-	else if ($lien) {
-		$code_lien = "'".texte_script(trim($lien))."'";
-		while (preg_match(",^([^#]*)#([A-Za-z_]+)(.*)$,", $code_lien, $match)) {
-			$c = new Champ();
-			$c->nom_champ = $match[2];
-			$c->id_boucle = $p->id_boucle;
-			$c->boucles = &$p->boucles;
-			$c->descr = $p->descr;
-			$c = calculer_champ($c);
-			$code_lien = str_replace('#'.$match[2], "'.".$c.".'", $code_lien);
-		}
-		// supprimer les '' disgracieux
-		$code_lien = preg_replace("@^''\.|\.''$@", "", $code_lien);
-	}
-
-	if ($flag_fichier)
-		$code_lien = "'',''" ; 
-	else {
-		if (!$code_lien)
-			$code_lien = "''";
-		$code_lien .= ", '". $align . "'";
-	}
-
-	// cas des documents
-	if ($type_objet == 'DOCUMENT') {
-		$p->code = "calcule_logo_document($_id_objet, '" .
-			$p->descr['documents'] .
-			'\', $doublons, '. intval($flag_fichier).", $code_lien, '".
-			// #LOGO_DOCUMENT{x,y} donne la taille maxi
-			texte_script($params)
-			."')";
-	}
-	else {
-		$p->code = "affiche_logos(calcule_logo('$id_objet', '" .
-			(($suite_logo == '_SURVOL') ? 'off' : 
-			(($suite_logo == '_NORMAL') ? 'on' : 'ON')) .
-			"', $_id_objet," .
-			(($suite_logo == '_RUBRIQUE') ? 
-			champ_sql("id_rubrique", $p) :
-			(($type_objet == 'RUBRIQUE') ? "quete_parent($_id_objet)" : "''")) .
-			",  '$flag_fichier'), $code_lien)";
-	}
-
-	$p->interdire_scripts = false;
-	return $p;
-}
-
 // #EXTRA
 // [(#EXTRA|extra{isbn})]
 // ou [(#EXTRA|isbn)] (ce dernier applique les filtres definis dans mes_options)
@@ -891,83 +690,6 @@ function balise_SELF_dist($p) {
 }
 
 
-//
-// #URL_PAGE{backend} -> backend.php3 ou ?page=backend selon les cas
-// Pour les pages qui commencent par "spip_", il faut eventuellement
-// aller chercher spip_action.php?action=xxxx
-//
-// http://doc.spip.org/@balise_URL_PAGE_dist
-function balise_URL_PAGE_dist($p) {
-
-	if ($p->boucles[$p->id_boucle]->sql_serveur) {
-		$p->code = 'generer_url_public("404")';
-		return $p;
-	}
-
-	$p->code = interprete_argument_balise(1,$p);
-	$args = interprete_argument_balise(2,$p);
-	if ($args != "''" && $args!==NULL)
-		$p->code .= ','.$args;
-
-	// autres filtres (???)
-	array_shift($p->param);
-
-	$p->code = 'generer_url_public(' . $p->code .')';
-
-	#$p->interdire_scripts = true;
-	return $p;
-}
-
-//
-// #URL_ECRIRE{naviguer} -> ecrire/?exec=naviguer
-//
-// http://doc.spip.org/@balise_URL_ECRIRE_dist
-function balise_URL_ECRIRE_dist($p) {
-
-	if ($p->boucles[$p->id_boucle]->sql_serveur) {
-		$p->code = 'generer_url_public("404")';
-		return $p;
-	}
-
-	$p->code = interprete_argument_balise(1,$p);
-	$args = interprete_argument_balise(2,$p);
-	if ($args != "''" && $args!==NULL)
-		$p->code .= ','.$args;
-
-	// autres filtres (???)
-	array_shift($p->param);
-
-	$p->code = 'generer_url_ecrire(' . $p->code .')';
-
-	#$p->interdire_scripts = true;
-	return $p;
-}
-
-//
-// #URL_ACTION_AUTEUR{converser,arg,redirect} -> ecrire/?action=converser&arg=arg&hash=xxx&redirect=redirect
-//
-// http://doc.spip.org/@balise_URL_ACTION_AUTEUR_dist
-function balise_URL_ACTION_AUTEUR_dist($p) {
-
-	if ($p->boucles[$p->id_boucle]->sql_serveur) {
-		$p->code = 'generer_url_public("404")';
-		return $p;
-	}
-
-	$p->code = interprete_argument_balise(1,$p);
-	$args = interprete_argument_balise(2,$p);
-	if ($args != "''" && $args!==NULL)
-		$p->code .= ".'\",\"'.".$args;
-	$redirect = interprete_argument_balise(3,$p);
-	if ($redirect != "''" && $redirect!==NULL)
-		$p->code .= ".'\",\"'.".$redirect;
-
-	$p->code = "'<"."?php echo generer_action_auteur(\"'." . $p->code .".'\"); ?>'";
-
-	$p->interdire_scripts = false;
-	return $p;
-}
-
 //
 // #CHEMIN{fichier} -> find_in_path(fichier)
 //
diff --git a/ecrire/public/references.php b/ecrire/public/references.php
index 43fd80d24a..5b869eb1c4 100644
--- a/ecrire/public/references.php
+++ b/ecrire/public/references.php
@@ -163,14 +163,14 @@ function calculer_balise($nom, $p) {
 			return $res;
 	}
 
-	// S'agit-il d'un logo ? Une fonction speciale les traite tous
-	if (strncmp('LOGO_', $nom,5)==0) {
-		if (!function_exists($f = 'calculer_balise_logo')) $f .= '_dist';
+	// Certaines des balises comportant un _ sont generiques
+	if ($f = strpos($nom, '_')
+	AND $f = charger_fonction(substr($nom,0,$f), 'balise', true)) {
 		$res = $f($p);
 		if ($res !== NULL)
 			return $res;
 	}
-
+	spip_log("bal $nom");
 	// ca pourrait etre un champ SQL homonyme,
 	$p->code = index_pile($p->id_boucle, $nom, $p->boucles, $p->nom_boucle);
 
-- 
GitLab