| // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| part of '../parser.dart'; |
| |
| /// A single token in the Dart language. |
| class Token { |
| /// A member of [TokenKind] specifying what kind of token this is. |
| final int kind; |
| |
| /// The location where this token was parsed from. |
| final FileSpan span; |
| |
| /// The start offset of this token. |
| int get start => span.start.offset; |
| |
| /// The end offset of this token. |
| int get end => span.end.offset; |
| |
| /// Returns the source text corresponding to this [Token]. |
| String get text => span.text; |
| |
| Token(this.kind, this.span); |
| |
| /// Returns a pretty representation of this token for error messages. |
| @override |
| String toString() { |
| var kindText = TokenKind.kindToString(kind); |
| var actualText = text.trim(); |
| if (kindText != actualText) { |
| if (actualText.length > 10) { |
| actualText = '${actualText.substring(0, 8)}...'; |
| } |
| return '$kindText($actualText)'; |
| } else { |
| return kindText; |
| } |
| } |
| } |
| |
| /// A token containing a parsed literal value. |
| class LiteralToken extends Token { |
| dynamic value; |
| LiteralToken(int kind, FileSpan span, this.value) : super(kind, span); |
| } |
| |
| /// A token containing error information. |
| class ErrorToken extends Token { |
| String? message; |
| ErrorToken(int kind, FileSpan span, this.message) : super(kind, span); |
| } |
| |
| /// CSS ident-token. |
| /// |
| /// See <http://dev.w3.org/csswg/css-syntax/#typedef-ident-token> and |
| /// <http://dev.w3.org/csswg/css-syntax/#ident-token-diagram>. |
| class IdentifierToken extends Token { |
| @override |
| final String text; |
| |
| IdentifierToken(this.text, int kind, FileSpan span) : super(kind, span); |
| } |