diff --git a/src/__tests__/fixtures/argument-tag-nested-parens/__snapshots__/argument-tag-nested-parens.expected.txt b/src/__tests__/fixtures/argument-tag-nested-parens/__snapshots__/argument-tag-nested-parens.expected.txt
index ed2d5d30..ba5b451e 100644
--- a/src/__tests__/fixtures/argument-tag-nested-parens/__snapshots__/argument-tag-nested-parens.expected.txt
+++ b/src/__tests__/fixtures/argument-tag-nested-parens/__snapshots__/argument-tag-nested-parens.expected.txt
@@ -4,12 +4,9 @@
│ ││ │╰─ tagArgs.value "notEmpty(data.colors)"
│ ││ ╰─ tagArgs "(notEmpty(data.colors))"
│ │╰─ tagName "if"
- │ ├─ text "\n"
╰─ ╰─ openTagStart
3╭─
│ │ │ ╰─ closeTagEnd(if)
│ │ ╰─ closeTagName "if"
- │ ├─ text "\n"
╰─ ╰─ closeTagStart ""
-4╭─ ---
- ╰─ ╰─ text "\n"
\ No newline at end of file
+4╰─ ---
\ No newline at end of file
diff --git a/src/__tests__/fixtures/complex/__snapshots__/complex.expected.txt b/src/__tests__/fixtures/complex/__snapshots__/complex.expected.txt
index 08463b71..0248dcc1 100644
--- a/src/__tests__/fixtures/complex/__snapshots__/complex.expected.txt
+++ b/src/__tests__/fixtures/complex/__snapshots__/complex.expected.txt
@@ -1,13 +1,13 @@
1╭─ --
2╭─ This is top-level text
- ╰─ ╰─ text "\nThis is top-level text\n"
+ ╰─ ╰─ text "This is top-level text"
3├─ --
4╭─ p
╰─ ╰─ tagName
5╭─ --
╰─ ╰─ openTagEnd
6╭─ This is text that spans multiple lines.
- ╰─ ╰─ text "\n This is text that spans multiple lines.\n\n "
+ ╰─ ╰─ text "This is text that spans multiple lines.\n"
7├─
8╭─ You can throw in some HTML markup if you want!
│ ││ ││ │ │ ╰─ closeTagEnd(strong)
@@ -17,18 +17,20 @@
│ ││ ╰─ openTagEnd
│ │╰─ tagName "strong"
╰─ ╰─ openTagStart
-9╭─ --
- ╰─ ╰─ text "\n"
+9├─ --
10╭─ p
│ ├─ closeTagEnd(p)
╰─ ╰─ tagName
11╭─ -----
╰─ ╰─ openTagEnd
12╭─ If you really want to you can change the block delimiter for the following
- ╰─ ╰─ text "\n If you really want to you can change the block delimiter for the following\n reasons:\n - Avoid accidentally ending a block\n - To improve readability\n"
-13├─ reasons:
-14├─ - Avoid accidentally ending a block
-15├─ - To improve readability
+ ╰─ ╰─ text "If you really want to you can change the block delimiter for the following"
+13╭─ reasons:
+ ╰─ ╰─ text "reasons:"
+14╭─ - Avoid accidentally ending a block
+ ╰─ ╰─ text "- Avoid accidentally ending a block"
+15╭─ - To improve readability
+ ╰─ ╰─ text "- To improve readability"
16├─ -----
17╭─ i -- This text will be in italics
│ │ │ ╰─ text "This text will be in italics"
diff --git a/src/__tests__/fixtures/concise-multiline-content/__snapshots__/concise-multiline-content.expected.txt b/src/__tests__/fixtures/concise-multiline-content/__snapshots__/concise-multiline-content.expected.txt
index ff3cce84..a2f34d8f 100644
--- a/src/__tests__/fixtures/concise-multiline-content/__snapshots__/concise-multiline-content.expected.txt
+++ b/src/__tests__/fixtures/concise-multiline-content/__snapshots__/concise-multiline-content.expected.txt
@@ -1,10 +1,10 @@
1╭─ --
2╭─ hi
- ╰─ ╰─ text "\nhi\n"
+ ╰─ ╰─ text "hi"
3├─ --
4├─
5├─ --
6╭─ foo
- ╰─ ╰─ text "\nfoo\n\n"
+ ╰─ ╰─ text "foo"
7├─
8╰─
\ No newline at end of file
diff --git a/src/__tests__/fixtures/double-hyphen-block/__snapshots__/double-hyphen-block.expected.txt b/src/__tests__/fixtures/double-hyphen-block/__snapshots__/double-hyphen-block.expected.txt
index d16a7b6b..62958ace 100644
--- a/src/__tests__/fixtures/double-hyphen-block/__snapshots__/double-hyphen-block.expected.txt
+++ b/src/__tests__/fixtures/double-hyphen-block/__snapshots__/double-hyphen-block.expected.txt
@@ -20,7 +20,7 @@
6╭─ ---
╰─ ╰─ openTagEnd
7╭─ var a = 'marko';
- ╰─ ╰─ text "\n var a = 'marko';\n"
+ ╰─ ╰─ text "var a = 'marko';"
8╭─ ---
│ ├─ closeTagEnd(html)
│ ├─ closeTagEnd(body)
diff --git a/src/__tests__/fixtures/multiline-html-block-empty/__snapshots__/multiline-html-block-empty.expected.txt b/src/__tests__/fixtures/multiline-html-block-empty/__snapshots__/multiline-html-block-empty.expected.txt
index b4f6e3cb..22363d14 100644
--- a/src/__tests__/fixtures/multiline-html-block-empty/__snapshots__/multiline-html-block-empty.expected.txt
+++ b/src/__tests__/fixtures/multiline-html-block-empty/__snapshots__/multiline-html-block-empty.expected.txt
@@ -1,3 +1,2 @@
1╭─ ---
-2╭─ ---
- ╰─ ╰─ text "\n"
\ No newline at end of file
+2╰─ ---
\ No newline at end of file
diff --git a/src/__tests__/fixtures/multiline-html-block-missing-end/__snapshots__/multiline-html-block-missing-end.expected.txt b/src/__tests__/fixtures/multiline-html-block-missing-end/__snapshots__/multiline-html-block-missing-end.expected.txt
index e397d73c..13a4a3ec 100644
--- a/src/__tests__/fixtures/multiline-html-block-missing-end/__snapshots__/multiline-html-block-missing-end.expected.txt
+++ b/src/__tests__/fixtures/multiline-html-block-missing-end/__snapshots__/multiline-html-block-missing-end.expected.txt
@@ -3,19 +3,21 @@
2╭─ --
╰─ ╰─ openTagEnd
3╭─ Hello World
- ╰─ ╰─ text "\n Hello World\n Hello Again\n"
-4├─ Hello Again
+ ╰─ ╰─ text "Hello World"
+4╭─ Hello Again
+ ╰─ ╰─ text "Hello Again"
5├─
6╭─ script --
│ │ ╰─ openTagEnd
│ ├─ closeTagEnd(div)
╰─ ╰─ tagName "script"
7╭─ console.log('foo');
- ╰─ ╰─ text "\n console.log('foo');\n alert('bar');\n"
-8├─ alert('bar');
+ ╰─ ╰─ text "console.log('foo');"
+8╭─ alert('bar');
+ ╰─ ╰─ text "alert('bar');"
9├─
10╭─ --
╰─ ╰─ closeTagEnd(script)
11╭─ Multi-line text
- ╰─ ╰─ text "\nMulti-line text\nReached EOF"
+ ╰─ ╰─ text "Multi-line text\nReached EOF"
12╰─ Reached EOF
\ No newline at end of file
diff --git a/src/__tests__/fixtures/multiline-html-block-nested-empty/__snapshots__/multiline-html-block-nested-empty.expected.txt b/src/__tests__/fixtures/multiline-html-block-nested-empty/__snapshots__/multiline-html-block-nested-empty.expected.txt
index b5003489..49cd64dc 100644
--- a/src/__tests__/fixtures/multiline-html-block-nested-empty/__snapshots__/multiline-html-block-nested-empty.expected.txt
+++ b/src/__tests__/fixtures/multiline-html-block-nested-empty/__snapshots__/multiline-html-block-nested-empty.expected.txt
@@ -3,5 +3,4 @@
2╭─ ---
╰─ ╰─ openTagEnd
3╭─ ---
- │ │ ╰─ closeTagEnd(p)
- ╰─ ╰─ text "\n"
\ No newline at end of file
+ ╰─ ╰─ closeTagEnd(p)
\ No newline at end of file
diff --git a/src/__tests__/fixtures/multiline-html-block-nested/__snapshots__/multiline-html-block-nested.expected.txt b/src/__tests__/fixtures/multiline-html-block-nested/__snapshots__/multiline-html-block-nested.expected.txt
index 172cc19e..e17bf298 100644
--- a/src/__tests__/fixtures/multiline-html-block-nested/__snapshots__/multiline-html-block-nested.expected.txt
+++ b/src/__tests__/fixtures/multiline-html-block-nested/__snapshots__/multiline-html-block-nested.expected.txt
@@ -3,15 +3,15 @@
2╭─ ---
╰─ ╰─ openTagEnd
3╭─ Hello Frank
- │ │ ││ ││ │ │ ╰─ closeTagEnd(strong)
- │ │ ││ ││ │ ╰─ closeTagName "strong"
- │ │ ││ ││ ╰─ closeTagStart ""
- │ │ ││ │╰─ text "Frank"
- │ │ ││ ╰─ openTagEnd
- │ │ │╰─ tagName "strong"
- │ │ ╰─ openTagStart
- ╰─ ╰─ text "\n Hello "
+ │ │ ││ ││ │ │ ╰─ closeTagEnd(strong)
+ │ │ ││ ││ │ ╰─ closeTagName "strong"
+ │ │ ││ ││ ╰─ closeTagStart ""
+ │ │ ││ │╰─ text "Frank"
+ │ │ ││ ╰─ openTagEnd
+ │ │ │╰─ tagName "strong"
+ │ │ ╰─ openTagStart
+ ╰─ ╰─ text "Hello "
4╭─ Line 2
- ╰─ ╰─ text "\n Line 2\n"
+ ╰─ ╰─ text "Line 2"
5╭─ ---
╰─ ╰─ closeTagEnd(p)
\ No newline at end of file
diff --git a/src/__tests__/fixtures/multiline-html-block-same-line/__snapshots__/multiline-html-block-same-line.expected.txt b/src/__tests__/fixtures/multiline-html-block-same-line/__snapshots__/multiline-html-block-same-line.expected.txt
index baa645ec..2045ca4f 100644
--- a/src/__tests__/fixtures/multiline-html-block-same-line/__snapshots__/multiline-html-block-same-line.expected.txt
+++ b/src/__tests__/fixtures/multiline-html-block-same-line/__snapshots__/multiline-html-block-same-line.expected.txt
@@ -2,14 +2,15 @@
│ │ ╰─ openTagEnd
╰─ ╰─ tagName "div"
2╭─ Hello World
- ╰─ ╰─ text "\n Hello World\n Hello Again\n"
-3├─ Hello Again
+ ╰─ ╰─ text "Hello World"
+3╭─ Hello Again
+ ╰─ ╰─ text "Hello Again"
4├─ --
5╭─ span --
│ │ ╰─ openTagEnd
╰─ ╰─ tagName "span"
6╭─ Goodbye
- ╰─ ╰─ text "\n Goodbye\n"
+ ╰─ ╰─ text "Goodbye"
7╭─ --
│ ├─ closeTagEnd(div)
╰─ ╰─ closeTagEnd(span)
\ No newline at end of file
diff --git a/src/__tests__/fixtures/multiline-html-block/__snapshots__/multiline-html-block.expected.txt b/src/__tests__/fixtures/multiline-html-block/__snapshots__/multiline-html-block.expected.txt
index 8e63b53b..bf19c0ee 100644
--- a/src/__tests__/fixtures/multiline-html-block/__snapshots__/multiline-html-block.expected.txt
+++ b/src/__tests__/fixtures/multiline-html-block/__snapshots__/multiline-html-block.expected.txt
@@ -7,7 +7,7 @@
│ │ ││ ╰─ openTagEnd
│ │ │╰─ tagName "strong"
│ │ ╰─ openTagStart
- ╰─ ╰─ text "\nHello "
+ ╰─ ╰─ text "Hello "
3╭─ Line 2
- ╰─ ╰─ text "\nLine 2\n"
+ ╰─ ╰─ text "Line 2"
4╰─ ---
\ No newline at end of file
diff --git a/src/__tests__/fixtures/multiline-text-block-bad/__snapshots__/multiline-text-block-bad.expected.txt b/src/__tests__/fixtures/multiline-text-block-bad/__snapshots__/multiline-text-block-bad.expected.txt
index e27b0450..a84ee497 100644
--- a/src/__tests__/fixtures/multiline-text-block-bad/__snapshots__/multiline-text-block-bad.expected.txt
+++ b/src/__tests__/fixtures/multiline-text-block-bad/__snapshots__/multiline-text-block-bad.expected.txt
@@ -1,6 +1,6 @@
1╭─ --
2╭─ A
- ╰─ ╰─ text "\nA\n"
+ ╰─ ╰─ text
3╭─ ---
╰─ ╰─ error(INVALID_CHARACTER:A concise mode closing block delimiter can only be followed by whitespace.)
4├─ B
diff --git a/src/__tests__/fixtures/multiline-text-block-with-hyphens/__snapshots__/multiline-text-block-with-hyphens.expected.txt b/src/__tests__/fixtures/multiline-text-block-with-hyphens/__snapshots__/multiline-text-block-with-hyphens.expected.txt
index 854d86a3..38e5e229 100644
--- a/src/__tests__/fixtures/multiline-text-block-with-hyphens/__snapshots__/multiline-text-block-with-hyphens.expected.txt
+++ b/src/__tests__/fixtures/multiline-text-block-with-hyphens/__snapshots__/multiline-text-block-with-hyphens.expected.txt
@@ -1,5 +1,5 @@
1╭─ ---
2╭─ - Line 1
- ╰─ ╰─ text "\n- Line 1\n- Line 2\n"
+ ╰─ ╰─ text "- Line 1\n- Line 2"
3├─ - Line 2
4╰─ ---
\ No newline at end of file
diff --git a/src/__tests__/fixtures/multiline-text-block/__snapshots__/multiline-text-block.expected.txt b/src/__tests__/fixtures/multiline-text-block/__snapshots__/multiline-text-block.expected.txt
index 9fb66610..18d96eac 100644
--- a/src/__tests__/fixtures/multiline-text-block/__snapshots__/multiline-text-block.expected.txt
+++ b/src/__tests__/fixtures/multiline-text-block/__snapshots__/multiline-text-block.expected.txt
@@ -1,5 +1,5 @@
1╭─ ---
2╭─ Line 1
- ╰─ ╰─ text "\nLine 1\nLine 2\n"
+ ╰─ ╰─ text "Line 1\nLine 2"
3├─ Line 2
4╰─ ---
\ No newline at end of file
diff --git a/src/__tests__/fixtures/nested-text/__snapshots__/nested-text.expected.txt b/src/__tests__/fixtures/nested-text/__snapshots__/nested-text.expected.txt
index 1470e089..fc065b37 100644
--- a/src/__tests__/fixtures/nested-text/__snapshots__/nested-text.expected.txt
+++ b/src/__tests__/fixtures/nested-text/__snapshots__/nested-text.expected.txt
@@ -3,8 +3,9 @@
2╭─ ---
╰─ ╰─ openTagEnd
3╭─ This is
- ╰─ ╰─ text "\n This is\n multi-line text\n"
-4├─ multi-line text
+ ╰─ ╰─ text "This is"
+4╭─ multi-line text
+ ╰─ ╰─ text "multi-line text"
5├─ ---
6╭─ span -- This is body text of span
│ │ │ ╰─ text "This is body text of span"
diff --git a/src/__tests__/fixtures/open-tag-only-with-body/__snapshots__/open-tag-only-with-body.expected.txt b/src/__tests__/fixtures/open-tag-only-with-body/__snapshots__/open-tag-only-with-body.expected.txt
index 56cea64d..b78d932e 100644
--- a/src/__tests__/fixtures/open-tag-only-with-body/__snapshots__/open-tag-only-with-body.expected.txt
+++ b/src/__tests__/fixtures/open-tag-only-with-body/__snapshots__/open-tag-only-with-body.expected.txt
@@ -5,10 +5,9 @@
│ ││ │ ╰─ attrValue "=\"marko.png\""
│ ││ ╰─ attrName "src"
│ │╰─ tagName "img"
- │ ├─ text "\n"
╰─ ╰─ openTagStart
3╭─ This is not allowed!
- ╰─ ╰─ text "\n This is not allowed!\n"
+ ╰─ ╰─ text " This is not allowed!\n"
4╭─
│ ├─ error(EXTRA_CLOSING_TAG:The closing "img" tag was not expected) ""
╰─ ╰─ closeTagStart ""
diff --git a/src/__tests__/fixtures/script-concise/__snapshots__/script-concise.expected.txt b/src/__tests__/fixtures/script-concise/__snapshots__/script-concise.expected.txt
index e2006556..b36ae089 100644
--- a/src/__tests__/fixtures/script-concise/__snapshots__/script-concise.expected.txt
+++ b/src/__tests__/fixtures/script-concise/__snapshots__/script-concise.expected.txt
@@ -3,8 +3,9 @@
2╭─ ---
╰─ ╰─ openTagEnd
3╭─ This is text
- ╰─ ╰─ text "\n This is text\n within the block\n"
-4├─ within the block
+ ╰─ ╰─ text "This is text"
+4╭─ within the block
+ ╰─ ╰─ text "within the block"
5├─ ---
6╭─ -- This should be okay too
╰─ ╰─ text "This should be okay too"
diff --git a/src/__tests__/fixtures/scriptlet-block-html/__snapshots__/scriptlet-block-html.expected.txt b/src/__tests__/fixtures/scriptlet-block-html/__snapshots__/scriptlet-block-html.expected.txt
index 91a25c1f..ad97be60 100644
--- a/src/__tests__/fixtures/scriptlet-block-html/__snapshots__/scriptlet-block-html.expected.txt
+++ b/src/__tests__/fixtures/scriptlet-block-html/__snapshots__/scriptlet-block-html.expected.txt
@@ -1,10 +1,8 @@
1╭─ ---
2╭─ $ {
- │ ├─ text "\n"
╰─ ╰─ scriptlet:block "$ {\n var foo = 123;\n var bar = 456;\n}"
3╭─ var foo = 123;
╰─ ╰─ scriptlet:block.value "\n var foo = 123;\n var bar = 456;\n"
4├─ var bar = 456;
5├─ }
-6╭─ ---
- ╰─ ╰─ text "\n"
\ No newline at end of file
+6╰─ ---
\ No newline at end of file
diff --git a/src/__tests__/fixtures/scriptlet-line-html/__snapshots__/scriptlet-line-html.expected.txt b/src/__tests__/fixtures/scriptlet-line-html/__snapshots__/scriptlet-line-html.expected.txt
index dd9267bc..cc90cb37 100644
--- a/src/__tests__/fixtures/scriptlet-line-html/__snapshots__/scriptlet-line-html.expected.txt
+++ b/src/__tests__/fixtures/scriptlet-line-html/__snapshots__/scriptlet-line-html.expected.txt
@@ -1,7 +1,5 @@
1╭─ ---
2╭─ $ var foo = 123;
│ │ ╰─ scriptlet.value "var foo = 123;"
- │ ├─ text "\n"
╰─ ╰─ scriptlet "$ var foo = 123;"
-3╭─ ---
- ╰─ ╰─ text "\n"
\ No newline at end of file
+3╰─ ---
\ No newline at end of file
diff --git a/src/__tests__/fixtures/scriptlet-line-no-middle-html/__snapshots__/scriptlet-line-no-middle-html.expected.txt b/src/__tests__/fixtures/scriptlet-line-no-middle-html/__snapshots__/scriptlet-line-no-middle-html.expected.txt
index 7a43d8d8..9de0a6ff 100644
--- a/src/__tests__/fixtures/scriptlet-line-no-middle-html/__snapshots__/scriptlet-line-no-middle-html.expected.txt
+++ b/src/__tests__/fixtures/scriptlet-line-no-middle-html/__snapshots__/scriptlet-line-no-middle-html.expected.txt
@@ -1,4 +1,4 @@
1╭─ ---
2╭─ hello $ var foo = 123;
- ╰─ ╰─ text "\nhello $ var foo = 123;\n"
+ ╰─ ╰─ text "hello $ var foo = 123;"
3╰─ ---
\ No newline at end of file
diff --git a/src/__tests__/fixtures/simple-text-delimited/__snapshots__/simple-text-delimited.expected.txt b/src/__tests__/fixtures/simple-text-delimited/__snapshots__/simple-text-delimited.expected.txt
index 3a420756..09e75039 100644
--- a/src/__tests__/fixtures/simple-text-delimited/__snapshots__/simple-text-delimited.expected.txt
+++ b/src/__tests__/fixtures/simple-text-delimited/__snapshots__/simple-text-delimited.expected.txt
@@ -1,5 +1,5 @@
1╭─ ---
2╭─ test
- ╰─ ╰─ text "\ntest\n"
+ ╰─ ╰─ text "test"
3├─ ---
4╰─
\ No newline at end of file
diff --git a/src/__tests__/fixtures/tag-var-before-concise-text/__snapshots__/tag-var-before-concise-text.expected.txt b/src/__tests__/fixtures/tag-var-before-concise-text/__snapshots__/tag-var-before-concise-text.expected.txt
index 360f1fd3..9aee8217 100644
--- a/src/__tests__/fixtures/tag-var-before-concise-text/__snapshots__/tag-var-before-concise-text.expected.txt
+++ b/src/__tests__/fixtures/tag-var-before-concise-text/__snapshots__/tag-var-before-concise-text.expected.txt
@@ -4,8 +4,10 @@
│ │ ╰─ tagVar "/style"
╰─ ╰─ tagName "style"
2╭─ header {
- ╰─ ╰─ text "\n header {\n color: green\n }\n"
-3├─ color: green
-4├─ }
+ ╰─ ╰─ text "header {"
+3╭─ color: green
+ ╰─ ╰─ text " color: green"
+4╭─ }
+ ╰─ ╰─ text
5╭─
╰─ ╰─ closeTagEnd(style)
\ No newline at end of file
diff --git a/src/__tests__/fixtures/text-parse-mode-delimited-block/__snapshots__/text-parse-mode-delimited-block.expected.txt b/src/__tests__/fixtures/text-parse-mode-delimited-block/__snapshots__/text-parse-mode-delimited-block.expected.txt
index a0e38ccb..bc995269 100644
--- a/src/__tests__/fixtures/text-parse-mode-delimited-block/__snapshots__/text-parse-mode-delimited-block.expected.txt
+++ b/src/__tests__/fixtures/text-parse-mode-delimited-block/__snapshots__/text-parse-mode-delimited-block.expected.txt
@@ -6,7 +6,7 @@
3╭─ ---
╰─ ╰─ openTagEnd
4╭─ Test
- ╰─ ╰─ text "\n Test\n "
+ ╰─ ╰─ text "Test"
5╭─ Hello World
│ ││││ │ │╰─ closeTagEnd(b)
│ ││││ │ ╰─ closeTagName
@@ -16,6 +16,5 @@
│ │╰─ tagName
╰─ ╰─ openTagStart
6╭─ ---
- │ │ ├─ closeTagEnd(div)
- │ │ ╰─ closeTagEnd(span)
- ╰─ ╰─ text "\n"
\ No newline at end of file
+ │ ├─ closeTagEnd(div)
+ ╰─ ╰─ closeTagEnd(span)
\ No newline at end of file
diff --git a/src/__tests__/fixtures/whitespace-preservation/__snapshots__/whitespace-preservation.expected.txt b/src/__tests__/fixtures/whitespace-preservation/__snapshots__/whitespace-preservation.expected.txt
index b01d549b..b7d4cf5f 100644
--- a/src/__tests__/fixtures/whitespace-preservation/__snapshots__/whitespace-preservation.expected.txt
+++ b/src/__tests__/fixtures/whitespace-preservation/__snapshots__/whitespace-preservation.expected.txt
@@ -32,7 +32,7 @@
│ ├─ closeTagEnd(span)
╰─ ╰─ tagName "span"
11╭─ hi
- ╰─ ╰─ text "\n hi\n"
+ ╰─ ╰─ text "hi"
12├─
13╭─ span.e --
│ │ ││ ╰─ openTagEnd
@@ -41,8 +41,9 @@
│ ├─ closeTagEnd(span)
╰─ ╰─ tagName "span"
14╭─ hi
- ╰─ ╰─ text "\n hi\n you\n"
-15├─ you
+ ╰─ ╰─ text "hi"
+15╭─ you
+ ╰─ ╰─ text "you"
16├─
17╭─ span.f
│ │ │╰─ tagShorthandClass.quasis[0]
@@ -52,7 +53,7 @@
18╭─ --
╰─ ╰─ openTagEnd
19╭─ hi
- ╰─ ╰─ text "\n hi\n"
+ ╰─ ╰─ text "hi"
20├─ --
21├─
22╭─ span.g
@@ -63,8 +64,9 @@
23╭─ --
╰─ ╰─ openTagEnd
24╭─ hi
- ╰─ ╰─ text "\n hi\n you\n"
-25├─ you
+ ╰─ ╰─ text "hi"
+25╭─ you
+ ╰─ ╰─ text "you"
26├─ --
27├─
28╭─ hi
diff --git a/src/core/Parser.ts b/src/core/Parser.ts
index be73e713..6e0ff88e 100644
--- a/src/core/Parser.ts
+++ b/src/core/Parser.ts
@@ -152,7 +152,9 @@ export class Parser {
endText() {
const start = this.textPos;
if (start !== -1) {
- this.options.onText?.({ start, end: this.pos });
+ if (start !== this.pos) {
+ this.options.onText?.({ start, end: this.pos });
+ }
this.textPos = -1;
}
}
diff --git a/src/states/BEGIN_DELIMITED_HTML_BLOCK.ts b/src/states/BEGIN_DELIMITED_HTML_BLOCK.ts
index 5b7036c7..96408d42 100644
--- a/src/states/BEGIN_DELIMITED_HTML_BLOCK.ts
+++ b/src/states/BEGIN_DELIMITED_HTML_BLOCK.ts
@@ -6,6 +6,7 @@ import {
htmlEOF,
type Meta,
ErrorCode,
+ isWhitespaceCode,
} from "../internal";
export interface DelimitedHTMLBlockMeta extends Meta {
@@ -95,10 +96,9 @@ function handleDelimitedBlockEOL(
const endHtmlBlockLookahead = indent + delimiter;
if (parser.lookAheadFor(endHtmlBlockLookahead, parser.pos + newLineLength)) {
- parser.startText(); // we want to at least include the newline as text.
- parser.pos += newLineLength;
parser.endText();
- parser.pos += endHtmlBlockLookahead.length;
+ parser.pos += newLineLength + endHtmlBlockLookahead.length;
+ parser.forward = 0;
if (parser.consumeWhitespaceOnLine(0)) {
parser.exitState();
@@ -111,20 +111,30 @@ function handleDelimitedBlockEOL(
);
}
} else if (parser.lookAheadFor(indent, parser.pos + newLineLength)) {
+ parser.endText();
// We know the next line does not end the multiline HTML block, but we need to check if there
// is any indentation that we need to skip over as we continue parsing the HTML in this
// multiline HTML block
+ parser.pos += newLineLength + indent.length;
+ parser.forward = 0;
parser.startText();
- parser.pos += indent.length;
// We stay in the same state since we are still parsing a multiline, delimited HTML block
} else if (indent && !parser.onlyWhitespaceRemainsOnLine(newLineLength)) {
// the next line does not have enough indentation
// so unless it is blank (whitespace only),
// we will end the block
+ const pos = parser.pos;
+ let cur = parser.pos;
+ while (cur && isWhitespaceCode(parser.data.charCodeAt(cur - 1))) {
+ cur--;
+ }
+ parser.pos = cur;
parser.endText();
+ parser.pos = pos;
+
parser.exitState();
parser.exitState();
} else if (parser.pos + newLineLength !== parser.maxPos) {
- parser.startText();
+ // parser.startText();
}
}
diff --git a/src/util/util.ts b/src/util/util.ts
index 453e3ea8..3ce3b689 100644
--- a/src/util/util.ts
+++ b/src/util/util.ts
@@ -52,7 +52,18 @@ export function getLines(src: string) {
}
export function htmlEOF(this: Parser) {
- this.endText();
+ if (!this.activeTag || this.activeTag.concise) {
+ const pos = this.pos;
+ let cur = this.pos;
+ while (cur && isWhitespaceCode(this.data.charCodeAt(cur - 1))) {
+ cur--;
+ }
+ this.pos = cur;
+ this.endText();
+ this.pos = pos;
+ } else {
+ this.endText();
+ }
while (this.activeTag) {
if (this.activeTag.concise) {