Index: pyyaml/trunk/lib/yaml/events.py
===================================================================
--- pyyaml/trunk/lib/yaml/events.py	(revision 118)
+++ pyyaml/trunk/lib/yaml/events.py	(revision 130)
@@ -1,11 +1,12 @@
+
+# Abstract classes.
 
 class Event:
-    def __init__(self, start_mark, end_mark):
+    def __init__(self, start_mark=None, end_mark=None):
         self.start_mark = start_mark
         self.end_mark = end_mark
     def __repr__(self):
-        attributes = [key for key in self.__dict__
-                if not key.endswith('_mark')]
-        attributes.sort()
+        attributes = [key for key in ['anchor', 'tag', 'value']
+                if hasattr(self, key)]
         arguments = ', '.join(['%s=%r' % (key, getattr(self, key))
                 for key in attributes])
@@ -13,8 +14,51 @@
 
 class NodeEvent(Event):
-    def __init__(self, anchor, start_mark, end_mark):
+    def __init__(self, anchor, start_mark=None, end_mark=None):
         self.anchor = anchor
         self.start_mark = start_mark
         self.end_mark = end_mark
+
+class CollectionStartEvent(NodeEvent):
+    def __init__(self, anchor, tag, start_mark=None, end_mark=None,
+            flow_style=None):
+        self.anchor = anchor
+        self.tag = tag
+        self.start_mark = start_mark
+        self.end_mark = end_mark
+        self.flow_style = flow_style
+
+class CollectionEndEvent(Event):
+    pass
+
+# Implementations.
+
+class StreamStartEvent(Event):
+    def __init__(self, start_mark=None, end_mark=None,
+            encoding=None, canonical=None, indent=None, width=None):
+        self.start_mark = start_mark
+        self.end_mark = end_mark
+        self.encoding = encoding
+        self.canonical = canonical
+        self.indent = indent
+        self.width = width
+
+class StreamEndEvent(Event):
+    pass
+
+class DocumentStartEvent(Event):
+    def __init__(self, start_mark=None, end_mark=None,
+            implicit=None, version=None, tags=None):
+        self.start_mark = start_mark
+        self.end_mark = end_mark
+        self.implicit = implicit
+        self.version = version
+        self.tags = tags
+
+class DocumentEndEvent(Event):
+    def __init__(self, start_mark=None, end_mark=None,
+            implicit=None):
+        self.start_mark = start_mark
+        self.end_mark = end_mark
+        self.implicit = implicit
 
 class AliasEvent(NodeEvent):
@@ -22,5 +66,6 @@
 
 class ScalarEvent(NodeEvent):
-    def __init__(self, anchor, tag, value, start_mark, end_mark):
+    def __init__(self, anchor, tag, value, start_mark=None, end_mark=None,
+            implicit=None, style=None):
         self.anchor = anchor
         self.tag = tag
@@ -28,31 +73,17 @@
         self.start_mark = start_mark
         self.end_mark = end_mark
+        self.implicit = implicit
+        self.style = style
 
-class CollectionEvent(NodeEvent):
-    def __init__(self, anchor, tag, start_mark, end_mark):
-        self.anchor = anchor
-        self.tag = tag
-        self.start_mark = start_mark
-        self.end_mark = end_mark
-
-class SequenceEvent(CollectionEvent):
+class SequenceStartEvent(CollectionStartEvent):
     pass
 
-class MappingEvent(CollectionEvent):
+class SequenceEndEvent(CollectionEndEvent):
     pass
 
-class CollectionEndEvent(Event):
+class MappingStartEvent(CollectionStartEvent):
     pass
 
-class DocumentStartEvent(Event):
+class MappingEndEvent(CollectionEndEvent):
     pass
 
-class DocumentEndEvent(Event):
-    pass
-
-class StreamStartEvent(Event):
-    pass
-
-class StreamEndEvent(Event):
-    pass
-
