@@ -64,7 +64,7 @@ data Event =
6464 | EventScalar !ByteString !Tag !Style !Anchor
6565 | EventSequenceStart !Anchor
6666 | EventSequenceEnd
67− | EventMappingStart !Anchor
67+ | EventMappingStart !Tag !Anchor
6868 | EventMappingEnd
6969 deriving (Show, Eq)
7070
@@ -232,6 +232,12 @@ foreign import ccall unsafe "get_sequence_start_anchor"
232232foreign import ccall unsafe "get_mapping_start_anchor"
233233 c_get_mapping_start_anchor :: EventRaw -> IO CString
234234
235+foreign import ccall unsafe "get_mapping_start_tag"
236+ c_get_mapping_start_tag :: EventRaw -> IO CString
237+
238+foreign import ccall unsafe "get_mapping_start_tag_len"
239+ c_get_mapping_start_tag_len :: EventRaw -> IO CULong
240+
235241foreign import ccall unsafe "get_alias_anchor"
236242 c_get_alias_anchor :: EventRaw -> IO CString
237243
@@ -280,10 +286,21 @@ getEvent er = do
280286 YamlSequenceEndEvent -> return $ Just EventSequenceEnd
281287 YamlMappingStartEvent -> do
282288 yanchor <- c_get_mapping_start_anchor er
289+ ytag <- c_get_mapping_start_tag er
290+ tag <- if ytag == nullPtr
291+ then return NoTag
292+ else do
293+ ytag_len <- c_get_mapping_start_tag_len er
294+ let ytag' = castPtr ytag
295+ let ytag_len' = fromEnum ytag_len
296+ bsToTag <$>
297+ if ytag_len' == 0
298+ then return Data.ByteString.empty
299+ else packCStringLen (ytag', ytag_len')
283300 anchor <- if yanchor == nullPtr
284301 then return Nothing
285302 else Just <$> peekCString yanchor
286− return $ Just $ EventMappingStart anchor
303+ return $ Just $ EventMappingStart tag anchor
287304 YamlMappingEndEvent -> return $ Just EventMappingEnd
288305
289306-- Emitter
@@ -448,22 +465,26 @@ toEventRaw e f = allocaBytes eventSize $ \er -> do
448465 0 -- YAML_ANY_SEQUENCE_STYLE
449466 EventSequenceEnd ->
450467 c_yaml_sequence_end_event_initialize er
451− EventMappingStart Nothing ->
452− c_yaml_mapping_start_event_initialize
453− er
454− nullPtr
455− nullPtr
456− 1
457− 0 -- YAML_ANY_SEQUENCE_STYLE
458− EventMappingStart (Just anchor) ->
459− withCString anchor $ \anchor' -> do
460− let anchorP = castPtr anchor'
468+ EventMappingStart tag Nothing ->
469+ withCString (tagToString tag) $ \tag' -> do
470+ let tagP = castPtr tag'
461471 c_yaml_mapping_start_event_initialize
462472 er
463− anchorP
464473 nullPtr
474+ tagP
465475 1
466476 0 -- YAML_ANY_SEQUENCE_STYLE
477+ EventMappingStart tag (Just anchor) ->
478+ withCString (tagToString tag) $ \tag' -> do
479+ withCString anchor $ \anchor' -> do
480+ let tagP = castPtr tag'
481+ let anchorP = castPtr anchor'
482+ c_yaml_mapping_start_event_initialize
483+ er
484+ anchorP
485+ tagP
486+ 1
487+ 0 -- YAML_ANY_SEQUENCE_STYLE
467488 EventMappingEnd ->
468489 c_yaml_mapping_end_event_initialize er
469490 EventAlias anchor ->