diff --git a/ecrire/inc_filtres.php3 b/ecrire/inc_filtres.php3 index 199f380210e435f0d4739c561371653a56f369b2..5f378e78e4af0ca9073e76d58dffe263c4f26df9 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 6b25c6bf20734d97d8a47de543225135c8b09b0b..63b0bf75bca2c96d6f044b27f964a0f6cdd97fdd 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 0975f428ef6f4714eed1f221786d4a71fd101442..0a28a93bc9055048b95327eaecc1d1f07579a015 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)) {