From 3b8ecb71a3f60d32e2c8dddc595f561c47d99407 Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Wed, 6 Apr 2005 22:12:46 +0000 Subject: [PATCH] =?UTF-8?q?un=20petit=20marteau=20au=20lieu=20d'un=20gros,?= =?UTF-8?q?=20pour=20=C3=A9chapper=20les=20caract=C3=A8res=20typograpqhiue?= =?UTF-8?q?s=20dans=20les=20tags=20html=20(pour=20faciliter=20l'=C3=A9crit?= =?UTF-8?q?ure=20de=20filtres=20apres=5Fpropre()=20--=20Paolo)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecrire/inc_texte.php3 | 52 ++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 20 deletions(-) diff --git a/ecrire/inc_texte.php3 b/ecrire/inc_texte.php3 index 06a43bd49f..62c90f9bea 100644 --- a/ecrire/inc_texte.php3 +++ b/ecrire/inc_texte.php3 @@ -95,10 +95,6 @@ function spip_avant_typo ($letexte) { function spip_apres_typo ($letexte) { - // caracteres speciaux - $letexte = corriger_caracteres($letexte); - $letexte = str_replace("'", "’", $letexte); - // relecture des if (!_DIR_RESTREINT AND $GLOBALS['revision_nbsp']) $letexte = ereg_replace(' ', '<span class="spip-nbsp"> </span>', $letexte); @@ -197,17 +193,6 @@ function echappe_html($letexte, $source='SOURCEPROPRE', $no_transform=false) { $les_echap[$num_echap] = $match; } - // - // Echapper les tags html contenant des caracteres sensibles a la typo - // - $regexp_echap = "<[a-zA-Z!][^<>!':;\?]*[!':;\?][^<>]*>"; - if (preg_match_all("/$regexp_echap/ims", $letexte, $regs, PREG_SET_ORDER)) - foreach ($regs as $reg) { - $num_echap++; - $les_echap[$num_echap] = $reg[0]; - $letexte = str_replace($reg[0], "@@SPIP_$source$num_echap@@", $letexte); - } - return array($letexte, $les_echap); } @@ -472,24 +457,51 @@ function typo_en($letexte) { return $letexte; } -// Typographie generale : francaise si la langue est 'cpf', 'fr' ou 'eo', -// sinon anglaise (minimaliste) +// +// Typographie generale +// function typo_generale($letexte) { - global $spip_lang, $lang_typo; + global $spip_lang; // Appeler la fonction de pre-traitement $letexte = spip_avant_typo ($letexte); - if (!$lang = $lang_typo) { + // Caracteres de controle "illegaux" + $letexte = corriger_caracteres($letexte); + + // Proteger les caracteres typographiques a l'interieur des tags html + $protege = "!':;?"; + $illegal = "\x1\x2\x3\x4\x5"; + if (preg_match_all("/<[a-z!][^<>!':;\?]*[!':;\?][^<>]*>/ims", + $letexte, $regs, PREG_SET_ORDER)) { + foreach ($regs as $reg) { + $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); + } + } + + // zouli apostrophe + $letexte = str_replace("'", "’", $letexte); + + // typo francaise ou anglaise ? + // $lang_typo 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_typo']) { include_ecrire('inc_lang.php3'); $lang = lang_typo($spip_lang); } - if ($lang == 'fr') $letexte = typo_fr($letexte); else $letexte = typo_en($letexte); + // Retablir les caracteres proteges + $letexte = strtr($letexte, $illegal, $protege); + // Appeler la fonction de post-traitement return spip_apres_typo ($letexte); } -- GitLab