diff --git a/ecrire/inc_documents.php3 b/ecrire/inc_documents.php3 index a25af7a302738a2c3f7203a7ffac38950499044b..468324adb8afc1a2b0e1e6161fc264fa40c558a2 100644 --- a/ecrire/inc_documents.php3 +++ b/ecrire/inc_documents.php3 @@ -393,9 +393,8 @@ function inserer_documents($letexte) { static $pile = 0; if (++$pile > 5) return ''; - foreach ( - preg_match_all(__preg_img, $letexte, $matches, PREG_SET_ORDER) - as $match) { + preg_match_all(__preg_img, $letexte, $matches, PREG_SET_ORDER); + foreach ($matches as $match) { $type = strtoupper($match[1]); if ($type == 'EMB') $rempl = embed_document($match[2], $match[4]); diff --git a/ecrire/inc_math.php3 b/ecrire/inc_math.php3 index 8a9cd0251e4a29784a6a87d1a9b3a46dd1ef1c1a..1ddfbf84a8b59682de201a0f5e71397966cecdef 100644 --- a/ecrire/inc_math.php3 +++ b/ecrire/inc_math.php3 @@ -96,7 +96,7 @@ function traiter_math($letexte, $source='') { $echap = "\n<p class=\"spip\" style=\"text-align: center;\">".image_math($regs[1])."</p>\n"; $pos = strpos($texte_milieu, $regs[0]); $texte_milieu = substr($texte_milieu,0,$pos) - . code_echappement($echap, 'div', $source) + . code_echappement($echap, $source) . substr($texte_milieu,$pos+strlen($regs[0])); } @@ -105,7 +105,7 @@ function traiter_math($letexte, $source='') { $echap = image_math($regs[1]); $pos = strpos($texte_milieu, $regs[0]); $texte_milieu = substr($texte_milieu,0,$pos) - . code_echappement($echap, 'span', $source) + . code_echappement($echap, $source) . substr($texte_milieu,$pos+strlen($regs[0])); } diff --git a/ecrire/inc_texte.php3 b/ecrire/inc_texte.php3 index cc438f1bdd6f4db565e09b3e9338b3fece84bd0b..5b239baa9bcb524bf6cb7b079f958d7b2748f2e5 100644 --- a/ecrire/inc_texte.php3 +++ b/ecrire/inc_texte.php3 @@ -55,6 +55,15 @@ if (!tester_variable('puce', "<img class='spip_puce' src='puce.gif' alt='-' />&n // Diverses fonctions essentielles // + +// XHTML - Preserver les balises-bloc +define('_BALISES_BLOCS', + 'div|pre|ul|li|blockquote|h[1-5r]|' + .'t(able|[rdh]|body|foot)|' + .'form|object|center|marquee|address|' + .'d[ltd]|script|noscript|map|del|ins|button|fieldset'); + + // Ne pas afficher le chapo si article virtuel function nettoyer_chapo($chapo){ if (substr($chapo,0,1) == "="){ @@ -68,13 +77,16 @@ function nettoyer_chapo($chapo){ // Echapper les les elements perilleux en les passant en base64 // -// Inserer dans le $texte le bloc base64 correspondant a $rempl, en remplacement -// de $original ($mode=span|div ; au besoin en marquant une $source differente) -function code_echappement($rempl, $mode='span', $source='') { +// Creer un bloc base64 correspondant a $rempl ; au besoin en marquant +// une $source differente ; le script detecte automagiquement si ce qu'on +// echappe est un div ou un span +function code_echappement($rempl, $source='') { // Convertir en base64 $base64 = base64_encode($rempl); // Ajouter le span/div d'echappement + $mode = preg_match(',<('._BALISES_BLOCS.')[>[:space:]]>,', $rempl) ? + 'div' : 'span'; $nn = ($mode == 'div') ? "\n\n" : ''; return "<$mode class=\"base64$source\">$base64</$mode>$nn"; } @@ -143,7 +155,7 @@ function echappe_html($letexte, $source='', $no_transform=false) { } $letexte = str_replace($regs[0], - code_echappement($echap, $mode, $source), + code_echappement($echap, $source), $letexte); } @@ -834,20 +846,14 @@ function paragrapher($letexte) { if (preg_match(',<p[>[:space:]],i',$letexte)) { - // Preserver les balises-bloc (y compris "STOP P") - $blocs = 'STOP P|div|pre|ul|li|blockquote|h[1-5r]|' - .'t(able|[rdh]|body|foot)|' - .'form|object|center|marquee|address|' - .'d[ltd]|script|noscript|map|del|ins|button|fieldset'; - // Ajouter un espace aux <p> et un "STOP P" // transformer aussi les </p> existants en <p>, nettoyes ensuite $letexte = preg_replace(',</?p(\s([^>]*))?'.'>,i', '<STOP P><p \2>', '<p>'.$letexte.'<STOP P>'); - // Fermer les paragraphes + // Fermer les paragraphes (y compris sur "STOP P") $letexte = preg_replace( - ',(<p\s.*)(</?('.$blocs.')[>[:space:]]),Uims', + ',(<p\s.*)(</?(STOP P|'._BALISES_BLOCS.')[>[:space:]]),Uims', "\n\\1</p>\n\\2", $letexte); // Supprimer les marqueurs "STOP P" @@ -955,7 +961,7 @@ function traiter_raccourcis($letexte) { $insert = "$ouvre_ref$lien$num_note</a>$ferme_ref"; // on l'echappe - $insert = code_echappement($insert, 'span'); + $insert = code_echappement($insert); $appel = "$ouvre_note<a href=\"#nh$ancre\" name=\"nb$ancre\" class=\"spip_note\">$num_note</a>$ferme_note"; } else { @@ -967,7 +973,7 @@ function traiter_raccourcis($letexte) { if ($note_texte) { if ($mes_notes) $mes_notes .= "\n\n"; - $mes_notes .= code_echappement($appel, 'span') . $note_texte; + $mes_notes .= code_echappement($appel) . $note_texte; } // dans le texte, mettre l'appel de note a la place de la note