From f14e1518d1ece80d9d1ac151ffcf2c4c2e555d67 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Fri, 13 May 2005 15:46:39 +0000
Subject: [PATCH] =?UTF-8?q?J'igorais=20qu'il=20y=20eut=20des=20forcen?=
 =?UTF-8?q?=C3=A9s=20du=20multi=20dans=20les=20formulaires=20de=20saisie?=
 =?UTF-8?q?=20de=20l'espace=20priv=C3=A9.=20Retour=20aux=20versions=20pr?=
 =?UTF-8?q?=C3=A9c=C3=A9dentes=20pour=20ces=203=20fichiers,=20=C3=A0=20qq?=
 =?UTF-8?q?=20optimisations=20pr=C3=A8s=20impos=C3=A9es=20par=20l'espace?=
 =?UTF-8?q?=20public=20qui=20entend=20conserver=20l'avantage=20acquis.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/inc_filtres.php3 | 59 ++++++++++++++++++++++++++++++++++++-----
 ecrire/inc_texte.php3   |  4 ++-
 inc-urls-propres.php3   |  4 ++-
 3 files changed, 59 insertions(+), 8 deletions(-)

diff --git a/ecrire/inc_filtres.php3 b/ecrire/inc_filtres.php3
index 199f380210..5f378e78e4 100644
--- a/ecrire/inc_filtres.php3
+++ b/ecrire/inc_filtres.php3
@@ -810,15 +810,13 @@ function post_autobr($texte, $delim="\n_ ") {
 }
 
 
-
-// les ci-devant blocs multi sont maintenant traites en amont.
-// garder cette fonction pour de vielles contrib qui l'appelleraient
-
-function extraire_multi ($letexte) {return $letexte;}
+//
+// Gestion des blocs multilingues
+//
 
 //
 // Selection dans un tableau dont les index sont des noms de langues
-// de la valeur associee a la langue en cours (ci-devant bloc multi)
+// de la valeur associee a la langue en cours
 //
 
 function multi_trad ($trads) {
@@ -838,6 +836,55 @@ function multi_trad ($trads) {
 	else  return array_shift($trads);
 }
 
+// analyse un bloc multi
+function extraire_trad ($bloc) {
+	$lang = '';
+
+	while (preg_match("/^(.*?)[\{\[]([a-z_]+)[\}\]]/si", $bloc, $regs)) {
+		$texte = trim($regs[1]);
+		if ($texte OR $lang)
+			$trads[$lang] = $texte;
+		$bloc = substr($bloc, strlen($regs[0]));
+		$lang = $regs[2];
+	}
+	$trads[$lang] = $bloc;
+
+	// faire la traduction avec ces donnees
+	return multi_trad($trads);
+}
+
+// repere les blocs multi dans un texte et extrait le bon
+function extraire_multi ($letexte) {
+	global $flag_pcre;
+
+	if (strpos($letexte, '<multi>') === false) return $letexte; // perf
+	if ($flag_pcre AND preg_match_all("@<multi>(.*?)</multi>@s", $letexte, $regs, PREG_SET_ORDER)) {
+		while (list(,$reg) = each ($regs)) {
+			$letexte = str_replace($reg[0], extraire_trad($reg[1]), $letexte);
+		}
+	}
+	return $letexte;
+}
+
+// popup des blocs multi dans l'espace prive (a ameliorer)
+function ajoute_popup_multi($langue_demandee, $trads, $texte) {
+	static $num_multi=0;
+	global $multi_popup;
+	while (list($lang,$bloc) = each($trads)) {
+		if ($lang != $langue_demandee)
+			$survol .= "[$lang] ".supprimer_tags(couper($bloc,20))."\n";
+		$texte_popup .= "<br /><b>".traduire_nom_langue($lang)."</b> ".ereg_replace("\n+","<br />", supprimer_tags(couper(propre($bloc),200)));
+	}
+
+	if ($survol) {
+		$num_multi ++;
+		$texte .= " <img src=\"" . _DIR_IMG_PACK . "langues-modif-12.gif\" alt=\"(multi)\" title=\"$survol\" height=\"12\" width=\"12\" border=\"0\" onclick=\"return openmulti($num_multi)\" />";
+		$multi_popup .= "textes_multi[$num_multi] = '".addslashes($texte_popup)."';\n";
+	}
+
+	return $texte;
+}
+
 // Raccourci ancre [#ancre<-]
 function avant_propre_ancres($texte) {
 	$regexp = "|\[#?([^][]*)<-\]|";
diff --git a/ecrire/inc_texte.php3 b/ecrire/inc_texte.php3
index 6b25c6bf20..63b0bf75bc 100644
--- a/ecrire/inc_texte.php3
+++ b/ecrire/inc_texte.php3
@@ -68,6 +68,7 @@ function nettoyer_chapo($chapo){
 // points d'entree de pre- et post-traitement pour propre() et typo()
 function spip_avant_propre ($letexte) {
 	$letexte = avant_propre_ancres($letexte);
+	$letexte = extraire_multi($letexte);
 
 	if (function_exists('avant_propre'))
 		$letexte = avant_propre($letexte);
@@ -83,6 +84,7 @@ function spip_apres_propre ($letexte) {
 }
 
 function spip_avant_typo ($letexte) {
+	$letexte = extraire_multi($letexte);
 	$letexte = avant_typo_smallcaps($letexte);
 
 	if (function_exists('avant_typo'))
@@ -363,7 +365,7 @@ function couper($texte, $taille=50) {
 
 // prendre <intro>...</intro> sinon couper a la longueur demandee
 function couper_intro($texte, $long) {
-	$texte = (eregi_replace("(</?)intro>", "\\1intro>", $texte)); // minuscules
+	$texte = extraire_multi(eregi_replace("(</?)intro>", "\\1intro>", $texte)); // minuscules
 	while ($fin = strpos($texte, "</intro>")) {
 		$zone = substr($texte, 0, $fin);
 		$texte = substr($texte, $fin + strlen("</intro>"));
diff --git a/inc-urls-propres.php3 b/inc-urls-propres.php3
index 0975f428ef..0a28a93bc9 100644
--- a/inc-urls-propres.php3
+++ b/inc-urls-propres.php3
@@ -73,7 +73,9 @@ function _generer_url_propre($type, $id_objet) {
 	// Sinon, creer l'URL
 	include_ecrire("inc_filtres.php3");
 	include_ecrire("inc_charsets.php3");
-	$url = translitteration(corriger_caracteres(supprimer_tags(supprimer_numero($row['titre']))));
+	$url = translitteration(corriger_caracteres(
+		supprimer_tags(supprimer_numero(extraire_multi($row['titre'])))
+		));
 	$url = @preg_replace(',[[:punct:][:space:]]+,u', ' ', $url);
 	// S'il reste des caracteres non latins, utiliser l'id a la place
 	if (preg_match(",[^a-zA-Z0-9 ],", $url)) {
-- 
GitLab