diff --git a/lib/src/utils/markdown.dart b/lib/src/utils/markdown.dart index df55eabf..c6b86185 100644 --- a/lib/src/utils/markdown.dart +++ b/lib/src/utils/markdown.dart @@ -19,6 +19,8 @@ import 'package:markdown/markdown.dart'; import 'dart:convert'; +const htmlAttrEscape = HtmlEscape(HtmlEscapeMode.attribute); + class LinebreakSyntax extends InlineSyntax { LinebreakSyntax() : super(r'\n'); @@ -51,7 +53,7 @@ class SpoilerSyntax extends TagSyntax { bool onMatchEnd(InlineParser parser, Match match, TagState state) { final element = Element('span', state.children); element.attributes['data-mx-spoiler'] = - htmlEscape.convert(reasonMap[match.input] ?? ''); + htmlAttrEscape.convert(reasonMap[match.input] ?? ''); parser.addNode(element); return true; } @@ -84,9 +86,9 @@ class EmoteSyntax extends InlineSyntax { } final element = Element.empty('img'); element.attributes['data-mx-emoticon'] = ''; - element.attributes['src'] = htmlEscape.convert(mxc); - element.attributes['alt'] = htmlEscape.convert(emote); - element.attributes['title'] = htmlEscape.convert(emote); + element.attributes['src'] = htmlAttrEscape.convert(mxc); + element.attributes['alt'] = htmlAttrEscape.convert(emote); + element.attributes['title'] = htmlAttrEscape.convert(emote); element.attributes['height'] = '32'; element.attributes['vertical-align'] = 'middle'; parser.addNode(element); diff --git a/test/markdown_test.dart b/test/markdown_test.dart index 93532cc1..265ae0c1 100644 --- a/test/markdown_test.dart +++ b/test/markdown_test.dart @@ -54,11 +54,11 @@ void main() { }); test('emotes', () { expect(markdown(':fox:', emotePacks), - ':fox:'); + ':fox:'); expect(markdown(':user~fox:', emotePacks), - ':fox:'); + ':fox:'); expect(markdown(':raccoon:', emotePacks), - ':raccoon:'); + ':raccoon:'); expect(markdown(':invalid:', emotePacks), ':invalid:'); expect(markdown(':room~invalid:', emotePacks), ':room~invalid:'); });