fix: Do not convert linebreaks in pre blocks on markdown parsing
This commit is contained in:
parent
8c638a7554
commit
6f144198b7
|
|
@ -258,8 +258,21 @@ String markdown(
|
||||||
// Remove trailing linebreaks
|
// Remove trailing linebreaks
|
||||||
.replaceAll(RegExp(r'(<br />)+$'), '');
|
.replaceAll(RegExp(r'(<br />)+$'), '');
|
||||||
if (convertLinebreaks) {
|
if (convertLinebreaks) {
|
||||||
ret = ret.replaceAll('\n', '<br/>');
|
// Only convert linebreaks which are not in <pre> blocks
|
||||||
|
ret = ret.convertLinebreaksToBr();
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
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', '<br/>');
|
||||||
|
convertLinebreaks = !convertLinebreaks;
|
||||||
|
}
|
||||||
|
return parts.join('pre>');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -123,5 +123,22 @@ void main() {
|
||||||
expect(markdown('meep `\$\\frac{2}{3}\$`'),
|
expect(markdown('meep `\$\\frac{2}{3}\$`'),
|
||||||
'meep <code>\$\\frac{2}{3}\$</code>');
|
'meep <code>\$\\frac{2}{3}\$</code>');
|
||||||
});
|
});
|
||||||
|
test('Code blocks', () {
|
||||||
|
expect(
|
||||||
|
markdown(
|
||||||
|
'```dart\nvoid main(){\nprint(something);\n}\n```',
|
||||||
|
convertLinebreaks: true,
|
||||||
|
),
|
||||||
|
'<pre><code class="language-dart">void main(){\nprint(something);\n}\n</code></pre>',
|
||||||
|
);
|
||||||
|
|
||||||
|
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,
|
||||||
|
),
|
||||||
|
'<p>The first<br/>codeblock</p><br/><pre><code class="language-dart">void main(){\nprint(something);\n}\n</code></pre><br/><p>And the second code block</p><br/><pre><code class="language-js">meow\nmeow\n</code></pre>',
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue