Comparing version 1.3.0 to 1.3.1
@@ -0,1 +1,4 @@ | ||
## 1.3.1 | ||
* Fix: text node in `<template>` serialization problem with custom tree adapter (GH [#38](https://github.com/inikulin/parse5/issues/38)) | ||
## 1.3.0 | ||
@@ -2,0 +5,0 @@ * Add: Serializer `encodeHtmlEntities` option. |
@@ -154,6 +154,9 @@ 'use strict'; | ||
Serializer.prototype._serializeTextNode = function (node) { | ||
var parent = this.treeAdapter.getParentNode(node), | ||
parentTn = parent && this.treeAdapter.getTagName(parent), | ||
content = this.treeAdapter.getTextNodeContent(node); | ||
var content = this.treeAdapter.getTextNodeContent(node), | ||
parent = this.treeAdapter.getParentNode(node), | ||
parentTn = void 0; | ||
if(parent && this.treeAdapter.isElementNode(parent)) | ||
parentTn = this.treeAdapter.getTagName(parent); | ||
if (parentTn === $.STYLE || parentTn === $.SCRIPT || parentTn === $.XMP || parentTn === $.IFRAME || | ||
@@ -160,0 +163,0 @@ parentTn === $.NOEMBED || parentTn === $.NOFRAMES || parentTn === $.PLAINTEXT || parentTn === $.NOSCRIPT) { |
@@ -8,5 +8,2 @@ 'use strict'; | ||
//Const | ||
var CARRIAGE_RETURN_NEW_LINE_REGEX = /\r\n?/g; | ||
//Utils | ||
@@ -40,10 +37,6 @@ | ||
this.lastGapPos = -1; | ||
this.skipNextNewLine = false; | ||
}; | ||
Preprocessor.prototype.write = function (html) { | ||
//NOTE: All U+000D CARRIAGE RETURN (CR) characters must be converted to U+000A LINE FEED (LF) characters. | ||
//Any U+000A LINE FEED (LF) characters that immediately follow a U+000D CARRIAGE RETURN (CR) character | ||
//must be ignored. | ||
html = html.replace(CARRIAGE_RETURN_NEW_LINE_REGEX, '\n'); | ||
if (this.html) { | ||
@@ -70,27 +63,49 @@ this.html = this.html.substring(0, this.pos + 1) + | ||
//NOTE: any U+000A LINE FEED (LF) characters that immediately follow a U+000D CARRIAGE RETURN (CR) character | ||
//must be ignored. | ||
if (this.skipNextNewLine && cp === $.LINE_FEED) { | ||
this.skipNextNewLine = false; | ||
this._addGap(); | ||
return this.advanceAndPeekCodePoint(); | ||
} | ||
//NOTE: all U+000D CARRIAGE RETURN (CR) characters must be converted to U+000A LINE FEED (LF) characters | ||
if (cp === $.CARRIAGE_RETURN) { | ||
this.skipNextNewLine = true; | ||
return $.LINE_FEED; | ||
} | ||
this.skipNextNewLine = false; | ||
//OPTIMIZATION: first perform check if the code point in the allowed range that covers most common | ||
//HTML input (e.g. ASCII codes) to avoid performance-cost operations for high-range code points. | ||
if (cp >= 0xD800) { | ||
//NOTE: try to peek a surrogate pair | ||
if (this.pos !== this.lastCharPos) { | ||
var nextCp = this.html.charCodeAt(this.pos + 1); | ||
return cp >= 0xD800 ? this._processHighRangeCodePoint(cp) : cp; | ||
}; | ||
if (isSurrogatePair(cp, nextCp)) { | ||
//NOTE: we have a surrogate pair. Peek pair character and recalculate code point. | ||
this.pos++; | ||
cp = getSurrogatePairCodePoint(cp, nextCp); | ||
Preprocessor.prototype._processHighRangeCodePoint = function (cp) { | ||
//NOTE: try to peek a surrogate pair | ||
if (this.pos !== this.lastCharPos) { | ||
var nextCp = this.html.charCodeAt(this.pos + 1); | ||
//NOTE: add gap that should be avoided during retreat | ||
this.gapStack.push(this.lastGapPos); | ||
this.lastGapPos = this.pos; | ||
} | ||
if (isSurrogatePair(cp, nextCp)) { | ||
//NOTE: we have a surrogate pair. Peek pair character and recalculate code point. | ||
this.pos++; | ||
cp = getSurrogatePairCodePoint(cp, nextCp); | ||
//NOTE: add gap that should be avoided during retreat | ||
this._addGap(); | ||
} | ||
if (isReservedCodePoint(cp)) | ||
cp = $.REPLACEMENT_CHARACTER; | ||
} | ||
if (isReservedCodePoint(cp)) | ||
cp = $.REPLACEMENT_CHARACTER; | ||
return cp; | ||
}; | ||
Preprocessor.prototype._addGap = function () { | ||
this.gapStack.push(this.lastGapPos); | ||
this.lastGapPos = this.pos; | ||
}; | ||
Preprocessor.prototype.retreat = function () { | ||
@@ -97,0 +112,0 @@ if (this.pos === this.lastGapPos) { |
{ | ||
"name": "parse5", | ||
"description": "WHATWG HTML5 specification-compliant, fast and ready for production HTML parsing/serialization toolset for Node.", | ||
"version": "1.3.0", | ||
"version": "1.3.1", | ||
"author": "Ivan Nikulin <ifaaan@gmail.com> (https://github.com/inikulin)", | ||
@@ -6,0 +6,0 @@ "contributors": [ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
387575
6367