Skip to content

Commit c401610

Browse files
authored
Merge pull request #525 from biojppm/fix/524-parse_complex_map
2 parents 338385b + e23608e commit c401610

3 files changed

Lines changed: 85 additions & 4 deletions

File tree

changelog/current.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
### Fixes
2+
3+
- Fix [#524](https://github.com/biojppm/rapidyaml/issues/524) ([PR#525](https://github.com/biojppm/rapidyaml/pull/525)): problem parsing nested map value in complex map. Kudos to @MatthewSteel!
4+
5+
6+
### Thanks
7+
8+
- @MatthewSteel

src/c4/yml/parse_engine.def.hpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6563,7 +6563,6 @@ void ParseEngine<EventHandler>::_handle_map_block()
65636563
csubstr maybe_filtered = _maybe_filter_key_scalar_squot(sc); // KEY!
65646564
m_evt_handler->set_key_scalar_squoted(maybe_filtered);
65656565
_maybe_skip_whitespace_tokens();
6566-
_set_indentation(m_evt_handler->m_curr->line_contents.indentation);
65676566
// keep the child state on RVAL
65686567
addrem_flags(RVAL, RNXT);
65696568
}
@@ -6604,7 +6603,6 @@ void ParseEngine<EventHandler>::_handle_map_block()
66046603
csubstr maybe_filtered = _maybe_filter_key_scalar_dquot(sc); // KEY!
66056604
m_evt_handler->set_key_scalar_dquoted(maybe_filtered);
66066605
_maybe_skip_whitespace_tokens();
6607-
_set_indentation(m_evt_handler->m_curr->line_contents.indentation);
66086606
// keep the child state on RVAL
66096607
addrem_flags(RVAL, RNXT);
66106608
}
@@ -6666,7 +6664,6 @@ void ParseEngine<EventHandler>::_handle_map_block()
66666664
csubstr maybe_filtered = _maybe_filter_key_scalar_plain(sc, m_evt_handler->m_curr->indref); // KEY!
66676665
m_evt_handler->set_key_scalar_plain(maybe_filtered);
66686666
_maybe_skip_whitespace_tokens();
6669-
_set_indentation(m_evt_handler->m_curr->line_contents.indentation);
66706667
// keep the child state on RVAL
66716668
addrem_flags(RVAL, RNXT);
66726669
}
@@ -6846,7 +6843,6 @@ void ParseEngine<EventHandler>::_handle_map_block()
68466843
m_evt_handler->begin_map_val_block();
68476844
_handle_annotations_and_indentation_after_start_mapblck(startindent, startline);
68486845
m_evt_handler->set_key_scalar_plain_empty();
6849-
_set_indentation(m_evt_handler->m_curr->line_contents.indentation);
68506846
// keep the child state on RVAL
68516847
addrem_flags(RVAL, RNXT);
68526848
}

test/test_parse_engine_6_qmrk.cpp

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,83 @@ ENGINE_TEST(QmrkWithTags,
574574
}
575575

576576

577+
ENGINE_TEST(QmrkGithub524_0,
578+
("? outer\n"
579+
": inner1: 1\n"
580+
" inner2: 2\n",
581+
"outer:\n"
582+
" inner1: 1\n"
583+
" inner2: 2\n"),
584+
"+STR\n"
585+
"+DOC\n"
586+
"+MAP\n"
587+
"=VAL :outer\n"
588+
"+MAP\n"
589+
"=VAL :inner1\n"
590+
"=VAL :1\n"
591+
"=VAL :inner2\n"
592+
"=VAL :2\n"
593+
"-MAP\n"
594+
"-MAP\n"
595+
"-DOC\n"
596+
"-STR\n")
597+
{
598+
___(ps.begin_stream());
599+
___(ps.begin_doc());
600+
___(ps.begin_map_val_block());
601+
___(ps.set_key_scalar_plain("outer"));
602+
___(ps.begin_map_val_block());
603+
___(ps.set_key_scalar_plain("inner1"));
604+
___(ps.set_val_scalar_plain("1"));
605+
___(ps.add_sibling());
606+
___(ps.set_key_scalar_plain("inner2"));
607+
___(ps.set_val_scalar_plain("2"));
608+
___(ps.end_map());
609+
___(ps.end_map());
610+
___(ps.end_doc());
611+
___(ps.end_stream());
612+
}
613+
614+
ENGINE_TEST(QmrkGithub524_1,
615+
("? outer\n"
616+
": inner1: 1\n"
617+
"inner2: 2\n"
618+
,
619+
"outer:\n"
620+
" inner1: 1\n"
621+
"inner2: 2\n"),
622+
"+STR\n"
623+
"+DOC\n"
624+
"+MAP\n"
625+
"=VAL :outer\n"
626+
"+MAP\n"
627+
"=VAL :inner1\n"
628+
"=VAL :1\n"
629+
"-MAP\n"
630+
"=VAL :inner2\n"
631+
"=VAL :2\n"
632+
"-MAP\n"
633+
"-DOC\n"
634+
"-STR\n"
635+
)
636+
{
637+
___(ps.begin_stream());
638+
___(ps.begin_doc());
639+
___(ps.begin_map_val_block());
640+
___(ps.set_key_scalar_plain("outer"));
641+
___(ps.begin_map_val_block());
642+
___(ps.set_key_scalar_plain("inner1"));
643+
___(ps.set_val_scalar_plain("1"));
644+
___(ps.end_map());
645+
___(ps.add_sibling());
646+
___(ps.set_key_scalar_plain("inner2"));
647+
___(ps.set_val_scalar_plain("2"));
648+
___(ps.end_map());
649+
___(ps.end_doc());
650+
___(ps.end_stream());
651+
}
652+
653+
577654
//-----------------------------------------------------------------------------
578655

579656
ENGINE_TEST(QmrkFlow0,

0 commit comments

Comments
 (0)