Skip to content

Commit fbfb505

Browse files
committed
Fix leading and trailing whitespaces issue
1 parent cab3533 commit fbfb505

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

lib/html_parser.dart

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ class HtmlParser extends StatelessWidget {
173173
return EmptyContentElement();
174174
}
175175
} else if (node is dom.Text) {
176-
return TextContentElement(text: node.text, style: Style());
176+
return TextContentElement(text: node.text, style: Style(), element: node.parent, node: node);
177177
} else {
178178
return EmptyContentElement();
179179
}
@@ -465,14 +465,18 @@ class HtmlParser extends StatelessWidget {
465465
}
466466

467467
if (tree is TextContentElement) {
468-
if (wpc.data && tree.text!.startsWith(' ')) {
468+
int index = -1;
469+
if ((tree.element?.nodes.length ?? 0) > 1) {
470+
index = tree.element?.nodes.indexWhere((element) => element == tree.node) ?? -1;
471+
}
472+
if (index < 1 && tree.text!.startsWith(' ')
473+
&& tree.element?.localName != "br") {
469474
tree.text = tree.text!.replaceFirst(' ', '');
470475
}
471-
472-
if (tree.text!.endsWith(' ') || tree.text!.endsWith('\n')) {
473-
wpc.data = true;
474-
} else {
475-
wpc.data = false;
476+
if (index == (tree.element?.nodes.length ?? 1) - 1
477+
&& (tree.text!.endsWith(' ') || tree.text!.endsWith('\n'))
478+
&& tree.element?.localName != "br") {
479+
tree.text = tree.text!.trimRight();
476480
}
477481
}
478482

lib/src/replaced_element.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,14 @@ abstract class ReplacedElement extends StyledElement {
4444
/// [TextContentElement] is a [ContentElement] with plaintext as its content.
4545
class TextContentElement extends ReplacedElement {
4646
String? text;
47+
dom.Node? node;
4748

4849
TextContentElement({
4950
required Style style,
5051
required this.text,
51-
}) : super(name: "[text]", style: style);
52+
this.node,
53+
dom.Element? element,
54+
}) : super(name: "[text]", style: style, node: element);
5255

5356
@override
5457
String toString() {
@@ -290,6 +293,8 @@ ReplacedElement parseReplacedElement(
290293
return TextContentElement(
291294
text: "\n",
292295
style: Style(whiteSpace: WhiteSpace.PRE),
296+
element: element,
297+
node: element
293298
);
294299
case "iframe":
295300
return IframeContentElement(

0 commit comments

Comments
 (0)