Fix tag parsing with () (#532)

This commit is contained in:
Denis Gladkikh
2018-01-28 08:18:55 -08:00
committed by Jesse Beder
parent 86ae3a5aa7
commit cfb7606a84
2 changed files with 10 additions and 4 deletions

View File

@@ -135,7 +135,7 @@ inline const RegEx& URI() {
return e;
}
inline const RegEx& Tag() {
static const RegEx e = Word() || RegEx("#;/?:@&=+$_.~*'", REGEX_OR) ||
static const RegEx e = Word() || RegEx("#;/?:@&=+$_.~*'()", REGEX_OR) ||
(RegEx('%') + Hex() + Hex());
return e;
}
@@ -200,7 +200,7 @@ inline const RegEx& Chomp() {
// and some functions
std::string Escape(Stream& in);
}
} // namespace Exp
namespace Keys {
const char Directive = '%';
@@ -216,7 +216,7 @@ const char LiteralScalar = '|';
const char FoldedScalar = '>';
const char VerbatimTagStart = '<';
const char VerbatimTagEnd = '>';
}
}
} // namespace Keys
} // namespace YAML
#endif // EXP_H_62B23520_7C8E_11DE_8A39_0800200C9A66

View File

@@ -231,5 +231,11 @@ TEST(NodeTest, LoadTildeAsNull) {
ASSERT_TRUE(node.IsNull());
}
TEST(NodeTest, LoadTagWithParenthesis) {
Node node = Load("!Complex(Tag) foo");
EXPECT_EQ(node.Tag(), "!Complex(Tag)");
EXPECT_EQ(node.as<std::string>(), "foo");
}
} // namespace
} // namespace YAML