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