Skip to content
Extraits de code Groupes Projets
Valider 119b2058 rédigé par esj's avatar esj
Parcourir les fichiers

Correction du traitement des blocs multi de [14718] qui ne tenait pas compte...

Correction du traitement des blocs multi de [14718] qui ne tenait pas compte du cas {{{forcer_lang=true}}} où la langue du contexte a priorité sur la langue de l'objet (bug péniblement entr'aperàu par Kent1). On en profite pour optimiser ce code en calculant  au chargement du fichier la RegExp calculée, plutôt qu'à chaque appel.
parent 5f6d641a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -531,6 +531,11 @@ function typo($letexte, $echapper=true, $connect=null) { ...@@ -531,6 +531,11 @@ function typo($letexte, $echapper=true, $connect=null) {
define('_EXTRAIRE_MULTI', "@<multi>(.*?)</multi>@sS"); define('_EXTRAIRE_MULTI', "@<multi>(.*?)</multi>@sS");
define('_TYPO_PROTEGER', "!':;?~%-");
define('_TYPO_PROTECTEUR', "\x1\x2\x3\x4\x5\x6\x7\x8");
define('_TYPO_BALISE', ",</?[a-z!][^<>]*[".preg_quote(_TYPO_PROTEGER)."][^<>]*>,imsS");
// http://doc.spip.org/@corriger_typo // http://doc.spip.org/@corriger_typo
function corriger_typo($letexte, $lang='') { function corriger_typo($letexte, $lang='') {
...@@ -546,53 +551,56 @@ function corriger_typo($letexte, $lang='') { ...@@ -546,53 +551,56 @@ function corriger_typo($letexte, $lang='') {
if (!$lang) $lang = lang_typo(); if (!$lang) $lang = lang_typo();
$typo2 = ''; $typo2 = '';
$typographie = charger_fonction($lang, 'typographie');
if ($typographie = charger_fonction($lang, 'typographie')) { // Proteger les caracteres typographiques a l'interieur des tags html
if ($typographie AND preg_match_all(_TYPO_BALISE, $letexte, $regs, PREG_SET_ORDER)) {
// Proteger les caracteres typographiques a l'interieur des tags html foreach ($regs as $reg) {
$protege = "!':;?~%-"; $insert = $reg[0];
$illegal = "\x1\x2\x3\x4\x5\x6\x7\x8"; // hack: on transforme les caracteres a proteger en les remplacant
if (preg_match_all(',</?[a-z!][^<>]*['.preg_quote($protege).'][^<>]*>,imsS', // par des caracteres "illegaux". (cf corriger_caracteres())
$letexte, $regs, PREG_SET_ORDER)) { $insert = strtr($insert, $protege, $illegal);
foreach ($regs as $reg) { $letexte = str_replace($reg[0], $insert, $letexte);
$insert = $reg[0];
// hack: on transforme les caracteres a proteger en les remplacant
// par des caracteres "illegaux". (cf corriger_caracteres())
$insert = strtr($insert, $protege, $illegal);
$letexte = str_replace($reg[0], $insert, $letexte);
}
} }
}
// trouver les blocs multi // simplifier les blocs multi,
if (preg_match_all(_EXTRAIRE_MULTI, $letexte, $regs, PREG_SET_ORDER)) { // et si la selection est differente de la langue de l'objet,
foreach ($regs as $reg) { // (langue de l'objet absente du multi ou langue imposee par forcer_lang)
// chercher la version de la langue courante // la typographier selon les regles de celle trouvee si definies
$trads = extraire_trads($reg[1]);
$l = approcher_langue($trads, $lang); if (preg_match_all(_EXTRAIRE_MULTI, $letexte, $regs, PREG_SET_ORDER)) {
if ($l) foreach ($regs as $reg) {
$trad = $trads[$l]; // chercher la version de la langue du contexte
else { // (= lang_typo() sauf parfois avec forcer_lang = true)
// langue absente, prendre la premiere dispo $trads = extraire_trads($reg[1]);
// mais typographier le texte $l = approcher_langue($trads, $GLOBALS['spip_lang']);
// selon les regles de celle-ci si definies if ($l) {
$l = key($trads); $trad = $trads[$l];
$trad = $trads[$l]; if ($lang != $GLOBALS['spip_lang']
if ($typo2 = charger_fonction($l, 'typographie', true)) { AND $typo2 = charger_fonction($GLOBALS['spip_lang'], 'typographie', true)) {
$trad = $typo2($trad); $trad = $typo2($trad);
$trad = code_echappement($trad, 'multi'); $trad = code_echappement($trad, 'multi');
} }
} else {
// langue absente, prendre la premiere dispo
$l = key($trads);
$trad = $trads[$l];
if ($typo2 = charger_fonction($l, 'typographie', true)) {
$trad = $typo2($trad);
$trad = code_echappement($trad, 'multi');
} }
$letexte = str_replace($reg[0], $trad, $letexte);
} }
$letexte = str_replace($reg[0], $trad, $letexte);
} }
}
$letexte = $typographie($letexte); if ($typographie) $letexte = $typographie($letexte);
// Retablir les caracteres proteges // Retablir les caracteres proteges
$letexte = strtr($letexte, $illegal, $protege); $letexte = strtr($letexte, $illegal, $protege);
// et les citations en un autre langue // et les citations en d'autres langues
if ($typo2!=='') $letexte = echappe_retour($letexte, 'multi'); if ($typo2!=='') $letexte = echappe_retour($letexte, 'multi');
}
$letexte = pipeline('post_typo', $letexte); $letexte = pipeline('post_typo', $letexte);
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter