From 36c2806bcc536bb376d50cc84b084ea3ca5350d6 Mon Sep 17 00:00:00 2001 From: Airyzz <36567925+Airyzz@users.noreply.github.com> Date: Sat, 26 Oct 2024 10:33:53 +1030 Subject: [PATCH] Update matrix_html_parser.dart --- .../atoms/rich_text/matrix_html_parser.dart | 43 +++++++++++++++++-- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/commet/lib/ui/atoms/rich_text/matrix_html_parser.dart b/commet/lib/ui/atoms/rich_text/matrix_html_parser.dart index 972192e7..6027b425 100644 --- a/commet/lib/ui/atoms/rich_text/matrix_html_parser.dart +++ b/commet/lib/ui/atoms/rich_text/matrix_html_parser.dart @@ -9,6 +9,7 @@ import 'package:commet/utils/text_utils.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter_html/flutter_html.dart'; +import 'package:flutter_html/flutter_html.dart' as html; import 'package:html/parser.dart' as html_parser; import 'package:html/dom.dart' as dom; import 'package:matrix/matrix.dart' as matrix; @@ -39,6 +40,7 @@ class _MatrixHtmlStateState extends State { static final CodeBlockHtmlExtension _codeBlock = CodeBlockHtmlExtension(); static final CodeHtmlExtension _code = CodeHtmlExtension(); static final LinkifyHtmlExtension _linkify = LinkifyHtmlExtension(); + static final LineBreakHtmlExtension _lineBreak = LineBreakHtmlExtension(); static const Set allowedHtmlTags = { 'body', @@ -107,6 +109,7 @@ class _MatrixHtmlStateState extends State { _codeBlock, _code, _linkify, + _lineBreak, imageExtension ], style: { @@ -127,14 +130,21 @@ class _MatrixHtmlStateState extends State { color: Theme.of(context).colorScheme.primary, width: 2, )), - padding: HtmlPaddings(left: HtmlPadding(4)), + padding: HtmlPaddings( + left: HtmlPadding(4), + ), margin: Margins( - bottom: Margin.zero(), - left: Margin(4), - top: Margin.zero(), + bottom: Margin(8), + left: Margin(8), + top: Margin(8), right: Margin.zero(), ), whiteSpace: WhiteSpace.pre, + ), + "p": Style( + border: Border.all(), + margin: Margins.all(0), + padding: HtmlPaddings.all(0), ) }, onLinkTap: (url, attributes, element) { @@ -259,6 +269,31 @@ class CodeBlockHtmlExtension extends HtmlExtension { Set get supportedTags => tags; } +class LineBreakHtmlExtension extends HtmlExtension { + @override + InlineSpan build(ExtensionContext context) { + var result = + context.parser.buildFromExtension(context, extensionsToIgnore: {this}); + + if (context.node is! dom.Element) { + return result; + } + + return TextSpan(children: [ + if (context.element?.previousElementSibling != null) + const TextSpan(text: "\n"), + result, + if (context.element?.nextElementSibling != null) + const TextSpan(text: "\n"), + ]); + } + + static const Set tags = {"p"}; + + @override + Set get supportedTags => tags; +} + class CodeHtmlExtension extends HtmlExtension { @override InlineSpan build(ExtensionContext context) {