Skip to content
Extraits de code Groupes Projets
Valider 46765a00 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

fix: normaliser le balisage des blocs de code dans le rendu du texte avec une...

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
+ ajouter les classes `.spip_code_block` et `.spip_code_inline` pour distinguer les 2 usages, et par extension ajouter la classe `.spip_cadre_block`

Refs: spip/textwheel#4843 #2504
parent 69c5a5ff
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -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", "&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;
}
......@@ -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;
}
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter