@@ -62,7 +62,7 @@ data Event =
62 | EventDocumentEnd
62 | EventDocumentEnd
63 | EventAlias !AnchorName
63 | EventAlias !AnchorName
64 | EventScalar !ByteString !Tag !Style !Anchor
64 | EventScalar !ByteString !Tag !Style !Anchor
65− | EventSequenceStart !Anchor
65+ | EventSequenceStart !Tag !Anchor
66 | EventSequenceEnd
66 | EventSequenceEnd
67 | EventMappingStart !Tag !Anchor
67 | EventMappingStart !Tag !Anchor
68 | EventMappingEnd
68 | EventMappingEnd
@@ -229,6 +229,12 @@ foreign import ccall unsafe "get_scalar_anchor"
229foreign import ccall unsafe "get_sequence_start_anchor"
229foreign import ccall unsafe "get_sequence_start_anchor"
230 c_get_sequence_start_anchor :: EventRaw -> IO CString
230 c_get_sequence_start_anchor :: EventRaw -> IO CString
232+foreign import ccall unsafe "get_sequence_start_tag"
233+ c_get_sequence_start_tag :: EventRaw -> IO CString
235+foreign import ccall unsafe "get_sequence_start_tag_len"
236+ c_get_sequence_start_tag_len :: EventRaw -> IO CULong
232foreign import ccall unsafe "get_mapping_start_anchor"
238foreign import ccall unsafe "get_mapping_start_anchor"
233 c_get_mapping_start_anchor :: EventRaw -> IO CString
239 c_get_mapping_start_anchor :: EventRaw -> IO CString
@@ -282,10 +288,24 @@ getEvent er = do
282 anchor <- if yanchor == nullPtr
288 anchor <- if yanchor == nullPtr
283 then return Nothing
289 then return Nothing
284 else Just <$> peekCString yanchor
290 else Just <$> peekCString yanchor
291+ ytag <- c_get_sequence_start_tag er
292+ tag <- if ytag == nullPtr
295+ ytag_len <- c_get_sequence_start_tag_len er
296+ let ytag' = castPtr ytag
297+ let ytag_len' = fromEnum ytag_len
300+ then return Data.ByteString.empty
301+ else packCStringLen (ytag', ytag_len')
285− return $ Just $ EventSequenceStart anchor
302+ return $ Just $ EventSequenceStart tag anchor
286 YamlSequenceEndEvent -> return $ Just EventSequenceEnd
303 YamlSequenceEndEvent -> return $ Just EventSequenceEnd
287 YamlMappingStartEvent -> do
304 YamlMappingStartEvent -> do
288 yanchor <- c_get_mapping_start_anchor er
305 yanchor <- c_get_mapping_start_anchor er
306+ anchor <- if yanchor == nullPtr
308+ else Just <$> peekCString yanchor
289 ytag <- c_get_mapping_start_tag er
309 ytag <- c_get_mapping_start_tag er
290 tag <- if ytag == nullPtr
310 tag <- if ytag == nullPtr
291 then return NoTag
311 then return NoTag
@@ -297,9 +317,6 @@ getEvent er = do
297 if ytag_len' == 0
317 if ytag_len' == 0
298 then return Data.ByteString.empty
318 then return Data.ByteString.empty
299 else packCStringLen (ytag', ytag_len')
319 else packCStringLen (ytag', ytag_len')
300− anchor <- if yanchor == nullPtr
302− else Just <$> peekCString yanchor
303 return $ Just $ EventMappingStart tag anchor
320 return $ Just $ EventMappingStart tag anchor
304 YamlMappingEndEvent -> return $ Just EventMappingEnd
321 YamlMappingEndEvent -> return $ Just EventMappingEnd
@@ -447,22 +464,26 @@ toEventRaw e f = allocaBytes eventSize $ \er -> do
447 0 -- plain_implicit
464 0 -- plain_implicit
448 qi -- quoted_implicit
465 qi -- quoted_implicit
449 style' -- style
466 style' -- style
450− EventSequenceStart Nothing ->
467+ EventSequenceStart tag Nothing ->
451− c_yaml_sequence_start_event_initialize
468+ withCString (tagToString tag) $ \tag' -> do
456− 0 -- YAML_ANY_SEQUENCE_STYLE
457− EventSequenceStart (Just anchor) ->
458− withCString anchor $ \anchor' -> do
459− let anchorP = castPtr anchor'
469+ let tagP = castPtr tag'
460 c_yaml_sequence_start_event_initialize
470 c_yaml_sequence_start_event_initialize
475+ 0 -- YAML_ANY_SEQUENCE_STYLE
476+ EventSequenceStart tag (Just anchor) ->
477+ withCString (tagToString tag) $ \tag' -> do
478+ let tagP = castPtr tag'
479+ withCString anchor $ \anchor' -> do
480+ let anchorP = castPtr anchor'
481+ c_yaml_sequence_start_event_initialize
465− 0 -- YAML_ANY_SEQUENCE_STYLE
486+ 0 -- YAML_ANY_SEQUENCE_STYLE
466 EventSequenceEnd ->
487 EventSequenceEnd ->
467 c_yaml_sequence_end_event_initialize er
488 c_yaml_sequence_end_event_initialize er
468 EventMappingStart tag Nothing ->
489 EventMappingStart tag Nothing ->