@@ -1611,9 +1611,10 @@ void ParseEngine<EventHandler>::_end2_doc()
16111611{
16121612 _c4dbgp (" doc: end" );
16131613 _RYML_CB_ASSERT (m_evt_handler->m_stack .m_callbacks , has_any (RDOC));
1614- if (m_doc_empty)
1614+ if (m_doc_empty || (m_pending_tags. num_entries || m_pending_anchors. num_entries ) )
16151615 {
16161616 _c4dbgp (" doc was empty; add empty val" );
1617+ _handle_annotations_before_blck_val_scalar ();
16171618 m_evt_handler->set_val_scalar_plain_empty ();
16181619 }
16191620 m_evt_handler->end_doc ();
@@ -1623,9 +1624,10 @@ template<class EventHandler>
16231624void ParseEngine<EventHandler>::_end2_doc_expl()
16241625{
16251626 _c4dbgp (" doc: end" );
1626- if (m_doc_empty)
1627+ if (m_doc_empty || (m_pending_tags. num_entries || m_pending_anchors. num_entries ) )
16271628 {
16281629 _c4dbgp (" doc: no children; add empty val" );
1630+ _handle_annotations_before_blck_val_scalar ();
16291631 m_evt_handler->set_val_scalar_plain_empty ();
16301632 }
16311633 m_evt_handler->end_doc_expl ();
@@ -1648,6 +1650,14 @@ void ParseEngine<EventHandler>::_maybe_end_doc()
16481650 _c4dbgp (" doc must be finished" );
16491651 _end2_doc ();
16501652 }
1653+ else if (m_doc_empty && (m_pending_tags.num_entries || m_pending_anchors.num_entries ))
1654+ {
1655+ _c4dbgp (" no doc to finish, but pending annotations" );
1656+ m_evt_handler->begin_doc ();
1657+ _handle_annotations_before_blck_val_scalar ();
1658+ m_evt_handler->set_val_scalar_plain_empty ();
1659+ m_evt_handler->end_doc ();
1660+ }
16511661}
16521662
16531663template <class EventHandler >
@@ -6800,14 +6810,26 @@ void ParseEngine<EventHandler>::_handle_map_block()
68006810 m_evt_handler->set_val_scalar_plain_empty ();
68016811 m_evt_handler->add_sibling ();
68026812 m_evt_handler->set_key_scalar_plain_empty ();
6803- _line_progressed (1 );
6804- _maybe_skip_whitespace_tokens ();
6805- goto mapblck_again;
6813+ }
6814+ else if (startindent > m_evt_handler->m_curr ->indref )
6815+ {
6816+ _c4dbgp (" mapblck[RVAL]: start val mapblck" );
6817+ addrem_flags (RNXT, RVAL);
6818+ _handle_annotations_before_start_mapblck (startline);
6819+ m_evt_handler->begin_map_val_block ();
6820+ _handle_annotations_and_indentation_after_start_mapblck (startindent, startline);
6821+ m_evt_handler->set_key_scalar_plain_empty ();
6822+ _set_indentation (m_evt_handler->m_curr ->line_contents .indentation );
6823+ // keep the child state on RVAL
6824+ addrem_flags (RVAL, RNXT);
68066825 }
68076826 else
68086827 {
68096828 _c4err (" parse error" );
68106829 }
6830+ _line_progressed (1 );
6831+ _maybe_skip_whitespace_tokens ();
6832+ goto mapblck_again;
68116833 }
68126834 else if (first == ' .' )
68136835 {
@@ -7160,6 +7182,7 @@ void ParseEngine<EventHandler>::_handle_map_block()
71607182 {
71617183 _c4dbgp (" mapblck[QMRK]: start child seqblck (!)" );
71627184 addrem_flags (RKCL, RKEY|QMRK);
7185+ _handle_annotations_before_blck_key_scalar ();
71637186 m_evt_handler->begin_seq_key_block ();
71647187 addrem_flags (RVAL|RSEQ, RMAP|RKCL|QMRK);
71657188 _set_indentation (startindent);
@@ -7521,13 +7544,16 @@ void ParseEngine<EventHandler>::_handle_unk()
75217544 if (m_doc_empty)
75227545 {
75237546 _c4dbgp (" it's a map with an empty key" );
7547+ const size_t startindent = m_evt_handler->m_curr ->line_contents .indentation ; // save
7548+ const size_t startline = m_evt_handler->m_curr ->pos .line ; // save
75247549 m_evt_handler->check_trailing_doc_token ();
75257550 _maybe_begin_doc ();
7526- _handle_annotations_before_blck_val_scalar ( );
7551+ _handle_annotations_before_start_mapblck (startline );
75277552 m_evt_handler->begin_map_val_block ();
7553+ _handle_annotations_and_indentation_after_start_mapblck (startindent, startline);
75287554 m_evt_handler->set_key_scalar_plain_empty ();
75297555 m_doc_empty = false ;
7530- _save_indentation ( );
7556+ _set_indentation (startindent );
75317557 }
75327558 else
75337559 {
0 commit comments