Browse Source

fix: normaliser le balisage des blocs de code dans le rendu du texte avec une fonction `spip_balisage_code()` qui genere un `<div><pre><code>` si c'est un bloc de code ou un simple `<code>` si c'est du code en ligne

Refs: spip/textwheel#4843 #2504
remotes/checkIfPRContentChanged-1664355177598423573/balisage_pre_code
Cerdic 4 months ago
parent
commit
af2e9d6b3c
  1. 50
      ecrire/inc/texte_mini.php

50
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";
if ($langage) {
$class .= " $langage";
}
if ($bloc) {
$html = "<div class=\"precode p\">"
. "<pre class=\"$class\" dir=\"ltr\" style=\"text-align: left;\"$attributs>"
. "<code>"
. $echap
. '</code>'
. '</pre>'
. '</div>';
}
else {
$echap = str_replace("\t", "&nbsp; &nbsp; &nbsp; &nbsp; ", $echap);
$echap = str_replace(" ", " &nbsp;", $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", '&nbsp; &nbsp; &nbsp; &nbsp; ', $echap);
$echap = str_replace(' ', ' &nbsp;', $echap);
return $echap;
}

Loading…
Cancel
Save