Skip to content

Commit

Permalink
Update matrix_html_parser.dart
Browse files Browse the repository at this point in the history
  • Loading branch information
Airyzz committed Oct 26, 2024
1 parent 4fd7d2a commit 36c2806
Showing 1 changed file with 39 additions and 4 deletions.
43 changes: 39 additions & 4 deletions commet/lib/ui/atoms/rich_text/matrix_html_parser.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -39,6 +40,7 @@ class _MatrixHtmlStateState extends State<MatrixHtmlState> {
static final CodeBlockHtmlExtension _codeBlock = CodeBlockHtmlExtension();
static final CodeHtmlExtension _code = CodeHtmlExtension();
static final LinkifyHtmlExtension _linkify = LinkifyHtmlExtension();
static final LineBreakHtmlExtension _lineBreak = LineBreakHtmlExtension();

static const Set<String> allowedHtmlTags = {
'body',
Expand Down Expand Up @@ -107,6 +109,7 @@ class _MatrixHtmlStateState extends State<MatrixHtmlState> {
_codeBlock,
_code,
_linkify,
_lineBreak,
imageExtension
],
style: {
Expand All @@ -127,14 +130,21 @@ class _MatrixHtmlStateState extends State<MatrixHtmlState> {
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) {
Expand Down Expand Up @@ -259,6 +269,31 @@ class CodeBlockHtmlExtension extends HtmlExtension {
Set<String> 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<String> tags = {"p"};

@override
Set<String> get supportedTags => tags;
}

class CodeHtmlExtension extends HtmlExtension {
@override
InlineSpan build(ExtensionContext context) {
Expand Down

0 comments on commit 36c2806

Please sign in to comment.