diff --git a/src/exp.h b/src/exp.h index 3e12aba..52bfd0a 100644 --- a/src/exp.h +++ b/src/exp.h @@ -91,7 +91,7 @@ namespace YAML return e; } inline const RegEx& Key() { - static const RegEx e = RegEx('?'); + static const RegEx e = RegEx('?') + BlankOrBreak(); return e; } inline const RegEx& KeyInFlow() { diff --git a/test/core/parsertests.cpp b/test/core/parsertests.cpp index 1ff922c..2b8b5ef 100644 --- a/test/core/parsertests.cpp +++ b/test/core/parsertests.cpp @@ -16,6 +16,18 @@ namespace Test } return " no exception caught"; } + + TEST PlainScalarStartingWithQuestionMark() + { + HANDLE("foo: ?bar"); + EXPECT_DOC_START(); + EXPECT_MAP_START("?", 0); + EXPECT_SCALAR("?", 0, "foo"); + EXPECT_SCALAR("?", 0, "?bar"); + EXPECT_MAP_END(); + EXPECT_DOC_END(); + DONE(); + } } namespace { @@ -44,6 +56,7 @@ namespace Test int passed = 0; int total = 0; RunParserTest(&Parser::NoEndOfMapFlow, "No end of map flow", passed, total); + RunParserTest(&Parser::PlainScalarStartingWithQuestionMark, "Plain scalar starting with question mark", passed, total); std::cout << "Parser tests: " << passed << "/" << total << " passed\n"; return passed == total;