diff --git a/ecrire/inc_texte.php3 b/ecrire/inc_texte.php3 index 8157b2817f13a258e93e896806b56883fe42e83b..e78d20831b8dfda7a8e8051e3b685c5ca1695abe 100644 --- a/ecrire/inc_texte.php3 +++ b/ecrire/inc_texte.php3 @@ -126,9 +126,8 @@ define ('__regexp_echappe', define ('__regexp_img_echappe', "<(IMG|DOC|EMB)([0-9]+)(\|([^\>]*))?".">"); function echappe_html($letexte, $source='SOURCEPROPRE', $no_transform=false) { - $debut = ''; - $suite = $letexte; - while (preg_match(__regexp_echappe, $suite, $regs)) { + if (preg_match_all(__regexp_echappe, $letexte, $matches, PREG_SET_ORDER)) + foreach ($matches as $regs) { $num_echap++; $marqueur_echap = "@@SPIP_$source$num_echap@@"; @@ -178,11 +177,9 @@ function echappe_html($letexte, $source='SOURCEPROPRE', $no_transform=false) { $les_echap[$num_echap] = propre($lecode); } - $pos = strpos($suite, $regs[0]); - $debut .= substr($suite,0,$pos).$marqueur_echap; - $suite = substr($suite, $pos+strlen($regs[0])); + $letexte = str_replace($regs[0], $marqueur_echap, $letexte); } - $letexte = $debut . $suite; + // Gestion du TeX if (!(strpos($letexte, "<math>") === false)) { include_ecrire("inc_math.php3"); @@ -204,14 +201,11 @@ function echappe_html($letexte, $source='SOURCEPROPRE', $no_transform=false) { // Echapper les tags html contenant des caracteres sensibles a la typo // $regexp_echap = "<[a-zA-Z!][^<>!':;\?]*[!':;\?][^<>]*>"; - if (preg_match_all("/$regexp_echap/", $letexte, $regs, PREG_SET_ORDER)) - while (list(,$reg) = each($regs)) { + if (preg_match_all("/$regexp_echap/ims", $letexte, $regs, PREG_SET_ORDER)) + foreach ($regs as $reg) { $num_echap++; $les_echap[$num_echap] = $reg[0]; - //echo htmlspecialchars($reg[0])."<p>"; - $pos = strpos($letexte, $les_echap[$num_echap]); - $letexte = substr($letexte,0,$pos)."@@SPIP_$source$num_echap@@" - .substr($letexte,$pos+strlen($les_echap[$num_echap])); + $letexte = str_replace($reg[0], "@@SPIP_$source$num_echap@@", $letexte); } return array($letexte, $les_echap); @@ -832,17 +826,19 @@ function traiter_raccourcis_generale($letexte) { // Note : complique car c'est ici qu'on applique la typo() ! // $regexp = "|\[([^][]*)->(>?)([^]]*)\]|ms"; - $texte_vu = ''; - if (preg_match_all($regexp, $letexte, $matches, PREG_SET_ORDER)) - foreach ($matches as $regs) { - list($insert, $lien) = extraire_lien($regs); - $pos = strpos($letexte, $regs[0]); - $texte_vu .= typo(substr($letexte, 0, $pos)) . $insert; - $letexte = substr($letexte, $pos + strlen($regs[0])); + $inserts = array(); + if (preg_match_all($regexp, $letexte, $matches, PREG_SET_ORDER)) { + $i = 0; + foreach ($matches as $regs) { + list($insert) = extraire_lien($regs); + $inserts[++$i] = $insert; + $letexte = str_replace($regs[0], "@@SPIP_ECHAPPE$i@@", $letexte); + } + } + $letexte = typo($letexte); + foreach ($inserts as $i => $insert) { + $letexte = str_replace("@@SPIP_ECHAPPE$i@@", $insert, $letexte); } - $letexte = $texte_vu.typo($letexte); // typo de la queue du texte - - // // Tableaux @@ -971,6 +967,7 @@ function traiter_les_notes($mes_notes, $les_echap) { function traiter_raccourcis($letexte, $les_echap=false) { // echapper les <a href>, <html>...< /html>, <code>...< /code> + if (!$les_echap) list($letexte, $les_echap) = echappe_html($letexte, "SOURCEPROPRE"); list($letexte, $mes_notes) = traiter_raccourcis_generale($letexte);