From 64b2e16fbced012e114019dab026fcf62535b68f Mon Sep 17 00:00:00 2001 From: tanhauhau Date: Fri, 15 Apr 2022 22:24:42 +0800 Subject: [PATCH] improve whitespace handling --- src/compiler/compile/nodes/Text.ts | 8 +++ .../render_dom/wrappers/Element/index.ts | 6 ++- .../compile/render_dom/wrappers/Text.ts | 19 ++++--- .../compile/render_ssr/handlers/Text.ts | 4 +- test/helpers.ts | 21 +++++--- test/js/samples/debug-ssr-foo/expected.js | 9 ++-- .../samples/ssr-preserve-comments/expected.js | 6 +-- test/runtime/index.ts | 4 +- test/runtime/samples/pre-tag/_config.js | 52 ++++++------------- .../samples/preserve-whitespaces/_config.js | 33 ++++-------- .../samples/textarea-content/_config.js | 17 ++++++ test/server-side-rendering/index.ts | 18 +++---- .../samples/pre-tag/.editorconfig | 2 - .../samples/pre-tag/_config.js | 3 -- .../samples/pre-tag/_expected.html | 37 ------------- .../samples/pre-tag/main.svelte | 51 ------------------ .../samples/preserve-whitespaces/_config.js | 6 --- .../preserve-whitespaces/_expected.html | 32 ------------ .../samples/preserve-whitespaces/main.svelte | 34 ------------ .../samples/textarea-content/.editorconfig | 2 - .../samples/textarea-content/_config.js | 3 -- .../samples/textarea-content/_expected.html | 28 ---------- .../samples/textarea-content/main.svelte | 40 -------------- 23 files changed, 103 insertions(+), 332 deletions(-) delete mode 100644 test/server-side-rendering/samples/pre-tag/.editorconfig delete mode 100644 test/server-side-rendering/samples/pre-tag/_config.js delete mode 100644 test/server-side-rendering/samples/pre-tag/_expected.html delete mode 100644 test/server-side-rendering/samples/pre-tag/main.svelte delete mode 100644 test/server-side-rendering/samples/preserve-whitespaces/_config.js delete mode 100644 test/server-side-rendering/samples/preserve-whitespaces/_expected.html delete mode 100644 test/server-side-rendering/samples/preserve-whitespaces/main.svelte delete mode 100644 test/server-side-rendering/samples/textarea-content/.editorconfig delete mode 100644 test/server-side-rendering/samples/textarea-content/_config.js delete mode 100644 test/server-side-rendering/samples/textarea-content/_expected.html delete mode 100644 test/server-side-rendering/samples/textarea-content/main.svelte diff --git a/src/compiler/compile/nodes/Text.ts b/src/compiler/compile/nodes/Text.ts index ac6cd9b828..d750477c8a 100644 --- a/src/compiler/compile/nodes/Text.ts +++ b/src/compiler/compile/nodes/Text.ts @@ -18,6 +18,7 @@ const elements_without_text = new Set([ ]); const regex_ends_with_svg = /svg$/; +const regex_non_whitespace_characters = /[\S\u00A0]/; export default class Text extends Node { type: 'Text'; @@ -63,4 +64,11 @@ export default class Text extends Node { return false; } + + use_space(): boolean { + if (this.component.compile_options.preserveWhitespace) return false; + if (regex_non_whitespace_characters.test(this.data)) return false; + + return !this.within_pre(); + } } diff --git a/src/compiler/compile/render_dom/wrappers/Element/index.ts b/src/compiler/compile/render_dom/wrappers/Element/index.ts index e7d67de15c..1a10ec4434 100644 --- a/src/compiler/compile/render_dom/wrappers/Element/index.ts +++ b/src/compiler/compile/render_dom/wrappers/Element/index.ts @@ -1218,7 +1218,11 @@ function to_html(wrappers: Array/
`, test({ assert, target }) { // Test for - -
- -
- -
- -
- -
- - - -
diff --git a/test/server-side-rendering/samples/textarea-content/main.svelte b/test/server-side-rendering/samples/textarea-content/main.svelte deleted file mode 100644 index e2e052ca7a..0000000000 --- a/test/server-side-rendering/samples/textarea-content/main.svelte +++ /dev/null @@ -1,40 +0,0 @@ - - -
- -
- -
- - - -
- -
- - - -
- - - -
- -