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 {