blob: 61a82e7375da536ba86035c53293d9ef61f6b59b [file] [log] [blame]
// 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.
import 'dart:collection';
import 'package:source_span/source_span.dart';
import 'yaml_node.dart';
/// A YAML document, complete with metadata.
class YamlDocument {
/// The contents of the document.
final YamlNode contents;
/// The span covering the entire document.
final SourceSpan span;
/// The version directive for the document, if any.
final VersionDirective versionDirective;
/// The tag directives for the document.
final List<TagDirective> tagDirectives;
/// Whether the beginning of the document was implicit (versus explicit via
/// `===`).
final bool startImplicit;
/// Whether the end of the document was implicit (versus explicit via `...`).
final bool endImplicit;
/// Users of the library should not use this constructor.
YamlDocument.internal(this.contents, this.span, this.versionDirective,
List<TagDirective> tagDirectives, {this.startImplicit: false,
this.endImplicit: false})
: tagDirectives = new UnmodifiableListView(tagDirectives);
String toString() => contents.toString();
}
/// A directive indicating which version of YAML a document was written to.
class VersionDirective {
/// The major version number.
final int major;
/// The minor version number.
final int minor;
VersionDirective(this.major, this.minor);
String toString() => "%YAML $major.$minor";
}
/// A directive describing a custom tag handle.
class TagDirective {
/// The handle for use in the document.
final String handle;
/// The prefix that the handle maps to.
final String prefix;
TagDirective(this.handle, this.prefix);
String toString() => "%TAG $handle $prefix";
}