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", "&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;
 }