From 268085200a6f56d8545c7bdf1fc9222fc7e8b49a Mon Sep 17 00:00:00 2001 From: Jason Khanlar Date: Thu, 7 Apr 2022 23:54:22 -0400 Subject: [PATCH] Add BuilderOption: keepEntityCharRefs --- src/interfaces.ts | 12 +++++++++++- src/readers/BaseReader.ts | 2 +- src/writers/BaseWriter.ts | 3 +++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/interfaces.ts b/src/interfaces.ts index f8566d2..1fdcab3 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -101,6 +101,10 @@ export interface XMLBuilderOptions { * - str - the input string */ invalidCharReplacement: string | ((char: string, offset: number, str: string) => string) | undefined + /** + * Whether predefined entities and character references in text nodes are converted or not. + */ + keepEntityCharRefs: boolean /** * Defines custom parser functions. */ @@ -143,6 +147,7 @@ export const DefaultBuilderOptions: XMLBuilderOptions = { xlink: "http://www.w3.org/1999/xlink" }, invalidCharReplacement: undefined, + keepEntityCharRefs: false, parser: undefined } @@ -1342,6 +1347,10 @@ export type XMLBuilderCBOptions = CBWriterOptions & { * a replacement character. */ invalidCharReplacement: string | ((substring: string, ...args: any[]) => string) | undefined + /** + * Whether predefined entities and character references in text nodes are converted or not. + */ + keepEntityCharRefs: boolean } /** @@ -1507,7 +1516,8 @@ export const DefaultXMLBuilderCBOptions: Partial = { mathml: "http://www.w3.org/1998/Math/MathML", svg: "http://www.w3.org/2000/svg", xlink: "http://www.w3.org/1999/xlink" - } + }, + keepEntityCharRefs: false } type RecursivePartial = { diff --git a/src/readers/BaseReader.ts b/src/readers/BaseReader.ts index be447ef..dcdf42b 100644 --- a/src/readers/BaseReader.ts +++ b/src/readers/BaseReader.ts @@ -67,7 +67,7 @@ export abstract class BaseReader { * @param text - text value to serialize */ _decodeText(text: string): string { - if (text == null) return text + if (text == null || this._builderOptions.keepEntityCharRefs) return text return text.replace(/&(quot|amp|apos|lt|gt);/g, (_match, tag) => BaseReader._entityTable[tag] diff --git a/src/writers/BaseWriter.ts b/src/writers/BaseWriter.ts index 0e5cea3..d4c3eb7 100644 --- a/src/writers/BaseWriter.ts +++ b/src/writers/BaseWriter.ts @@ -910,6 +910,7 @@ export abstract class BaseWriter/g, '>') + if (this._builderOptions.keepEntityCharRefs) markup = node.data + this.text(markup) }