| Index: pkg/third_party/html5lib/lib/src/treebuilder.dart
|
| diff --git a/pkg/third_party/html5lib/lib/src/treebuilder.dart b/pkg/third_party/html5lib/lib/src/treebuilder.dart
|
| index 8c4d235a15bf1950711610a89eb86e07a0eae837..708c08c7b797bf3f22404974841074577786035f 100644
|
| --- a/pkg/third_party/html5lib/lib/src/treebuilder.dart
|
| +++ b/pkg/third_party/html5lib/lib/src/treebuilder.dart
|
| @@ -3,6 +3,7 @@ library treebuilder;
|
|
|
| import 'dart:collection';
|
| import 'package:html5lib/dom.dart';
|
| +import 'package:html5lib/parser.dart' show getElementNameTuple;
|
| import 'package:source_maps/span.dart' show FileSpan;
|
| import 'constants.dart';
|
| import 'list_proxy.dart';
|
| @@ -14,18 +15,18 @@ import 'utils.dart';
|
| // from "leaking" into tables, object elements, and marquees.
|
| const Node Marker = null;
|
|
|
| -// TODO(jmesserly): this should extend ListBase<Node>, but my simple attempt
|
| +// TODO(jmesserly): this should extend ListBase<Element>, but my simple attempt
|
| // didn't work.
|
| -class ActiveFormattingElements extends ListProxy<Node> {
|
| +class ActiveFormattingElements extends ListProxy<Element> {
|
| ActiveFormattingElements() : super();
|
|
|
| // Override the "add" method.
|
| // TODO(jmesserly): I'd rather not override this; can we do this in the
|
| // calling code instead?
|
| - void add(Node node) {
|
| + void add(Element node) {
|
| int equalCount = 0;
|
| if (node != Marker) {
|
| - for (Node element in reversed) {
|
| + for (var element in reversed) {
|
| if (element == Marker) {
|
| break;
|
| }
|
| @@ -61,8 +62,8 @@ bool _mapEquals(Map a, Map b) {
|
| }
|
|
|
|
|
| -bool _nodesEqual(Node node1, Node node2) {
|
| - return node1.nameTuple == node2.nameTuple &&
|
| +bool _nodesEqual(Element node1, Element node2) {
|
| + return getElementNameTuple(node1) == getElementNameTuple(node2) &&
|
| _mapEquals(node1.attributes, node2.attributes);
|
| }
|
|
|
| @@ -72,7 +73,7 @@ class TreeBuilder {
|
|
|
| Document document;
|
|
|
| - final openElements = <Node>[];
|
| + final List<Element> openElements = <Element>[];
|
|
|
| final activeFormattingElements = new ActiveFormattingElements();
|
|
|
| @@ -105,7 +106,7 @@ class TreeBuilder {
|
| bool elementInScope(target, {String variant}) {
|
| //If we pass a node in we match that. if we pass a string
|
| //match any node with that name
|
| - bool exactNode = target is Node && target.nameTuple != null;
|
| + bool exactNode = target is Node;
|
|
|
| List listElements1 = scopingElements;
|
| List listElements2 = const [];
|
| @@ -133,13 +134,13 @@ class TreeBuilder {
|
| }
|
| }
|
|
|
| - for (Node node in openElements.reversed) {
|
| - if (node.tagName == target && !exactNode ||
|
| - node == target && exactNode) {
|
| + for (var node in openElements.reversed) {
|
| + if (!exactNode && node.localName == target ||
|
| + exactNode && node == target) {
|
| return true;
|
| } else if (invert !=
|
| - (listElements1.contains(node.nameTuple) ||
|
| - listElements2.contains(node.nameTuple))) {
|
| + (listElements1.contains(getElementNameTuple(node)) ||
|
| + listElements2.contains(getElementNameTuple(node)))) {
|
| return false;
|
| }
|
| }
|
| @@ -185,8 +186,8 @@ class TreeBuilder {
|
|
|
| // TODO(jmesserly): optimize this. No need to create a token.
|
| var cloneToken = new StartTagToken(
|
| - entry.tagName,
|
| - namespace: entry.namespace,
|
| + entry.localName,
|
| + namespace: entry.namespaceUri,
|
| data: new LinkedHashMap.from(entry.attributes))
|
| ..span = entry.sourceSpan;
|
|
|
| @@ -213,13 +214,13 @@ class TreeBuilder {
|
| /// Check if an element exists between the end of the active
|
| /// formatting elements and the last marker. If it does, return it, else
|
| /// return null.
|
| - Node elementInActiveFormattingElements(String name) {
|
| - for (Node item in activeFormattingElements.reversed) {
|
| + Element elementInActiveFormattingElements(String name) {
|
| + for (var item in activeFormattingElements.reversed) {
|
| // Check for Marker first because if it's a Marker it doesn't have a
|
| // name attribute.
|
| if (item == Marker) {
|
| break;
|
| - } else if (item.tagName == name) {
|
| + } else if (item.localName == name) {
|
| return item;
|
| }
|
| }
|
| @@ -276,7 +277,7 @@ class TreeBuilder {
|
| Element insertElementTable(token) {
|
| /// Create an element and insert it into the tree
|
| var element = createElement(token);
|
| - if (!tableInsertModeElements.contains(openElements.last.tagName)) {
|
| + if (!tableInsertModeElements.contains(openElements.last.localName)) {
|
| return insertElementNormal(token);
|
| } else {
|
| // We should be in the InTable mode. This means we want to do
|
| @@ -300,7 +301,7 @@ class TreeBuilder {
|
| var parent = openElements.last;
|
|
|
| if (!insertFromTable || insertFromTable &&
|
| - !tableInsertModeElements.contains(openElements.last.tagName)) {
|
| + !tableInsertModeElements.contains(openElements.last.localName)) {
|
| _insertText(parent, data, span);
|
| } else {
|
| // We should be in the InTable mode. This means we want to do
|
| @@ -347,8 +348,8 @@ class TreeBuilder {
|
| Node lastTable = null;
|
| Node fosterParent = null;
|
| var insertBefore = null;
|
| - for (Node elm in openElements.reversed) {
|
| - if (elm.tagName == "table") {
|
| + for (var elm in openElements.reversed) {
|
| + if (elm.localName == "table") {
|
| lastTable = elm;
|
| break;
|
| }
|
| @@ -369,7 +370,7 @@ class TreeBuilder {
|
| }
|
|
|
| void generateImpliedEndTags([String exclude]) {
|
| - var name = openElements.last.tagName;
|
| + var name = openElements.last.localName;
|
| // XXX td, th and tr are not actually needed
|
| if (name != exclude && const ["dd", "dt", "li", "option", "optgroup", "p",
|
| "rp", "rt"].contains(name)) {
|
|
|