diff --git a/lib/src/utils/markdown.dart b/lib/src/utils/markdown.dart index 18aae2b9..93a37eac 100644 --- a/lib/src/utils/markdown.dart +++ b/lib/src/utils/markdown.dart @@ -258,8 +258,21 @@ String markdown( // Remove trailing linebreaks .replaceAll(RegExp(r'(
)+$'), ''); if (convertLinebreaks) { - ret = ret.replaceAll('\n', '
'); + // Only convert linebreaks which are not in
 blocks
+    ret = ret.convertLinebreaksToBr();
   }
 
   return ret;
 }
+
+extension on String {
+  String convertLinebreaksToBr() {
+    final parts = split('pre>');
+    var convertLinebreaks = true;
+    for (var i = 0; i < parts.length; i++) {
+      if (convertLinebreaks) parts[i] = parts[i].replaceAll('\n', '
'); + convertLinebreaks = !convertLinebreaks; + } + return parts.join('pre>'); + } +} diff --git a/test/markdown_test.dart b/test/markdown_test.dart index 4445670a..4e88b5a4 100644 --- a/test/markdown_test.dart +++ b/test/markdown_test.dart @@ -123,5 +123,22 @@ void main() { expect(markdown('meep `\$\\frac{2}{3}\$`'), 'meep \$\\frac{2}{3}\$'); }); + test('Code blocks', () { + expect( + markdown( + '```dart\nvoid main(){\nprint(something);\n}\n```', + convertLinebreaks: true, + ), + '
void main(){\nprint(something);\n}\n
', + ); + + expect( + markdown( + 'The first \n codeblock\n```dart\nvoid main(){\nprint(something);\n}\n```\nAnd the second code block\n```js\nmeow\nmeow\n```', + convertLinebreaks: true, + ), + '

The first
codeblock


void main(){\nprint(something);\n}\n

And the second code block


meow\nmeow\n
', + ); + }); }); }