refactor: Improve linebreak logic for html messages

This commit is contained in:
Krille 2025-02-06 14:47:18 +01:00
parent 41a9fbc76b
commit 2d3bfa64a7
No known key found for this signature in database
GPG Key ID: E067ECD60F1A0652
2 changed files with 33 additions and 6 deletions

View File

@ -212,7 +212,7 @@ String markdown(
bool convertLinebreaks = true,
}) {
var ret = markdownToHtml(
text,
text.replaceNewlines(),
extensionSet: ExtensionSet.commonMark,
blockSyntaxes: [
BlockLatexSyntax(),
@ -270,6 +270,18 @@ String markdown(
}
extension on String {
String replaceNewlines() {
// RegEx for at least 3 following \n
final regExp = RegExp(r'(\n{3,})');
return replaceAllMapped(regExp, (match) {
final newLineGroup = match.group(0)!;
return newLineGroup
.replaceAll('\n', '<br/>')
.replaceFirst('<br/><br/>', '\n\n');
});
}
String convertLinebreaksToBr(
String tagName, {
bool exclude = false,

View File

@ -70,14 +70,29 @@ void main() {
'Snape killed <span data-mx-spoiler="">Dumbledoor <strong>bold</strong></span>',
);
});
test('multiple paragraphs', () {
test('linebreaks', () {
expect(markdown('Heya!\nBeep'), 'Heya!<br/>Beep');
expect(markdown('Heya!\n\nBeep'), '<p>Heya!</p><p>Beep</p>');
expect(markdown('Heya!\n\n\nBeep'), '<p>Heya!</p><p><br/>Beep</p>');
expect(
markdown('Heya!\n\n\n\nBeep'),
'<p>Heya!</p><p><br/><br/>Beep</p>',
);
expect(
markdown('Heya!\n\n\n\nBeep\n\n'),
'<p>Heya!</p><p><br/><br/>Beep</p>',
);
expect(
markdown('\n\nHeya!\n\n\n\nBeep'),
'<p>Heya!</p><p><br/><br/>Beep</p>',
);
expect(
markdown('\n\nHeya!\n\n\n\nBeep\n '),
'<p>Heya!</p><p><br/><br/>Beep</p>',
);
});
test('Other block elements', () {
expect(markdown('# blah\n\nblubb'), '<h1>blah</h1><p>blubb</p>');
});
test('linebreaks', () {
expect(markdown('foxies\ncute'), 'foxies<br/>cute');
expect(markdown('# blah\n\nblubb'), '<h1>blah</h1><p><br/>blubb</p>');
});
test('lists', () {
expect(