From fd5749a49ac0acea9483a38bb55f91b3bb00d2d4 Mon Sep 17 00:00:00 2001 From: Josh Johnson Date: Tue, 20 Jun 2017 22:50:21 -0400 Subject: [PATCH] Fix Eager Line Break Stripping This change ensures line breaks are not stripped outside of CDATA nodes if the line break is not preceded or followed by another whitespace character. Fixes #92 --- src/services/XmlFormatter.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/services/XmlFormatter.ts b/src/services/XmlFormatter.ts index 7ad1a2c..c23e145 100644 --- a/src/services/XmlFormatter.ts +++ b/src/services/XmlFormatter.ts @@ -152,6 +152,8 @@ export class XmlFormatter { for (let i = 0; i < xml.length; i++) { let char: string = xml.charAt(i); + let prev: string = xml.charAt(i - 1); + let next: string = xml.charAt(i + 1); if (char == '!' && (xml.substr(i, 8) == '![CDATA[' || xml.substr(i, 3) == '!--')) { inCdata = true; @@ -166,6 +168,14 @@ export class XmlFormatter { } else if (char.search(/[\r\n]/g) > -1 && !inCdata) { + if (/\r/.test(char) && /\S|\r|\n/.test(prev) && /\S|\r|\n/.test(xml.charAt(i + this.newLine.length))) { + output += char; + } + + else if (/\n/.test(char) && /\S|\r|\n/.test(xml.charAt(i - this.newLine.length)) && /\S|\r|\n/.test(next)) { + output += char; + } + continue; }