diff --git a/.gitattributes b/.gitattributes index a860c6e6e126d446b5a99b0b8d4c3e40203be699..0e8635eb00f51ea9b9ea132ddabeba72790eea47 100644 --- a/.gitattributes +++ b/.gitattributes @@ -586,6 +586,8 @@ ecrire/safehtml/classes/safehtml.php -text ecrire/safehtml/license.txt -text ecrire/safehtml/readme-SPIP.txt -text ecrire/safehtml/readme.txt -text +ecrire/typographie/en.php -text +ecrire/typographie/fr.php -text ecrire/urls/page.php -text ecrire/urls/propres-qs.php -text ecrire/win_png.htc -text diff --git a/ecrire/inc/lang.php b/ecrire/inc/lang.php index f8d78eb5ef40c4fa51fe2626abce78a94658a136..cae5e29a86da29d80d0f5fdae43f98e827ef5d12 100644 --- a/ecrire/inc/lang.php +++ b/ecrire/inc/lang.php @@ -71,14 +71,20 @@ function lang_dir($lang, $droitier='ltr', $gaucher='rtl') { return $droitier; } +// typo francaise ou anglaise ? +// $lang_objet est fixee dans l'interface privee pour editer +// un texte anglais en interface francaise (ou l'inverse) ; +// sinon determiner la typo en fonction de la langue courante + // http://doc.spip.org/@lang_typo -function lang_typo($lang) { +function lang_typo($lang='') { + if (!$lang) { + if (!$lang = $GLOBALS['lang_objet']) + $lang = $GLOBALS['spip_lang']; + } if ($lang == 'eo' OR $lang == 'fr' OR substr($lang, 0, 3) == 'fr_' OR $lang == 'cpf') return 'fr'; - else if ($lang) - return 'en'; - else - return false; + else return 'en'; } // service pour que l'espace prive reflete la typo et la direction des objets affiches diff --git a/ecrire/inc/notifications.php b/ecrire/inc/notifications.php index e26a9e2a1e7d355bd1cf545bd6362aef5823e0fa..4f55b651f8fcdd3d4d7a10a701094b95b5a1abfc 100644 --- a/ecrire/inc/notifications.php +++ b/ecrire/inc/notifications.php @@ -120,8 +120,7 @@ function notifier_proposition_article($id_article) { $row = spip_fetch_array(spip_query("SELECT * FROM spip_articles WHERE id_article = $id_article")); if ($row) { - $lang_utilisateur = $GLOBALS['spip_lang']; - changer_langue($row['lang']); + if ($l = $row['lang']) $l = lang_select($l); $titre = nettoyer_titre_email($row['titre']); @@ -140,7 +139,7 @@ function notifier_proposition_article($id_article) { . "\n\n\n" . extrait_article($row) ); - changer_langue($lang_utilisateur); + if ($l) lang_select(); } } } diff --git a/ecrire/inc/texte.php b/ecrire/inc/texte.php index 845c6067cc3c5594fc27e3265bf70f11683c6361..6f2f3cf0b873cc749496d560a87172691eed43dd 100644 --- a/ecrire/inc/texte.php +++ b/ecrire/inc/texte.php @@ -440,91 +440,6 @@ function safehtml($t) { return interdire_scripts($t); // interdire le php (2 precautions) } -// Correction typographique francaise -// http://doc.spip.org/@typo_fr -function typo_fr($letexte) { - static $trans; - - // Nettoyer 160 = nbsp ; 187 = raquo ; 171 = laquo ; 176 = deg ; 147 = ldquo; 148 = rdquo - if (!$trans) { - $trans = array( - " " => "~", - "»" => "»", - "«" => "«", - "”" => "”", - "“" => "“", - "°" => "°" - ); - $chars = array(160 => '~', 187 => '»', 171 => '«', 148 => '”', 147 => '“', 176 => '°'); - $chars_trans = array_keys($chars); - $chars = array_values($chars); - $chars_trans = implode(' ',array_map('chr',$chars_trans)); - $chars_trans = unicode2charset(charset2unicode($chars_trans, 'iso-8859-1', 'forcer')); - $chars_trans = explode(" ",$chars_trans); - foreach($chars as $k=>$r) - $trans[$chars_trans[$k]] = $r; - } - - $letexte = strtr($letexte, $trans); - - $cherche1 = array( - /* 1 */ '/((?:^|[^\#0-9a-zA-Z\&])[\#0-9a-zA-Z]*)\;/S', - /* 2 */ '/»| --?,|(?::| %)(?:\W|$)/S', - /* 3 */ '/([^[<!?])([!?])/S', - /* 4 */ '/«|(?:M(?:M?\.|mes?|r\.?)|[MnN]°) /S' - ); - $remplace1 = array( - /* 1 */ '\1~;', - /* 2 */ '~\0', - /* 3 */ '\1~\2', - /* 4 */ '\0~' - ); - $letexte = preg_replace($cherche1, $remplace1, $letexte); - $letexte = preg_replace("/ *~+ */S", "~", $letexte); - - $cherche2 = array( - '/([^-\n]|^)--([^-]|$)/S', - '/(http|https|ftp|mailto)~:/S', - '/~/' - ); - $remplace2 = array( - '\1—\2', - '\1:', - ' ' - ); - $letexte = preg_replace($cherche2, $remplace2, $letexte); - - return $letexte; -} - -// rien sauf les "~" et "-," -// http://doc.spip.org/@typo_en -function typo_en($letexte) { - - $cherche1 = array( - '/ --?,/S' - ); - $remplace1 = array( - '~\0' - ); - $letexte = preg_replace($cherche1, $remplace1, $letexte); - - $letexte = str_replace(" ", "~", $letexte); - $letexte = preg_replace("/ *~+ */", "~", $letexte); - - $cherche2 = array( - '/([^-\n]|^)--([^-]|$)/', - '/~/' - ); - $remplace2 = array( - '\1—\2', - ' ' - ); - - $letexte = preg_replace($cherche2, $remplace2, $letexte); - - return $letexte; -} // // Typographie generale @@ -563,25 +478,12 @@ function typo($letexte, $echapper=true) { } } - // zouli apostrophe - $letexte = str_replace("'", "’", $letexte); - - // typo francaise ou anglaise ? - // $lang_objet est fixee dans l'interface privee pour editer - // un texte anglais en interface francaise (ou l'inverse) ; - // sinon determiner la typo en fonction de la langue - if (!$lang = $GLOBALS['lang_objet']) - $lang = $GLOBALS['spip_lang']; - $l = lang_select($lang); - switch (lang_typo($lang)) { - case 'fr': - $letexte = typo_fr($letexte); - break; - default: - $letexte = typo_en($letexte); - break; - } + $lang = lang_typo(); + lang_select($lang); + $typographie = charger_fonction($lang, 'typographie'); + + $letexte = $typographie($letexte); // Retablir les caracteres proteges $letexte = strtr($letexte, $illegal, $protege); @@ -601,7 +503,7 @@ function typo($letexte, $echapper=true) { $letexte = apres_typo($letexte); // remettre la langue precedente - if ($l) lang_select(); + if ($lang) lang_select(); // reintegrer les echappements if ($echapper) diff --git a/ecrire/typographie/en.php b/ecrire/typographie/en.php new file mode 100644 index 0000000000000000000000000000000000000000..b3f729cbfec94b758a2a2dfa2fb7e399207ffd17 --- /dev/null +++ b/ecrire/typographie/en.php @@ -0,0 +1,46 @@ +<?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; + +// rien sauf les "~" et "-," + +function typographie_en_dist($letexte) { + + // zouli apostrophe + $letexte = str_replace("'", "’", $letexte); + + $cherche1 = array( + '/ --?,/S' + ); + $remplace1 = array( + '~\0' + ); + $letexte = preg_replace($cherche1, $remplace1, $letexte); + + $letexte = str_replace(" ", "~", $letexte); + $letexte = preg_replace("/ *~+ */", "~", $letexte); + + $cherche2 = array( + '/([^-\n]|^)--([^-]|$)/', + '/~/' + ); + $remplace2 = array( + '\1—\2', + ' ' + ); + + $letexte = preg_replace($cherche2, $remplace2, $letexte); + + return $letexte; +} +?> diff --git a/ecrire/typographie/fr.php b/ecrire/typographie/fr.php new file mode 100644 index 0000000000000000000000000000000000000000..c2d76ba76d331a6428967ca88039fa77ed1be3e9 --- /dev/null +++ b/ecrire/typographie/fr.php @@ -0,0 +1,74 @@ +<?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; + +// Correction typographique francaise + +function typographie_fr_dist($letexte) { + + static $trans; + + // zouli apostrophe + $letexte = str_replace("'", "’", $letexte); + + // Nettoyer 160 = nbsp ; 187 = raquo ; 171 = laquo ; 176 = deg ; 147 = ldquo; 148 = rdquo + if (!$trans) { + $trans = array( + " " => "~", + "»" => "»", + "«" => "«", + "”" => "”", + "“" => "“", + "°" => "°" + ); + $chars = array(160 => '~', 187 => '»', 171 => '«', 148 => '”', 147 => '“', 176 => '°'); + $chars_trans = array_keys($chars); + $chars = array_values($chars); + $chars_trans = implode(' ',array_map('chr',$chars_trans)); + $chars_trans = unicode2charset(charset2unicode($chars_trans, 'iso-8859-1', 'forcer')); + $chars_trans = explode(" ",$chars_trans); + foreach($chars as $k=>$r) + $trans[$chars_trans[$k]] = $r; + } + + $letexte = strtr($letexte, $trans); + + $cherche1 = array( + /* 1 */ '/((?:^|[^\#0-9a-zA-Z\&])[\#0-9a-zA-Z]*)\;/S', + /* 2 */ '/»| --?,|(?::| %)(?:\W|$)/S', + /* 3 */ '/([^[<!?])([!?])/S', + /* 4 */ '/«|(?:M(?:M?\.|mes?|r\.?)|[MnN]°) /S' + ); + $remplace1 = array( + /* 1 */ '\1~;', + /* 2 */ '~\0', + /* 3 */ '\1~\2', + /* 4 */ '\0~' + ); + $letexte = preg_replace($cherche1, $remplace1, $letexte); + $letexte = preg_replace("/ *~+ */S", "~", $letexte); + + $cherche2 = array( + '/([^-\n]|^)--([^-]|$)/S', + '/(http|https|ftp|mailto)~:/S', + '/~/' + ); + $remplace2 = array( + '\1—\2', + '\1:', + ' ' + ); + $letexte = preg_replace($cherche2, $remplace2, $letexte); + + return $letexte; +}