@@ -64,7 +64,7 @@ data Event =
64 | EventScalar !ByteString !Tag !Style !Anchor
64 | EventScalar !ByteString !Tag !Style !Anchor
65 | EventSequenceStart !Anchor
65 | EventSequenceStart !Anchor
66 | EventSequenceEnd
66 | EventSequenceEnd
67− | EventMappingStart !Anchor
67+ | EventMappingStart !Tag !Anchor
68 | EventMappingEnd
68 | EventMappingEnd
69 deriving (Show, Eq)
69 deriving (Show, Eq)
@@ -232,6 +232,12 @@ foreign import ccall unsafe "get_sequence_start_anchor"
232foreign import ccall unsafe "get_mapping_start_anchor"
232foreign import ccall unsafe "get_mapping_start_anchor"
233 c_get_mapping_start_anchor :: EventRaw -> IO CString
233 c_get_mapping_start_anchor :: EventRaw -> IO CString
235+foreign import ccall unsafe "get_mapping_start_tag"
236+ c_get_mapping_start_tag :: EventRaw -> IO CString
238+foreign import ccall unsafe "get_mapping_start_tag_len"
239+ c_get_mapping_start_tag_len :: EventRaw -> IO CULong
235foreign import ccall unsafe "get_alias_anchor"
241foreign import ccall unsafe "get_alias_anchor"
236 c_get_alias_anchor :: EventRaw -> IO CString
242 c_get_alias_anchor :: EventRaw -> IO CString
@@ -280,10 +286,21 @@ getEvent er = do
280 YamlSequenceEndEvent -> return $ Just EventSequenceEnd
286 YamlSequenceEndEvent -> return $ Just EventSequenceEnd
281 YamlMappingStartEvent -> do
287 YamlMappingStartEvent -> do
282 yanchor <- c_get_mapping_start_anchor er
288 yanchor <- c_get_mapping_start_anchor er
289+ ytag <- c_get_mapping_start_tag er
290+ tag <- if ytag == nullPtr
293+ ytag_len <- c_get_mapping_start_tag_len er
294+ let ytag' = castPtr ytag
295+ let ytag_len' = fromEnum ytag_len
298+ then return Data.ByteString.empty
299+ else packCStringLen (ytag', ytag_len')
283 anchor <- if yanchor == nullPtr
300 anchor <- if yanchor == nullPtr
284 then return Nothing
301 then return Nothing
285 else Just <$> peekCString yanchor
302 else Just <$> peekCString yanchor
286− return $ Just $ EventMappingStart anchor
303+ return $ Just $ EventMappingStart tag anchor
287 YamlMappingEndEvent -> return $ Just EventMappingEnd
304 YamlMappingEndEvent -> return $ Just EventMappingEnd
289-- Emitter
306-- Emitter
@@ -448,22 +465,26 @@ toEventRaw e f = allocaBytes eventSize $ \er -> do
448 0 -- YAML_ANY_SEQUENCE_STYLE
465 0 -- YAML_ANY_SEQUENCE_STYLE
449 EventSequenceEnd ->
466 EventSequenceEnd ->
450 c_yaml_sequence_end_event_initialize er
467 c_yaml_sequence_end_event_initialize er
451− EventMappingStart Nothing ->
468+ EventMappingStart tag Nothing ->
452− c_yaml_mapping_start_event_initialize
469+ withCString (tagToString tag) $ \tag' -> do
457− 0 -- YAML_ANY_SEQUENCE_STYLE
458− EventMappingStart (Just anchor) ->
459− withCString anchor $ \anchor' -> do
460− let anchorP = castPtr anchor'
470+ let tagP = castPtr tag'
461 c_yaml_mapping_start_event_initialize
471 c_yaml_mapping_start_event_initialize
466 0 -- YAML_ANY_SEQUENCE_STYLE
476 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
487+ 0 -- YAML_ANY_SEQUENCE_STYLE
467 EventMappingEnd ->
488 EventMappingEnd ->
468 c_yaml_mapping_end_event_initialize er
489 c_yaml_mapping_end_event_initialize er
469 EventAlias anchor ->
490 EventAlias anchor ->