| Index: pkg/analyzer_experimental/lib/src/generated/html.dart
|
| ===================================================================
|
| --- pkg/analyzer_experimental/lib/src/generated/html.dart (revision 23549)
|
| +++ pkg/analyzer_experimental/lib/src/generated/html.dart (working copy)
|
| @@ -11,43 +11,51 @@
|
| import 'instrumentation.dart';
|
| import 'element.dart' show HtmlElementImpl;
|
|
|
| +
|
| /**
|
| * Instances of the class {@code Token} represent a token that was scanned from the input. Each
|
| * token knows which token follows it, acting as the head of a linked list of tokens.
|
| * @coverage dart.engine.html
|
| */
|
| class Token {
|
| +
|
| /**
|
| * The offset from the beginning of the file to the first character in the token.
|
| */
|
| int _offset = 0;
|
| +
|
| /**
|
| * The previous token in the token stream.
|
| */
|
| Token _previous;
|
| +
|
| /**
|
| * The next token in the token stream.
|
| */
|
| Token _next;
|
| +
|
| /**
|
| * The type of the token.
|
| */
|
| TokenType _type;
|
| +
|
| /**
|
| * The lexeme represented by this token.
|
| */
|
| String _value;
|
| +
|
| /**
|
| * Initialize a newly created token.
|
| * @param type the token type (not {@code null})
|
| * @param offset the offset from the beginning of the file to the first character in the token
|
| */
|
| Token.con1(TokenType type, int offset) {
|
| - _jtd_constructor_151_impl(type, offset);
|
| + _jtd_constructor_154_impl(type, offset);
|
| }
|
| - _jtd_constructor_151_impl(TokenType type, int offset) {
|
| - _jtd_constructor_152_impl(type, offset, type.lexeme);
|
| + _jtd_constructor_154_impl(TokenType type, int offset) {
|
| + _jtd_constructor_155_impl(type, offset, type.lexeme);
|
| }
|
| +
|
| /**
|
| * Initialize a newly created token.
|
| * @param type the token type (not {@code null})
|
| @@ -55,13 +63,14 @@
|
| * @param value the lexeme represented by this token (not {@code null})
|
| */
|
| Token.con2(TokenType type2, int offset2, String value2) {
|
| - _jtd_constructor_152_impl(type2, offset2, value2);
|
| + _jtd_constructor_155_impl(type2, offset2, value2);
|
| }
|
| - _jtd_constructor_152_impl(TokenType type2, int offset2, String value2) {
|
| + _jtd_constructor_155_impl(TokenType type2, int offset2, String value2) {
|
| this._type = type2;
|
| this._value = StringUtilities.intern(value2);
|
| this._offset = offset2;
|
| }
|
| +
|
| /**
|
| * Return the offset from the beginning of the file to the character after last character of the
|
| * token.
|
| @@ -69,36 +78,43 @@
|
| * of the token
|
| */
|
| int get end => _offset + length;
|
| +
|
| /**
|
| * Return the number of characters in the node's source range.
|
| * @return the number of characters in the node's source range
|
| */
|
| int get length => lexeme.length;
|
| +
|
| /**
|
| * Return the lexeme that represents this token.
|
| * @return the lexeme (not {@code null})
|
| */
|
| String get lexeme => _value;
|
| +
|
| /**
|
| * Return the next token in the token stream.
|
| * @return the next token in the token stream
|
| */
|
| Token get next => _next;
|
| +
|
| /**
|
| * Return the offset from the beginning of the file to the first character in the token.
|
| * @return the offset from the beginning of the file to the first character in the token
|
| */
|
| int get offset => _offset;
|
| +
|
| /**
|
| * Return the previous token in the token stream.
|
| * @return the previous token in the token stream
|
| */
|
| Token get previous => _previous;
|
| +
|
| /**
|
| * Answer the token type for the receiver.
|
| * @return the token type (not {@code null})
|
| */
|
| TokenType get type => _type;
|
| +
|
| /**
|
| * Return {@code true} if this token is a synthetic token. A synthetic token is a token that was
|
| * introduced by the parser in order to recover from an error in the code. Synthetic tokens always
|
| @@ -106,6 +122,7 @@
|
| * @return {@code true} if this token is a synthetic token
|
| */
|
| bool isSynthetic() => length == 0;
|
| +
|
| /**
|
| * Set the next token in the token stream to the given token. This has the side-effect of setting
|
| * this token to be the previous token for the given token.
|
| @@ -118,6 +135,7 @@
|
| return token;
|
| }
|
| String toString() => lexeme;
|
| +
|
| /**
|
| * Set the previous token in the token stream to the given token.
|
| * @param previous the previous token in the token stream
|
| @@ -126,11 +144,13 @@
|
| this._previous = previous2;
|
| }
|
| }
|
| +
|
| /**
|
| * Instances of {@code HtmlParseResult} hold the result of parsing an HTML file.
|
| * @coverage dart.engine.html
|
| */
|
| class HtmlParseResult extends HtmlScanResult {
|
| +
|
| /**
|
| * The unit containing the parsed information (not {@code null}).
|
| */
|
| @@ -138,12 +158,14 @@
|
| HtmlParseResult(int modificationTime, Token token, List<int> lineStarts, HtmlUnit unit) : super(modificationTime, token, lineStarts) {
|
| this._unit = unit;
|
| }
|
| +
|
| /**
|
| * Answer the unit generated by parsing the source
|
| * @return the unit (not {@code null})
|
| */
|
| HtmlUnit get htmlUnit => _unit;
|
| }
|
| +
|
| /**
|
| * Instances of the class {@code RecursiveXmlVisitor} implement an XML visitor that will recursively
|
| * visit all of the nodes in an XML structure. For example, using an instance of this class to visit
|
| @@ -168,26 +190,31 @@
|
| return null;
|
| }
|
| }
|
| +
|
| /**
|
| * The abstract class {@code XmlNode} defines behavior common to all XML/HTML nodes.
|
| * @coverage dart.engine.html
|
| */
|
| abstract class XmlNode {
|
| +
|
| /**
|
| * The parent of the node, or {@code null} if the node is the root of an AST structure.
|
| */
|
| XmlNode _parent;
|
| +
|
| /**
|
| * Use the given visitor to visit this node.
|
| * @param visitor the visitor that will visit this node
|
| * @return the value returned by the visitor as a result of visiting this node
|
| */
|
| accept(XmlVisitor visitor);
|
| +
|
| /**
|
| * Return the first token included in this node's source range.
|
| * @return the first token or {@code null} if none
|
| */
|
| Token get beginToken;
|
| +
|
| /**
|
| * Return the offset of the character immediately following the last character of this node's
|
| * source range. This is equivalent to {@code node.getOffset() + node.getLength()}. For an html
|
| @@ -195,11 +222,13 @@
|
| * @return the offset of the character just past the node's source range
|
| */
|
| int get end => offset + length;
|
| +
|
| /**
|
| * Return the last token included in this node's source range.
|
| * @return the last token or {@code null} if none
|
| */
|
| Token get endToken;
|
| +
|
| /**
|
| * Return the number of characters in the node's source range.
|
| * @return the number of characters in the node's source range
|
| @@ -212,6 +241,7 @@
|
| }
|
| return endToken2.offset + endToken2.length - beginToken2.offset;
|
| }
|
| +
|
| /**
|
| * Return the offset from the beginning of the file to the first character in the node's source
|
| * range.
|
| @@ -225,6 +255,7 @@
|
| }
|
| return beginToken.offset;
|
| }
|
| +
|
| /**
|
| * Return this node's parent node, or {@code null} if this node is the root of an AST structure.
|
| * <p>
|
| @@ -238,12 +269,14 @@
|
| accept(new ToSourceVisitor(writer));
|
| return writer.toString();
|
| }
|
| +
|
| /**
|
| * Use the given visitor to visit all of the children of this node. The children will be visited
|
| * in source order.
|
| * @param visitor the visitor that will be used to visit the children of this node
|
| */
|
| void visitChildren(XmlVisitor<Object> visitor);
|
| +
|
| /**
|
| * Make this node the parent of the given child nodes.
|
| * @param children the nodes that will become the children of this node
|
| @@ -259,6 +292,7 @@
|
| }
|
| return children;
|
| }
|
| +
|
| /**
|
| * Make this node the parent of the given child node.
|
| * @param child the node that will become a child of this node
|
| @@ -271,6 +305,7 @@
|
| }
|
| return child;
|
| }
|
| +
|
| /**
|
| * Set the parent of this node to the given node.
|
| * @param newParent the node that is to be made the parent of this node
|
| @@ -279,6 +314,7 @@
|
| _parent = newParent;
|
| }
|
| }
|
| +
|
| /**
|
| * Instances of the class {@code SimpleXmlVisitor} implement an AST visitor that will do nothing
|
| * when visiting an AST node. It is intended to be a superclass for classes that use the visitor
|
| @@ -290,6 +326,7 @@
|
| R visitXmlAttributeNode(XmlAttributeNode xmlAttributeNode) => null;
|
| R visitXmlTagNode(XmlTagNode xmlTagNode) => null;
|
| }
|
| +
|
| /**
|
| * The abstract class {@code AbstractScanner} implements a scanner for HTML code. Subclasses are
|
| * required to implement the interface used to access the characters being scanned.
|
| @@ -297,26 +334,32 @@
|
| */
|
| abstract class AbstractScanner {
|
| static List<String> _NO_PASS_THROUGH_ELEMENTS = <String> [];
|
| +
|
| /**
|
| * The source being scanned.
|
| */
|
| Source _source;
|
| +
|
| /**
|
| * The token pointing to the head of the linked list of tokens.
|
| */
|
| Token _tokens;
|
| +
|
| /**
|
| * The last token that was scanned.
|
| */
|
| Token _tail;
|
| +
|
| /**
|
| * A list containing the offsets of the first character of each line in the source code.
|
| */
|
| List<int> _lineStarts = new List<int>();
|
| +
|
| /**
|
| * An array of element tags for which the content between tags should be consider a single token.
|
| */
|
| List<String> _passThroughElements = _NO_PASS_THROUGH_ELEMENTS;
|
| +
|
| /**
|
| * Initialize a newly created scanner.
|
| * @param source the source being scanned
|
| @@ -328,11 +371,13 @@
|
| _tail = _tokens;
|
| recordStartOfLine();
|
| }
|
| +
|
| /**
|
| * Return an array containing the offsets of the first character of each line in the source code.
|
| * @return an array containing the offsets of the first character of each line in the source code
|
| */
|
| List<int> get lineStarts => _lineStarts;
|
| +
|
| /**
|
| * Return the current offset relative to the beginning of the file. Return the initial offset if
|
| * the scanner has not yet scanned the source code, and one (1) past the end of the source code if
|
| @@ -340,17 +385,20 @@
|
| * @return the current offset of the scanner in the source
|
| */
|
| int get offset;
|
| +
|
| /**
|
| * Answer the source being scanned.
|
| * @return the source or {@code null} if undefined
|
| */
|
| Source get source => _source;
|
| +
|
| /**
|
| * Set array of element tags for which the content between tags should be consider a single token.
|
| */
|
| void set passThroughElements(List<String> passThroughElements2) {
|
| this._passThroughElements = passThroughElements2 != null ? passThroughElements2 : _NO_PASS_THROUGH_ELEMENTS;
|
| }
|
| +
|
| /**
|
| * Scan the source code to produce a list of tokens representing the source.
|
| * @return the first token in the list of tokens that were produced
|
| @@ -360,11 +408,13 @@
|
| appendEofToken();
|
| return firstToken();
|
| }
|
| +
|
| /**
|
| * Advance the current position and return the character at the new current position.
|
| * @return the character at the new current position
|
| */
|
| int advance();
|
| +
|
| /**
|
| * Return the substring of the source code between the start offset and the modified current
|
| * position. The current position is modified by adding the end delta.
|
| @@ -375,11 +425,13 @@
|
| * @return the specified substring of the source code
|
| */
|
| String getString(int start, int endDelta);
|
| +
|
| /**
|
| * Return the character at the current position without changing the current position.
|
| * @return the character at the current position
|
| */
|
| int peek();
|
| +
|
| /**
|
| * Record the fact that we are at the beginning of a new line in the source.
|
| */
|
| @@ -549,19 +601,23 @@
|
| }
|
| }
|
| }
|
| +
|
| /**
|
| * Instances of {@code HtmlScanResult} hold the result of scanning an HTML file.
|
| * @coverage dart.engine.html
|
| */
|
| class HtmlScanResult {
|
| +
|
| /**
|
| * The time at which the contents of the source were last set.
|
| */
|
| int _modificationTime = 0;
|
| +
|
| /**
|
| * The first token in the token stream (not {@code null}).
|
| */
|
| Token _token;
|
| +
|
| /**
|
| * The line start information that was produced.
|
| */
|
| @@ -571,40 +627,48 @@
|
| this._token = token;
|
| this._lineStarts = lineStarts;
|
| }
|
| +
|
| /**
|
| * Answer the line start information that was produced.
|
| * @return an array of line starts (not {@code null})
|
| */
|
| List<int> get lineStarts => _lineStarts;
|
| +
|
| /**
|
| * Return the time at which the contents of the source were last set.
|
| * @return the time at which the contents of the source were last set
|
| */
|
| int get modificationTime => _modificationTime;
|
| +
|
| /**
|
| * Answer the first token in the token stream.
|
| * @return the token (not {@code null})
|
| */
|
| Token get token => _token;
|
| }
|
| +
|
| /**
|
| * Instances of the class {@code StringScanner} implement a scanner that reads from a string. The
|
| * scanning logic is in the superclass.
|
| * @coverage dart.engine.html
|
| */
|
| class StringScanner extends AbstractScanner {
|
| +
|
| /**
|
| * The string from which characters will be read.
|
| */
|
| String _string;
|
| +
|
| /**
|
| * The number of characters in the string.
|
| */
|
| int _stringLength = 0;
|
| +
|
| /**
|
| * The index, relative to the string, of the last character that was read.
|
| */
|
| int _charOffset = 0;
|
| +
|
| /**
|
| * Initialize a newly created scanner to scan the characters in the given string.
|
| * @param source the source being scanned
|
| @@ -634,24 +698,29 @@
|
| return -1;
|
| }
|
| }
|
| +
|
| /**
|
| * Instances of the class {@code CharBufferScanner} implement a scanner that reads from a character
|
| * buffer. The scanning logic is in the superclass.
|
| * @coverage dart.engine.html
|
| */
|
| class CharBufferScanner extends AbstractScanner {
|
| +
|
| /**
|
| * The buffer from which characters will be read.
|
| */
|
| CharSequence _buffer;
|
| +
|
| /**
|
| * The number of characters in the buffer.
|
| */
|
| int _bufferLength = 0;
|
| +
|
| /**
|
| * The index of the last character that was read.
|
| */
|
| int _charOffset = 0;
|
| +
|
| /**
|
| * Initialize a newly created scanner to scan the characters in the given character buffer.
|
| * @param source the source being scanned
|
| @@ -678,16 +747,19 @@
|
| return -1;
|
| }
|
| }
|
| +
|
| /**
|
| * Instances of the class {@code ToSourceVisitor} write a source representation of a visited XML
|
| * node (and all of it's children) to a writer.
|
| * @coverage dart.engine.html
|
| */
|
| class ToSourceVisitor implements XmlVisitor<Object> {
|
| +
|
| /**
|
| * The writer to which the source is to be written.
|
| */
|
| PrintWriter _writer;
|
| +
|
| /**
|
| * Initialize a newly created visitor to write source code representing the visited nodes to the
|
| * given writer.
|
| @@ -737,6 +809,7 @@
|
| }
|
| return null;
|
| }
|
| +
|
| /**
|
| * Safely visit the given node.
|
| * @param node the node to be visited
|
| @@ -747,12 +820,14 @@
|
| }
|
| }
|
| }
|
| +
|
| /**
|
| * The enumeration {@code TokenType} defines the types of tokens that can be returned by the
|
| * scanner.
|
| * @coverage dart.engine.html
|
| */
|
| class TokenType implements Comparable<TokenType> {
|
| +
|
| /**
|
| * The type of the token that marks the end of the input.
|
| */
|
| @@ -769,30 +844,36 @@
|
| static final TokenType TAG = new TokenType('TAG', 10, null);
|
| static final TokenType TEXT = new TokenType('TEXT', 11, null);
|
| static final List<TokenType> values = [EOF, EQ, GT, LT_SLASH, LT, SLASH_GT, COMMENT, DECLARATION, DIRECTIVE, STRING, TAG, TEXT];
|
| - final String __name;
|
| - final int __ordinal;
|
| - int get ordinal => __ordinal;
|
| +
|
| + /// The name of this enum constant, as declared in the enum declaration.
|
| + final String name;
|
| +
|
| + /// The position in the enum declaration.
|
| + final int ordinal;
|
| +
|
| /**
|
| * The lexeme that defines this type of token, or {@code null} if there is more than one possible
|
| * lexeme for this type of token.
|
| */
|
| String _lexeme;
|
| - TokenType(this.__name, this.__ordinal, String lexeme) {
|
| + TokenType(this.name, this.ordinal, String lexeme) {
|
| this._lexeme = lexeme;
|
| }
|
| +
|
| /**
|
| * Return the lexeme that defines this type of token, or {@code null} if there is more than one
|
| * possible lexeme for this type of token.
|
| * @return the lexeme that defines this type of token
|
| */
|
| String get lexeme => _lexeme;
|
| - int compareTo(TokenType other) => __ordinal - other.__ordinal;
|
| - String toString() => __name;
|
| + int compareTo(TokenType other) => ordinal - other.ordinal;
|
| + String toString() => name;
|
| }
|
| class TokenType_EOF extends TokenType {
|
| - TokenType_EOF(String ___name, int ___ordinal, String arg0) : super(___name, ___ordinal, arg0);
|
| + TokenType_EOF(String name, int ordinal, String arg0) : super(name, ordinal, arg0);
|
| String toString() => "-eof-";
|
| }
|
| +
|
| /**
|
| * Instances of {@code XmlAttributeNode} represent name/value pairs owned by an {@link XmlTagNode}.
|
| * @coverage dart.engine.html
|
| @@ -801,6 +882,7 @@
|
| Token _name;
|
| Token _equals;
|
| Token _value;
|
| +
|
| /**
|
| * Construct a new instance representing an XML attribute.
|
| * @param name the name token (not {@code null}). This may be a zero length token if the attribute
|
| @@ -816,16 +898,19 @@
|
| accept(XmlVisitor visitor) => visitor.visitXmlAttributeNode(this);
|
| Token get beginToken => _name;
|
| Token get endToken => _value;
|
| +
|
| /**
|
| * Answer the equals sign token that appears between the name and value tokens. This may be{@code null} if the attribute is badly formed.
|
| * @return the token or {@code null} if there is no equals sign between the name and value
|
| */
|
| Token get equals => _equals;
|
| +
|
| /**
|
| * Answer the attribute name. This may be a zero length token if the attribute is badly formed.
|
| * @return the name (not {@code null})
|
| */
|
| Token get name => _name;
|
| +
|
| /**
|
| * Answer the lexeme for the value token without the leading and trailing quotes.
|
| * @return the text or {@code null} if the value is not specified
|
| @@ -853,6 +938,7 @@
|
| }
|
| return text;
|
| }
|
| +
|
| /**
|
| * Answer the attribute value. A properly formed value will start and end with matching quote
|
| * characters, but the value returned may not be properly formed.
|
| @@ -862,6 +948,7 @@
|
| void visitChildren(XmlVisitor<Object> visitor) {
|
| }
|
| }
|
| +
|
| /**
|
| * The interface {@code XmlVisitor} defines the behavior of objects that can be used to visit an{@link XmlNode} structure.
|
| * @coverage dart.engine.html
|
| @@ -871,6 +958,7 @@
|
| R visitXmlAttributeNode(XmlAttributeNode xmlAttributeNode);
|
| R visitXmlTagNode(XmlTagNode xmlTagNode);
|
| }
|
| +
|
| /**
|
| * Instances of {@code HtmlScanner} receive and scan HTML content from a {@link Source}.<br/>
|
| * For example, the following code scans HTML source and returns the result:
|
| @@ -883,22 +971,27 @@
|
| */
|
| class HtmlScanner implements Source_ContentReceiver {
|
| List<String> _SCRIPT_TAG = <String> ["script"];
|
| +
|
| /**
|
| * The source being scanned (not {@code null})
|
| */
|
| Source _source;
|
| +
|
| /**
|
| * The time at which the contents of the source were last set.
|
| */
|
| int _modificationTime = 0;
|
| +
|
| /**
|
| * The scanner used to scan the source
|
| */
|
| AbstractScanner _scanner;
|
| +
|
| /**
|
| * The first token in the token stream.
|
| */
|
| Token _token;
|
| +
|
| /**
|
| * Construct a new instance to scan the specified source.
|
| * @param source the source to be scanned (not {@code null})
|
| @@ -918,26 +1011,31 @@
|
| _scanner.passThroughElements = _SCRIPT_TAG;
|
| _token = _scanner.tokenize();
|
| }
|
| +
|
| /**
|
| * Answer the result of scanning the source
|
| * @return the result (not {@code null})
|
| */
|
| HtmlScanResult get result => new HtmlScanResult(_modificationTime, _token, _scanner.lineStarts);
|
| }
|
| +
|
| /**
|
| * Instances of the class {@code XmlParser} are used to parse tokens into a AST structure comprised
|
| * of {@link XmlNode}s.
|
| * @coverage dart.engine.html
|
| */
|
| class XmlParser {
|
| +
|
| /**
|
| * The source being parsed.
|
| */
|
| Source _source;
|
| +
|
| /**
|
| * The next token to be parsed.
|
| */
|
| Token _currentToken;
|
| +
|
| /**
|
| * Construct a parser for the specified source.
|
| * @param source the source being parsed
|
| @@ -945,11 +1043,13 @@
|
| XmlParser(Source source) {
|
| this._source = source;
|
| }
|
| +
|
| /**
|
| * Answer the source being parsed.
|
| * @return the source
|
| */
|
| Source get source => _source;
|
| +
|
| /**
|
| * Answer {@code true} if the specified tag is self closing and thus should never have content or
|
| * child tag nodes.
|
| @@ -957,6 +1057,7 @@
|
| * @return {@code true} if self closing
|
| */
|
| bool isSelfClosing(Token tag) => false;
|
| +
|
| /**
|
| * Parse the entire token stream and in the process, advance the current token to the end of the
|
| * token stream.
|
| @@ -981,11 +1082,13 @@
|
| }
|
| }
|
| }
|
| +
|
| /**
|
| * Answer the current token.
|
| * @return the current token
|
| */
|
| Token get currentToken => _currentToken;
|
| +
|
| /**
|
| * Insert a synthetic token of the specified type before the current token
|
| * @param type the type of token to be inserted (not {@code null})
|
| @@ -997,6 +1100,7 @@
|
| token.setNext(_currentToken);
|
| return token;
|
| }
|
| +
|
| /**
|
| * Parse the token stream for an attribute. This method advances the current token over the
|
| * attribute, but should not be called if the {@link #currentToken} is not {@link TokenType#TAG}.
|
| @@ -1023,6 +1127,7 @@
|
| }
|
| return new XmlAttributeNode(name, equals, value);
|
| }
|
| +
|
| /**
|
| * Parse the stream for a sequence of attributes. This method advances the current token to the
|
| * next {@link TokenType#GT}, {@link TokenType#SLASH_GT}, or {@link TokenType#EOF}.
|
| @@ -1048,6 +1153,7 @@
|
| }
|
| }
|
| }
|
| +
|
| /**
|
| * Parse the stream for a sequence of tag nodes existing within a parent tag node. This method
|
| * advances the current token to the next {@link TokenType#LT_SLASH} or {@link TokenType#EOF}.
|
| @@ -1075,6 +1181,7 @@
|
| }
|
| }
|
| }
|
| +
|
| /**
|
| * Parse the token stream for the next tag node. This method advances current token over the
|
| * parsed tag node, but should only be called if the current token is {@link TokenType#LT}
|
| @@ -1130,45 +1237,55 @@
|
| }
|
| return new XmlTagNode(nodeStart, tag, attributes, attributeEnd, tagNodes, contentEnd, closingTag, nodeEnd);
|
| }
|
| +
|
| /**
|
| * Report the current token as unexpected
|
| */
|
| void reportUnexpectedToken() {
|
| }
|
| }
|
| +
|
| /**
|
| * Instances of {@code XmlTagNode} represent XML or HTML elements such as {@code <p>} and{@code <body foo="bar"> ... </body>}.
|
| * @coverage dart.engine.html
|
| */
|
| class XmlTagNode extends XmlNode {
|
| +
|
| /**
|
| * Constant representing empty list of attributes.
|
| */
|
| static List<XmlAttributeNode> NO_ATTRIBUTES = new UnmodifiableListView(new List<XmlAttributeNode>());
|
| +
|
| /**
|
| * Constant representing empty list of tag nodes.
|
| */
|
| static List<XmlTagNode> NO_TAG_NODES = new UnmodifiableListView(new List<XmlTagNode>());
|
| +
|
| /**
|
| * The starting {@link TokenType#LT} token (not {@code null}).
|
| */
|
| Token _nodeStart;
|
| +
|
| /**
|
| * The {@link TokenType#TAG} token after the starting '<' (not {@code null}).
|
| */
|
| Token _tag;
|
| +
|
| /**
|
| * The attributes contained by the receiver (not {@code null}, contains no {@code null}s).
|
| */
|
| List<XmlAttributeNode> _attributes;
|
| +
|
| /**
|
| * The {@link TokenType#GT} or {@link TokenType#SLASH_GT} token after the attributes (not{@code null}). The token may be the same token as {@link #nodeEnd} if there are no child{@link #tagNodes}.
|
| */
|
| Token _attributeEnd;
|
| +
|
| /**
|
| * The tag nodes contained in the receiver (not {@code null}, contains no {@code null}s).
|
| */
|
| List<XmlTagNode> _tagNodes;
|
| +
|
| /**
|
| * The token (not {@code null}) after the content, which may be
|
| * <ul>
|
| @@ -1181,15 +1298,18 @@
|
| * </ul>
|
| */
|
| Token _contentEnd;
|
| +
|
| /**
|
| * The closing {@link TokenType#TAG} after the child elements or {@code null} if there is no
|
| * content and the attributes ended with {@link TokenType#SLASH_GT}
|
| */
|
| Token _closingTag;
|
| +
|
| /**
|
| * The ending {@link TokenType#GT} or {@link TokenType#SLASH_GT} token (not {@code null}).
|
| */
|
| Token _nodeEnd;
|
| +
|
| /**
|
| * Construct a new instance representing an XML or HTML element
|
| * @param nodeStart the starting {@link TokenType#LT} token (not {@code null})
|
| @@ -1223,24 +1343,53 @@
|
| this._nodeEnd = nodeEnd;
|
| }
|
| accept(XmlVisitor visitor) => visitor.visitXmlTagNode(this);
|
| +
|
| /**
|
| + * Answer the attribute with the specified name.
|
| + * @param name the attribute name
|
| + * @return the attribute or {@code null} if no matching attribute is found
|
| + */
|
| + XmlAttributeNode getAttribute(String name2) {
|
| + for (XmlAttributeNode attribute in _attributes) {
|
| + if (attribute.name.lexeme == name2) {
|
| + return attribute;
|
| + }
|
| + }
|
| + return null;
|
| + }
|
| +
|
| + /**
|
| * The {@link TokenType#GT} or {@link TokenType#SLASH_GT} token after the attributes (not{@code null}). The token may be the same token as {@link #nodeEnd} if there are no child{@link #tagNodes}.
|
| * @return the token (not {@code null})
|
| */
|
| Token get attributeEnd => _attributeEnd;
|
| +
|
| /**
|
| * Answer the receiver's attributes. Callers should not manipulate the returned list to edit the
|
| * AST structure.
|
| * @return the attributes (not {@code null}, contains no {@code null}s)
|
| */
|
| List<XmlAttributeNode> get attributes => _attributes;
|
| +
|
| + /**
|
| + * Find the attribute with the given name (see {@link #getAttribute(String)} and answer the lexeme
|
| + * for the attribute's value token without the leading and trailing quotes (see{@link XmlAttributeNode#getText()}).
|
| + * @param name the attribute name
|
| + * @return the attribute text or {@code null} if no matching attribute is found
|
| + */
|
| + String getAttributeText(String name) {
|
| + XmlAttributeNode attribute = getAttribute(name);
|
| + return attribute != null ? attribute.text : null;
|
| + }
|
| Token get beginToken => _nodeStart;
|
| +
|
| /**
|
| * The the closing {@link TokenType#TAG} after the child elements or {@code null} if there is no
|
| * content and the attributes ended with {@link TokenType#SLASH_GT}
|
| * @return the closing tag or {@code null}
|
| */
|
| Token get closingTag => _closingTag;
|
| +
|
| /**
|
| * Answer a string representing the content contained in the receiver. This includes the textual
|
| * representation of any child tag nodes ({@link #getTagNodes()}). Whitespace between '<',
|
| @@ -1264,6 +1413,7 @@
|
| }
|
| return buffer.toString();
|
| }
|
| +
|
| /**
|
| * Answer the token (not {@code null}) after the content, which may be
|
| * <ul>
|
| @@ -1298,21 +1448,25 @@
|
| }
|
| return _tag;
|
| }
|
| +
|
| /**
|
| * Answer the ending {@link TokenType#GT} or {@link TokenType#SLASH_GT} token.
|
| * @return the token (not {@code null})
|
| */
|
| Token get nodeEnd => _nodeEnd;
|
| +
|
| /**
|
| * Answer the starting {@link TokenType#LT} token.
|
| * @return the token (not {@code null})
|
| */
|
| Token get nodeStart => _nodeStart;
|
| +
|
| /**
|
| * Answer the {@link TokenType#TAG} token after the starting '<'.
|
| * @return the token (not {@code null})
|
| */
|
| Token get tag => _tag;
|
| +
|
| /**
|
| * Answer the tag nodes contained in the receiver. Callers should not manipulate the returned list
|
| * to edit the AST structure.
|
| @@ -1327,6 +1481,7 @@
|
| node.accept(visitor);
|
| }
|
| }
|
| +
|
| /**
|
| * Same as {@link #becomeParentOf(List)}, but returns given "ifEmpty" if "children" is empty
|
| */
|
| @@ -1337,6 +1492,7 @@
|
| return becomeParentOf(children);
|
| }
|
| }
|
| +
|
| /**
|
| * Instances of the class {@code HtmlParser} are used to parse tokens into a AST structure comprised
|
| * of {@link XmlNode}s.
|
| @@ -1344,12 +1500,14 @@
|
| */
|
| class HtmlParser extends XmlParser {
|
| static Set<String> SELF_CLOSING = new Set<String>();
|
| +
|
| /**
|
| * Construct a parser for the specified source.
|
| * @param source the source being parsed
|
| */
|
| HtmlParser(Source source) : super(source) {
|
| }
|
| +
|
| /**
|
| * Parse the tokens specified by the given scan result.
|
| * @param scanResult the result of scanning an HTML source (not {@code null})
|
| @@ -1361,6 +1519,7 @@
|
| HtmlUnit unit = new HtmlUnit(firstToken, tagNodes, currentToken);
|
| return new HtmlParseResult(scanResult.modificationTime, firstToken, scanResult.lineStarts, unit);
|
| }
|
| +
|
| /**
|
| * Scan then parse the specified source.
|
| * @param source the source to be scanned and parsed (not {@code null})
|
| @@ -1373,28 +1532,34 @@
|
| }
|
| bool isSelfClosing(Token tag) => SELF_CLOSING.contains(tag.lexeme);
|
| }
|
| +
|
| /**
|
| * Instances of the class {@code HtmlUnit} represent the contents of an HTML file.
|
| * @coverage dart.engine.html
|
| */
|
| class HtmlUnit extends XmlNode {
|
| +
|
| /**
|
| * The first token in the token stream that was parsed to form this HTML unit.
|
| */
|
| Token _beginToken;
|
| +
|
| /**
|
| * The last token in the token stream that was parsed to form this compilation unit. This token
|
| * should always have a type of {@link TokenType.EOF}.
|
| */
|
| Token _endToken;
|
| +
|
| /**
|
| * The tag nodes contained in the receiver (not {@code null}, contains no {@code null}s).
|
| */
|
| List<XmlTagNode> _tagNodes;
|
| +
|
| /**
|
| * The element associated with this HTML unit or {@code null} if the receiver is not resolved.
|
| */
|
| HtmlElementImpl _element;
|
| +
|
| /**
|
| * Construct a new instance representing the content of an HTML file.
|
| * @param beginToken the first token in the file (not {@code null})
|
| @@ -1408,18 +1573,21 @@
|
| }
|
| accept(XmlVisitor visitor) => visitor.visitHtmlUnit(this);
|
| Token get beginToken => _beginToken;
|
| +
|
| /**
|
| * Return the element associated with this HTML unit.
|
| * @return the element or {@code null} if the receiver is not resolved
|
| */
|
| HtmlElementImpl get element => _element;
|
| Token get endToken => _endToken;
|
| +
|
| /**
|
| * Answer the tag nodes contained in the receiver. Callers should not manipulate the returned list
|
| * to edit the AST structure.
|
| * @return the children (not {@code null}, contains no {@code null}s)
|
| */
|
| List<XmlTagNode> get tagNodes => _tagNodes;
|
| +
|
| /**
|
| * Set the element associated with this HTML unit.
|
| * @param element the element
|
|
|