diff --git a/ecrire/inc/texte_mini.php b/ecrire/inc/texte_mini.php index 7b4a8e0a2770ac19c61cf9de23af4a887319f82c..ba2a84dbf1e66add371547e89a4908701bf69be2 100644 --- a/ecrire/inc/texte_mini.php +++ b/ecrire/inc/texte_mini.php @@ -56,6 +56,40 @@ function definir_puce() { return $GLOBALS[$p]; } +/** + * Preparer le markup html pour les extraits de code en ligne ou en bloc + * + * @param string $corps + * @param bool $bloc + * @param string $attributs + * @param string $langage + * @return string + */ +function spip_balisage_code(string $corps, bool $bloc = false, string $attributs = '', string $langage = '') { + + $echap = spip_htmlspecialchars($corps); // il ne faut pas passer dans entites_html, ne pas transformer les &#xxx; du code ! + $class = "spip_code " . ($bloc ? 'spip_code_block' : 'spip_code_inline'); + if ($langage) { + $class .= " $langage"; + } + if ($bloc) { + $html = "<div class=\"precode\">" + . "<pre class=\"$class\" dir=\"ltr\" style=\"text-align: left;\"$attributs>" + . "<code>" + . $echap + . '</code>' + . '</pre>' + . '</div>'; + } + else { + $echap = str_replace("\t", " ", $echap); + $echap = str_replace(" ", " ", $echap); + $html = "<code class=\"$class\" dir=\"ltr\" $attributs>" . $echap . '</code>'; + } + + return $html; +} + // XHTML - Preserver les balises-bloc : on liste ici tous les elements // dont on souhaite qu'ils provoquent un saut de paragraphe @@ -131,24 +165,18 @@ function traiter_echap_pre_dist($regs, $options = []) { // Echapper les <code>...</ code> function traiter_echap_code_dist($regs, $options = []) { [, , $att, $corps] = $regs; - $echap = spip_htmlspecialchars($corps); // il ne faut pas passer dans entites_html, ne pas transformer les &#xxx; du code ! // ne pas mettre le <div...> s'il n'y a qu'une ligne - if (is_int(strpos($echap, "\n"))) { + if (strpos($corps, "\n") !== false) { // supprimer les sauts de ligne debut/fin // (mais pas les espaces => ascii art). - $echap = preg_replace("/^[\n\r]+|[\n\r]+$/s", '', $echap); - $echap = nl2br($echap); - $echap = "<div style='text-align: left;' " - . "class='spip_code' dir='ltr'><code$att>" - . $echap . '</code></div>'; + $corps = preg_replace("/^[\n\r]+|[\n\r]+$/s", '', $corps); + + $echap = spip_balisage_code($corps, true, $att); } else { - $echap = "<code$att class='spip_code' dir='ltr'>" . $echap . '</code>'; + $echap = spip_balisage_code($corps, false, $att); } - $echap = str_replace("\t", ' ', $echap); - $echap = str_replace(' ', ' ', $echap); - return $echap; } @@ -162,7 +190,7 @@ function traiter_echap_cadre_dist($regs, $options = []) { $n += floor(strlen($l) / 60) + 1; } $n = max($n, 2); - $echap = "\n<textarea readonly='readonly' cols='40' rows='$n' class='spip_cadre' dir='ltr'>$echap</textarea>"; + $echap = "\n<textarea readonly='readonly' cols='40' rows='$n' class='spip_cadre spip_cadre_block' dir='ltr'>$echap</textarea>"; return $echap; }