| Index: pkg/yaml/lib/src/token.dart
|
| diff --git a/pkg/yaml/lib/src/token.dart b/pkg/yaml/lib/src/token.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..20ae547c65dfba7238781d861ac100e3ff3201d7
|
| --- /dev/null
|
| +++ b/pkg/yaml/lib/src/token.dart
|
| @@ -0,0 +1,148 @@
|
| +// Copyright (c) 2014, 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.
|
| +
|
| +library yaml.token;
|
| +
|
| +import 'package:source_span/source_span.dart';
|
| +
|
| +import 'style.dart';
|
| +
|
| +/// A token emitted by a [Scanner].
|
| +class Token {
|
| + /// The token type.
|
| + final TokenType type;
|
| +
|
| + /// The span associated with the token.
|
| + final FileSpan span;
|
| +
|
| + Token(this.type, this.span);
|
| +
|
| + String toString() => type.toString();
|
| +}
|
| +
|
| +/// A token representing a `%YAML` directive.
|
| +class VersionDirectiveToken implements Token {
|
| + get type => TokenType.VERSION_DIRECTIVE;
|
| + final FileSpan span;
|
| +
|
| + /// The declared major version of the document.
|
| + final int major;
|
| +
|
| + /// The declared minor version of the document.
|
| + final int minor;
|
| +
|
| + VersionDirectiveToken(this.span, this.major, this.minor);
|
| +
|
| + String toString() => "VERSION_DIRECTIVE $major.$minor";
|
| +}
|
| +
|
| +/// A token representing a `%TAG` directive.
|
| +class TagDirectiveToken implements Token {
|
| + get type => TokenType.TAG_DIRECTIVE;
|
| + final FileSpan span;
|
| +
|
| + /// The tag handle used in the document.
|
| + final String handle;
|
| +
|
| + /// The tag prefix that the handle maps to.
|
| + final String prefix;
|
| +
|
| + TagDirectiveToken(this.span, this.handle, this.prefix);
|
| +
|
| + String toString() => "TAG_DIRECTIVE $handle $prefix";
|
| +}
|
| +
|
| +/// A token representing an anchor (`&foo`).
|
| +class AnchorToken implements Token {
|
| + get type => TokenType.ANCHOR;
|
| + final FileSpan span;
|
| +
|
| + /// The name of the anchor.
|
| + final String name;
|
| +
|
| + AnchorToken(this.span, this.name);
|
| +
|
| + String toString() => "ANCHOR $name";
|
| +}
|
| +
|
| +/// A token representing an alias (`*foo`).
|
| +class AliasToken implements Token {
|
| + get type => TokenType.ALIAS;
|
| + final FileSpan span;
|
| +
|
| + /// The name of the anchor.
|
| + final String name;
|
| +
|
| + AliasToken(this.span, this.name);
|
| +
|
| + String toString() => "ALIAS $name";
|
| +}
|
| +
|
| +/// A token representing a tag (`!foo`).
|
| +class TagToken implements Token {
|
| + get type => TokenType.TAG;
|
| + final FileSpan span;
|
| +
|
| + /// The tag handle.
|
| + final String handle;
|
| +
|
| + /// The tag suffix, or `null`.
|
| + final String suffix;
|
| +
|
| + TagToken(this.span, this.handle, this.suffix);
|
| +
|
| + String toString() => "TAG $handle $suffix";
|
| +}
|
| +
|
| +/// A tkoen representing a scalar value.
|
| +class ScalarToken implements Token {
|
| + get type => TokenType.SCALAR;
|
| + final FileSpan span;
|
| +
|
| + /// The contents of the scalar.
|
| + final String value;
|
| +
|
| + /// The style of the scalar in the original source.
|
| + final ScalarStyle style;
|
| +
|
| + ScalarToken(this.span, this.value, this.style);
|
| +
|
| + String toString() => "SCALAR $style \"$value\"";
|
| +}
|
| +
|
| +/// An enum of types of [Token] object.
|
| +class TokenType {
|
| + static const STREAM_START = const TokenType._("STREAM_START");
|
| + static const STREAM_END = const TokenType._("STREAM_END");
|
| +
|
| + static const VERSION_DIRECTIVE = const TokenType._("VERSION_DIRECTIVE");
|
| + static const TAG_DIRECTIVE = const TokenType._("TAG_DIRECTIVE");
|
| + static const DOCUMENT_START = const TokenType._("DOCUMENT_START");
|
| + static const DOCUMENT_END = const TokenType._("DOCUMENT_END");
|
| +
|
| + static const BLOCK_SEQUENCE_START = const TokenType._("BLOCK_SEQUENCE_START");
|
| + static const BLOCK_MAPPING_START = const TokenType._("BLOCK_MAPPING_START");
|
| + static const BLOCK_END = const TokenType._("BLOCK_END");
|
| +
|
| + static const FLOW_SEQUENCE_START = const TokenType._("FLOW_SEQUENCE_START");
|
| + static const FLOW_SEQUENCE_END = const TokenType._("FLOW_SEQUENCE_END");
|
| + static const FLOW_MAPPING_START = const TokenType._("FLOW_MAPPING_START");
|
| + static const FLOW_MAPPING_END = const TokenType._("FLOW_MAPPING_END");
|
| +
|
| + static const BLOCK_ENTRY = const TokenType._("BLOCK_ENTRY");
|
| + static const FLOW_ENTRY = const TokenType._("FLOW_ENTRY");
|
| + static const KEY = const TokenType._("KEY");
|
| + static const VALUE = const TokenType._("VALUE");
|
| +
|
| + static const ALIAS = const TokenType._("ALIAS");
|
| + static const ANCHOR = const TokenType._("ANCHOR");
|
| + static const TAG = const TokenType._("TAG");
|
| + static const SCALAR = const TokenType._("SCALAR");
|
| +
|
| + final String name;
|
| +
|
| + const TokenType._(this.name);
|
| +
|
| + String toString() => name;
|
| +}
|
|
|