OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. |
| 4 |
| 5 library yaml.event; |
| 6 |
| 7 import 'package:source_span/source_span.dart'; |
| 8 |
| 9 import 'style.dart'; |
| 10 import 'yaml_document.dart'; |
| 11 |
| 12 /// An event emitted by a [Parser]. |
| 13 class Event { |
| 14 /// The event type. |
| 15 final EventType type; |
| 16 |
| 17 /// The span associated with the event. |
| 18 final FileSpan span; |
| 19 |
| 20 Event(this.type, this.span); |
| 21 |
| 22 String toString() => type.toString(); |
| 23 } |
| 24 |
| 25 /// An event indicating the beginning of a YAML document. |
| 26 class DocumentStartEvent implements Event { |
| 27 get type => EventType.DOCUMENT_START; |
| 28 final FileSpan span; |
| 29 |
| 30 /// The document's `%YAML` directive, or `null` if there was none. |
| 31 final VersionDirective versionDirective; |
| 32 |
| 33 /// The document's `%TAG` directives, if any. |
| 34 final List<TagDirective> tagDirectives; |
| 35 |
| 36 /// Whether the document started implicitly (that is, without an explicit |
| 37 /// `===` sequence). |
| 38 final bool isImplicit; |
| 39 |
| 40 DocumentStartEvent(this.span, {this.versionDirective, |
| 41 List<TagDirective> tagDirectives, this.isImplicit: true}) |
| 42 : tagDirectives = tagDirectives == null ? [] : tagDirectives; |
| 43 |
| 44 String toString() => "DOCUMENT_START"; |
| 45 } |
| 46 |
| 47 /// An event indicating the end of a YAML document. |
| 48 class DocumentEndEvent implements Event { |
| 49 get type => EventType.DOCUMENT_END; |
| 50 final FileSpan span; |
| 51 |
| 52 /// Whether the document ended implicitly (that is, without an explicit |
| 53 /// `...` sequence). |
| 54 final bool isImplicit; |
| 55 |
| 56 DocumentEndEvent(this.span, {this.isImplicit: true}); |
| 57 |
| 58 String toString() => "DOCUMENT_END"; |
| 59 } |
| 60 |
| 61 /// An event indicating that an alias was referenced. |
| 62 class AliasEvent implements Event { |
| 63 get type => EventType.ALIAS; |
| 64 final FileSpan span; |
| 65 |
| 66 /// The name of the anchor. |
| 67 final String name; |
| 68 |
| 69 AliasEvent(this.span, this.name); |
| 70 |
| 71 String toString() => "ALIAS $name"; |
| 72 } |
| 73 |
| 74 /// A base class for events that can have anchor and tag properties associated |
| 75 /// with them. |
| 76 abstract class _ValueEvent implements Event { |
| 77 /// The name of the value's anchor, or `null` if it wasn't anchored. |
| 78 String get anchor; |
| 79 |
| 80 /// The text of the value's tag, or `null` if it wasn't tagged. |
| 81 String get tag; |
| 82 |
| 83 String toString() { |
| 84 var buffer = new StringBuffer('$type'); |
| 85 if (anchor != null) buffer.write(" &$anchor"); |
| 86 if (tag != null) buffer.write(" $tag"); |
| 87 return buffer.toString(); |
| 88 } |
| 89 } |
| 90 |
| 91 /// An event indicating a single scalar value. |
| 92 class ScalarEvent extends _ValueEvent { |
| 93 get type => EventType.SCALAR; |
| 94 final FileSpan span; |
| 95 final String anchor; |
| 96 final String tag; |
| 97 |
| 98 /// The contents of the scalar. |
| 99 final String value; |
| 100 |
| 101 /// The style of the scalar in the original source. |
| 102 final ScalarStyle style; |
| 103 |
| 104 ScalarEvent(this.span, this.value, this.style, {this.anchor, this.tag}); |
| 105 |
| 106 String toString() => "${super.toString()} \"$value\""; |
| 107 } |
| 108 |
| 109 /// An event indicating the beginning of a sequence. |
| 110 class SequenceStartEvent extends _ValueEvent { |
| 111 get type => EventType.SEQUENCE_START; |
| 112 final FileSpan span; |
| 113 final String anchor; |
| 114 final String tag; |
| 115 |
| 116 /// The style of the collection in the original source. |
| 117 final CollectionStyle style; |
| 118 |
| 119 SequenceStartEvent(this.span, this.style, {this.anchor, this.tag}); |
| 120 } |
| 121 |
| 122 /// An event indicating the beginning of a mapping. |
| 123 class MappingStartEvent extends _ValueEvent { |
| 124 get type => EventType.MAPPING_START; |
| 125 final FileSpan span; |
| 126 final String anchor; |
| 127 final String tag; |
| 128 |
| 129 /// The style of the collection in the original source. |
| 130 final CollectionStyle style; |
| 131 |
| 132 MappingStartEvent(this.span, this.style, {this.anchor, this.tag}); |
| 133 } |
| 134 |
| 135 /// An enum of types of [Event] object. |
| 136 class EventType { |
| 137 static const STREAM_START = const EventType._("STREAM_START"); |
| 138 static const STREAM_END = const EventType._("STREAM_END"); |
| 139 |
| 140 static const DOCUMENT_START = const EventType._("DOCUMENT_START"); |
| 141 static const DOCUMENT_END = const EventType._("DOCUMENT_END"); |
| 142 |
| 143 static const ALIAS = const EventType._("ALIAS"); |
| 144 static const SCALAR = const EventType._("SCALAR"); |
| 145 |
| 146 static const SEQUENCE_START = const EventType._("SEQUENCE_START"); |
| 147 static const SEQUENCE_END = const EventType._("SEQUENCE_END"); |
| 148 |
| 149 static const MAPPING_START = const EventType._("MAPPING_START"); |
| 150 static const MAPPING_END = const EventType._("MAPPING_END"); |
| 151 |
| 152 final String name; |
| 153 |
| 154 const EventType._(this.name); |
| 155 |
| 156 String toString() => name; |
| 157 } |
OLD | NEW |