Skip to content

Commit 1fa33d8

Browse files
authored
Merge pull request Sub6Resources#574 from tneotia/bugfix/leading-trailing-whitespaces
Fix leading and trailing whitespaces issue
2 parents 15c5cb5 + fbfb505 commit 1fa33d8

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
@@ -172,7 +172,7 @@ class HtmlParser extends StatelessWidget {
172172
return EmptyContentElement();
173173
}
174174
} else if (node is dom.Text) {
175-
return TextContentElement(text: node.text, style: Style());
175+
return TextContentElement(text: node.text, style: Style(), element: node.parent, node: node);
176176
} else {
177177
return EmptyContentElement();
178178
}
@@ -464,14 +464,18 @@ class HtmlParser extends StatelessWidget {
464464
}
465465

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

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)