Skip to content

Commit 03ca41e

Browse files
committed
[#121] fix(ModelScript): allow parentheses in strings
1 parent 70338b1 commit 03ca41e

3 files changed

Lines changed: 22 additions & 1 deletion

File tree

src/ModelScriptDsl.cc

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,16 @@ namespace zenkit {
8282
chr = static_cast<unsigned char>(_m_buffer->read_char());
8383
_m_column += 1;
8484

85-
while (chr != '"' && chr != '\n' && chr != ')') {
85+
// Modded. Some mods may include `(` and/or `)` in their strings. For this reason we need to handle
86+
// all of these cases:
87+
// registerMesh ("Some_File Name(WithBrackets).ASC")
88+
// registerMesh ("Some_File Name.ASC")
89+
// registerMesh ("Some_File Name.ASC"
90+
// registerMesh ("Some_File Name.ASC)
91+
// registerMesh ("Some_File Name.ASC
92+
unsigned char prev = '\0';
93+
while (chr != '"' && chr != '\n') {
94+
if (!std::isspace(chr)) prev = chr;
8695
_m_value.push_back(static_cast<char>(chr));
8796
chr = static_cast<unsigned char>(_m_buffer->read_char());
8897
_m_column += 1;
@@ -94,6 +103,7 @@ namespace zenkit {
94103
_m_column -= 1;
95104
}
96105

106+
if (prev == ')') _m_value.pop_back();
97107
return MdsToken::STRING;
98108
}
99109

tests/TestModelScript.cc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ TEST_SUITE("ModelScript") {
1515
CHECK_EQ(script.skeleton.disable_mesh, true);
1616
CHECK_EQ(script.skeleton.name, "TestModelMesh.asc");
1717

18+
CHECK_EQ(script.meshes[0], "AnotherTestModelMesh1.asc");
19+
CHECK_EQ(script.meshes[1], "AnotherTestModelMesh2.asc");
20+
CHECK_EQ(script.meshes[2], "AnotherTestModelMesh3.asc");
21+
CHECK_EQ(script.meshes[3], "AnotherTestModelMesh4.asc");
22+
CHECK_EQ(script.meshes[4], "AnotherTestModelMesh5.asc");
23+
CHECK_EQ(script.meshes[5], "AnotherTestModelMesh(6).asc");
24+
1825
CHECK_EQ(script.animations.size(), 2);
1926
CHECK_EQ(script.animations[0].name, "aniName1");
2027
CHECK_EQ(script.animations[0].layer, 111);

tests/samples/waran.mds

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ Model("TestModel") {
22
meshAndTree("TestModelMesh.asc" DONT_USE_MESH)
33
registerMesh("AnotherTestModelMesh1.asc")
44
registerMesh("AnotherTestModelMesh2.asc")
5+
registerMesh("AnotherTestModelMesh3.asc"
6+
registerMesh("AnotherTestModelMesh4.asc
7+
registerMesh("AnotherTestModelMesh5.asc)
8+
registerMesh("AnotherTestModelMesh(6).asc")
59

610
// A comment.
711

0 commit comments

Comments
 (0)