From 10619ee123373f3f138e02442ddbb7e342379edd Mon Sep 17 00:00:00 2001 From: Josh Johnson Date: Mon, 6 Jul 2020 23:13:40 -0400 Subject: [PATCH] Prevent CDATA Formatting fixes: #293 --- src/formatting/formatters/v2-xml-formatter.ts | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/formatting/formatters/v2-xml-formatter.ts b/src/formatting/formatters/v2-xml-formatter.ts index 8eed3d7..8b0fcbb 100644 --- a/src/formatting/formatters/v2-xml-formatter.ts +++ b/src/formatting/formatters/v2-xml-formatter.ts @@ -7,9 +7,9 @@ const MagicalStringOfWonders = "~::~MAAAGIC~::~"; /* tslint:disable no-use-before-declare */ export class V2XmlFormatter implements XmlFormatter { formatXml(xml: string, options: XmlFormattingOptions): string { - // this replaces all "<" brackets inside of comments to a magical string - // so the following minification steps don't mess with comment formatting - xml = this._sanitizeComments(xml); + // this replaces all "<" brackets inside of comments and CDATA to a magical string + // so the following minification steps don't mess with comment and CDATA formatting + xml = this._sanitizeCommentsAndCDATA(xml); // remove whitespace from between tags, except for line breaks xml = xml.replace(/>\s{0,} { @@ -25,7 +25,7 @@ export class V2XmlFormatter implements XmlFormatter { }); // the coast is clear - we can drop those "<" brackets back in - xml = this._unsanitizeComments(xml); + xml = this._unsanitizeCommentsAndCDATA(xml); let output = ""; @@ -298,9 +298,9 @@ export class V2XmlFormatter implements XmlFormatter { return text.replace(/[^\r\n\S]+$/, ""); } - private _sanitizeComments(xml: string): string { + private _sanitizeCommentsAndCDATA(xml: string): string { let output = ""; - let inComment = false; + let inCommentOrCDATA = false; for (let i = 0; i < xml.length; i++) { const cc = xml[i]; @@ -308,20 +308,20 @@ export class V2XmlFormatter implements XmlFormatter { const nnc = xml.charAt(i + 2); const pc = xml.charAt(i - 1); - if (!inComment && cc === "<" && nc === "!" && nnc === "-") { - inComment = true; - output += ""; + else if (inCommentOrCDATA && (cc === "-" && nc === "-" && nnc === ">") || (cc === "]" && nc === "]" && nnc === ">")) { + inCommentOrCDATA = false; + output += (cc === "-") ? "-->" : "]]>"; i += 2; } @@ -334,7 +334,7 @@ export class V2XmlFormatter implements XmlFormatter { return output; } - private _unsanitizeComments(xml: string): string { + private _unsanitizeCommentsAndCDATA(xml: string): string { return xml.replace(new RegExp(MagicalStringOfWonders, "g"), "<"); } }