| Index: pkg/third_party/html5lib/lib/dom_parsing.dart
|
| diff --git a/pkg/third_party/html5lib/lib/dom_parsing.dart b/pkg/third_party/html5lib/lib/dom_parsing.dart
|
| index fa13261ee25e32bad381d79303902da0e9e1d2db..aed9fffe2378cd3f2146e0947f9120e6729faaf4 100644
|
| --- a/pkg/third_party/html5lib/lib/dom_parsing.dart
|
| +++ b/pkg/third_party/html5lib/lib/dom_parsing.dart
|
| @@ -3,6 +3,7 @@
|
| library dom_parsing;
|
|
|
| import 'dom.dart';
|
| +import 'src/constants.dart' show rcdataElements;
|
|
|
| /// A simple tree visitor for the DOM nodes.
|
| class TreeVisitor {
|
| @@ -67,17 +68,17 @@ class CodeMarkupVisitor extends TreeVisitor {
|
| }
|
|
|
| visitDocumentType(DocumentType node) {
|
| - _str.write('<code class="markup doctype"><!DOCTYPE ${node.tagName}>'
|
| + _str.write('<code class="markup doctype"><!DOCTYPE ${node.name}>'
|
| '</code>');
|
| }
|
|
|
| visitText(Text node) {
|
| - // TODO(jmesserly): would be nice to use _addOuterHtml directly.
|
| - _str.write(node.outerHtml);
|
| + writeTextNodeAsHtml(_str, node);
|
| }
|
|
|
| visitElement(Element node) {
|
| - _str.write('<<code class="markup element-name">${node.tagName}</code>');
|
| + final tag = node.localName;
|
| + _str.write('<<code class="markup element-name">$tag</code>');
|
| if (node.attributes.length > 0) {
|
| node.attributes.forEach((key, v) {
|
| v = htmlSerializeEscape(v, attributeMode: true);
|
| @@ -88,12 +89,12 @@ class CodeMarkupVisitor extends TreeVisitor {
|
| if (node.nodes.length > 0) {
|
| _str.write(">");
|
| visitChildren(node);
|
| - } else if (isVoidElement(node.tagName)) {
|
| + } else if (isVoidElement(tag)) {
|
| _str.write(">");
|
| return;
|
| }
|
| _str.write(
|
| - '</<code class="markup element-name">${node.tagName}</code>>');
|
| + '</<code class="markup element-name">$tag</code>>');
|
| }
|
|
|
| visitComment(Comment node) {
|
| @@ -160,3 +161,18 @@ bool isVoidElement(String tagName) {
|
| }
|
| return false;
|
| }
|
| +
|
| +/// Serialize text node according to:
|
| +/// <http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#html-fragment-serialization-algorithm>
|
| +void writeTextNodeAsHtml(StringBuffer str, Text node) {
|
| + // Don't escape text for certain elements, notably <script>.
|
| + final parent = node.parent;
|
| + if (parent is Element) {
|
| + var tag = parent.localName;
|
| + if (rcdataElements.contains(tag) || tag == 'plaintext') {
|
| + str.write(node.data);
|
| + return;
|
| + }
|
| + }
|
| + str.write(htmlSerializeEscape(node.data));
|
| +}
|
|
|