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
',
+ );
+ });
});
}