diff --git a/extensions/html/server/src/embeddedSupport.ts b/extensions/html/server/src/embeddedSupport.ts
index 4c97c3a4361146e16688933b29eb172766413b26..8ef212403ab89a6654a52cc199692759ab6ac6fd 100644
--- a/extensions/html/server/src/embeddedSupport.ts
+++ b/extensions/html/server/src/embeddedSupport.ts
@@ -44,12 +44,28 @@ export function getEmbeddedContent(languageService: LanguageService, document: T
}
function substituteWithWhitespace(result, start, end, oldContent) {
+ let accumulatedWS = 0;
for (let i = start; i < end; i++) {
let ch = oldContent[i];
- if (ch !== '\n' && ch !== '\r') {
- ch = ' ';
+ if (ch === '\n' || ch === '\r') {
+ // only write new lines, skip the whitespace
+ accumulatedWS = 0;
+ result += ch;
+ } else {
+ accumulatedWS++;
}
- result += ch;
+ }
+ result = append(result, ' ', accumulatedWS);
+ return result;
+}
+
+function append(result: string, str: string, n: number): string {
+ while (n) {
+ if (n & 1) {
+ result += str;
+ }
+ n >>= 1;
+ str += str;
}
return result;
}
diff --git a/extensions/html/server/src/test/embedded.test.ts b/extensions/html/server/src/test/embedded.test.ts
index ec92bcb54314dd33ce0fe6dea529e943a255db1e..3bdbec2eb1baf55dfc2df3324ab53002ec7e22db 100644
--- a/extensions/html/server/src/test/embedded.test.ts
+++ b/extensions/html/server/src/test/embedded.test.ts
@@ -52,6 +52,8 @@ suite('HTML Embedded Support', () => {
assertEmbeddedLanguageContent('', 'css', ' foo { } ');
assertEmbeddedLanguageContent('', 'css', ' ');
assertEmbeddedLanguageContent('Hello', 'css', ' foo { } foo { } ');
+ assertEmbeddedLanguageContent('\n \n\n', 'css', '\n \n foo { } \n \n\n');
+
});
test('Scripts', function (): any {