Adjust further code formatting

This commit is contained in:
Clang Format 2023-11-19 21:59:57 +01:00 committed by Jan
parent d5f881be04
commit c858695f0c
No known key found for this signature in database
GPG Key ID: 44B581F78FF5C57C
96 changed files with 4036 additions and 2241 deletions

View File

@ -14,7 +14,13 @@
ObjLoading::Configuration_t ObjLoading::Configuration; ObjLoading::Configuration_t ObjLoading::Configuration;
const IObjLoader* const OBJ_LOADERS[]{new IW3::ObjLoader(), new IW4::ObjLoader(), new IW5::ObjLoader(), new T5::ObjLoader(), new T6::ObjLoader()}; const IObjLoader* const OBJ_LOADERS[]{
new IW3::ObjLoader(),
new IW4::ObjLoader(),
new IW5::ObjLoader(),
new T5::ObjLoader(),
new T6::ObjLoader(),
};
void ObjLoading::LoadReferencedContainersForZone(ISearchPath* searchPath, Zone* zone) void ObjLoading::LoadReferencedContainersForZone(ISearchPath* searchPath, Zone* zone)
{ {

View File

@ -30,15 +30,22 @@ std::unique_ptr<SimpleExpressionMatchers::matcher_t> MenuExpressionMatchers::Par
{ {
const MenuMatcherFactory create(labelSupplier); const MenuMatcherFactory create(labelSupplier);
return create.Or({create return create.Or({
.And({create.Identifier().Capture(CAPTURE_FUNCTION_NAME), create
.And({
create.Identifier().Capture(CAPTURE_FUNCTION_NAME),
create.Char('('), create.Char('('),
create.Optional(create.And({ create.Optional(create.And({
create.Label(LABEL_EXPRESSION), create.Label(LABEL_EXPRESSION),
create.OptionalLoop(create.And({create.Char(','), create.Label(LABEL_EXPRESSION)})), create.OptionalLoop(create.And({
create.Char(','),
create.Label(LABEL_EXPRESSION),
})), })),
create.Char(')').Tag(TAG_EXPRESSION_FUNCTION_CALL_END)}) })),
.Tag(TAG_EXPRESSION_FUNCTION_CALL)}); create.Char(')').Tag(TAG_EXPRESSION_FUNCTION_CALL_END),
})
.Tag(TAG_EXPRESSION_FUNCTION_CALL),
});
} }
const std::map<std::string, size_t>& MenuExpressionMatchers::GetBaseFunctionMapForFeatureLevel(const FeatureLevel featureLevel) const std::map<std::string, size_t>& MenuExpressionMatchers::GetBaseFunctionMapForFeatureLevel(const FeatureLevel featureLevel)

View File

@ -13,7 +13,11 @@ MenuMatcherFactory::MenuMatcherFactory(const IMatcherForLabelSupplier<SimplePars
MatcherFactoryWrapper<SimpleParserValue> MenuMatcherFactory::StringChain() const MatcherFactoryWrapper<SimpleParserValue> MenuMatcherFactory::StringChain() const
{ {
return Or({And({String(), Loop(String())}) return Or({
And({
String(),
Loop(String()),
})
.Transform( .Transform(
[](const token_list_t& tokens) -> SimpleParserValue [](const token_list_t& tokens) -> SimpleParserValue
{ {
@ -26,44 +30,58 @@ MatcherFactoryWrapper<SimpleParserValue> MenuMatcherFactory::StringChain() const
return SimpleParserValue::String(tokens[0].get().GetPos(), new std::string(ss.str())); return SimpleParserValue::String(tokens[0].get().GetPos(), new std::string(ss.str()));
}), }),
String()}); String(),
});
} }
MatcherFactoryWrapper<SimpleParserValue> MenuMatcherFactory::Text() const MatcherFactoryWrapper<SimpleParserValue> MenuMatcherFactory::Text() const
{ {
return MatcherFactoryWrapper(Or({StringChain(), Identifier()})); return MatcherFactoryWrapper(Or({
StringChain(),
Identifier(),
}));
} }
MatcherFactoryWrapper<SimpleParserValue> MenuMatcherFactory::TextNoChain() const MatcherFactoryWrapper<SimpleParserValue> MenuMatcherFactory::TextNoChain() const
{ {
return MatcherFactoryWrapper(Or({String(), Identifier()})); return MatcherFactoryWrapper(Or({
String(),
Identifier(),
}));
} }
MatcherFactoryWrapper<SimpleParserValue> MenuMatcherFactory::Numeric() const MatcherFactoryWrapper<SimpleParserValue> MenuMatcherFactory::Numeric() const
{ {
return MatcherFactoryWrapper(Or({FloatingPoint(), Integer()})); return MatcherFactoryWrapper(Or({
FloatingPoint(),
Integer(),
}));
} }
MatcherFactoryWrapper<SimpleParserValue> MenuMatcherFactory::IntExpression() const MatcherFactoryWrapper<SimpleParserValue> MenuMatcherFactory::IntExpression() const
{ {
return MatcherFactoryWrapper(Or({Integer().Tag(TAG_INT).Capture(CAPTURE_INT), return MatcherFactoryWrapper(Or({
Integer().Tag(TAG_INT).Capture(CAPTURE_INT),
And({ And({
Char('(').Capture(CAPTURE_FIRST_TOKEN), Char('(').Capture(CAPTURE_FIRST_TOKEN),
Label(MenuExpressionMatchers::LABEL_EXPRESSION), Label(MenuExpressionMatchers::LABEL_EXPRESSION),
Char(')'), Char(')'),
}) })
.Tag(TAG_EXPRESSION)})); .Tag(TAG_EXPRESSION),
}));
} }
MatcherFactoryWrapper<SimpleParserValue> MenuMatcherFactory::NumericExpression() const MatcherFactoryWrapper<SimpleParserValue> MenuMatcherFactory::NumericExpression() const
{ {
return MatcherFactoryWrapper(Or({Numeric().Tag(TAG_NUMERIC).Capture(CAPTURE_NUMERIC), return MatcherFactoryWrapper(Or({
Numeric().Tag(TAG_NUMERIC).Capture(CAPTURE_NUMERIC),
And({ And({
Char('(').Capture(CAPTURE_FIRST_TOKEN), Char('(').Capture(CAPTURE_FIRST_TOKEN),
Label(MenuExpressionMatchers::LABEL_EXPRESSION), Label(MenuExpressionMatchers::LABEL_EXPRESSION),
Char(')'), Char(')'),
}) })
.Tag(TAG_EXPRESSION)})); .Tag(TAG_EXPRESSION),
}));
} }
int MenuMatcherFactory::TokenNumericIntValue(const SimpleParserValue& value) int MenuMatcherFactory::TokenNumericIntValue(const SimpleParserValue& value)

View File

@ -19,7 +19,9 @@ namespace menu::function_scope_sequences
{ {
const MenuMatcherFactory create(this); const MenuMatcherFactory create(this);
AddMatchers({create.Char('}').Capture(CAPTURE_TOKEN)}); AddMatchers({
create.Char('}').Capture(CAPTURE_TOKEN),
});
} }
protected: protected:

View File

@ -11,7 +11,10 @@ GenericBoolPropertySequence::GenericBoolPropertySequence(std::string keywordName
{ {
const MenuMatcherFactory create(this); const MenuMatcherFactory create(this);
AddMatchers({create.KeywordIgnoreCase(std::move(keywordName)).Capture(CAPTURE_FIRST_TOKEN), create.Integer().Capture(CAPTURE_VALUE)}); AddMatchers({
create.KeywordIgnoreCase(std::move(keywordName)).Capture(CAPTURE_FIRST_TOKEN),
create.Integer().Capture(CAPTURE_VALUE),
});
} }
void GenericBoolPropertySequence::ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const void GenericBoolPropertySequence::ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const

View File

@ -18,7 +18,7 @@ GenericColorPropertySequence::GenericColorPropertySequence(std::string keywordNa
create.NumericExpression().Tag(TAG_COLOR), // r create.NumericExpression().Tag(TAG_COLOR), // r
create.Optional(create.NumericExpression().Tag(TAG_COLOR)), // g create.Optional(create.NumericExpression().Tag(TAG_COLOR)), // g
create.Optional(create.NumericExpression().Tag(TAG_COLOR)), // b create.Optional(create.NumericExpression().Tag(TAG_COLOR)), // b
create.Optional(create.NumericExpression().Tag(TAG_COLOR)) // a create.Optional(create.NumericExpression().Tag(TAG_COLOR)), // a
}); });
} }

View File

@ -19,9 +19,11 @@ std::unique_ptr<GenericExpressionPropertySequence> GenericExpressionPropertySequ
auto result = std::unique_ptr<GenericExpressionPropertySequence>(new GenericExpressionPropertySequence(std::move(setCallback))); auto result = std::unique_ptr<GenericExpressionPropertySequence>(new GenericExpressionPropertySequence(std::move(setCallback)));
const MenuMatcherFactory create(result.get()); const MenuMatcherFactory create(result.get());
result->AddMatchers({create.KeywordIgnoreCase(std::move(keyword)).Capture(CAPTURE_FIRST_TOKEN), result->AddMatchers({
create.KeywordIgnoreCase(std::move(keyword)).Capture(CAPTURE_FIRST_TOKEN),
create.Label(MenuExpressionMatchers::LABEL_EXPRESSION), create.Label(MenuExpressionMatchers::LABEL_EXPRESSION),
create.Optional(create.Char(';'))}); create.Optional(create.Char(';')),
});
return std::move(result); return std::move(result);
} }
@ -36,9 +38,11 @@ std::unique_ptr<GenericExpressionPropertySequence> GenericExpressionPropertySequ
for (auto keyword : keywords) for (auto keyword : keywords)
keywordMatchers.emplace_back(create.KeywordIgnoreCase(std::move(keyword))); keywordMatchers.emplace_back(create.KeywordIgnoreCase(std::move(keyword)));
result->AddMatchers({create.And(std::move(keywordMatchers)).Capture(CAPTURE_FIRST_TOKEN), result->AddMatchers({
create.And(std::move(keywordMatchers)).Capture(CAPTURE_FIRST_TOKEN),
create.Label(MenuExpressionMatchers::LABEL_EXPRESSION), create.Label(MenuExpressionMatchers::LABEL_EXPRESSION),
create.Optional(create.Char(';'))}); create.Optional(create.Char(';')),
});
return std::move(result); return std::move(result);
} }
@ -48,10 +52,12 @@ std::unique_ptr<GenericExpressionPropertySequence> GenericExpressionPropertySequ
auto result = std::unique_ptr<GenericExpressionPropertySequence>(new GenericExpressionPropertySequence(std::move(setCallback))); auto result = std::unique_ptr<GenericExpressionPropertySequence>(new GenericExpressionPropertySequence(std::move(setCallback)));
const MenuMatcherFactory create(result.get()); const MenuMatcherFactory create(result.get());
result->AddMatchers({create.KeywordIgnoreCase(std::move(keyword)).Capture(CAPTURE_FIRST_TOKEN), result->AddMatchers({
create.KeywordIgnoreCase(std::move(keyword)).Capture(CAPTURE_FIRST_TOKEN),
create.Optional(create.KeywordIgnoreCase("when")), create.Optional(create.KeywordIgnoreCase("when")),
create.Label(MenuExpressionMatchers::LABEL_EXPRESSION), create.Label(MenuExpressionMatchers::LABEL_EXPRESSION),
create.Optional(create.Char(';'))}); create.Optional(create.Char(';')),
});
return std::move(result); return std::move(result);
} }

View File

@ -13,7 +13,10 @@ GenericFloatingPointPropertySequence::GenericFloatingPointPropertySequence(std::
const MenuMatcherFactory create(this); const MenuMatcherFactory create(this);
AddLabeledMatchers(MenuExpressionMatchers().Expression(this), MenuExpressionMatchers::LABEL_EXPRESSION); AddLabeledMatchers(MenuExpressionMatchers().Expression(this), MenuExpressionMatchers::LABEL_EXPRESSION);
AddMatchers({create.KeywordIgnoreCase(std::move(keywordName)).Capture(CAPTURE_FIRST_TOKEN), create.NumericExpression()}); AddMatchers({
create.KeywordIgnoreCase(std::move(keywordName)).Capture(CAPTURE_FIRST_TOKEN),
create.NumericExpression(),
});
} }
void GenericFloatingPointPropertySequence::ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const void GenericFloatingPointPropertySequence::ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const

View File

@ -11,7 +11,10 @@ GenericMenuEventHandlerSetPropertySequence::GenericMenuEventHandlerSetPropertySe
{ {
const MenuMatcherFactory create(this); const MenuMatcherFactory create(this);
AddMatchers({create.KeywordIgnoreCase(std::move(keywordName)).Capture(CAPTURE_FIRST_TOKEN), create.Char('{')}); AddMatchers({
create.KeywordIgnoreCase(std::move(keywordName)).Capture(CAPTURE_FIRST_TOKEN),
create.Char('{'),
});
} }
void GenericMenuEventHandlerSetPropertySequence::ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const void GenericMenuEventHandlerSetPropertySequence::ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const

View File

@ -11,7 +11,10 @@ GenericStringPropertySequence::GenericStringPropertySequence(std::string keyword
{ {
const MenuMatcherFactory create(this); const MenuMatcherFactory create(this);
AddMatchers({create.KeywordIgnoreCase(std::move(keywordName)).Capture(CAPTURE_FIRST_TOKEN), create.Text().Capture(CAPTURE_VALUE)}); AddMatchers({
create.KeywordIgnoreCase(std::move(keywordName)).Capture(CAPTURE_FIRST_TOKEN),
create.Text().Capture(CAPTURE_VALUE),
});
} }
void GenericStringPropertySequence::ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const void GenericStringPropertySequence::ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const

View File

@ -14,7 +14,9 @@ namespace menu::global_scope_sequences
{ {
const MenuMatcherFactory create(this); const MenuMatcherFactory create(this);
AddMatchers({create.Char('}')}); AddMatchers({
create.Char('}'),
});
} }
protected: protected:

View File

@ -42,7 +42,7 @@ class ItemScopeOperations
CommonItemFeatureType::NEWS_TICKER, // ITEM_TYPE_NEWS_TICKER CommonItemFeatureType::NEWS_TICKER, // ITEM_TYPE_NEWS_TICKER
CommonItemFeatureType::NONE, // ITEM_TYPE_TEXT_SCROLL CommonItemFeatureType::NONE, // ITEM_TYPE_TEXT_SCROLL
CommonItemFeatureType::EDIT_FIELD, // ITEM_TYPE_EMAILFIELD CommonItemFeatureType::EDIT_FIELD, // ITEM_TYPE_EMAILFIELD
CommonItemFeatureType::EDIT_FIELD // ITEM_TYPE_PASSWORDFIELD CommonItemFeatureType::EDIT_FIELD, // ITEM_TYPE_PASSWORDFIELD
}; };
inline static const CommonItemFeatureType IW5_FEATURE_TYPE_BY_TYPE[0x18]{ inline static const CommonItemFeatureType IW5_FEATURE_TYPE_BY_TYPE[0x18]{
@ -69,7 +69,7 @@ class ItemScopeOperations
CommonItemFeatureType::NEWS_TICKER, // ITEM_TYPE_NEWS_TICKER CommonItemFeatureType::NEWS_TICKER, // ITEM_TYPE_NEWS_TICKER
CommonItemFeatureType::NONE, // ITEM_TYPE_TEXT_SCROLL CommonItemFeatureType::NONE, // ITEM_TYPE_TEXT_SCROLL
CommonItemFeatureType::EDIT_FIELD, // ITEM_TYPE_EMAILFIELD CommonItemFeatureType::EDIT_FIELD, // ITEM_TYPE_EMAILFIELD
CommonItemFeatureType::EDIT_FIELD // ITEM_TYPE_PASSWORDFIELD CommonItemFeatureType::EDIT_FIELD, // ITEM_TYPE_PASSWORDFIELD
}; };
public: public:
@ -158,7 +158,9 @@ namespace menu::item_scope_sequences
{ {
const MenuMatcherFactory create(this); const MenuMatcherFactory create(this);
AddMatchers({create.Char('}')}); AddMatchers({
create.Char('}'),
});
} }
protected: protected:
@ -175,7 +177,9 @@ namespace menu::item_scope_sequences
{ {
const MenuMatcherFactory create(this); const MenuMatcherFactory create(this);
AddMatchers({create.Char(';')}); AddMatchers({
create.Char(';'),
});
} }
protected: protected:
@ -193,12 +197,17 @@ namespace menu::item_scope_sequences
const MenuMatcherFactory create(this); const MenuMatcherFactory create(this);
AddLabeledMatchers(MenuExpressionMatchers().Expression(this), MenuExpressionMatchers::LABEL_EXPRESSION); AddLabeledMatchers(MenuExpressionMatchers().Expression(this), MenuExpressionMatchers::LABEL_EXPRESSION);
AddMatchers({create.KeywordIgnoreCase("rect"), AddMatchers({
create.KeywordIgnoreCase("rect"),
create.NumericExpression(), // x create.NumericExpression(), // x
create.NumericExpression(), // y create.NumericExpression(), // y
create.NumericExpression(), // w create.NumericExpression(), // w
create.NumericExpression(), // h create.NumericExpression(), // h
create.Optional(create.And({create.Integer().Capture(CAPTURE_ALIGN_HORIZONTAL), create.Integer().Capture(CAPTURE_ALIGN_VERTICAL)}))}); create.Optional(create.And({
create.Integer().Capture(CAPTURE_ALIGN_HORIZONTAL),
create.Integer().Capture(CAPTURE_ALIGN_VERTICAL),
})),
});
} }
protected: protected:
@ -233,7 +242,7 @@ namespace menu::item_scope_sequences
AddMatchers({ AddMatchers({
create.KeywordIgnoreCase("origin"), create.KeywordIgnoreCase("origin"),
create.NumericExpression(), // x create.NumericExpression(), // x
create.NumericExpression() // y create.NumericExpression(), // y
}); });
} }
@ -298,8 +307,13 @@ namespace menu::item_scope_sequences
AddMatchers({ AddMatchers({
create.KeywordIgnoreCase(std::move(keyName)).Capture(CAPTURE_FIRST_TOKEN), create.KeywordIgnoreCase(std::move(keyName)).Capture(CAPTURE_FIRST_TOKEN),
create.Char('{'), create.Char('{'),
create.Optional(create.And( create.Optional(create.And({
{create.Text().Capture(CAPTURE_VALUE), create.OptionalLoop(create.And({create.Char(';'), create.Text().Capture(CAPTURE_VALUE)}))})), create.Text().Capture(CAPTURE_VALUE),
create.OptionalLoop(create.And({
create.Char(';'),
create.Text().Capture(CAPTURE_VALUE),
})),
})),
create.Char('}'), create.Char('}'),
}); });
} }
@ -364,7 +378,8 @@ namespace menu::item_scope_sequences
{ {
const MenuMatcherFactory create(this); const MenuMatcherFactory create(this);
AddMatchers({create.KeywordIgnoreCase("dvarStrList").Capture(CAPTURE_FIRST_TOKEN), AddMatchers({
create.KeywordIgnoreCase("dvarStrList").Capture(CAPTURE_FIRST_TOKEN),
create.Char('{'), create.Char('{'),
create.OptionalLoop(create.And({ create.OptionalLoop(create.And({
create.TextNoChain().Capture(CAPTURE_STEP_NAME), create.TextNoChain().Capture(CAPTURE_STEP_NAME),
@ -372,7 +387,8 @@ namespace menu::item_scope_sequences
create.TextNoChain().Capture(CAPTURE_STEP_VALUE), create.TextNoChain().Capture(CAPTURE_STEP_VALUE),
create.Optional(create.Char(';')), create.Optional(create.Char(';')),
})), })),
create.Char('}')}); create.Char('}'),
});
} }
protected: protected:
@ -402,7 +418,8 @@ namespace menu::item_scope_sequences
const MenuMatcherFactory create(this); const MenuMatcherFactory create(this);
AddLabeledMatchers(MenuExpressionMatchers().Expression(this), MenuExpressionMatchers::LABEL_EXPRESSION); AddLabeledMatchers(MenuExpressionMatchers().Expression(this), MenuExpressionMatchers::LABEL_EXPRESSION);
AddMatchers({create.KeywordIgnoreCase("dvarFloatList").Capture(CAPTURE_FIRST_TOKEN), AddMatchers({
create.KeywordIgnoreCase("dvarFloatList").Capture(CAPTURE_FIRST_TOKEN),
create.Char('{'), create.Char('{'),
create.OptionalLoop(create.And({ create.OptionalLoop(create.And({
create.Text().Capture(CAPTURE_STEP_NAME), create.Text().Capture(CAPTURE_STEP_NAME),
@ -410,7 +427,8 @@ namespace menu::item_scope_sequences
create.NumericExpression(), create.NumericExpression(),
create.Optional(create.Char(';')), create.Optional(create.Char(';')),
})), })),
create.Char('}')}); create.Char('}'),
});
} }
protected: protected:
@ -485,12 +503,14 @@ namespace menu::item_scope_sequences
const auto& listBoxFeatures = state->m_current_item->m_list_box_features; const auto& listBoxFeatures = state->m_current_item->m_list_box_features;
while (result.HasNextCapture(CAPTURE_X_POS)) while (result.HasNextCapture(CAPTURE_X_POS))
{ {
CommonItemFeaturesListBox::Column column{result.NextCapture(CAPTURE_X_POS).IntegerValue(), CommonItemFeaturesListBox::Column column{
result.NextCapture(CAPTURE_X_POS).IntegerValue(),
state->m_feature_level == FeatureLevel::IW5 ? result.NextCapture(CAPTURE_Y_POS).IntegerValue() : 0, state->m_feature_level == FeatureLevel::IW5 ? result.NextCapture(CAPTURE_Y_POS).IntegerValue() : 0,
result.NextCapture(CAPTURE_WIDTH).IntegerValue(), result.NextCapture(CAPTURE_WIDTH).IntegerValue(),
state->m_feature_level == FeatureLevel::IW5 ? result.NextCapture(CAPTURE_HEIGHT).IntegerValue() : 0, state->m_feature_level == FeatureLevel::IW5 ? result.NextCapture(CAPTURE_HEIGHT).IntegerValue() : 0,
result.NextCapture(CAPTURE_MAX_CHARS).IntegerValue(), result.NextCapture(CAPTURE_MAX_CHARS).IntegerValue(),
result.NextCapture(CAPTURE_ALIGNMENT).IntegerValue()}; result.NextCapture(CAPTURE_ALIGNMENT).IntegerValue(),
};
listBoxFeatures->m_columns.emplace_back(column); listBoxFeatures->m_columns.emplace_back(column);
} }
} }
@ -505,7 +525,11 @@ namespace menu::item_scope_sequences
{ {
const MenuMatcherFactory create(this); const MenuMatcherFactory create(this);
AddMatchers({create.KeywordIgnoreCase("execKey"), create.StringChain().Capture(CAPTURE_KEY), create.Char('{')}); AddMatchers({
create.KeywordIgnoreCase("execKey"),
create.StringChain().Capture(CAPTURE_KEY),
create.Char('{'),
});
} }
protected: protected:
@ -537,7 +561,11 @@ namespace menu::item_scope_sequences
{ {
const MenuMatcherFactory create(this); const MenuMatcherFactory create(this);
AddMatchers({create.KeywordIgnoreCase("execKeyInt"), create.Integer().Capture(CAPTURE_KEY), create.Char('{')}); AddMatchers({
create.KeywordIgnoreCase("execKeyInt"),
create.Integer().Capture(CAPTURE_KEY),
create.Char('{'),
});
} }
protected: protected:

View File

@ -28,7 +28,9 @@ namespace menu::menu_scope_sequences
{ {
const MenuMatcherFactory create(this); const MenuMatcherFactory create(this);
AddMatchers({create.Char('}').Capture(CAPTURE_TOKEN)}); AddMatchers({
create.Char('}').Capture(CAPTURE_TOKEN),
});
} }
protected: protected:
@ -59,7 +61,9 @@ namespace menu::menu_scope_sequences
{ {
const MenuMatcherFactory create(this); const MenuMatcherFactory create(this);
AddMatchers({create.Char(';')}); AddMatchers({
create.Char(';'),
});
} }
protected: protected:
@ -75,7 +79,10 @@ namespace menu::menu_scope_sequences
{ {
const MenuMatcherFactory create(this); const MenuMatcherFactory create(this);
AddMatchers({create.Keyword("itemDef"), create.Char('{')}); AddMatchers({
create.Keyword("itemDef"),
create.Char('{'),
});
} }
protected: protected:
@ -98,12 +105,17 @@ namespace menu::menu_scope_sequences
const MenuMatcherFactory create(this); const MenuMatcherFactory create(this);
AddLabeledMatchers(MenuExpressionMatchers().Expression(this), MenuExpressionMatchers::LABEL_EXPRESSION); AddLabeledMatchers(MenuExpressionMatchers().Expression(this), MenuExpressionMatchers::LABEL_EXPRESSION);
AddMatchers({create.KeywordIgnoreCase("rect"), AddMatchers({
create.KeywordIgnoreCase("rect"),
create.NumericExpression(), // x create.NumericExpression(), // x
create.NumericExpression(), // y create.NumericExpression(), // y
create.NumericExpression(), // w create.NumericExpression(), // w
create.NumericExpression(), // h create.NumericExpression(), // h
create.Optional(create.And({create.Integer().Capture(CAPTURE_ALIGN_HORIZONTAL), create.Integer().Capture(CAPTURE_ALIGN_VERTICAL)}))}); create.Optional(create.And({
create.Integer().Capture(CAPTURE_ALIGN_HORIZONTAL),
create.Integer().Capture(CAPTURE_ALIGN_VERTICAL),
})),
});
} }
protected: protected:
@ -136,7 +148,11 @@ namespace menu::menu_scope_sequences
{ {
const MenuMatcherFactory create(this); const MenuMatcherFactory create(this);
AddMatchers({create.KeywordIgnoreCase("execKey"), create.StringChain().Capture(CAPTURE_KEY), create.Char('{')}); AddMatchers({
create.KeywordIgnoreCase("execKey"),
create.StringChain().Capture(CAPTURE_KEY),
create.Char('{'),
});
} }
protected: protected:
@ -168,7 +184,11 @@ namespace menu::menu_scope_sequences
{ {
const MenuMatcherFactory create(this); const MenuMatcherFactory create(this);
AddMatchers({create.KeywordIgnoreCase("execKeyInt"), create.Integer().Capture(CAPTURE_KEY), create.Char('{')}); AddMatchers({
create.KeywordIgnoreCase("execKeyInt"),
create.Integer().Capture(CAPTURE_KEY),
create.Char('{'),
});
} }
protected: protected:

View File

@ -14,7 +14,9 @@ namespace menu::no_scope_sequences
{ {
const MenuMatcherFactory create(this); const MenuMatcherFactory create(this);
AddMatchers({create.Char('{')}); AddMatchers({
create.Char('{'),
});
} }
protected: protected:

View File

@ -16,7 +16,10 @@ namespace state_map
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddMatchers({create.Identifier().Capture(CAPTURE_ENTRY_NAME), create.Char('{')}); AddMatchers({
create.Identifier().Capture(CAPTURE_ENTRY_NAME),
create.Char('{'),
});
} }
protected: protected:
@ -42,7 +45,9 @@ namespace state_map
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddMatchers({create.Char('}').Capture(CAPTURE_FIRST_TOKEN)}); AddMatchers({
create.Char('}').Capture(CAPTURE_FIRST_TOKEN),
});
} }
protected: protected:
@ -67,9 +72,13 @@ namespace state_map
AddLabeledMatchers(StateMapExpressionMatchers().Expression(this), StateMapExpressionMatchers::LABEL_EXPRESSION); AddLabeledMatchers(StateMapExpressionMatchers().Expression(this), StateMapExpressionMatchers::LABEL_EXPRESSION);
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddMatchers( AddMatchers({
{create.Or({create.Keyword("default").Tag(TAG_DEFAULT), create.Label(StateMapExpressionMatchers::LABEL_EXPRESSION).Tag(TAG_EXPRESSION)}), create.Or({
create.Char(':')}); create.Keyword("default").Tag(TAG_DEFAULT),
create.Label(StateMapExpressionMatchers::LABEL_EXPRESSION).Tag(TAG_EXPRESSION),
}),
create.Char(':'),
});
} }
protected: protected:
@ -117,14 +126,29 @@ namespace state_map
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddLabeledMatchers(create.Or({create.Identifier(), create.Integer()}), LABEL_VALUE); AddLabeledMatchers(create.Or({
create.Identifier(),
create.Integer(),
}),
LABEL_VALUE);
AddLabeledMatchers({create.Label(LABEL_VALUE).Capture(CAPTURE_VALUE), AddLabeledMatchers(
create.OptionalLoop(create.And({create.Char(','), create.Label(LABEL_VALUE).Capture(CAPTURE_VALUE)}))}, {
create.Label(LABEL_VALUE).Capture(CAPTURE_VALUE),
create.OptionalLoop(create.And({
create.Char(','),
create.Label(LABEL_VALUE).Capture(CAPTURE_VALUE),
})),
},
LABEL_VALUE_LIST); LABEL_VALUE_LIST);
AddMatchers({create.Or({create.Keyword("passthrough").Tag(TAG_PASSTHROUGH), create.Label(LABEL_VALUE_LIST).Tag(TAG_VALUE_LIST)}), AddMatchers({
create.Char(';').Capture(CAPTURE_VALUE_END)}); create.Or({
create.Keyword("passthrough").Tag(TAG_PASSTHROUGH),
create.Label(LABEL_VALUE_LIST).Tag(TAG_VALUE_LIST),
}),
create.Char(';').Capture(CAPTURE_VALUE_END),
});
} }
protected: protected:
@ -195,11 +219,19 @@ StateMapParser::StateMapParser(SimpleLexer* lexer, std::string stateMapName, con
const std::vector<StateMapParser::sequence_t*>& StateMapParser::GetTestsForState() const std::vector<StateMapParser::sequence_t*>& StateMapParser::GetTestsForState()
{ {
static std::vector<sequence_t*> rootSequences({new SequenceStateMapEntry()}); static std::vector<sequence_t*> rootSequences({
new SequenceStateMapEntry(),
});
static std::vector<sequence_t*> entrySequences({new SequenceStateMapEntryClose(), new SequenceCondition()}); static std::vector<sequence_t*> entrySequences({
new SequenceStateMapEntryClose(),
new SequenceCondition(),
});
static std::vector<sequence_t*> ruleSequences({new SequenceCondition(), new SequenceValue()}); static std::vector<sequence_t*> ruleSequences({
new SequenceCondition(),
new SequenceValue(),
});
if (m_state->m_in_entry) if (m_state->m_in_entry)
{ {

View File

@ -17,10 +17,16 @@ namespace sdd::def_scope_sequences
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddMatchers({create.Keyword("enum"), AddMatchers({
create.Optional(create.And({create.Char('('), create.Integer().Capture(CAPTURE_RESERVED_COUNT), create.Char(')')})), create.Keyword("enum"),
create.Optional(create.And({
create.Char('('),
create.Integer().Capture(CAPTURE_RESERVED_COUNT),
create.Char(')'),
})),
create.Identifier().Capture(CAPTURE_NAME), create.Identifier().Capture(CAPTURE_NAME),
create.Char('{')}); create.Char('{'),
});
} }
protected: protected:
@ -70,7 +76,11 @@ namespace sdd::def_scope_sequences
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddMatchers({create.Keyword("struct"), create.Identifier().Capture(CAPTURE_NAME), create.Char('{')}); AddMatchers({
create.Keyword("struct"),
create.Identifier().Capture(CAPTURE_NAME),
create.Char('{'),
});
} }
protected: protected:
@ -126,7 +136,11 @@ namespace sdd::def_scope_sequences
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddMatchers({create.Keyword("checksumoverride"), create.Integer().Capture(CAPTURE_VALUE), create.Char(';')}); AddMatchers({
create.Keyword("checksumoverride"),
create.Integer().Capture(CAPTURE_VALUE),
create.Char(';'),
});
} }
protected: protected:
@ -148,7 +162,9 @@ namespace sdd::def_scope_sequences
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddMatchers({create.Char('}')}); AddMatchers({
create.Char('}'),
});
} }
private: private:

View File

@ -15,7 +15,13 @@ namespace sdd::enum_scope_sequences
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddMatchers({create.String().Capture(CAPTURE_ENTRY_VALUE), create.Or({create.Char(','), create.Char('}').NoConsume()})}); AddMatchers({
create.String().Capture(CAPTURE_ENTRY_VALUE),
create.Or({
create.Char(','),
create.Char('}').NoConsume(),
}),
});
} }
protected: protected:
@ -39,7 +45,10 @@ namespace sdd::enum_scope_sequences
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddMatchers({create.Char('}'), create.Optional(create.Char(';'))}); AddMatchers({
create.Char('}'),
create.Optional(create.Char(';')),
});
} }
protected: protected:

View File

@ -13,7 +13,11 @@ namespace sdd::no_scope_sequences
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddMatchers({create.Keyword("version"), create.Integer().Capture(CAPTURE_VERSION), create.Char('{')}); AddMatchers({
create.Keyword("version"),
create.Integer().Capture(CAPTURE_VERSION),
create.Char('{'),
});
} }
protected: protected:

View File

@ -24,21 +24,34 @@ namespace sdd::struct_scope_sequences
static std::unique_ptr<matcher_t> TypeMatchers(const SimpleMatcherFactory& create) static std::unique_ptr<matcher_t> TypeMatchers(const SimpleMatcherFactory& create)
{ {
return create.Or({create.Keyword("int").Tag(TAG_TYPE_INT), return create.Or({
create.Keyword("int").Tag(TAG_TYPE_INT),
create.Keyword("byte").Tag(TAG_TYPE_BYTE), create.Keyword("byte").Tag(TAG_TYPE_BYTE),
create.Keyword("bool").Tag(TAG_TYPE_BOOL), create.Keyword("bool").Tag(TAG_TYPE_BOOL),
create.Keyword("float").Tag(TAG_TYPE_FLOAT), create.Keyword("float").Tag(TAG_TYPE_FLOAT),
create.Keyword("short").Tag(TAG_TYPE_SHORT), create.Keyword("short").Tag(TAG_TYPE_SHORT),
create.And({create.Keyword("string"), create.Char('('), create.Integer().Capture(CAPTURE_STRING_LENGTH), create.Char(')')}) create
.And({
create.Keyword("string"),
create.Char('('),
create.Integer().Capture(CAPTURE_STRING_LENGTH),
create.Char(')'),
})
.Tag(TAG_TYPE_STRING), .Tag(TAG_TYPE_STRING),
create.Identifier().Tag(TAG_TYPE_NAMED).Capture(CAPTURE_TYPE_NAME)}); create.Identifier().Tag(TAG_TYPE_NAMED).Capture(CAPTURE_TYPE_NAME),
});
} }
static std::unique_ptr<matcher_t> ArrayMatchers(const SimpleMatcherFactory& create) static std::unique_ptr<matcher_t> ArrayMatchers(const SimpleMatcherFactory& create)
{ {
return create.And({create.Char('['), return create.And({
create.Or({create.Integer().Capture(CAPTURE_ARRAY_SIZE), create.Identifier().Capture(CAPTURE_ARRAY_SIZE)}), create.Char('['),
create.Char(']')}); create.Or({
create.Integer().Capture(CAPTURE_ARRAY_SIZE),
create.Identifier().Capture(CAPTURE_ARRAY_SIZE),
}),
create.Char(']'),
});
} }
public: public:
@ -46,7 +59,12 @@ namespace sdd::struct_scope_sequences
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddMatchers({TypeMatchers(create), create.Identifier().Capture(CAPTURE_ENTRY_NAME), create.OptionalLoop(ArrayMatchers(create)), create.Char(';')}); AddMatchers({
TypeMatchers(create),
create.Identifier().Capture(CAPTURE_ENTRY_NAME),
create.OptionalLoop(ArrayMatchers(create)),
create.Char(';'),
});
} }
private: private:
@ -178,7 +196,13 @@ namespace sdd::struct_scope_sequences
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddMatchers({create.Keyword("pad"), create.Char('('), create.Integer().Capture(CAPTURE_PADDING_VALUE), create.Char(')'), create.Char(';')}); AddMatchers({
create.Keyword("pad"),
create.Char('('),
create.Integer().Capture(CAPTURE_PADDING_VALUE),
create.Char(')'),
create.Char(';'),
});
} }
protected: protected:
@ -201,7 +225,10 @@ namespace sdd::struct_scope_sequences
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddMatchers({create.Char('}'), create.Optional(create.Char(';'))}); AddMatchers({
create.Char('}'),
create.Optional(create.Char(';')),
});
} }
protected: protected:

View File

@ -15,7 +15,9 @@ namespace techset
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddMatchers({create.Char('{')}); AddMatchers({
create.Char('{'),
});
} }
protected: protected:
@ -31,7 +33,9 @@ namespace techset
const std::vector<TechniqueParser::sequence_t*>& TechniqueNoScopeSequences::GetSequences() const std::vector<TechniqueParser::sequence_t*>& TechniqueNoScopeSequences::GetSequences()
{ {
static std::vector<TechniqueParser::sequence_t*> tests({new SequencePass()}); static std::vector<TechniqueParser::sequence_t*> tests({
new SequencePass(),
});
return tests; return tests;
} }

View File

@ -18,7 +18,9 @@ namespace techset
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddMatchers({create.Char('}').Capture(CAPTURE_FIRST_TOKEN)}); AddMatchers({
create.Char('}').Capture(CAPTURE_FIRST_TOKEN),
});
} }
protected: protected:
@ -44,7 +46,11 @@ namespace techset
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddMatchers({create.Keyword("stateMap").Capture(CAPTURE_START), create.String().Capture(CAPTURE_STATE_MAP_NAME), create.Char(';')}); AddMatchers({
create.Keyword("stateMap").Capture(CAPTURE_START),
create.String().Capture(CAPTURE_STATE_MAP_NAME),
create.Char(';'),
});
} }
protected: protected:
@ -76,21 +82,25 @@ namespace techset
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddMatchers({create AddMatchers({
create
.Or({ .Or({
create.Keyword("vertexShader").Tag(TAG_VERTEX_SHADER), create.Keyword("vertexShader").Tag(TAG_VERTEX_SHADER),
create.Keyword("pixelShader").Tag(TAG_PIXEL_SHADER), create.Keyword("pixelShader").Tag(TAG_PIXEL_SHADER),
}) })
.Capture(CAPTURE_START), .Capture(CAPTURE_START),
create.Or({create.And({ create.Or({
create.And({
create.Integer().Capture(CAPTURE_VERSION_MAJOR), create.Integer().Capture(CAPTURE_VERSION_MAJOR),
create.Char('.'), create.Char('.'),
create.Integer().Capture(CAPTURE_VERSION_MINOR), create.Integer().Capture(CAPTURE_VERSION_MINOR),
}), }),
create.FloatingPoint().Capture(CAPTURE_VERSION), // This is dumb but cod devs made the format so cannot change it create.FloatingPoint().Capture(CAPTURE_VERSION), // This is dumb but cod devs made the format so cannot change it
create.String().Capture(CAPTURE_VERSION)}), create.String().Capture(CAPTURE_VERSION),
}),
create.String().Capture(CAPTURE_SHADER_NAME), create.String().Capture(CAPTURE_SHADER_NAME),
create.Char('{')}); create.Char('{'),
});
} }
protected: protected:
@ -137,19 +147,29 @@ namespace techset
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddMatchers({create.Keyword("vertex").Capture(CAPTURE_FIRST_TOKEN), AddMatchers({
create.Keyword("vertex").Capture(CAPTURE_FIRST_TOKEN),
create.Char('.'), create.Char('.'),
create.Identifier().Capture(CAPTURE_STREAM_DESTINATION_NAME), create.Identifier().Capture(CAPTURE_STREAM_DESTINATION_NAME),
create.Optional(create.And({create.Char('['), create.Integer().Capture(CAPTURE_STREAM_DESTINATION_INDEX), create.Char(']')})), create.Optional(create.And({
create.Char('['),
create.Integer().Capture(CAPTURE_STREAM_DESTINATION_INDEX),
create.Char(']'),
})),
create.Char('='), create.Char('='),
create.Keyword("code"), create.Keyword("code"),
create.Char('.'), create.Char('.'),
create.Identifier().Capture(CAPTURE_STREAM_SOURCE_NAME), create.Identifier().Capture(CAPTURE_STREAM_SOURCE_NAME),
create.Optional(create.And({create.Char('['), create.Integer().Capture(CAPTURE_STREAM_SOURCE_INDEX), create.Char(']')})), create.Optional(create.And({
create.Char('['),
create.Integer().Capture(CAPTURE_STREAM_SOURCE_INDEX),
create.Char(']'),
})),
create.Char(';')}); create.Char(';'),
});
} }
static std::string CreateRoutingString(SequenceResult<SimpleParserValue>& result, const int nameCapture, const int indexCapture) static std::string CreateRoutingString(SequenceResult<SimpleParserValue>& result, const int nameCapture, const int indexCapture)
@ -184,8 +204,12 @@ namespace techset
const std::vector<TechniqueParser::sequence_t*>& TechniquePassScopeSequences::GetSequences() const std::vector<TechniqueParser::sequence_t*>& TechniquePassScopeSequences::GetSequences()
{ {
static std::vector<TechniqueParser::sequence_t*> tests( static std::vector<TechniqueParser::sequence_t*> tests({
{new SequenceEndPass(), new SequenceStateMap(), new SequenceShader(), new SequenceVertexStreamRouting()}); new SequenceEndPass(),
new SequenceStateMap(),
new SequenceShader(),
new SequenceVertexStreamRouting(),
});
return tests; return tests;
} }

View File

@ -15,7 +15,9 @@ namespace techset
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddMatchers({create.Char('}')}); AddMatchers({
create.Char('}'),
});
} }
protected: protected:
@ -44,16 +46,33 @@ namespace techset
static std::unique_ptr<matcher_t> CodeMatchers(const SimpleMatcherFactory& create) static std::unique_ptr<matcher_t> CodeMatchers(const SimpleMatcherFactory& create)
{ {
return create.And({create.Or({create.Keyword("constant").Tag(TAG_CONSTANT), create.Keyword("sampler").Tag(TAG_SAMPLER)}), return create.And({
create.Or({
create.Keyword("constant").Tag(TAG_CONSTANT),
create.Keyword("sampler").Tag(TAG_SAMPLER),
}),
create.Char('.'), create.Char('.'),
create.Identifier().Capture(CAPTURE_CODE_ACCESSOR), create.Identifier().Capture(CAPTURE_CODE_ACCESSOR),
create.OptionalLoop(create.And({create.Char('.'), create.Identifier().Capture(CAPTURE_CODE_ACCESSOR)})), create.OptionalLoop(create.And({
create.Optional(create.And({create.Char('['), create.Integer().Capture(CAPTURE_CODE_INDEX), create.Char(']')}))}); create.Char('.'),
create.Identifier().Capture(CAPTURE_CODE_ACCESSOR),
})),
create.Optional(create.And({
create.Char('['),
create.Integer().Capture(CAPTURE_CODE_INDEX),
create.Char(']'),
})),
});
} }
static std::unique_ptr<matcher_t> LiteralValueMatchers(const SimpleMatcherFactory& create) static std::unique_ptr<matcher_t> LiteralValueMatchers(const SimpleMatcherFactory& create)
{ {
return create.Or({create.FloatingPoint(), create.Integer()}).Capture(CAPTURE_LITERAL_VALUE); return create
.Or({
create.FloatingPoint(),
create.Integer(),
})
.Capture(CAPTURE_LITERAL_VALUE);
} }
static std::unique_ptr<matcher_t> LiteralMatchers(const SimpleMatcherFactory& create) static std::unique_ptr<matcher_t> LiteralMatchers(const SimpleMatcherFactory& create)
@ -77,11 +96,18 @@ namespace techset
static std::unique_ptr<matcher_t> MaterialMatchers(const SimpleMatcherFactory& create) static std::unique_ptr<matcher_t> MaterialMatchers(const SimpleMatcherFactory& create)
{ {
return create return create
.And({create.Keyword("material"), .And({
create.Keyword("material"),
create.Char('.'), create.Char('.'),
create.Or({create.And({create.Char('#'), create.Integer().Capture(CAPTURE_MATERIAL_HASH)}), create.Or({
create.Identifier().Capture(CAPTURE_MATERIAL_NAME)})}) create.And({
create.Char('#'),
create.Integer().Capture(CAPTURE_MATERIAL_HASH),
}),
create.Identifier().Capture(CAPTURE_MATERIAL_NAME),
}),
})
.Tag(TAG_MATERIAL); .Tag(TAG_MATERIAL);
} }
@ -90,12 +116,22 @@ namespace techset
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddMatchers({create.Identifier().Capture(CAPTURE_FIRST_TOKEN).NoConsume(), AddMatchers({
create.Identifier().Capture(CAPTURE_FIRST_TOKEN).NoConsume(),
create.Identifier().Capture(CAPTURE_SHADER_ARGUMENT), create.Identifier().Capture(CAPTURE_SHADER_ARGUMENT),
create.Optional(create.And({create.Char('['), create.Integer().Capture(CAPTURE_SHADER_INDEX), create.Char(']')})), create.Optional(create.And({
create.Char('['),
create.Integer().Capture(CAPTURE_SHADER_INDEX),
create.Char(']'),
})),
create.Char('='), create.Char('='),
create.Or({CodeMatchers(create), LiteralMatchers(create), MaterialMatchers(create)}), create.Or({
create.Char(';')}); CodeMatchers(create),
LiteralMatchers(create),
MaterialMatchers(create),
}),
create.Char(';'),
});
} }
static void ProcessCodeArgument(const TechniqueParserState* state, SequenceResult<SimpleParserValue>& result, ShaderArgument arg, const bool isSampler) static void ProcessCodeArgument(const TechniqueParserState* state, SequenceResult<SimpleParserValue>& result, ShaderArgument arg, const bool isSampler)
@ -197,7 +233,10 @@ namespace techset
const std::vector<TechniqueParser::sequence_t*>& TechniqueShaderScopeSequences::GetSequences() const std::vector<TechniqueParser::sequence_t*>& TechniqueShaderScopeSequences::GetSequences()
{ {
static std::vector<TechniqueParser::sequence_t*> tests({new SequenceEndShader(), new SequenceShaderArgument()}); static std::vector<TechniqueParser::sequence_t*> tests({
new SequenceEndShader(),
new SequenceShaderArgument(),
});
return tests; return tests;
} }

View File

@ -15,7 +15,10 @@ namespace techset
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddMatchers({create.String().Capture(CAPTURE_TYPE_NAME), create.Char(':')}); AddMatchers({
create.String().Capture(CAPTURE_TYPE_NAME),
create.Char(':'),
});
} }
protected: protected:
@ -40,7 +43,15 @@ namespace techset
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddMatchers({create.Or({create.Identifier(), create.String()}).Capture(CAPTURE_NAME), create.Char(';')}); AddMatchers({
create
.Or({
create.Identifier(),
create.String(),
})
.Capture(CAPTURE_NAME),
create.Char(';'),
});
} }
protected: protected:
@ -66,8 +77,13 @@ TechsetParser::TechsetParser(SimpleLexer* lexer, const char** validTechniqueType
const std::vector<TechsetParser::sequence_t*>& TechsetParser::GetTestsForState() const std::vector<TechsetParser::sequence_t*>& TechsetParser::GetTestsForState()
{ {
static std::vector<sequence_t*> allTests({new SequenceTechniqueTypeName(), new SequenceTechniqueName()}); static std::vector<sequence_t*> allTests({
static std::vector<sequence_t*> techniqueTypeNameOnlyTests({new SequenceTechniqueTypeName()}); new SequenceTechniqueTypeName(),
new SequenceTechniqueName(),
});
static std::vector<sequence_t*> techniqueTypeNameOnlyTests({
new SequenceTechniqueTypeName(),
});
return m_state->m_current_technique_types.empty() ? techniqueTypeNameOnlyTests : allTests; return m_state->m_current_technique_types.empty() ? techniqueTypeNameOnlyTests : allTests;
} }

View File

@ -21,12 +21,14 @@ void AssetDumperLoadedSound::DumpWavPcm(AssetDumpingContext& context, const Load
const WavChunkHeader formatChunkHeader{WAV_CHUNK_ID_FMT, sizeof(WavFormatChunkPcm)}; const WavChunkHeader formatChunkHeader{WAV_CHUNK_ID_FMT, sizeof(WavFormatChunkPcm)};
stream.write(reinterpret_cast<const char*>(&formatChunkHeader), sizeof(formatChunkHeader)); stream.write(reinterpret_cast<const char*>(&formatChunkHeader), sizeof(formatChunkHeader));
WavFormatChunkPcm formatChunk{WavFormat::PCM, WavFormatChunkPcm formatChunk{
WavFormat::PCM,
static_cast<uint16_t>(asset->sound.info.channels), static_cast<uint16_t>(asset->sound.info.channels),
asset->sound.info.rate, asset->sound.info.rate,
asset->sound.info.rate * asset->sound.info.channels * asset->sound.info.bits / 8, asset->sound.info.rate * asset->sound.info.channels * asset->sound.info.bits / 8,
static_cast<uint16_t>(asset->sound.info.block_size), static_cast<uint16_t>(asset->sound.info.block_size),
static_cast<uint16_t>(asset->sound.info.bits)}; static_cast<uint16_t>(asset->sound.info.bits),
};
stream.write(reinterpret_cast<const char*>(&formatChunk), sizeof(formatChunk)); stream.write(reinterpret_cast<const char*>(&formatChunk), sizeof(formatChunk));
const WavChunkHeader dataChunkHeader{WAV_CHUNK_ID_DATA, asset->sound.info.data_len}; const WavChunkHeader dataChunkHeader{WAV_CHUNK_ID_DATA, asset->sound.info.data_len};

View File

@ -41,7 +41,7 @@ namespace IW3
const auto& entry = complexTable[index]; const auto& entry = complexTable[index];
jArray.emplace_back(json{ jArray.emplace_back(json{
{"real", entry.real}, {"real", entry.real},
{"imag", entry.imag} {"imag", entry.imag},
}); });
} }
} }
@ -66,14 +66,24 @@ namespace IW3
{"winddir", std::vector(std::begin(water->winddir), std::end(water->winddir))}, {"winddir", std::vector(std::begin(water->winddir), std::end(water->winddir))},
{"amplitude", water->amplitude}, {"amplitude", water->amplitude},
{"codeConstant", std::vector(std::begin(water->codeConstant), std::end(water->codeConstant))}, {"codeConstant", std::vector(std::begin(water->codeConstant), std::end(water->codeConstant))},
{"image", water->image && water->image->name ? AssetName(water->image->name) : nullptr} {"image", water->image && water->image->name ? AssetName(water->image->name) : nullptr},
}; };
} }
json BuildSamplerStateJson(unsigned char samplerState) json BuildSamplerStateJson(unsigned char samplerState)
{ {
static const char* samplerFilterNames[]{"none", "nearest", "linear", "aniso2x", "aniso4x"}; static const char* samplerFilterNames[]{
static const char* samplerMipmapNames[]{"disabled", "nearest", "linear"}; "none",
"nearest",
"linear",
"aniso2x",
"aniso4x",
};
static const char* samplerMipmapNames[]{
"disabled",
"nearest",
"linear",
};
return json{ return json{
{"filter", ArrayEntry(samplerFilterNames, (samplerState & SAMPLER_FILTER_MASK) >> SAMPLER_FILTER_SHIFT)}, {"filter", ArrayEntry(samplerFilterNames, (samplerState & SAMPLER_FILTER_MASK) >> SAMPLER_FILTER_SHIFT)},
@ -87,7 +97,19 @@ namespace IW3
json BuildTextureTableJson(const MaterialTextureDef* textureTable, const size_t count) json BuildTextureTableJson(const MaterialTextureDef* textureTable, const size_t count)
{ {
static const char* semanticNames[]{ static const char* semanticNames[]{
"2d", "function", "colorMap", "unused1", "unused2", "normalMap", "unused3", "unused4", "specularMap", "unused5", "unused6", "waterMap"}; "2d",
"function",
"colorMap",
"unused1",
"unused2",
"normalMap",
"unused3",
"unused4",
"specularMap",
"unused5",
"unused6",
"waterMap",
};
auto jArray = json::array(); auto jArray = json::array();
@ -99,7 +121,7 @@ namespace IW3
json jEntry = { json jEntry = {
{"samplerState", BuildSamplerStateJson(entry.samplerState)}, {"samplerState", BuildSamplerStateJson(entry.samplerState)},
{"semantic", ArrayEntry(semanticNames, entry.semantic)} {"semantic", ArrayEntry(semanticNames, entry.semantic)},
}; };
const auto knownMaterialSourceName = knownMaterialSourceNames.find(entry.nameHash); const auto knownMaterialSourceName = knownMaterialSourceNames.find(entry.nameHash);
@ -142,7 +164,7 @@ namespace IW3
{ {
const auto& entry = constantTable[index]; const auto& entry = constantTable[index];
json jEntry = { json jEntry = {
{"literal", std::vector(std::begin(entry.literal), std::end(entry.literal))} {"literal", std::vector(std::begin(entry.literal), std::end(entry.literal))},
}; };
const auto nameLen = strnlen(entry.name, std::extent_v<decltype(MaterialConstantDef::name)>); const auto nameLen = strnlen(entry.name, std::extent_v<decltype(MaterialConstantDef::name)>);
@ -166,7 +188,7 @@ namespace IW3
{ {
jEntry.merge_patch({ jEntry.merge_patch({
{"nameHash", entry.nameHash}, {"nameHash", entry.nameHash},
{"namePart", fullLengthName} {"namePart", fullLengthName},
}); });
} }
} }
@ -198,7 +220,14 @@ namespace IW3
"destColor", "destColor",
"invDestColor", "invDestColor",
}; };
static const char* blendOpNames[]{"disabled", "add", "subtract", "revSubtract", "min", "max"}; static const char* blendOpNames[]{
"disabled",
"add",
"subtract",
"revSubtract",
"min",
"max",
};
static const char* depthTestNames[]{ static const char* depthTestNames[]{
"always", "always",
"less", "less",
@ -211,7 +240,16 @@ namespace IW3
"2", "2",
"shadowMap", "shadowMap",
}; };
static const char* stencilOpNames[]{"keep", "zero", "replace", "incrSat", "decrSat", "invert", "incr", "decr"}; static const char* stencilOpNames[]{
"keep",
"zero",
"replace",
"incrSat",
"decrSat",
"invert",
"incr",
"decr",
};
auto jArray = json::array(); auto jArray = json::array();
@ -422,7 +460,7 @@ void AssetDumperMaterial::DumpAsset(AssetDumpingContext& context, XAssetInfo<Mat
{"techniqueSet", material->techniqueSet && material->techniqueSet->name ? AssetName(material->techniqueSet->name) : nullptr}, {"techniqueSet", material->techniqueSet && material->techniqueSet->name ? AssetName(material->techniqueSet->name) : nullptr},
{"textureTable", BuildTextureTableJson(material->textureTable, material->textureCount)}, {"textureTable", BuildTextureTableJson(material->textureTable, material->textureCount)},
{"constantTable", BuildConstantTableJson(material->constantTable, material->constantCount)}, {"constantTable", BuildConstantTableJson(material->constantTable, material->constantCount)},
{"stateBitsTable", BuildStateBitsTableJson(material->stateBitsTable, material->stateBitsCount)} {"stateBitsTable", BuildStateBitsTableJson(material->stateBitsTable, material->stateBitsCount)},
}; };
stream << std::setw(4) << j; stream << std::setw(4) << j;

View File

@ -23,12 +23,26 @@ class AssetDumperFontIconInternal
}; };
inline static const std::string TYPE_ICON = "icon"; inline static const std::string TYPE_ICON = "icon";
inline static const std::string ICON_HEADERS[]{"# index", "# type", "# name", "# material", "# size", "# xScale", "# yScale"}; inline static const std::string ICON_HEADERS[]{
"# index",
"# type",
"# name",
"# material",
"# size",
"# xScale",
"# yScale",
};
inline static const std::string TYPE_ALIAS = "alias"; inline static const std::string TYPE_ALIAS = "alias";
inline static const std::string ALIAS_HEADERS[]{"# index", "# type", "# alias", "# button"}; inline static const std::string ALIAS_HEADERS[]{
"# index",
"# type",
"# alias",
"# button",
};
inline static const KnownAlias KNOWN_ALIASES[]{KnownAlias("BUTTON_ADS"), inline static const KnownAlias KNOWN_ALIASES[]{
KnownAlias("BUTTON_ADS"),
KnownAlias("BUTTON_CAC_NEXT"), KnownAlias("BUTTON_CAC_NEXT"),
KnownAlias("BUTTON_CAC_PREV"), KnownAlias("BUTTON_CAC_PREV"),
KnownAlias("BUTTON_CANCEL"), KnownAlias("BUTTON_CANCEL"),
@ -121,7 +135,8 @@ class AssetDumperFontIconInternal
KnownAlias("KEY_UP_ARROW"), KnownAlias("KEY_UP_ARROW"),
KnownAlias("MOUSE_WHEEL_DOWN"), KnownAlias("MOUSE_WHEEL_DOWN"),
KnownAlias("MOUSE_WHEEL_UP"), KnownAlias("MOUSE_WHEEL_UP"),
KnownAlias("Remote_LStick")}; KnownAlias("Remote_LStick"),
};
CsvOutputStream m_csv; CsvOutputStream m_csv;

View File

@ -85,7 +85,17 @@ namespace
"devraw/", "devraw/",
}; };
constexpr size_t FRAME_RATE_FOR_INDEX[]{8000, 12000, 16000, 24000, 32000, 44100, 48000, 96000, 192000}; constexpr size_t FRAME_RATE_FOR_INDEX[]{
8000,
12000,
16000,
24000,
32000,
44100,
48000,
96000,
192000,
};
} // namespace } // namespace
class AssetDumperSndBank::Internal class AssetDumperSndBank::Internal

View File

@ -129,9 +129,11 @@ class XModelExportWriter6 final : public XModelExportWriterBase
stream << "NUMFACES " << m_faces.size() << "\n"; stream << "NUMFACES " << m_faces.size() << "\n";
for (const auto& face : m_faces) for (const auto& face : m_faces)
{ {
const size_t distinctPositions[3]{m_vertex_merger.GetDistinctPositionByInputPosition(face.vertexIndex[0]), const size_t distinctPositions[3]{
m_vertex_merger.GetDistinctPositionByInputPosition(face.vertexIndex[0]),
m_vertex_merger.GetDistinctPositionByInputPosition(face.vertexIndex[1]), m_vertex_merger.GetDistinctPositionByInputPosition(face.vertexIndex[1]),
m_vertex_merger.GetDistinctPositionByInputPosition(face.vertexIndex[2])}; m_vertex_merger.GetDistinctPositionByInputPosition(face.vertexIndex[2]),
};
const XModelVertex& v0 = m_vertices[face.vertexIndex[0]]; const XModelVertex& v0 = m_vertices[face.vertexIndex[0]];
const XModelVertex& v1 = m_vertices[face.vertexIndex[1]]; const XModelVertex& v1 = m_vertices[face.vertexIndex[1]];

View File

@ -82,18 +82,26 @@ public:
const IPakHeader header{ipak_consts::IPAK_MAGIC, ipak_consts::IPAK_VERSION, static_cast<uint32_t>(m_total_size), SECTION_COUNT}; const IPakHeader header{ipak_consts::IPAK_MAGIC, ipak_consts::IPAK_VERSION, static_cast<uint32_t>(m_total_size), SECTION_COUNT};
const IPakSection dataSection{ipak_consts::IPAK_DATA_SECTION, const IPakSection dataSection{
ipak_consts::IPAK_DATA_SECTION,
static_cast<uint32_t>(m_data_section_offset), static_cast<uint32_t>(m_data_section_offset),
static_cast<uint32_t>(m_data_section_size), static_cast<uint32_t>(m_data_section_size),
static_cast<uint32_t>(m_index_entries.size())}; static_cast<uint32_t>(m_index_entries.size()),
};
const IPakSection indexSection{ipak_consts::IPAK_INDEX_SECTION, const IPakSection indexSection{
ipak_consts::IPAK_INDEX_SECTION,
static_cast<uint32_t>(m_index_section_offset), static_cast<uint32_t>(m_index_section_offset),
static_cast<uint32_t>(sizeof(IPakIndexEntry) * m_index_entries.size()), static_cast<uint32_t>(sizeof(IPakIndexEntry) * m_index_entries.size()),
static_cast<uint32_t>(m_index_entries.size())}; static_cast<uint32_t>(m_index_entries.size()),
};
const IPakSection brandingSection{ const IPakSection brandingSection{
ipak_consts::IPAK_BRANDING_SECTION, static_cast<uint32_t>(m_branding_section_offset), std::extent_v<decltype(BRANDING)>, 1}; ipak_consts::IPAK_BRANDING_SECTION,
static_cast<uint32_t>(m_branding_section_offset),
std::extent_v<decltype(BRANDING)>,
1,
};
Write(&header, sizeof(header)); Write(&header, sizeof(header));
Write(&dataSection, sizeof(dataSection)); Write(&dataSection, sizeof(dataSection));

View File

@ -9,7 +9,13 @@
ObjWriting::Configuration_t ObjWriting::Configuration; ObjWriting::Configuration_t ObjWriting::Configuration;
const IZoneDumper* const ZONE_DUMPER[]{new IW3::ZoneDumper(), new IW4::ZoneDumper(), new IW5::ZoneDumper(), new T5::ZoneDumper(), new T6::ZoneDumper()}; const IZoneDumper* const ZONE_DUMPER[]{
new IW3::ZoneDumper(),
new IW4::ZoneDumper(),
new IW5::ZoneDumper(),
new T5::ZoneDumper(),
new T6::ZoneDumper(),
};
bool ObjWriting::DumpZone(AssetDumpingContext& context) bool ObjWriting::DumpZone(AssetDumpingContext& context)
{ {

View File

@ -19,12 +19,14 @@ void WavWriter::WritePcmHeader(const WavMetaData& metaData, const size_t dataLen
constexpr WavChunkHeader formatChunkHeader{WAV_CHUNK_ID_FMT, sizeof(WavFormatChunkPcm)}; constexpr WavChunkHeader formatChunkHeader{WAV_CHUNK_ID_FMT, sizeof(WavFormatChunkPcm)};
m_stream.write(reinterpret_cast<const char*>(&formatChunkHeader), sizeof(formatChunkHeader)); m_stream.write(reinterpret_cast<const char*>(&formatChunkHeader), sizeof(formatChunkHeader));
const WavFormatChunkPcm formatChunk{WavFormat::PCM, const WavFormatChunkPcm formatChunk{
WavFormat::PCM,
static_cast<uint16_t>(metaData.channelCount), static_cast<uint16_t>(metaData.channelCount),
metaData.samplesPerSec, metaData.samplesPerSec,
metaData.samplesPerSec * metaData.channelCount * metaData.bitsPerSample / 8, metaData.samplesPerSec * metaData.channelCount * metaData.bitsPerSample / 8,
static_cast<uint16_t>(metaData.channelCount * (metaData.bitsPerSample / 8)), static_cast<uint16_t>(metaData.channelCount * (metaData.bitsPerSample / 8)),
static_cast<uint16_t>(metaData.bitsPerSample)}; static_cast<uint16_t>(metaData.bitsPerSample),
};
m_stream.write(reinterpret_cast<const char*>(&formatChunk), sizeof(formatChunk)); m_stream.write(reinterpret_cast<const char*>(&formatChunk), sizeof(formatChunk));
const WavChunkHeader dataChunkHeader{WAV_CHUNK_ID_DATA, dataLen}; const WavChunkHeader dataChunkHeader{WAV_CHUNK_ID_DATA, dataLen};

View File

@ -404,7 +404,8 @@ const SimpleExpressionBinaryOperationType* const SimpleExpressionBinaryOperation
&OPERATION_EQUALS, &OPERATION_EQUALS,
&OPERATION_NOT_EQUAL, &OPERATION_NOT_EQUAL,
&OPERATION_AND, &OPERATION_AND,
&OPERATION_OR}; &OPERATION_OR,
};
SimpleExpressionBinaryOperation::SimpleExpressionBinaryOperation(const SimpleExpressionBinaryOperationType* operationType, SimpleExpressionBinaryOperation::SimpleExpressionBinaryOperation(const SimpleExpressionBinaryOperationType* operationType,
std::unique_ptr<ISimpleExpression> operand1, std::unique_ptr<ISimpleExpression> operand1,

View File

@ -298,7 +298,11 @@ std::unique_ptr<SimpleExpressionMatchers::matcher_t> SimpleExpressionMatchers::P
if (hasAddOperation && hasSubtractOperation) if (hasAddOperation && hasSubtractOperation)
{ {
binaryOperationsMatchers.emplace_back(create.Or({create.IntegerWithSign(), create.FloatingPointWithSign()}) binaryOperationsMatchers.emplace_back(create
.Or({
create.IntegerWithSign(),
create.FloatingPointWithSign(),
})
.NoConsume() .NoConsume()
.Transform( .Transform(
[](const SimpleMatcherFactory::token_list_t& values) [](const SimpleMatcherFactory::token_list_t& values)
@ -360,11 +364,13 @@ std::unique_ptr<SimpleExpressionMatchers::matcher_t> SimpleExpressionMatchers::P
if (!m_enable_conditional_operator) if (!m_enable_conditional_operator)
return create.False(); return create.False();
return create.And({create.Char('?').Tag(TAG_CONDITIONAL_OPERATOR), return create.And({
create.Char('?').Tag(TAG_CONDITIONAL_OPERATOR),
create.Label(LABEL_EXPRESSION), create.Label(LABEL_EXPRESSION),
create.Char(':').Tag(TAG_CONDITIONAL_OPERATOR_SEPARATOR), create.Char(':').Tag(TAG_CONDITIONAL_OPERATOR_SEPARATOR),
create.Label(LABEL_EXPRESSION), create.Label(LABEL_EXPRESSION),
create.True().Tag(TAG_CONDITIONAL_OPERATOR_END)}); create.True().Tag(TAG_CONDITIONAL_OPERATOR_END),
});
} }
std::unique_ptr<SimpleExpressionMatchers::matcher_t> SimpleExpressionMatchers::Expression(const supplier_t* labelSupplier) const std::unique_ptr<SimpleExpressionMatchers::matcher_t> SimpleExpressionMatchers::Expression(const supplier_t* labelSupplier) const
@ -372,11 +378,32 @@ std::unique_ptr<SimpleExpressionMatchers::matcher_t> SimpleExpressionMatchers::E
const SimpleMatcherFactory create(labelSupplier); const SimpleMatcherFactory create(labelSupplier);
return create return create
.And({create.OptionalLoop(ParseUnaryOperationType(labelSupplier)), .And({
create.Or({create.And({create.Char('('), create.Label(LABEL_EXPRESSION), create.Char(')').Tag(TAG_PARENTHESIS_END)}).Tag(TAG_PARENTHESIS), create.OptionalLoop(ParseUnaryOperationType(labelSupplier)),
create.And({create.True().Tag(TAG_OPERAND_EXT), ParseOperandExtension(labelSupplier), create.True().Tag(TAG_OPERAND_EXT_END)}), create.Or({
ParseOperand(labelSupplier)}), create
create.Optional(create.Or({ParseConditionalOperator(labelSupplier), .And({
create.And({ParseBinaryOperationType(labelSupplier), create.Label(LABEL_EXPRESSION)}).Tag(TAG_BINARY_OPERATION)}))}) create.Char('('),
create.Label(LABEL_EXPRESSION),
create.Char(')').Tag(TAG_PARENTHESIS_END),
})
.Tag(TAG_PARENTHESIS),
create.And({
create.True().Tag(TAG_OPERAND_EXT),
ParseOperandExtension(labelSupplier),
create.True().Tag(TAG_OPERAND_EXT_END),
}),
ParseOperand(labelSupplier),
}),
create.Optional(create.Or({
ParseConditionalOperator(labelSupplier),
create
.And({
ParseBinaryOperationType(labelSupplier),
create.Label(LABEL_EXPRESSION),
})
.Tag(TAG_BINARY_OPERATION),
})),
})
.Tag(TAG_EXPRESSION); .Tag(TAG_EXPRESSION);
} }

View File

@ -47,7 +47,9 @@ public:
protected: protected:
const std::vector<sequence_t*>& GetTestsForState() override const std::vector<sequence_t*>& GetTestsForState() override
{ {
static std::vector<sequence_t*> sequences{new SimpleExpressionInterpreterExpressionSequence()}; static std::vector<sequence_t*> sequences{
new SimpleExpressionInterpreterExpressionSequence(),
};
return sequences; return sequences;
} }
}; };

View File

@ -8,11 +8,20 @@
#include <regex> #include <regex>
#include <type_traits> #include <type_traits>
// clang-format off
const CommandLineOption* const OPTION_HELP = const CommandLineOption* const OPTION_HELP =
CommandLineOption::Builder::Create().WithShortName("?").WithLongName("help").WithDescription("Displays usage information.").Build(); CommandLineOption::Builder::Create()
.WithShortName("?")
.WithLongName("help")
.WithDescription("Displays usage information.")
.Build();
const CommandLineOption* const OPTION_VERBOSE = const CommandLineOption* const OPTION_VERBOSE =
CommandLineOption::Builder::Create().WithShortName("v").WithLongName("verbose").WithDescription("Outputs a lot more and more detailed messages.").Build(); CommandLineOption::Builder::Create()
.WithShortName("v")
.WithLongName("verbose")
.WithDescription("Outputs a lot more and more detailed messages.")
.Build();
const CommandLineOption* const OPTION_MINIMAL_ZONE_FILE = const CommandLineOption* const OPTION_MINIMAL_ZONE_FILE =
CommandLineOption::Builder::Create() CommandLineOption::Builder::Create()
@ -21,7 +30,8 @@ const CommandLineOption* const OPTION_MINIMAL_ZONE_FILE =
.WithDescription("Minimizes the size of the zone file output by only including assets that are not a dependency of another asset.") .WithDescription("Minimizes the size of the zone file output by only including assets that are not a dependency of another asset.")
.Build(); .Build();
const CommandLineOption* const OPTION_LOAD = CommandLineOption::Builder::Create() const CommandLineOption* const OPTION_LOAD =
CommandLineOption::Builder::Create()
.WithShortName("l") .WithShortName("l")
.WithLongName("load") .WithLongName("load")
.WithDescription("Loads an existing zone before trying to unlink any zone.") .WithDescription("Loads an existing zone before trying to unlink any zone.")
@ -30,7 +40,10 @@ const CommandLineOption* const OPTION_LOAD = CommandLineOption::Builder::Create(
.Build(); .Build();
const CommandLineOption* const OPTION_LIST = const CommandLineOption* const OPTION_LIST =
CommandLineOption::Builder::Create().WithLongName("list").WithDescription("Lists the contents of a zone instead of writing them to the disk.").Build(); CommandLineOption::Builder::Create()
.WithLongName("list")
.WithDescription("Lists the contents of a zone instead of writing them to the disk.")
.Build();
const CommandLineOption* const OPTION_OUTPUT_FOLDER = const CommandLineOption* const OPTION_OUTPUT_FOLDER =
CommandLineOption::Builder::Create() CommandLineOption::Builder::Create()
@ -41,38 +54,49 @@ const CommandLineOption* const OPTION_OUTPUT_FOLDER =
.WithParameter("outputFolderPath") .WithParameter("outputFolderPath")
.Build(); .Build();
const CommandLineOption* const OPTION_SEARCH_PATH = CommandLineOption::Builder::Create() const CommandLineOption* const OPTION_SEARCH_PATH =
CommandLineOption::Builder::Create()
.WithLongName("search-path") .WithLongName("search-path")
.WithDescription("Specifies a semi-colon separated list of paths to search for additional game files.") .WithDescription("Specifies a semi-colon separated list of paths to search for additional game files.")
.WithParameter("searchPathString") .WithParameter("searchPathString")
.Build(); .Build();
const CommandLineOption* const OPTION_IMAGE_FORMAT = CommandLineOption::Builder::Create() const CommandLineOption* const OPTION_IMAGE_FORMAT =
CommandLineOption::Builder::Create()
.WithLongName("image-format") .WithLongName("image-format")
.WithDescription("Specifies the format of dumped image files. Valid values are: DDS, IWI") .WithDescription("Specifies the format of dumped image files. Valid values are: DDS, IWI")
.WithParameter("imageFormatValue") .WithParameter("imageFormatValue")
.Build(); .Build();
const CommandLineOption* const OPTION_MODEL_FORMAT = CommandLineOption::Builder::Create() const CommandLineOption* const OPTION_MODEL_FORMAT =
CommandLineOption::Builder::Create()
.WithLongName("model-format") .WithLongName("model-format")
.WithDescription("Specifies the format of dumped model files. Valid values are: XMODEL_EXPORT, OBJ") .WithDescription("Specifies the format of dumped model files. Valid values are: XMODEL_EXPORT, OBJ")
.WithParameter("modelFormatValue") .WithParameter("modelFormatValue")
.Build(); .Build();
const CommandLineOption* const OPTION_SKIP_OBJ = const CommandLineOption* const OPTION_SKIP_OBJ =
CommandLineOption::Builder::Create().WithLongName("skip-obj").WithDescription("Skips loading raw obj data.").Build(); CommandLineOption::Builder::Create()
.WithLongName("skip-obj")
.WithDescription("Skips loading raw obj data.")
.Build();
const CommandLineOption* const OPTION_GDT = const CommandLineOption* const OPTION_GDT =
CommandLineOption::Builder::Create().WithLongName("gdt").WithDescription("Dumps assets in a GDT whenever possible.").Build(); CommandLineOption::Builder::Create()
.WithLongName("gdt")
.WithDescription("Dumps assets in a GDT whenever possible.")
.Build();
const CommandLineOption* const OPTION_EXCLUDE_ASSETS = CommandLineOption::Builder::Create() const CommandLineOption* const OPTION_EXCLUDE_ASSETS =
CommandLineOption::Builder::Create()
.WithLongName("exclude-assets") .WithLongName("exclude-assets")
.WithDescription("Specify all asset types that should be excluded.") .WithDescription("Specify all asset types that should be excluded.")
.WithParameter("assetTypeList") .WithParameter("assetTypeList")
.Reusable() .Reusable()
.Build(); .Build();
const CommandLineOption* const OPTION_INCLUDE_ASSETS = CommandLineOption::Builder::Create() const CommandLineOption* const OPTION_INCLUDE_ASSETS =
CommandLineOption::Builder::Create()
.WithLongName("include-assets") .WithLongName("include-assets")
.WithDescription("Specify all asset types that should be included.") .WithDescription("Specify all asset types that should be included.")
.WithParameter("assetTypeList") .WithParameter("assetTypeList")
@ -85,7 +109,10 @@ const CommandLineOption* const OPTION_LEGACY_MENUS =
.WithDescription("Dumps menus with a compatibility mode to work with applications not compatible with the newer dumping mode.") .WithDescription("Dumps menus with a compatibility mode to work with applications not compatible with the newer dumping mode.")
.Build(); .Build();
const CommandLineOption* const COMMAND_LINE_OPTIONS[]{OPTION_HELP, // clang-format on
const CommandLineOption* const COMMAND_LINE_OPTIONS[]{
OPTION_HELP,
OPTION_VERBOSE, OPTION_VERBOSE,
OPTION_MINIMAL_ZONE_FILE, OPTION_MINIMAL_ZONE_FILE,
OPTION_LOAD, OPTION_LOAD,
@ -98,7 +125,8 @@ const CommandLineOption* const COMMAND_LINE_OPTIONS[]{OPTION_HELP,
OPTION_GDT, OPTION_GDT,
OPTION_EXCLUDE_ASSETS, OPTION_EXCLUDE_ASSETS,
OPTION_INCLUDE_ASSETS, OPTION_INCLUDE_ASSETS,
OPTION_LEGACY_MENUS}; OPTION_LEGACY_MENUS,
};
UnlinkerArgs::UnlinkerArgs() UnlinkerArgs::UnlinkerArgs()
: m_argument_parser(COMMAND_LINE_OPTIONS, std::extent_v<decltype(COMMAND_LINE_OPTIONS)>), : m_argument_parser(COMMAND_LINE_OPTIONS, std::extent_v<decltype(COMMAND_LINE_OPTIONS)>),

View File

@ -10,7 +10,7 @@ public:
{T(1.0), 0, 0, 0 }, {T(1.0), 0, 0, 0 },
{0, T(1.0), 0, 0 }, {0, T(1.0), 0, 0 },
{0, 0, T(1.0), 0 }, {0, 0, T(1.0), 0 },
{0, 0, 0, T(1.0)} {0, 0, 0, T(1.0)},
} }
{ {
} }
@ -20,7 +20,7 @@ public:
{d00, d01, d02, d03}, {d00, d01, d02, d03},
{d10, d11, d12, d13}, {d10, d11, d12, d13},
{d20, d21, d22, d23}, {d20, d21, d22, d23},
{d30, d31, d32, d33} {d30, d31, d32, d33},
} }
{ {
} }

View File

@ -133,7 +133,8 @@ const OperationType* const OperationType::OPERATION_OR = new OperationType("||",
return op1 > 0 || op2 > 0 ? 1 : 0; return op1 > 0 || op2 > 0 ? 1 : 0;
}); });
const OperationType* const OperationType::ALL_OPERATION_TYPES[]{OPERATION_ADD, const OperationType* const OperationType::ALL_OPERATION_TYPES[]{
OPERATION_ADD,
OPERATION_SUBTRACT, OPERATION_SUBTRACT,
OPERATION_MULTIPLY, OPERATION_MULTIPLY,
OPERATION_DIVIDE, OPERATION_DIVIDE,
@ -150,4 +151,5 @@ const OperationType* const OperationType::ALL_OPERATION_TYPES[]{OPERATION_ADD,
OPERATION_EQUALS, OPERATION_EQUALS,
OPERATION_NOT_EQUAL, OPERATION_NOT_EQUAL,
OPERATION_AND, OPERATION_AND,
OPERATION_OR}; OPERATION_OR,
};

View File

@ -26,7 +26,8 @@ CommandsParser::CommandsParser(CommandsLexer* lexer, IDataRepository* targetRepo
const std::vector<CommandsParser::sequence_t*>& CommandsParser::GetTestsForState() const std::vector<CommandsParser::sequence_t*>& CommandsParser::GetTestsForState()
{ {
static std::vector<sequence_t*> tests({new SequenceAction(), static std::vector<sequence_t*> tests({
new SequenceAction(),
new SequenceAllocAlign(), new SequenceAllocAlign(),
new SequenceArchitecture(), new SequenceArchitecture(),
new SequenceArrayCount(), new SequenceArrayCount(),
@ -42,7 +43,8 @@ const std::vector<CommandsParser::sequence_t*>& CommandsParser::GetTestsForState
new SequenceScriptString(), new SequenceScriptString(),
new SequenceSetBlock(), new SequenceSetBlock(),
new SequenceString(), new SequenceString(),
new SequenceUse()}); new SequenceUse(),
});
return tests; return tests;
} }

View File

@ -12,19 +12,32 @@
std::unique_ptr<CommandsCommonMatchers::matcher_t> CommandsCommonMatchers::Typename(const supplier_t* labelSupplier) std::unique_ptr<CommandsCommonMatchers::matcher_t> CommandsCommonMatchers::Typename(const supplier_t* labelSupplier)
{ {
static constexpr const char* BUILT_IN_TYPE_NAMES[]{"unsigned", "char", "short", "int", "long"}; static constexpr const char* BUILT_IN_TYPE_NAMES[]{
"unsigned",
"char",
"short",
"int",
"long",
};
static_assert(std::extent<decltype(BUILT_IN_TYPE_NAMES)>::value static_assert(std::extent<decltype(BUILT_IN_TYPE_NAMES)>::value
== static_cast<int>(CommandsParserValueType::BUILT_IN_LAST) - static_cast<int>(CommandsParserValueType::BUILT_IN_FIRST) + 1); == static_cast<int>(CommandsParserValueType::BUILT_IN_LAST) - static_cast<int>(CommandsParserValueType::BUILT_IN_FIRST) + 1);
const CommandsMatcherFactory create(labelSupplier); const CommandsMatcherFactory create(labelSupplier);
return create.Or( return create.Or({
{create create
.And({create.Optional(create.Type(CommandsParserValueType::UNSIGNED)), .And({
create.Or({create.Type(CommandsParserValueType::CHAR), create.Optional(create.Type(CommandsParserValueType::UNSIGNED)),
create.Or({
create.Type(CommandsParserValueType::CHAR),
create.Type(CommandsParserValueType::SHORT), create.Type(CommandsParserValueType::SHORT),
create.Type(CommandsParserValueType::INT), create.Type(CommandsParserValueType::INT),
create.And({create.Type(CommandsParserValueType::LONG), create.Optional(create.Type(CommandsParserValueType::LONG))})})}) create.And({
create.Type(CommandsParserValueType::LONG),
create.Optional(create.Type(CommandsParserValueType::LONG)),
}),
}),
})
.Transform( .Transform(
[](CommandsMatcherFactory::token_list_t& values) [](CommandsMatcherFactory::token_list_t& values)
{ {
@ -42,7 +55,15 @@ std::unique_ptr<CommandsCommonMatchers::matcher_t> CommandsCommonMatchers::Typen
return CommandsParserValue::TypeName(values[0].get().GetPos(), new std::string(str.str())); return CommandsParserValue::TypeName(values[0].get().GetPos(), new std::string(str.str()));
}), }),
create.And({create.Identifier(), create.OptionalLoop(create.And({create.Char(':'), create.Char(':'), create.Identifier()}))}) create
.And({
create.Identifier(),
create.OptionalLoop(create.And({
create.Char(':'),
create.Char(':'),
create.Identifier(),
})),
})
.Transform( .Transform(
[](CommandsMatcherFactory::token_list_t& values) [](CommandsMatcherFactory::token_list_t& values)
{ {
@ -53,14 +74,23 @@ std::unique_ptr<CommandsCommonMatchers::matcher_t> CommandsCommonMatchers::Typen
str << "::" << values[i].get().IdentifierValue(); str << "::" << values[i].get().IdentifierValue();
return CommandsParserValue::TypeName(values[0].get().GetPos(), new std::string(str.str())); return CommandsParserValue::TypeName(values[0].get().GetPos(), new std::string(str.str()));
})}); }),
});
} }
std::unique_ptr<CommandsCommonMatchers::matcher_t> CommandsCommonMatchers::ArrayDef(const supplier_t* labelSupplier) std::unique_ptr<CommandsCommonMatchers::matcher_t> CommandsCommonMatchers::ArrayDef(const supplier_t* labelSupplier)
{ {
const CommandsMatcherFactory create(labelSupplier); const CommandsMatcherFactory create(labelSupplier);
return create.And({create.Char('['), create.Or({create.Integer(), create.Identifier()}), create.Char(']')}) return create
.And({
create.Char('['),
create.Or({
create.Integer(),
create.Identifier(),
}),
create.Char(']'),
})
.Transform( .Transform(
[](CommandsMatcherFactory::token_list_t& values) [](CommandsMatcherFactory::token_list_t& values)
{ {
@ -91,7 +121,13 @@ std::unique_ptr<CommandsCommonMatchers::matcher_t> CommandsCommonMatchers::Parse
{ {
const CommandsMatcherFactory create(labelSupplier); const CommandsMatcherFactory create(labelSupplier);
return create.And({create.Char('['), create.Label(LABEL_EVALUATION), create.Char(']').Tag(TAG_OPERAND_ARRAY_END)}).Tag(TAG_OPERAND_ARRAY); return create
.And({
create.Char('['),
create.Label(LABEL_EVALUATION),
create.Char(']').Tag(TAG_OPERAND_ARRAY_END),
})
.Tag(TAG_OPERAND_ARRAY);
} }
std::unique_ptr<CommandsCommonMatchers::matcher_t> CommandsCommonMatchers::ParseOperand(const supplier_t* labelSupplier) std::unique_ptr<CommandsCommonMatchers::matcher_t> CommandsCommonMatchers::ParseOperand(const supplier_t* labelSupplier)
@ -99,11 +135,15 @@ std::unique_ptr<CommandsCommonMatchers::matcher_t> CommandsCommonMatchers::Parse
const CommandsMatcherFactory create(labelSupplier); const CommandsMatcherFactory create(labelSupplier);
return create return create
.Or({create .Or({
.And({create.Label(LABEL_TYPENAME).Capture(CAPTURE_OPERAND_TYPENAME), create
create.OptionalLoop(MatcherFactoryWrapper<CommandsParserValue>(ParseOperandArray(labelSupplier)).Capture(CAPTURE_OPERAND_ARRAY))}) .And({
create.Label(LABEL_TYPENAME).Capture(CAPTURE_OPERAND_TYPENAME),
create.OptionalLoop(MatcherFactoryWrapper<CommandsParserValue>(ParseOperandArray(labelSupplier)).Capture(CAPTURE_OPERAND_ARRAY)),
})
.Tag(TAG_OPERAND_TYPENAME), .Tag(TAG_OPERAND_TYPENAME),
create.Integer().Tag(TAG_OPERAND_INTEGER).Capture(CAPTURE_OPERAND_INTEGER)}) create.Integer().Tag(TAG_OPERAND_INTEGER).Capture(CAPTURE_OPERAND_INTEGER),
})
.Tag(TAG_OPERAND); .Tag(TAG_OPERAND);
} }
@ -112,7 +152,8 @@ std::unique_ptr<CommandsCommonMatchers::matcher_t> CommandsCommonMatchers::Parse
const CommandsMatcherFactory create(labelSupplier); const CommandsMatcherFactory create(labelSupplier);
return create return create
.Or({create.Char('+').Transform( .Or({
create.Char('+').Transform(
[](CommandsMatcherFactory::token_list_t& values) [](CommandsMatcherFactory::token_list_t& values)
{ {
return CommandsParserValue::OpType(values[0].get().GetPos(), OperationType::OPERATION_ADD); return CommandsParserValue::OpType(values[0].get().GetPos(), OperationType::OPERATION_ADD);
@ -209,7 +250,8 @@ std::unique_ptr<CommandsCommonMatchers::matcher_t> CommandsCommonMatchers::Parse
[](CommandsMatcherFactory::token_list_t& values) [](CommandsMatcherFactory::token_list_t& values)
{ {
return CommandsParserValue::OpType(values[0].get().GetPos(), OperationType::OPERATION_OR); return CommandsParserValue::OpType(values[0].get().GetPos(), OperationType::OPERATION_OR);
})}) }),
})
.Capture(CAPTURE_BINARY_OPERATION_TYPE); .Capture(CAPTURE_BINARY_OPERATION_TYPE);
} }
@ -218,14 +260,25 @@ std::unique_ptr<CommandsCommonMatchers::matcher_t> CommandsCommonMatchers::Evalu
const CommandsMatcherFactory create(labelSupplier); const CommandsMatcherFactory create(labelSupplier);
return create return create
.And({create.Or({create .And({
.And({create.Optional(create.Char('!').Tag(TAG_EVALUATION_NOT)), create.Or({
create
.And({
create.Optional(create.Char('!').Tag(TAG_EVALUATION_NOT)),
create.Char('('), create.Char('('),
create.Label(LABEL_EVALUATION), create.Label(LABEL_EVALUATION),
create.Char(')').Tag(TAG_EVALUATION_PARENTHESIS_END)}) create.Char(')').Tag(TAG_EVALUATION_PARENTHESIS_END),
})
.Tag(TAG_EVALUATION_PARENTHESIS), .Tag(TAG_EVALUATION_PARENTHESIS),
ParseOperand(labelSupplier)}), ParseOperand(labelSupplier),
create.Optional(create.And({ParseOperationType(labelSupplier), create.Label(LABEL_EVALUATION)}).Tag(TAG_EVALUATION_OPERATION))}) }),
create.Optional(create
.And({
ParseOperationType(labelSupplier),
create.Label(LABEL_EVALUATION),
})
.Tag(TAG_EVALUATION_OPERATION)),
})
.Tag(TAG_EVALUATION); .Tag(TAG_EVALUATION);
} }

View File

@ -9,20 +9,32 @@ SequenceAction::SequenceAction()
AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME); AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME);
AddLabeledMatchers( AddLabeledMatchers(
{create.Char('('), {
create.Optional( create.Char('('),
create.And({create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_ARG_TYPE), create.Optional(create.And({
create.OptionalLoop(create.And({create.Char(','), create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_ARG_TYPE)}))})), create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_ARG_TYPE),
create.Char(')')}, create.OptionalLoop(create.And({
create.Char(','),
create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_ARG_TYPE),
})),
})),
create.Char(')'),
},
LABEL_ACTION_ARGS); LABEL_ACTION_ARGS);
AddMatchers( AddMatchers({
{create.Keyword("set"), create.Keyword("set"),
create.Keyword("action"), create.Keyword("action"),
create.Or({create.And({create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE), create.Identifier().Capture(CAPTURE_ACTION_NAME)}), create.Or({
create.Identifier().Capture(CAPTURE_ACTION_NAME)}), create.And({
create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE),
create.Identifier().Capture(CAPTURE_ACTION_NAME),
}),
create.Identifier().Capture(CAPTURE_ACTION_NAME),
}),
create.Label(LABEL_ACTION_ARGS), create.Label(LABEL_ACTION_ARGS),
create.Char(';')}); create.Char(';'),
});
} }
void SequenceAction::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const void SequenceAction::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const

View File

@ -9,11 +9,13 @@ SequenceAllocAlign::SequenceAllocAlign()
AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME); AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME);
AddLabeledMatchers(CommandsCommonMatchers::Evaluation(this), CommandsCommonMatchers::LABEL_EVALUATION); AddLabeledMatchers(CommandsCommonMatchers::Evaluation(this), CommandsCommonMatchers::LABEL_EVALUATION);
AddMatchers({create.Keyword("set"), AddMatchers({
create.Keyword("set"),
create.Keyword("allocalign"), create.Keyword("allocalign"),
create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE), create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE),
create.Label(CommandsCommonMatchers::LABEL_EVALUATION), create.Label(CommandsCommonMatchers::LABEL_EVALUATION),
create.Char(';')}); create.Char(';'),
});
} }
void SequenceAllocAlign::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const void SequenceAllocAlign::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const

View File

@ -7,7 +7,11 @@ SequenceArchitecture::SequenceArchitecture()
{ {
const CommandsMatcherFactory create(this); const CommandsMatcherFactory create(this);
AddMatchers({create.Keyword("architecture"), create.Identifier().Capture(CAPTURE_ARCHITECTURE), create.Char(';')}); AddMatchers({
create.Keyword("architecture"),
create.Identifier().Capture(CAPTURE_ARCHITECTURE),
create.Char(';'),
});
m_architecture_mapping["x86"] = Architecture::X86; m_architecture_mapping["x86"] = Architecture::X86;
m_architecture_mapping["x64"] = Architecture::X64; m_architecture_mapping["x64"] = Architecture::X64;

View File

@ -10,11 +10,13 @@ SequenceArrayCount::SequenceArrayCount()
AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME); AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME);
AddLabeledMatchers(CommandsCommonMatchers::Evaluation(this), CommandsCommonMatchers::LABEL_EVALUATION); AddLabeledMatchers(CommandsCommonMatchers::Evaluation(this), CommandsCommonMatchers::LABEL_EVALUATION);
AddMatchers({create.Keyword("set"), AddMatchers({
create.Keyword("set"),
create.Keyword("arraycount"), create.Keyword("arraycount"),
create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE), create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE),
create.Label(CommandsCommonMatchers::LABEL_EVALUATION), create.Label(CommandsCommonMatchers::LABEL_EVALUATION),
create.Char(';')}); create.Char(';'),
});
} }
void SequenceArrayCount::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const void SequenceArrayCount::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const

View File

@ -10,11 +10,13 @@ SequenceArraySize::SequenceArraySize()
AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME); AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME);
AddLabeledMatchers(CommandsCommonMatchers::Evaluation(this), CommandsCommonMatchers::LABEL_EVALUATION); AddLabeledMatchers(CommandsCommonMatchers::Evaluation(this), CommandsCommonMatchers::LABEL_EVALUATION);
AddMatchers({create.Keyword("set"), AddMatchers({
create.Keyword("set"),
create.Keyword("arraysize"), create.Keyword("arraysize"),
create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE), create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE),
create.Label(CommandsCommonMatchers::LABEL_EVALUATION).Capture(CAPTURE_EVALUATION), create.Label(CommandsCommonMatchers::LABEL_EVALUATION).Capture(CAPTURE_EVALUATION),
create.Char(';')}); create.Char(';'),
});
} }
void SequenceArraySize::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const void SequenceArraySize::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const

View File

@ -8,10 +8,12 @@ SequenceAsset::SequenceAsset()
const CommandsMatcherFactory create(this); const CommandsMatcherFactory create(this);
AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME); AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME);
AddMatchers({create.Keyword("asset"), AddMatchers({
create.Keyword("asset"),
create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE), create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE),
create.Identifier().Capture(CAPTURE_ENUM_ENTRY), create.Identifier().Capture(CAPTURE_ENUM_ENTRY),
create.Char(';')}); create.Char(';'),
});
} }
void SequenceAsset::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const void SequenceAsset::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const

View File

@ -14,11 +14,13 @@ SequenceBlock::SequenceBlock()
DEFINE_FAST_FILE_BLOCK_TYPE(NORMAL); DEFINE_FAST_FILE_BLOCK_TYPE(NORMAL);
#undef DEFINE_FAST_FILE_BLOCK_TYPE #undef DEFINE_FAST_FILE_BLOCK_TYPE
AddMatchers({create.Keyword("block"), AddMatchers({
create.Keyword("block"),
create.Identifier().Capture(CAPTURE_BLOCK_TYPE), create.Identifier().Capture(CAPTURE_BLOCK_TYPE),
create.Identifier().Capture(CAPTURE_BLOCK_ENUM_ENTRY), create.Identifier().Capture(CAPTURE_BLOCK_ENUM_ENTRY),
create.Optional(create.Keyword("default").Tag(TAG_DEFAULT)), create.Optional(create.Keyword("default").Tag(TAG_DEFAULT)),
create.Char(';')}); create.Char(';'),
});
} }
void SequenceBlock::AddFastFileBlockToLookup(std::string name, const FastFileBlockType type) void SequenceBlock::AddFastFileBlockToLookup(std::string name, const FastFileBlockType type)

View File

@ -10,13 +10,17 @@ SequenceCondition::SequenceCondition()
AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME); AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME);
AddLabeledMatchers(CommandsCommonMatchers::Evaluation(this), CommandsCommonMatchers::LABEL_EVALUATION); AddLabeledMatchers(CommandsCommonMatchers::Evaluation(this), CommandsCommonMatchers::LABEL_EVALUATION);
AddMatchers({create.Keyword("set"), AddMatchers({
create.Keyword("set"),
create.Keyword("condition"), create.Keyword("condition"),
create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE), create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE),
create.Or({create.Keyword("always").Tag(TAG_ALWAYS), create.Or({
create.Keyword("always").Tag(TAG_ALWAYS),
create.Keyword("never").Tag(TAG_NEVER), create.Keyword("never").Tag(TAG_NEVER),
create.Label(CommandsCommonMatchers::LABEL_EVALUATION).Tag(TAG_EVALUATION).Capture(CAPTURE_EVALUATION)}), create.Label(CommandsCommonMatchers::LABEL_EVALUATION).Tag(TAG_EVALUATION).Capture(CAPTURE_EVALUATION),
create.Char(';')}); }),
create.Char(';'),
});
} }
void SequenceCondition::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const void SequenceCondition::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const

View File

@ -12,13 +12,15 @@ SequenceCount::SequenceCount()
AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME); AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME);
AddLabeledMatchers(CommandsCommonMatchers::Evaluation(this), CommandsCommonMatchers::LABEL_EVALUATION); AddLabeledMatchers(CommandsCommonMatchers::Evaluation(this), CommandsCommonMatchers::LABEL_EVALUATION);
AddLabeledMatchers(CommandsCommonMatchers::ArrayDef(this), CommandsCommonMatchers::LABEL_ARRAY_DEF); AddLabeledMatchers(CommandsCommonMatchers::ArrayDef(this), CommandsCommonMatchers::LABEL_ARRAY_DEF);
AddMatchers({create.Keyword("set").Capture(CAPTURE_START), AddMatchers({
create.Keyword("set").Capture(CAPTURE_START),
create.Keyword("count"), create.Keyword("count"),
create.OptionalLoop(create.Char('*').Tag(TAG_POINTER_RESOLVE)), create.OptionalLoop(create.Char('*').Tag(TAG_POINTER_RESOLVE)),
create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE), create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE),
create.OptionalLoop(create.Label(CommandsCommonMatchers::LABEL_ARRAY_DEF).Capture(CAPTURE_ARRAY_INDEX)), create.OptionalLoop(create.Label(CommandsCommonMatchers::LABEL_ARRAY_DEF).Capture(CAPTURE_ARRAY_INDEX)),
create.Label(CommandsCommonMatchers::LABEL_EVALUATION), create.Label(CommandsCommonMatchers::LABEL_EVALUATION),
create.Char(';')}); create.Char(';'),
});
} }
void SequenceCount::SetCountByArrayIndex(CommandsParserState* state, void SequenceCount::SetCountByArrayIndex(CommandsParserState* state,

View File

@ -7,7 +7,11 @@ SequenceGame::SequenceGame()
{ {
const CommandsMatcherFactory create(this); const CommandsMatcherFactory create(this);
AddMatchers({create.Keyword("game"), create.Identifier().Capture(CAPTURE_GAME), create.Char(';')}); AddMatchers({
create.Keyword("game"),
create.Identifier().Capture(CAPTURE_GAME),
create.Char(';'),
});
} }
void SequenceGame::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const void SequenceGame::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const

View File

@ -8,7 +8,12 @@ SequenceName::SequenceName()
const CommandsMatcherFactory create(this); const CommandsMatcherFactory create(this);
AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME); AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME);
AddMatchers({create.Keyword("set"), create.Keyword("name"), create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE), create.Char(';')}); AddMatchers({
create.Keyword("set"),
create.Keyword("name"),
create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE),
create.Char(';'),
});
} }
void SequenceName::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const void SequenceName::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const

View File

@ -10,12 +10,20 @@ SequenceReorder::SequenceReorder()
const CommandsMatcherFactory create(this); const CommandsMatcherFactory create(this);
AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME); AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME);
AddMatchers({create.Keyword("reorder").Capture(CAPTURE_START), AddMatchers({
create.Keyword("reorder").Capture(CAPTURE_START),
create.Optional(create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE)), create.Optional(create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE)),
create.Char(':'), create.Char(':'),
create.Optional(create.And({create.Char('.'), create.Char('.'), create.Char('.')}).Tag(TAG_FIND_FIRST)), create.Optional(create
.And({
create.Char('.'),
create.Char('.'),
create.Char('.'),
})
.Tag(TAG_FIND_FIRST)),
create.Loop(create.Identifier().Capture(CAPTURE_ENTRY)), create.Loop(create.Identifier().Capture(CAPTURE_ENTRY)),
create.Char(';')}); create.Char(';'),
});
} }
StructureInformation* SequenceReorder::GetType(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) StructureInformation* SequenceReorder::GetType(CommandsParserState* state, SequenceResult<CommandsParserValue>& result)

View File

@ -8,8 +8,12 @@ SequenceReusable::SequenceReusable()
const CommandsMatcherFactory create(this); const CommandsMatcherFactory create(this);
AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME); AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME);
AddMatchers( AddMatchers({
{create.Keyword("set"), create.Keyword("reusable"), create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE), create.Char(';')}); create.Keyword("set"),
create.Keyword("reusable"),
create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE),
create.Char(';'),
});
} }
void SequenceReusable::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const void SequenceReusable::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const

View File

@ -8,8 +8,12 @@ SequenceScriptString::SequenceScriptString()
const CommandsMatcherFactory create(this); const CommandsMatcherFactory create(this);
AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME); AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME);
AddMatchers( AddMatchers({
{create.Keyword("set"), create.Keyword("scriptstring"), create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE), create.Char(';')}); create.Keyword("set"),
create.Keyword("scriptstring"),
create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE),
create.Char(';'),
});
} }
void SequenceScriptString::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const void SequenceScriptString::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const

View File

@ -8,12 +8,18 @@ SequenceSetBlock::SequenceSetBlock()
const CommandsMatcherFactory create(this); const CommandsMatcherFactory create(this);
AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME); AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME);
AddMatchers({create.Keyword("set").Capture(CAPTURE_START), AddMatchers({
create.Keyword("set").Capture(CAPTURE_START),
create.Keyword("block"), create.Keyword("block"),
create.Or({create.And({create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE), create.Or({
create.Identifier().Capture(CAPTURE_BLOCK_ENUM_ENTRY)}), create.And({
create.Identifier().Capture(CAPTURE_BLOCK_ENUM_ENTRY)}), create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE),
create.Char(';')}); create.Identifier().Capture(CAPTURE_BLOCK_ENUM_ENTRY),
}),
create.Identifier().Capture(CAPTURE_BLOCK_ENUM_ENTRY),
}),
create.Char(';'),
});
} }
void SequenceSetBlock::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const void SequenceSetBlock::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const

View File

@ -10,8 +10,12 @@ SequenceString::SequenceString()
const CommandsMatcherFactory create(this); const CommandsMatcherFactory create(this);
AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME); AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME);
AddMatchers( AddMatchers({
{create.Keyword("set"), create.Keyword("string"), create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE), create.Char(';')}); create.Keyword("set"),
create.Keyword("string"),
create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE),
create.Char(';'),
});
} }
void SequenceString::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const void SequenceString::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const

View File

@ -8,7 +8,11 @@ SequenceUse::SequenceUse()
const CommandsMatcherFactory create(this); const CommandsMatcherFactory create(this);
AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME); AddLabeledMatchers(CommandsCommonMatchers::Typename(this), CommandsCommonMatchers::LABEL_TYPENAME);
AddMatchers({create.Keyword("use"), create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE), create.Char(';')}); AddMatchers({
create.Keyword("use"),
create.Label(CommandsCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE),
create.Char(';'),
});
} }
void SequenceUse::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const void SequenceUse::ProcessMatch(CommandsParserState* state, SequenceResult<CommandsParserValue>& result) const

View File

@ -19,7 +19,10 @@ HeaderBlockType HeaderBlockEnum::GetType()
const std::vector<IHeaderBlock::sequence_t*>& HeaderBlockEnum::GetTestsForBlock() const std::vector<IHeaderBlock::sequence_t*>& HeaderBlockEnum::GetTestsForBlock()
{ {
static std::vector<sequence_t*> tests({new SequenceCloseBlock(true), new SequenceEnumMember()}); static std::vector<sequence_t*> tests({
new SequenceCloseBlock(true),
new SequenceEnumMember(),
});
return tests; return tests;
} }

View File

@ -20,13 +20,15 @@ HeaderBlockType HeaderBlockNamespace::GetType()
const std::vector<IHeaderBlock::sequence_t*>& HeaderBlockNamespace::GetTestsForBlock() const std::vector<IHeaderBlock::sequence_t*>& HeaderBlockNamespace::GetTestsForBlock()
{ {
static std::vector<sequence_t*> tests({new SequenceCloseBlock(false), static std::vector<sequence_t*> tests({
new SequenceCloseBlock(false),
new SequenceEnum(), new SequenceEnum(),
new SequenceForwardDecl(), new SequenceForwardDecl(),
new SequenceNamespace(), new SequenceNamespace(),
new SequenceStruct(), new SequenceStruct(),
new SequenceTypedef(), new SequenceTypedef(),
new SequenceUnion()}); new SequenceUnion(),
});
return tests; return tests;
} }

View File

@ -14,8 +14,14 @@ HeaderBlockType HeaderBlockNone::GetType()
const std::vector<IHeaderBlock::sequence_t*>& HeaderBlockNone::GetTestsForBlock() const std::vector<IHeaderBlock::sequence_t*>& HeaderBlockNone::GetTestsForBlock()
{ {
static std::vector<sequence_t*> tests( static std::vector<sequence_t*> tests({
{new SequenceEnum(), new SequenceForwardDecl(), new SequenceNamespace(), new SequenceStruct(), new SequenceTypedef(), new SequenceUnion()}); new SequenceEnum(),
new SequenceForwardDecl(),
new SequenceNamespace(),
new SequenceStruct(),
new SequenceTypedef(),
new SequenceUnion(),
});
return tests; return tests;
} }

View File

@ -24,8 +24,13 @@ HeaderBlockType HeaderBlockStruct::GetType()
const std::vector<IHeaderBlock::sequence_t*>& HeaderBlockStruct::GetTestsForBlock() const std::vector<IHeaderBlock::sequence_t*>& HeaderBlockStruct::GetTestsForBlock()
{ {
static std::vector<sequence_t*> tests( static std::vector<sequence_t*> tests({
{new SequenceCloseBlock(true), new SequenceEnum(), new SequenceStruct(), new SequenceUnion(), new SequenceVariable()}); new SequenceCloseBlock(true),
new SequenceEnum(),
new SequenceStruct(),
new SequenceUnion(),
new SequenceVariable(),
});
return tests; return tests;
} }

View File

@ -24,8 +24,13 @@ HeaderBlockType HeaderBlockUnion::GetType()
const std::vector<IHeaderBlock::sequence_t*>& HeaderBlockUnion::GetTestsForBlock() const std::vector<IHeaderBlock::sequence_t*>& HeaderBlockUnion::GetTestsForBlock()
{ {
static std::vector<sequence_t*> tests( static std::vector<sequence_t*> tests({
{new SequenceCloseBlock(true), new SequenceEnum(), new SequenceStruct(), new SequenceUnion(), new SequenceVariable()}); new SequenceCloseBlock(true),
new SequenceEnum(),
new SequenceStruct(),
new SequenceUnion(),
new SequenceVariable(),
});
return tests; return tests;
} }

View File

@ -9,32 +9,50 @@ std::unique_ptr<HeaderCommonMatchers::matcher_t> HeaderCommonMatchers::Align(con
{ {
const HeaderMatcherFactory create(labelSupplier); const HeaderMatcherFactory create(labelSupplier);
return create.Or({create return create.Or({
.And({create.Type(HeaderParserValueType::DECLSPEC), create
.And({
create.Type(HeaderParserValueType::DECLSPEC),
create.Char('('), create.Char('('),
create.Type(HeaderParserValueType::ALIGN), create.Type(HeaderParserValueType::ALIGN),
create.Char('('), create.Char('('),
create.Integer(), create.Integer(),
create.Char(')'), create.Char(')'),
create.Char(')')}) create.Char(')'),
})
.Transform( .Transform(
[](HeaderMatcherFactory::token_list_t& values) [](HeaderMatcherFactory::token_list_t& values)
{ {
return HeaderParserValue::Integer(values[4].get().GetPos(), values[4].get().IntegerValue()); return HeaderParserValue::Integer(values[4].get().GetPos(), values[4].get().IntegerValue());
}), }),
create.And({create.Type(HeaderParserValueType::ALIGNAS), create.Char('('), create.Integer(), create.Char(')')}) create
.And({
create.Type(HeaderParserValueType::ALIGNAS),
create.Char('('),
create.Integer(),
create.Char(')'),
})
.Transform( .Transform(
[](HeaderMatcherFactory::token_list_t& values) [](HeaderMatcherFactory::token_list_t& values)
{ {
return HeaderParserValue::Integer(values[2].get().GetPos(), values[2].get().IntegerValue()); return HeaderParserValue::Integer(values[2].get().GetPos(), values[2].get().IntegerValue());
})}); }),
});
} }
std::unique_ptr<HeaderCommonMatchers::matcher_t> HeaderCommonMatchers::ArrayDef(const supplier_t* labelSupplier) std::unique_ptr<HeaderCommonMatchers::matcher_t> HeaderCommonMatchers::ArrayDef(const supplier_t* labelSupplier)
{ {
const HeaderMatcherFactory create(labelSupplier); const HeaderMatcherFactory create(labelSupplier);
return create.And({create.Char('['), create.Or({create.Integer(), create.Identifier()}), create.Char(']')}) return create
.And({
create.Char('['),
create.Or({
create.Integer(),
create.Identifier(),
}),
create.Char(']'),
})
.Transform( .Transform(
[](HeaderMatcherFactory::token_list_t& values) [](HeaderMatcherFactory::token_list_t& values)
{ {
@ -53,13 +71,20 @@ std::unique_ptr<HeaderCommonMatchers::matcher_t> HeaderCommonMatchers::Typename(
const HeaderMatcherFactory create(labelSupplier); const HeaderMatcherFactory create(labelSupplier);
return create.Or( return create.Or({
{create create
.And({create.Optional(create.Type(HeaderParserValueType::UNSIGNED)), .And({
create.Or({create.Type(HeaderParserValueType::CHAR), create.Optional(create.Type(HeaderParserValueType::UNSIGNED)),
create.Or({
create.Type(HeaderParserValueType::CHAR),
create.Type(HeaderParserValueType::SHORT), create.Type(HeaderParserValueType::SHORT),
create.Type(HeaderParserValueType::INT), create.Type(HeaderParserValueType::INT),
create.And({create.Type(HeaderParserValueType::LONG), create.Optional(create.Type(HeaderParserValueType::LONG))})})}) create.And({
create.Type(HeaderParserValueType::LONG),
create.Optional(create.Type(HeaderParserValueType::LONG)),
}),
}),
})
.Transform( .Transform(
[](HeaderMatcherFactory::token_list_t& values) [](HeaderMatcherFactory::token_list_t& values)
{ {
@ -77,7 +102,15 @@ std::unique_ptr<HeaderCommonMatchers::matcher_t> HeaderCommonMatchers::Typename(
return HeaderParserValue::TypeName(values[0].get().GetPos(), new std::string(str.str())); return HeaderParserValue::TypeName(values[0].get().GetPos(), new std::string(str.str()));
}), }),
create.And({create.Identifier(), create.OptionalLoop(create.And({create.Char(':'), create.Char(':'), create.Identifier()}))}) create
.And({
create.Identifier(),
create.OptionalLoop(create.And({
create.Char(':'),
create.Char(':'),
create.Identifier(),
})),
})
.Transform( .Transform(
[](HeaderMatcherFactory::token_list_t& values) [](HeaderMatcherFactory::token_list_t& values)
{ {
@ -88,5 +121,6 @@ std::unique_ptr<HeaderCommonMatchers::matcher_t> HeaderCommonMatchers::Typename(
str << "::" << values[i].get().IdentifierValue(); str << "::" << values[i].get().IdentifierValue();
return HeaderParserValue::TypeName(values[0].get().GetPos(), new std::string(str.str())); return HeaderParserValue::TypeName(values[0].get().GetPos(), new std::string(str.str()));
})}); }),
});
} }

View File

@ -9,8 +9,13 @@ SequenceCloseBlock::SequenceCloseBlock(const bool semicolonRequired)
{ {
const HeaderMatcherFactory create(this); const HeaderMatcherFactory create(this);
AddMatchers({create.Char('}').Capture(CAPTURE_CLOSING_PARENTHESIS), AddMatchers({
create.Optional(create.And({create.Optional(create.Identifier().Capture(CAPTURE_NAME)), create.Char(';').Tag(TAG_SEMICOLON)}))}); create.Char('}').Capture(CAPTURE_CLOSING_PARENTHESIS),
create.Optional(create.And({
create.Optional(create.Identifier().Capture(CAPTURE_NAME)),
create.Char(';').Tag(TAG_SEMICOLON),
})),
});
} }
void SequenceCloseBlock::ProcessMatch(HeaderParserState* state, SequenceResult<HeaderParserValue>& result) const void SequenceCloseBlock::ProcessMatch(HeaderParserState* state, SequenceResult<HeaderParserValue>& result) const

View File

@ -9,11 +9,16 @@ SequenceEnum::SequenceEnum()
const HeaderMatcherFactory create(this); const HeaderMatcherFactory create(this);
AddLabeledMatchers(HeaderCommonMatchers::Typename(this), HeaderCommonMatchers::LABEL_TYPENAME); AddLabeledMatchers(HeaderCommonMatchers::Typename(this), HeaderCommonMatchers::LABEL_TYPENAME);
AddMatchers({create.Optional(create.Type(HeaderParserValueType::TYPEDEF).Tag(TAG_TYPEDEF)), AddMatchers({
create.Optional(create.Type(HeaderParserValueType::TYPEDEF).Tag(TAG_TYPEDEF)),
create.Type(HeaderParserValueType::ENUM), create.Type(HeaderParserValueType::ENUM),
create.Optional(create.Identifier().Capture(CAPTURE_NAME)), create.Optional(create.Identifier().Capture(CAPTURE_NAME)),
create.Optional(create.And({create.Char(':'), create.Label(HeaderCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_PARENT_TYPE)})), create.Optional(create.And({
create.Char('{')}); create.Char(':'),
create.Label(HeaderCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_PARENT_TYPE),
})),
create.Char('{'),
});
} }
void SequenceEnum::ProcessMatch(HeaderParserState* state, SequenceResult<HeaderParserValue>& result) const void SequenceEnum::ProcessMatch(HeaderParserState* state, SequenceResult<HeaderParserValue>& result) const

View File

@ -8,10 +8,20 @@ SequenceEnumMember::SequenceEnumMember()
{ {
const HeaderMatcherFactory create(this); const HeaderMatcherFactory create(this);
AddMatchers( AddMatchers({
{create.Identifier().Capture(CAPTURE_NAME), create.Identifier().Capture(CAPTURE_NAME),
create.Optional(create.And({create.Char('='), create.Or({create.Identifier().Capture(CAPTURE_VALUE), create.Integer().Capture(CAPTURE_VALUE)})})), create.Optional(create.And({
create.Or({create.Char(','), create.Char('}').NoConsume()})}); create.Char('='),
create.Or({
create.Identifier().Capture(CAPTURE_VALUE),
create.Integer().Capture(CAPTURE_VALUE),
}),
})),
create.Or({
create.Char(','),
create.Char('}').NoConsume(),
}),
});
} }
void SequenceEnumMember::ProcessMatch(HeaderParserState* state, SequenceResult<HeaderParserValue>& result) const void SequenceEnumMember::ProcessMatch(HeaderParserState* state, SequenceResult<HeaderParserValue>& result) const

View File

@ -7,13 +7,17 @@ SequenceForwardDecl::SequenceForwardDecl()
{ {
const HeaderMatcherFactory create(this); const HeaderMatcherFactory create(this);
AddMatchers({create AddMatchers({
.Or({create.Type(HeaderParserValueType::ENUM).Tag(TAG_ENUM), create
.Or({
create.Type(HeaderParserValueType::ENUM).Tag(TAG_ENUM),
create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT), create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT),
create.Type(HeaderParserValueType::UNION).Tag(TAG_UNION)}) create.Type(HeaderParserValueType::UNION).Tag(TAG_UNION),
})
.Capture(CAPTURE_TYPE), .Capture(CAPTURE_TYPE),
create.Identifier().Capture(CAPTURE_NAME), create.Identifier().Capture(CAPTURE_NAME),
create.Char(';')}); create.Char(';'),
});
} }
void SequenceForwardDecl::ProcessMatch(HeaderParserState* state, SequenceResult<HeaderParserValue>& result) const void SequenceForwardDecl::ProcessMatch(HeaderParserState* state, SequenceResult<HeaderParserValue>& result) const

View File

@ -7,7 +7,11 @@ SequenceNamespace::SequenceNamespace()
{ {
const HeaderMatcherFactory create(this); const HeaderMatcherFactory create(this);
AddMatchers({create.Type(HeaderParserValueType::NAMESPACE), create.Type(HeaderParserValueType::IDENTIFIER).Capture(CAPTURE_NAME), create.Char('{')}); AddMatchers({
create.Type(HeaderParserValueType::NAMESPACE),
create.Type(HeaderParserValueType::IDENTIFIER).Capture(CAPTURE_NAME),
create.Char('{'),
});
} }
void SequenceNamespace::ProcessMatch(HeaderParserState* state, SequenceResult<HeaderParserValue>& result) const void SequenceNamespace::ProcessMatch(HeaderParserState* state, SequenceResult<HeaderParserValue>& result) const

View File

@ -10,13 +10,18 @@ SequenceStruct::SequenceStruct()
AddLabeledMatchers(HeaderCommonMatchers::Align(this), HeaderCommonMatchers::LABEL_ALIGN); AddLabeledMatchers(HeaderCommonMatchers::Align(this), HeaderCommonMatchers::LABEL_ALIGN);
AddLabeledMatchers(HeaderCommonMatchers::Typename(this), HeaderCommonMatchers::LABEL_TYPENAME); AddLabeledMatchers(HeaderCommonMatchers::Typename(this), HeaderCommonMatchers::LABEL_TYPENAME);
AddMatchers({create.Optional(create.Type(HeaderParserValueType::TYPEDEF).Tag(TAG_TYPEDEF)), AddMatchers({
create.Optional(create.Type(HeaderParserValueType::TYPEDEF).Tag(TAG_TYPEDEF)),
create.Optional(create.Type(HeaderParserValueType::CONST)), create.Optional(create.Type(HeaderParserValueType::CONST)),
create.Type(HeaderParserValueType::STRUCT), create.Type(HeaderParserValueType::STRUCT),
create.Optional(create.Label(HeaderCommonMatchers::LABEL_ALIGN).Capture(CAPTURE_ALIGN)), create.Optional(create.Label(HeaderCommonMatchers::LABEL_ALIGN).Capture(CAPTURE_ALIGN)),
create.Optional(create.Identifier().Capture(CAPTURE_NAME)), create.Optional(create.Identifier().Capture(CAPTURE_NAME)),
create.Optional(create.And({create.Char(':'), create.Label(HeaderCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_PARENT_TYPE)})), create.Optional(create.And({
create.Char('{')}); create.Char(':'),
create.Label(HeaderCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_PARENT_TYPE),
})),
create.Char('{'),
});
} }
void SequenceStruct::ProcessMatch(HeaderParserState* state, SequenceResult<HeaderParserValue>& result) const void SequenceStruct::ProcessMatch(HeaderParserState* state, SequenceResult<HeaderParserValue>& result) const

View File

@ -13,28 +13,38 @@ SequenceTypedef::SequenceTypedef()
AddLabeledMatchers(HeaderCommonMatchers::ArrayDef(this), HeaderCommonMatchers::LABEL_ARRAY_DEF); AddLabeledMatchers(HeaderCommonMatchers::ArrayDef(this), HeaderCommonMatchers::LABEL_ARRAY_DEF);
AddLabeledMatchers(HeaderCommonMatchers::Typename(this), HeaderCommonMatchers::LABEL_TYPENAME); AddLabeledMatchers(HeaderCommonMatchers::Typename(this), HeaderCommonMatchers::LABEL_TYPENAME);
AddLabeledMatchers({create.Optional(create.Type(HeaderParserValueType::CONST).Tag(TAG_CONST)), AddLabeledMatchers(
{
create.Optional(create.Type(HeaderParserValueType::CONST).Tag(TAG_CONST)),
create.Label(HeaderCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE), create.Label(HeaderCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE),
create.OptionalLoop(create.Char('*').Tag(TAG_POINTER)), create.OptionalLoop(create.Char('*').Tag(TAG_POINTER)),
create.Identifier().Capture(CAPTURE_NAME), create.Identifier().Capture(CAPTURE_NAME),
create.OptionalLoop(create.Label(HeaderCommonMatchers::LABEL_ARRAY_DEF).Capture(CAPTURE_ARRAY)), create.OptionalLoop(create.Label(HeaderCommonMatchers::LABEL_ARRAY_DEF).Capture(CAPTURE_ARRAY)),
create.Char(';')}, create.Char(';'),
},
LABEL_ARRAY_OF_POINTERS); LABEL_ARRAY_OF_POINTERS);
AddLabeledMatchers({create.Optional(create.Type(HeaderParserValueType::CONST).Tag(TAG_CONST)), AddLabeledMatchers(
{
create.Optional(create.Type(HeaderParserValueType::CONST).Tag(TAG_CONST)),
create.Label(HeaderCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE), create.Label(HeaderCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE),
create.Char('('), create.Char('('),
create.Loop(create.Char('*').Tag(TAG_POINTER)), create.Loop(create.Char('*').Tag(TAG_POINTER)),
create.Identifier().Capture(CAPTURE_NAME), create.Identifier().Capture(CAPTURE_NAME),
create.Char(')'), create.Char(')'),
create.Loop(create.Label(HeaderCommonMatchers::LABEL_ARRAY_DEF).Capture(CAPTURE_ARRAY)), create.Loop(create.Label(HeaderCommonMatchers::LABEL_ARRAY_DEF).Capture(CAPTURE_ARRAY)),
create.Char(';')}, create.Char(';'),
},
LABEL_POINTER_TO_ARRAY); LABEL_POINTER_TO_ARRAY);
AddMatchers( AddMatchers({
{create.Type(HeaderParserValueType::TYPEDEF), create.Type(HeaderParserValueType::TYPEDEF),
create.Optional(create.Label(HeaderCommonMatchers::LABEL_ALIGN).Capture(CAPTURE_ALIGN)), create.Optional(create.Label(HeaderCommonMatchers::LABEL_ALIGN).Capture(CAPTURE_ALIGN)),
create.Or({create.Label(LABEL_ARRAY_OF_POINTERS).Tag(TAG_ARRAY_OF_POINTERS), create.Label(LABEL_POINTER_TO_ARRAY).Tag(TAG_POINTER_TO_ARRAY)})}); create.Or({
create.Label(LABEL_ARRAY_OF_POINTERS).Tag(TAG_ARRAY_OF_POINTERS),
create.Label(LABEL_POINTER_TO_ARRAY).Tag(TAG_POINTER_TO_ARRAY),
}),
});
} }
void SequenceTypedef::AddPointerDeclarationModifiers(SequenceResult<HeaderParserValue>& result, TypeDeclaration* typeDeclaration) const void SequenceTypedef::AddPointerDeclarationModifiers(SequenceResult<HeaderParserValue>& result, TypeDeclaration* typeDeclaration) const

View File

@ -10,13 +10,18 @@ SequenceUnion::SequenceUnion()
AddLabeledMatchers(HeaderCommonMatchers::Align(this), HeaderCommonMatchers::LABEL_ALIGN); AddLabeledMatchers(HeaderCommonMatchers::Align(this), HeaderCommonMatchers::LABEL_ALIGN);
AddLabeledMatchers(HeaderCommonMatchers::Typename(this), HeaderCommonMatchers::LABEL_TYPENAME); AddLabeledMatchers(HeaderCommonMatchers::Typename(this), HeaderCommonMatchers::LABEL_TYPENAME);
AddMatchers({create.Optional(create.Type(HeaderParserValueType::TYPEDEF).Tag(TAG_TYPEDEF)), AddMatchers({
create.Optional(create.Type(HeaderParserValueType::TYPEDEF).Tag(TAG_TYPEDEF)),
create.Optional(create.Type(HeaderParserValueType::CONST)), create.Optional(create.Type(HeaderParserValueType::CONST)),
create.Type(HeaderParserValueType::UNION), create.Type(HeaderParserValueType::UNION),
create.Optional(create.Label(HeaderCommonMatchers::LABEL_ALIGN).Capture(CAPTURE_ALIGN)), create.Optional(create.Label(HeaderCommonMatchers::LABEL_ALIGN).Capture(CAPTURE_ALIGN)),
create.Optional(create.Identifier().Capture(CAPTURE_NAME)), create.Optional(create.Identifier().Capture(CAPTURE_NAME)),
create.Optional(create.And({create.Char(':'), create.Label(HeaderCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_PARENT_TYPE)})), create.Optional(create.And({
create.Char('{')}); create.Char(':'),
create.Label(HeaderCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_PARENT_TYPE),
})),
create.Char('{'),
});
} }
void SequenceUnion::ProcessMatch(HeaderParserState* state, SequenceResult<HeaderParserValue>& result) const void SequenceUnion::ProcessMatch(HeaderParserState* state, SequenceResult<HeaderParserValue>& result) const

View File

@ -14,26 +14,38 @@ SequenceVariable::SequenceVariable()
AddLabeledMatchers(HeaderCommonMatchers::ArrayDef(this), HeaderCommonMatchers::LABEL_ARRAY_DEF); AddLabeledMatchers(HeaderCommonMatchers::ArrayDef(this), HeaderCommonMatchers::LABEL_ARRAY_DEF);
AddLabeledMatchers(HeaderCommonMatchers::Typename(this), HeaderCommonMatchers::LABEL_TYPENAME); AddLabeledMatchers(HeaderCommonMatchers::Typename(this), HeaderCommonMatchers::LABEL_TYPENAME);
AddLabeledMatchers({create.Optional(create.Type(HeaderParserValueType::CONST).Tag(TAG_CONST)), AddLabeledMatchers(
{
create.Optional(create.Type(HeaderParserValueType::CONST).Tag(TAG_CONST)),
create.Label(HeaderCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE), create.Label(HeaderCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE),
create.OptionalLoop(create.Char('*').Tag(TAG_POINTER)), create.OptionalLoop(create.Char('*').Tag(TAG_POINTER)),
create.Identifier().Capture(CAPTURE_NAME), create.Identifier().Capture(CAPTURE_NAME),
create.OptionalLoop(create.Label(HeaderCommonMatchers::LABEL_ARRAY_DEF).Capture(CAPTURE_ARRAY)), create.OptionalLoop(create.Label(HeaderCommonMatchers::LABEL_ARRAY_DEF).Capture(CAPTURE_ARRAY)),
create.Optional(create.And({create.Char(':'), create.Integer().Capture(CAPTURE_BIT_SIZE)})), create.Optional(create.And({
create.Char(';')}, create.Char(':'),
create.Integer().Capture(CAPTURE_BIT_SIZE),
})),
create.Char(';'),
},
LABEL_ARRAY_OF_POINTERS); LABEL_ARRAY_OF_POINTERS);
AddLabeledMatchers({create.Optional(create.Type(HeaderParserValueType::CONST).Tag(TAG_CONST)), AddLabeledMatchers(
{
create.Optional(create.Type(HeaderParserValueType::CONST).Tag(TAG_CONST)),
create.Label(HeaderCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE), create.Label(HeaderCommonMatchers::LABEL_TYPENAME).Capture(CAPTURE_TYPE),
create.Char('('), create.Char('('),
create.Loop(create.Char('*').Tag(TAG_POINTER)), create.Loop(create.Char('*').Tag(TAG_POINTER)),
create.Identifier().Capture(CAPTURE_NAME), create.Identifier().Capture(CAPTURE_NAME),
create.Char(')'), create.Char(')'),
create.Loop(create.Label(HeaderCommonMatchers::LABEL_ARRAY_DEF).Capture(CAPTURE_ARRAY)), create.Loop(create.Label(HeaderCommonMatchers::LABEL_ARRAY_DEF).Capture(CAPTURE_ARRAY)),
create.Char(';')}, create.Char(';'),
},
LABEL_POINTER_TO_ARRAY); LABEL_POINTER_TO_ARRAY);
AddMatchers(create.Or({create.Label(LABEL_ARRAY_OF_POINTERS).Tag(TAG_ARRAY_OF_POINTERS), create.Label(LABEL_POINTER_TO_ARRAY).Tag(TAG_POINTER_TO_ARRAY)})); AddMatchers(create.Or({
create.Label(LABEL_ARRAY_OF_POINTERS).Tag(TAG_ARRAY_OF_POINTERS),
create.Label(LABEL_POINTER_TO_ARRAY).Tag(TAG_POINTER_TO_ARRAY),
}));
} }
void SequenceVariable::AddPointerDeclarationModifiers(SequenceResult<HeaderParserValue>& result, TypeDeclaration* typeDeclaration) const void SequenceVariable::AddPointerDeclarationModifiers(SequenceResult<HeaderParserValue>& result, TypeDeclaration* typeDeclaration) const

View File

@ -13,7 +13,8 @@ const char* GameAssetPoolIW4::ASSET_TYPE_NAMES[]{
"image", "sound", "soundcurve", "loadedsound", "clipmap", "clipmap", "comworld", "gameworldsp", "gameworldmp", "mapents", "image", "sound", "soundcurve", "loadedsound", "clipmap", "clipmap", "comworld", "gameworldsp", "gameworldmp", "mapents",
"fxworld", "gfxworld", "lightdef", "uimap", "font", "menulist", "menu", "localize", "weapon", "snddriverglobals", "fxworld", "gfxworld", "lightdef", "uimap", "font", "menulist", "menu", "localize", "weapon", "snddriverglobals",
"fx", "impactfx", "aitype", "mptype", "character", "xmodelalias", "rawfile", "stringtable", "leaderboard", "structureddatadef", "fx", "impactfx", "aitype", "mptype", "character", "xmodelalias", "rawfile", "stringtable", "leaderboard", "structureddatadef",
"tracer", "vehicle", "addonmapents"}; "tracer", "vehicle", "addonmapents",
};
/* /*
Asset Pool Table Asset Pool Table

View File

@ -37,7 +37,8 @@ namespace IW4
0x89, 0x76, 0x11, 0xFD, 0x1B, 0x83, 0xE4, 0xE8, 0x8E, 0x7E, 0xB4, 0x03, 0xA3, 0x29, 0xDD, 0x4F, 0xAC, 0x99, 0xBE, 0x7C, 0xD3, 0xFD, 0x14, 0x89, 0x76, 0x11, 0xFD, 0x1B, 0x83, 0xE4, 0xE8, 0x8E, 0x7E, 0xB4, 0x03, 0xA3, 0x29, 0xDD, 0x4F, 0xAC, 0x99, 0xBE, 0x7C, 0xD3, 0xFD, 0x14,
0x28, 0x1C, 0x59, 0x69, 0xE0, 0x79, 0x5F, 0x4B, 0xDA, 0x6B, 0xAB, 0x48, 0x4E, 0x28, 0x39, 0x84, 0xC6, 0x2B, 0xC6, 0x20, 0x05, 0xDB, 0x05, 0x28, 0x1C, 0x59, 0x69, 0xE0, 0x79, 0x5F, 0x4B, 0xDA, 0x6B, 0xAB, 0x48, 0x4E, 0x28, 0x39, 0x84, 0xC6, 0x2B, 0xC6, 0x20, 0x05, 0xDB, 0x05,
0x21, 0xC3, 0xE1, 0xD4, 0x20, 0x28, 0xDD, 0x3A, 0x4D, 0x51, 0xE7, 0x49, 0x8A, 0x49, 0xEF, 0xF5, 0xDA, 0xDA, 0x7D, 0x5D, 0xA8, 0x0B, 0xA1, 0x21, 0xC3, 0xE1, 0xD4, 0x20, 0x28, 0xDD, 0x3A, 0x4D, 0x51, 0xE7, 0x49, 0x8A, 0x49, 0xEF, 0xF5, 0xDA, 0xDA, 0x7D, 0x5D, 0xA8, 0x0B, 0xA1,
0x77, 0xCD, 0x62, 0x7D, 0x9D, 0x40, 0x26, 0x44, 0x4B, 0x3B, 0x0A, 0x89, 0x02, 0x03, 0x01, 0x00, 0x01}; 0x77, 0xCD, 0x62, 0x7D, 0x9D, 0x40, 0x26, 0x44, 0x4B, 0x3B, 0x0A, 0x89, 0x02, 0x03, 0x01, 0x00, 0x01,
};
static constexpr size_t AUTHED_CHUNK_SIZE = 0x2000; static constexpr size_t AUTHED_CHUNK_SIZE = 0x2000;
static constexpr unsigned AUTHED_CHUNK_COUNT_PER_GROUP = 256; static constexpr unsigned AUTHED_CHUNK_COUNT_PER_GROUP = 256;

View File

@ -8,7 +8,8 @@
using namespace IW5; using namespace IW5;
const char* GameAssetPoolIW5::ASSET_TYPE_NAMES[]{"physpreset", const char* GameAssetPoolIW5::ASSET_TYPE_NAMES[]{
"physpreset",
"physcollmap", "physcollmap",
"xanim", "xanim",
"xmodelsurfs", "xmodelsurfs",
@ -53,7 +54,8 @@ const char* GameAssetPoolIW5::ASSET_TYPE_NAMES[]{"physpreset",
"structureddatadef", "structureddatadef",
"tracer", "tracer",
"vehicle", "vehicle",
"addonmapents"}; "addonmapents",
};
/* /*
Asset Pool Table Asset Pool Table

View File

@ -34,7 +34,8 @@ namespace IW5
0x89, 0x76, 0x11, 0xFD, 0x1B, 0x83, 0xE4, 0xE8, 0x8E, 0x7E, 0xB4, 0x03, 0xA3, 0x29, 0xDD, 0x4F, 0xAC, 0x99, 0xBE, 0x7C, 0xD3, 0xFD, 0x14, 0x89, 0x76, 0x11, 0xFD, 0x1B, 0x83, 0xE4, 0xE8, 0x8E, 0x7E, 0xB4, 0x03, 0xA3, 0x29, 0xDD, 0x4F, 0xAC, 0x99, 0xBE, 0x7C, 0xD3, 0xFD, 0x14,
0x28, 0x1C, 0x59, 0x69, 0xE0, 0x79, 0x5F, 0x4B, 0xDA, 0x6B, 0xAB, 0x48, 0x4E, 0x28, 0x39, 0x84, 0xC6, 0x2B, 0xC6, 0x20, 0x05, 0xDB, 0x05, 0x28, 0x1C, 0x59, 0x69, 0xE0, 0x79, 0x5F, 0x4B, 0xDA, 0x6B, 0xAB, 0x48, 0x4E, 0x28, 0x39, 0x84, 0xC6, 0x2B, 0xC6, 0x20, 0x05, 0xDB, 0x05,
0x21, 0xC3, 0xE1, 0xD4, 0x20, 0x28, 0xDD, 0x3A, 0x4D, 0x51, 0xE7, 0x49, 0x8A, 0x49, 0xEF, 0xF5, 0xDA, 0xDA, 0x7D, 0x5D, 0xA8, 0x0B, 0xA1, 0x21, 0xC3, 0xE1, 0xD4, 0x20, 0x28, 0xDD, 0x3A, 0x4D, 0x51, 0xE7, 0x49, 0x8A, 0x49, 0xEF, 0xF5, 0xDA, 0xDA, 0x7D, 0x5D, 0xA8, 0x0B, 0xA1,
0x77, 0xCD, 0x62, 0x7D, 0x9D, 0x40, 0x26, 0x44, 0x4B, 0x3B, 0x0A, 0x89, 0x02, 0x03, 0x01, 0x00, 0x01}; 0x77, 0xCD, 0x62, 0x7D, 0x9D, 0x40, 0x26, 0x44, 0x4B, 0x3B, 0x0A, 0x89, 0x02, 0x03, 0x01, 0x00, 0x01,
};
static constexpr size_t AUTHED_CHUNK_SIZE = 0x2000; static constexpr size_t AUTHED_CHUNK_SIZE = 0x2000;
static constexpr unsigned AUTHED_CHUNK_COUNT_PER_GROUP = 256; static constexpr unsigned AUTHED_CHUNK_COUNT_PER_GROUP = 256;

View File

@ -15,7 +15,8 @@ const char* GameAssetPoolT5::ASSET_TYPE_NAMES[]{
"menulist", "menu", "localize", "weapon", "weapondef", "weaponvariant", "snddriverglobals", "menulist", "menu", "localize", "weapon", "weapondef", "weaponvariant", "snddriverglobals",
"fx", "fximpacttable", "aitype", "mptype", "mpbody", "mphead", "character", "fx", "fximpacttable", "aitype", "mptype", "mpbody", "mphead", "character",
"xmodelalias", "rawfile", "stringtable", "packindex", "xglobals", "ddl", "glasses", "xmodelalias", "rawfile", "stringtable", "packindex", "xglobals", "ddl", "glasses",
"emblemset"}; "emblemset",
};
GameAssetPoolT5::GameAssetPoolT5(Zone* zone, const int priority) GameAssetPoolT5::GameAssetPoolT5(Zone* zone, const int priority)
: ZoneAssetPools(zone), : ZoneAssetPools(zone),

View File

@ -8,7 +8,8 @@
using namespace T6; using namespace T6;
const char* GameAssetPoolT6::ASSET_TYPE_NAMES[]{"xmodelpieces", const char* GameAssetPoolT6::ASSET_TYPE_NAMES[]{
"xmodelpieces",
"physpreset", "physpreset",
"physconstraints", "physconstraints",
"destructibledef", "destructibledef",
@ -67,7 +68,8 @@ const char* GameAssetPoolT6::ASSET_TYPE_NAMES[]{"xmodelpieces",
"slug", "slug",
"footsteptable", "footsteptable",
"footstepfxtable", "footstepfxtable",
"zbarrier"}; "zbarrier",
};
GameAssetPoolT6::GameAssetPoolT6(Zone* zone, const int priority) GameAssetPoolT6::GameAssetPoolT6(Zone* zone, const int priority)
: ZoneAssetPools(zone), : ZoneAssetPools(zone),

View File

@ -34,8 +34,10 @@ namespace T6
static constexpr size_t FILE_SUFFIX_ZERO_ALIGN = 0x40; static constexpr size_t FILE_SUFFIX_ZERO_ALIGN = 0x40;
static constexpr const char* MAGIC_AUTH_HEADER = "PHEEBs71"; static constexpr const char* MAGIC_AUTH_HEADER = "PHEEBs71";
inline static const uint8_t SALSA20_KEY_TREYARCH[]{0x64, 0x1D, 0x8A, 0x2F, 0xE3, 0x1D, 0x3A, 0xA6, 0x36, 0x22, 0xBB, 0xC9, 0xCE, 0x85, 0x87, 0x22, inline static const uint8_t SALSA20_KEY_TREYARCH[]{
0x9D, 0x42, 0xB0, 0xF8, 0xED, 0x9B, 0x92, 0x41, 0x30, 0xBF, 0x88, 0xB6, 0x5E, 0xDC, 0x50, 0xBE}; 0x64, 0x1D, 0x8A, 0x2F, 0xE3, 0x1D, 0x3A, 0xA6, 0x36, 0x22, 0xBB, 0xC9, 0xCE, 0x85, 0x87, 0x22,
0x9D, 0x42, 0xB0, 0xF8, 0xED, 0x9B, 0x92, 0x41, 0x30, 0xBF, 0x88, 0xB6, 0x5E, 0xDC, 0x50, 0xBE,
};
inline static const uint8_t RSA_PUBLIC_KEY_TREYARCH[]{ inline static const uint8_t RSA_PUBLIC_KEY_TREYARCH[]{
0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xc7, 0x9d, 0x33, 0xe0, 0x75, 0xaf, 0xef, 0x08, 0x08, 0x2b, 0x89, 0xd9, 0x3b, 0xf3, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xc7, 0x9d, 0x33, 0xe0, 0x75, 0xaf, 0xef, 0x08, 0x08, 0x2b, 0x89, 0xd9, 0x3b, 0xf3,
@ -49,6 +51,7 @@ namespace T6
0x12, 0x69, 0x1e, 0xdb, 0x2d, 0x3e, 0xbd, 0x48, 0x16, 0xe1, 0x72, 0x37, 0xb8, 0x5f, 0x61, 0xfa, 0x24, 0x16, 0x3a, 0xde, 0xbf, 0x6a, 0x71, 0x12, 0x69, 0x1e, 0xdb, 0x2d, 0x3e, 0xbd, 0x48, 0x16, 0xe1, 0x72, 0x37, 0xb8, 0x5f, 0x61, 0xfa, 0x24, 0x16, 0x3a, 0xde, 0xbf, 0x6a, 0x71,
0x62, 0x32, 0xf3, 0xaa, 0x7f, 0x28, 0x3a, 0x0c, 0x27, 0xeb, 0xa9, 0x0a, 0x4c, 0x79, 0x88, 0x84, 0xb3, 0xe2, 0x52, 0xb9, 0x68, 0x1e, 0x82, 0x62, 0x32, 0xf3, 0xaa, 0x7f, 0x28, 0x3a, 0x0c, 0x27, 0xeb, 0xa9, 0x0a, 0x4c, 0x79, 0x88, 0x84, 0xb3, 0xe2, 0x52, 0xb9, 0x68, 0x1e, 0x82,
0xcf, 0x67, 0x43, 0xf3, 0x68, 0xf7, 0x26, 0x19, 0xaa, 0xdd, 0x3f, 0x1e, 0xc6, 0x46, 0x11, 0x9f, 0x24, 0x23, 0xa7, 0xb0, 0x1b, 0x79, 0xa7, 0xcf, 0x67, 0x43, 0xf3, 0x68, 0xf7, 0x26, 0x19, 0xaa, 0xdd, 0x3f, 0x1e, 0xc6, 0x46, 0x11, 0x9f, 0x24, 0x23, 0xa7, 0xb0, 0x1b, 0x79, 0xa7,
0x0c, 0x5a, 0xfe, 0x96, 0xf7, 0xe7, 0x88, 0x09, 0xa6, 0x69, 0xe3, 0x8b, 0x02, 0x03, 0x01, 0x00, 0x01}; 0x0c, 0x5a, 0xfe, 0x96, 0xf7, 0xe7, 0x88, 0x09, 0xa6, 0x69, 0xe3, 0x8b, 0x02, 0x03, 0x01, 0x00, 0x01,
};
}; };
} // namespace T6 } // namespace T6

View File

@ -6,7 +6,11 @@ SequenceZoneDefinitionAssetList::SequenceZoneDefinitionAssetList()
{ {
const ZoneDefinitionMatcherFactory create(this); const ZoneDefinitionMatcherFactory create(this);
AddMatchers({create.Keyword("assetlist"), create.Char(','), create.Field().Capture(CAPTURE_ASSET_LIST_NAME)}); AddMatchers({
create.Keyword("assetlist"),
create.Char(','),
create.Field().Capture(CAPTURE_ASSET_LIST_NAME),
});
} }
void SequenceZoneDefinitionAssetList::ProcessMatch(ZoneDefinition* state, SequenceResult<ZoneDefinitionParserValue>& result) const void SequenceZoneDefinitionAssetList::ProcessMatch(ZoneDefinition* state, SequenceResult<ZoneDefinitionParserValue>& result) const

View File

@ -6,7 +6,11 @@ SequenceZoneDefinitionBuild::SequenceZoneDefinitionBuild()
{ {
const ZoneDefinitionMatcherFactory create(this); const ZoneDefinitionMatcherFactory create(this);
AddMatchers({create.Keyword("build"), create.Char(','), create.Field().Capture(CAPTURE_BUILD_TARGET_NAME)}); AddMatchers({
create.Keyword("build"),
create.Char(','),
create.Field().Capture(CAPTURE_BUILD_TARGET_NAME),
});
} }
void SequenceZoneDefinitionBuild::ProcessMatch(ZoneDefinition* state, SequenceResult<ZoneDefinitionParserValue>& result) const void SequenceZoneDefinitionBuild::ProcessMatch(ZoneDefinition* state, SequenceResult<ZoneDefinitionParserValue>& result) const

View File

@ -6,10 +6,17 @@ SequenceZoneDefinitionEntry::SequenceZoneDefinitionEntry()
{ {
const ZoneDefinitionMatcherFactory create(this); const ZoneDefinitionMatcherFactory create(this);
AddMatchers({create.Field().Capture(CAPTURE_TYPE_NAME), AddMatchers({
create.Field().Capture(CAPTURE_TYPE_NAME),
create.Char(','), create.Char(','),
create.Optional(create.Char(',').Tag(TAG_REFERENCE)), create.Optional(create.Char(',').Tag(TAG_REFERENCE)),
create.Or({create.String(), create.Field()}).Capture(CAPTURE_ASSET_NAME)}); create
.Or({
create.String(),
create.Field(),
})
.Capture(CAPTURE_ASSET_NAME),
});
} }
void SequenceZoneDefinitionEntry::ProcessMatch(ZoneDefinition* state, SequenceResult<ZoneDefinitionParserValue>& result) const void SequenceZoneDefinitionEntry::ProcessMatch(ZoneDefinition* state, SequenceResult<ZoneDefinitionParserValue>& result) const

View File

@ -6,7 +6,11 @@ SequenceZoneDefinitionIgnore::SequenceZoneDefinitionIgnore()
{ {
const ZoneDefinitionMatcherFactory create(this); const ZoneDefinitionMatcherFactory create(this);
AddMatchers({create.Keyword("ignore"), create.Char(','), create.Field().Capture(CAPTURE_IGNORE_NAME)}); AddMatchers({
create.Keyword("ignore"),
create.Char(','),
create.Field().Capture(CAPTURE_IGNORE_NAME),
});
} }
void SequenceZoneDefinitionIgnore::ProcessMatch(ZoneDefinition* state, SequenceResult<ZoneDefinitionParserValue>& result) const void SequenceZoneDefinitionIgnore::ProcessMatch(ZoneDefinition* state, SequenceResult<ZoneDefinitionParserValue>& result) const

View File

@ -6,7 +6,11 @@ SequenceZoneDefinitionInclude::SequenceZoneDefinitionInclude()
{ {
const ZoneDefinitionMatcherFactory create(this); const ZoneDefinitionMatcherFactory create(this);
AddMatchers({create.Keyword("include"), create.Char(','), create.Field().Capture(CAPTURE_INCLUDE_NAME)}); AddMatchers({
create.Keyword("include"),
create.Char(','),
create.Field().Capture(CAPTURE_INCLUDE_NAME),
});
} }
void SequenceZoneDefinitionInclude::ProcessMatch(ZoneDefinition* state, SequenceResult<ZoneDefinitionParserValue>& result) const void SequenceZoneDefinitionInclude::ProcessMatch(ZoneDefinition* state, SequenceResult<ZoneDefinitionParserValue>& result) const

View File

@ -6,7 +6,12 @@ SequenceZoneDefinitionMetaData::SequenceZoneDefinitionMetaData()
{ {
const ZoneDefinitionMatcherFactory create(this); const ZoneDefinitionMatcherFactory create(this);
AddMatchers({create.Char('>'), create.Field().Capture(CAPTURE_KEY), create.Char(','), create.Field().Capture(CAPTURE_VALUE)}); AddMatchers({
create.Char('>'),
create.Field().Capture(CAPTURE_KEY),
create.Char(','),
create.Field().Capture(CAPTURE_VALUE),
});
} }
void SequenceZoneDefinitionMetaData::ProcessMatch(ZoneDefinition* state, SequenceResult<ZoneDefinitionParserValue>& result) const void SequenceZoneDefinitionMetaData::ProcessMatch(ZoneDefinition* state, SequenceResult<ZoneDefinitionParserValue>& result) const

View File

@ -14,12 +14,14 @@ ZoneDefinitionParser::ZoneDefinitionParser(ZoneDefinitionLexer* lexer)
const std::vector<AbstractParser<ZoneDefinitionParserValue, ZoneDefinition>::sequence_t*>& ZoneDefinitionParser::GetTestsForState() const std::vector<AbstractParser<ZoneDefinitionParserValue, ZoneDefinition>::sequence_t*>& ZoneDefinitionParser::GetTestsForState()
{ {
static std::vector<sequence_t*> tests({new SequenceZoneDefinitionMetaData(), static std::vector<sequence_t*> tests({
new SequenceZoneDefinitionMetaData(),
new SequenceZoneDefinitionInclude(), new SequenceZoneDefinitionInclude(),
new SequenceZoneDefinitionIgnore(), new SequenceZoneDefinitionIgnore(),
new SequenceZoneDefinitionAssetList(), new SequenceZoneDefinitionAssetList(),
new SequenceZoneDefinitionBuild(), new SequenceZoneDefinitionBuild(),
new SequenceZoneDefinitionEntry()}); new SequenceZoneDefinitionEntry(),
});
return tests; return tests;
} }

View File

@ -14,7 +14,12 @@
namespace fs = std::filesystem; namespace fs = std::filesystem;
IZoneLoaderFactory* ZoneLoaderFactories[]{ IZoneLoaderFactory* ZoneLoaderFactories[]{
new IW3::ZoneLoaderFactory(), new IW4::ZoneLoaderFactory(), new IW5::ZoneLoaderFactory(), new T5::ZoneLoaderFactory(), new T6::ZoneLoaderFactory()}; new IW3::ZoneLoaderFactory(),
new IW4::ZoneLoaderFactory(),
new IW5::ZoneLoaderFactory(),
new T5::ZoneLoaderFactory(),
new T6::ZoneLoaderFactory(),
};
std::unique_ptr<Zone> ZoneLoading::LoadZone(const std::string& path) std::unique_ptr<Zone> ZoneLoading::LoadZone(const std::string& path)
{ {

View File

@ -8,7 +8,12 @@
#include "Writing/IZoneWriterFactory.h" #include "Writing/IZoneWriterFactory.h"
IZoneWriterFactory* ZoneWriterFactories[]{ IZoneWriterFactory* ZoneWriterFactories[]{
new IW3::ZoneWriterFactory(), new IW4::ZoneWriterFactory(), new IW5::ZoneWriterFactory(), new T5::ZoneWriterFactory(), new T6::ZoneWriterFactory()}; new IW3::ZoneWriterFactory(),
new IW4::ZoneWriterFactory(),
new IW5::ZoneWriterFactory(),
new T5::ZoneWriterFactory(),
new T6::ZoneWriterFactory(),
};
bool ZoneWriting::WriteZone(std::ostream& stream, Zone* zone) bool ZoneWriting::WriteZone(std::ostream& stream, Zone* zone)
{ {

View File

@ -71,10 +71,12 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Identifier(pos, new std::string("fadein")), helper.Tokens({
SimpleParserValue::Identifier(pos, new std::string("fadein")),
SimpleParserValue::String(pos, new std::string("some_element")), SimpleParserValue::String(pos, new std::string("some_element")),
SimpleParserValue::Character(pos, ';'), SimpleParserValue::Character(pos, ';'),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -89,10 +91,12 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Identifier(pos, new std::string("noScriptCommand")), helper.Tokens({
SimpleParserValue::Identifier(pos, new std::string("noScriptCommand")),
SimpleParserValue::String(pos, new std::string("some_element")), SimpleParserValue::String(pos, new std::string("some_element")),
SimpleParserValue::Character(pos, ';'), SimpleParserValue::Character(pos, ';'),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -104,11 +108,13 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, true); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, true);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Identifier(pos, new std::string("uiScript")), helper.Tokens({
SimpleParserValue::Identifier(pos, new std::string("uiScript")),
SimpleParserValue::Identifier(pos, new std::string("somethingUnknown")), SimpleParserValue::Identifier(pos, new std::string("somethingUnknown")),
SimpleParserValue::String(pos, new std::string("anArgumentForTheUnknownScript")), SimpleParserValue::String(pos, new std::string("anArgumentForTheUnknownScript")),
SimpleParserValue::Character(pos, ';'), SimpleParserValue::Character(pos, ';'),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
auto result = helper.PerformTest(); auto result = helper.PerformTest();
REQUIRE(result); REQUIRE(result);
@ -161,42 +167,60 @@ namespace test::parsing::menu::sequence::event_handler_set
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use fadeIn", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use fadeIn", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement( TestGenericScriptStatement(
{SimpleParserValue::Identifier(TokenPos(), new std::string("fadeIn")), SimpleParserValue::String(TokenPos(), new std::string("some_element"))}, {
SimpleParserValue::Identifier(TokenPos(), new std::string("fadeIn")),
SimpleParserValue::String(TokenPos(), new std::string("some_element")),
},
R"("fadeIn" "some_element" ; )"); R"("fadeIn" "some_element" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use fadeOut", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use fadeOut", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement( TestGenericScriptStatement(
{SimpleParserValue::Identifier(TokenPos(), new std::string("fadeOut")), SimpleParserValue::String(TokenPos(), new std::string("some_element"))}, {
SimpleParserValue::Identifier(TokenPos(), new std::string("fadeOut")),
SimpleParserValue::String(TokenPos(), new std::string("some_element")),
},
R"("fadeOut" "some_element" ; )"); R"("fadeOut" "some_element" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use show", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use show", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement( TestGenericScriptStatement(
{SimpleParserValue::Identifier(TokenPos(), new std::string("show")), SimpleParserValue::String(TokenPos(), new std::string("some_element"))}, {
SimpleParserValue::Identifier(TokenPos(), new std::string("show")),
SimpleParserValue::String(TokenPos(), new std::string("some_element")),
},
R"("show" "some_element" ; )"); R"("show" "some_element" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use hide", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use hide", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement( TestGenericScriptStatement(
{SimpleParserValue::Identifier(TokenPos(), new std::string("hide")), SimpleParserValue::String(TokenPos(), new std::string("some_element"))}, {
SimpleParserValue::Identifier(TokenPos(), new std::string("hide")),
SimpleParserValue::String(TokenPos(), new std::string("some_element")),
},
R"("hide" "some_element" ; )"); R"("hide" "some_element" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use showMenu", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use showMenu", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement( TestGenericScriptStatement(
{SimpleParserValue::Identifier(TokenPos(), new std::string("showMenu")), SimpleParserValue::String(TokenPos(), new std::string("some_element"))}, {
SimpleParserValue::Identifier(TokenPos(), new std::string("showMenu")),
SimpleParserValue::String(TokenPos(), new std::string("some_element")),
},
R"("showMenu" "some_element" ; )"); R"("showMenu" "some_element" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use hideMenu", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use hideMenu", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement( TestGenericScriptStatement(
{SimpleParserValue::Identifier(TokenPos(), new std::string("hideMenu")), SimpleParserValue::String(TokenPos(), new std::string("some_element"))}, {
SimpleParserValue::Identifier(TokenPos(), new std::string("hideMenu")),
SimpleParserValue::String(TokenPos(), new std::string("some_element")),
},
R"("hideMenu" "some_element" ; )"); R"("hideMenu" "some_element" ; )");
} }
@ -254,10 +278,12 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Identifier(pos, new std::string("setColor")), helper.Tokens({
SimpleParserValue::Identifier(pos, new std::string("setColor")),
SimpleParserValue::Identifier(TokenPos(), new std::string("backColor")), SimpleParserValue::Identifier(TokenPos(), new std::string("backColor")),
SimpleParserValue::Character(pos, ';'), SimpleParserValue::Character(pos, ';'),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -268,49 +294,70 @@ namespace test::parsing::menu::sequence::event_handler_set
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use open", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use open", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement( TestGenericScriptStatement(
{SimpleParserValue::Identifier(TokenPos(), new std::string("open")), SimpleParserValue::String(TokenPos(), new std::string("some_element"))}, {
SimpleParserValue::Identifier(TokenPos(), new std::string("open")),
SimpleParserValue::String(TokenPos(), new std::string("some_element")),
},
R"("open" "some_element" ; )"); R"("open" "some_element" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use close", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use close", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement( TestGenericScriptStatement(
{SimpleParserValue::Identifier(TokenPos(), new std::string("close")), SimpleParserValue::String(TokenPos(), new std::string("some_element"))}, {
SimpleParserValue::Identifier(TokenPos(), new std::string("close")),
SimpleParserValue::String(TokenPos(), new std::string("some_element")),
},
R"("close" "some_element" ; )"); R"("close" "some_element" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use escape", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use escape", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement( TestGenericScriptStatement(
{SimpleParserValue::Identifier(TokenPos(), new std::string("escape")), SimpleParserValue::String(TokenPos(), new std::string("some_element"))}, {
SimpleParserValue::Identifier(TokenPos(), new std::string("escape")),
SimpleParserValue::String(TokenPos(), new std::string("some_element")),
},
R"("escape" "some_element" ; )"); R"("escape" "some_element" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use closeForAllPlayers", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use closeForAllPlayers", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("closeForAllPlayers")), TestGenericScriptStatement(
SimpleParserValue::String(TokenPos(), new std::string("some_element"))}, {
SimpleParserValue::Identifier(TokenPos(), new std::string("closeForAllPlayers")),
SimpleParserValue::String(TokenPos(), new std::string("some_element")),
},
R"("closeForAllPlayers" "some_element" ; )"); R"("closeForAllPlayers" "some_element" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use ingameOpen", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use ingameOpen", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement( TestGenericScriptStatement(
{SimpleParserValue::Identifier(TokenPos(), new std::string("ingameOpen")), SimpleParserValue::String(TokenPos(), new std::string("some_element"))}, {
SimpleParserValue::Identifier(TokenPos(), new std::string("ingameOpen")),
SimpleParserValue::String(TokenPos(), new std::string("some_element")),
},
R"("ingameOpen" "some_element" ; )"); R"("ingameOpen" "some_element" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use ingameClose", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use ingameClose", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement( TestGenericScriptStatement(
{SimpleParserValue::Identifier(TokenPos(), new std::string("ingameClose")), SimpleParserValue::String(TokenPos(), new std::string("some_element"))}, {
SimpleParserValue::Identifier(TokenPos(), new std::string("ingameClose")),
SimpleParserValue::String(TokenPos(), new std::string("some_element")),
},
R"("ingameClose" "some_element" ; )"); R"("ingameClose" "some_element" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use setBackground", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use setBackground", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("setBackground")), TestGenericScriptStatement(
SimpleParserValue::String(TokenPos(), new std::string("some_element"))}, {
SimpleParserValue::Identifier(TokenPos(), new std::string("setBackground")),
SimpleParserValue::String(TokenPos(), new std::string("some_element")),
},
R"("setBackground" "some_element" ; )"); R"("setBackground" "some_element" ; )");
} }
@ -386,14 +433,20 @@ namespace test::parsing::menu::sequence::event_handler_set
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use setFocus", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use setFocus", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement( TestGenericScriptStatement(
{SimpleParserValue::Identifier(TokenPos(), new std::string("setFocus")), SimpleParserValue::String(TokenPos(), new std::string("some_element"))}, {
SimpleParserValue::Identifier(TokenPos(), new std::string("setFocus")),
SimpleParserValue::String(TokenPos(), new std::string("some_element")),
},
R"("setFocus" "some_element" ; )"); R"("setFocus" "some_element" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use setFocusByDvar", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use setFocusByDvar", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement( TestGenericScriptStatement(
{SimpleParserValue::Identifier(TokenPos(), new std::string("setFocusByDvar")), SimpleParserValue::String(TokenPos(), new std::string("some_dvar"))}, {
SimpleParserValue::Identifier(TokenPos(), new std::string("setFocusByDvar")),
SimpleParserValue::String(TokenPos(), new std::string("some_dvar")),
},
R"("setFocusByDvar" "some_dvar" ; )"); R"("setFocusByDvar" "some_dvar" ; )");
} }
@ -411,202 +464,305 @@ namespace test::parsing::menu::sequence::event_handler_set
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use exec", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use exec", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement( TestGenericScriptStatement(
{SimpleParserValue::Identifier(TokenPos(), new std::string("exec")), SimpleParserValue::String(TokenPos(), new std::string("some_command"))}, {
SimpleParserValue::Identifier(TokenPos(), new std::string("exec")),
SimpleParserValue::String(TokenPos(), new std::string("some_command")),
},
R"("exec" "some_command" ; )"); R"("exec" "some_command" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use execNow", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use execNow", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement( TestGenericScriptStatement(
{SimpleParserValue::Identifier(TokenPos(), new std::string("execNow")), SimpleParserValue::String(TokenPos(), new std::string("some_command"))}, {
SimpleParserValue::Identifier(TokenPos(), new std::string("execNow")),
SimpleParserValue::String(TokenPos(), new std::string("some_command")),
},
R"("execNow" "some_command" ; )"); R"("execNow" "some_command" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use execOnDvarStringValue", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use execOnDvarStringValue", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("execOnDvarStringValue")), TestGenericScriptStatement(
{
SimpleParserValue::Identifier(TokenPos(), new std::string("execOnDvarStringValue")),
SimpleParserValue::String(TokenPos(), new std::string("some_dvar")), SimpleParserValue::String(TokenPos(), new std::string("some_dvar")),
SimpleParserValue::String(TokenPos(), new std::string("some_value")), SimpleParserValue::String(TokenPos(), new std::string("some_value")),
SimpleParserValue::String(TokenPos(), new std::string("some_command"))}, SimpleParserValue::String(TokenPos(), new std::string("some_command")),
},
R"("execOnDvarStringValue" "some_dvar" "some_value" "some_command" ; )"); R"("execOnDvarStringValue" "some_dvar" "some_value" "some_command" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use execOnDvarIntValue", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use execOnDvarIntValue", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("execOnDvarIntValue")), TestGenericScriptStatement(
{
SimpleParserValue::Identifier(TokenPos(), new std::string("execOnDvarIntValue")),
SimpleParserValue::String(TokenPos(), new std::string("some_dvar")), SimpleParserValue::String(TokenPos(), new std::string("some_dvar")),
SimpleParserValue::Integer(TokenPos(), 1), SimpleParserValue::Integer(TokenPos(), 1),
SimpleParserValue::String(TokenPos(), new std::string("some_command"))}, SimpleParserValue::String(TokenPos(), new std::string("some_command")),
},
R"("execOnDvarIntValue" "some_dvar" "1" "some_command" ; )"); R"("execOnDvarIntValue" "some_dvar" "1" "some_command" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use execOnDvarFloatValue", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use execOnDvarFloatValue", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("execOnDvarFloatValue")), TestGenericScriptStatement(
{
SimpleParserValue::Identifier(TokenPos(), new std::string("execOnDvarFloatValue")),
SimpleParserValue::String(TokenPos(), new std::string("some_dvar")), SimpleParserValue::String(TokenPos(), new std::string("some_dvar")),
SimpleParserValue::Integer(TokenPos(), 1), SimpleParserValue::Integer(TokenPos(), 1),
SimpleParserValue::String(TokenPos(), new std::string("some_command"))}, SimpleParserValue::String(TokenPos(), new std::string("some_command")),
},
R"("execOnDvarFloatValue" "some_dvar" "1" "some_command" ; )"); R"("execOnDvarFloatValue" "some_dvar" "1" "some_command" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use execNowOnDvarStringValue", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use execNowOnDvarStringValue", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("execNowOnDvarStringValue")), TestGenericScriptStatement(
{
SimpleParserValue::Identifier(TokenPos(), new std::string("execNowOnDvarStringValue")),
SimpleParserValue::String(TokenPos(), new std::string("some_dvar")), SimpleParserValue::String(TokenPos(), new std::string("some_dvar")),
SimpleParserValue::String(TokenPos(), new std::string("some_value")), SimpleParserValue::String(TokenPos(), new std::string("some_value")),
SimpleParserValue::String(TokenPos(), new std::string("some_command"))}, SimpleParserValue::String(TokenPos(), new std::string("some_command")),
},
R"("execNowOnDvarStringValue" "some_dvar" "some_value" "some_command" ; )"); R"("execNowOnDvarStringValue" "some_dvar" "some_value" "some_command" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use execNowOnDvarIntValue", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use execNowOnDvarIntValue", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("execNowOnDvarIntValue")), TestGenericScriptStatement(
{
SimpleParserValue::Identifier(TokenPos(), new std::string("execNowOnDvarIntValue")),
SimpleParserValue::String(TokenPos(), new std::string("some_dvar")), SimpleParserValue::String(TokenPos(), new std::string("some_dvar")),
SimpleParserValue::Integer(TokenPos(), 1), SimpleParserValue::Integer(TokenPos(), 1),
SimpleParserValue::String(TokenPos(), new std::string("some_command"))}, SimpleParserValue::String(TokenPos(), new std::string("some_command")),
},
R"("execNowOnDvarIntValue" "some_dvar" "1" "some_command" ; )"); R"("execNowOnDvarIntValue" "some_dvar" "1" "some_command" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use execNowOnDvarFloatValue", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use execNowOnDvarFloatValue", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("execNowOnDvarFloatValue")), TestGenericScriptStatement(
{
SimpleParserValue::Identifier(TokenPos(), new std::string("execNowOnDvarFloatValue")),
SimpleParserValue::String(TokenPos(), new std::string("some_dvar")), SimpleParserValue::String(TokenPos(), new std::string("some_dvar")),
SimpleParserValue::Integer(TokenPos(), 1), SimpleParserValue::Integer(TokenPos(), 1),
SimpleParserValue::String(TokenPos(), new std::string("some_command"))}, SimpleParserValue::String(TokenPos(), new std::string("some_command")),
},
R"("execNowOnDvarFloatValue" "some_dvar" "1" "some_command" ; )"); R"("execNowOnDvarFloatValue" "some_dvar" "1" "some_command" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use play", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use play", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement( TestGenericScriptStatement(
{SimpleParserValue::Identifier(TokenPos(), new std::string("play")), SimpleParserValue::String(TokenPos(), new std::string("some_sound"))}, {
SimpleParserValue::Identifier(TokenPos(), new std::string("play")),
SimpleParserValue::String(TokenPos(), new std::string("some_sound")),
},
R"("play" "some_sound" ; )"); R"("play" "some_sound" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use scriptMenuResponse", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use scriptMenuResponse", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("scriptMenuResponse")), TestGenericScriptStatement(
SimpleParserValue::String(TokenPos(), new std::string("some_response"))}, {
SimpleParserValue::Identifier(TokenPos(), new std::string("scriptMenuResponse")),
SimpleParserValue::String(TokenPos(), new std::string("some_response")),
},
R"("scriptMenuResponse" "some_response" ; )"); R"("scriptMenuResponse" "some_response" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use scriptMenuRespondOnDvarStringValue", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use scriptMenuRespondOnDvarStringValue", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("scriptMenuRespondOnDvarStringValue")), TestGenericScriptStatement(
{
SimpleParserValue::Identifier(TokenPos(), new std::string("scriptMenuRespondOnDvarStringValue")),
SimpleParserValue::String(TokenPos(), new std::string("some_dvar")), SimpleParserValue::String(TokenPos(), new std::string("some_dvar")),
SimpleParserValue::String(TokenPos(), new std::string("some_value")), SimpleParserValue::String(TokenPos(), new std::string("some_value")),
SimpleParserValue::String(TokenPos(), new std::string("some_response"))}, SimpleParserValue::String(TokenPos(), new std::string("some_response")),
},
R"("scriptMenuRespondOnDvarStringValue" "some_dvar" "some_value" "some_response" ; )"); R"("scriptMenuRespondOnDvarStringValue" "some_dvar" "some_value" "some_response" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use scriptMenuRespondOnDvarIntValue", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use scriptMenuRespondOnDvarIntValue", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("scriptMenuRespondOnDvarIntValue")), TestGenericScriptStatement(
{
SimpleParserValue::Identifier(TokenPos(), new std::string("scriptMenuRespondOnDvarIntValue")),
SimpleParserValue::String(TokenPos(), new std::string("some_dvar")), SimpleParserValue::String(TokenPos(), new std::string("some_dvar")),
SimpleParserValue::Integer(TokenPos(), 1), SimpleParserValue::Integer(TokenPos(), 1),
SimpleParserValue::String(TokenPos(), new std::string("some_response"))}, SimpleParserValue::String(TokenPos(), new std::string("some_response")),
},
R"("scriptMenuRespondOnDvarIntValue" "some_dvar" "1" "some_response" ; )"); R"("scriptMenuRespondOnDvarIntValue" "some_dvar" "1" "some_response" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use scriptMenuRespondOnDvarFloatValue", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use scriptMenuRespondOnDvarFloatValue", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("scriptMenuRespondOnDvarFloatValue")), TestGenericScriptStatement(
{
SimpleParserValue::Identifier(TokenPos(), new std::string("scriptMenuRespondOnDvarFloatValue")),
SimpleParserValue::String(TokenPos(), new std::string("some_dvar")), SimpleParserValue::String(TokenPos(), new std::string("some_dvar")),
SimpleParserValue::Integer(TokenPos(), 1), SimpleParserValue::Integer(TokenPos(), 1),
SimpleParserValue::String(TokenPos(), new std::string("some_response"))}, SimpleParserValue::String(TokenPos(), new std::string("some_response")),
},
R"("scriptMenuRespondOnDvarFloatValue" "some_dvar" "1" "some_response" ; )"); R"("scriptMenuRespondOnDvarFloatValue" "some_dvar" "1" "some_response" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use updateMail", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use updateMail", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("updateMail"))}, R"("updateMail" ; )"); TestGenericScriptStatement(
{
SimpleParserValue::Identifier(TokenPos(), new std::string("updateMail")),
},
R"("updateMail" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use openMail", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use openMail", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("openMail"))}, R"("openMail" ; )"); TestGenericScriptStatement(
{
SimpleParserValue::Identifier(TokenPos(), new std::string("openMail")),
},
R"("openMail" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use deleteMail", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use deleteMail", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("deleteMail"))}, R"("deleteMail" ; )"); TestGenericScriptStatement(
{
SimpleParserValue::Identifier(TokenPos(), new std::string("deleteMail")),
},
R"("deleteMail" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use doMailLottery", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use doMailLottery", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("doMailLottery"))}, R"("doMailLottery" ; )"); TestGenericScriptStatement(
{
SimpleParserValue::Identifier(TokenPos(), new std::string("doMailLottery")),
},
R"("doMailLottery" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use resetStatsConfirm", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use resetStatsConfirm", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("resetStatsConfirm"))}, R"("resetStatsConfirm" ; )"); TestGenericScriptStatement(
{
SimpleParserValue::Identifier(TokenPos(), new std::string("resetStatsConfirm")),
},
R"("resetStatsConfirm" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use resetStatsCancel", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use resetStatsCancel", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("resetStatsCancel"))}, R"("resetStatsCancel" ; )"); TestGenericScriptStatement(
{
SimpleParserValue::Identifier(TokenPos(), new std::string("resetStatsCancel")),
},
R"("resetStatsCancel" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use setGameMode", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use setGameMode", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("setGameMode")), TestGenericScriptStatement(
SimpleParserValue::String(TokenPos(), new std::string("some_game_mode"))}, {
SimpleParserValue::Identifier(TokenPos(), new std::string("setGameMode")),
SimpleParserValue::String(TokenPos(), new std::string("some_game_mode")),
},
R"("setGameMode" "some_game_mode" ; )"); R"("setGameMode" "some_game_mode" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use feederTop", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use feederTop", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("feederTop"))}, R"("feederTop" ; )"); TestGenericScriptStatement(
{
SimpleParserValue::Identifier(TokenPos(), new std::string("feederTop")),
},
R"("feederTop" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use feederBottom", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use feederBottom", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("feederBottom"))}, R"("feederBottom" ; )"); TestGenericScriptStatement(
{
SimpleParserValue::Identifier(TokenPos(), new std::string("feederBottom")),
},
R"("feederBottom" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use showGamerCard", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use showGamerCard", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("showGamerCard"))}, R"("showGamerCard" ; )"); TestGenericScriptStatement(
{
SimpleParserValue::Identifier(TokenPos(), new std::string("showGamerCard")),
},
R"("showGamerCard" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use openForGameType", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use openForGameType", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("openForGameType")), TestGenericScriptStatement(
SimpleParserValue::String(TokenPos(), new std::string("some_game_type"))}, {
SimpleParserValue::Identifier(TokenPos(), new std::string("openForGameType")),
SimpleParserValue::String(TokenPos(), new std::string("some_game_type")),
},
R"("openForGameType" "some_game_type" ; )"); R"("openForGameType" "some_game_type" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use closeForGameType", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use closeForGameType", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("closeForGameType")), TestGenericScriptStatement(
SimpleParserValue::String(TokenPos(), new std::string("some_game_type"))}, {
SimpleParserValue::Identifier(TokenPos(), new std::string("closeForGameType")),
SimpleParserValue::String(TokenPos(), new std::string("some_game_type")),
},
R"("closeForGameType" "some_game_type" ; )"); R"("closeForGameType" "some_game_type" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use kickPlayer", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use kickPlayer", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("kickPlayer"))}, R"("kickPlayer" ; )"); TestGenericScriptStatement(
{
SimpleParserValue::Identifier(TokenPos(), new std::string("kickPlayer")),
},
R"("kickPlayer" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use getKickPlayerQuestion", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use getKickPlayerQuestion", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("getKickPlayerQuestion"))}, R"("getKickPlayerQuestion" ; )"); TestGenericScriptStatement(
{
SimpleParserValue::Identifier(TokenPos(), new std::string("getKickPlayerQuestion")),
},
R"("getKickPlayerQuestion" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use partyUpdateMissingMapPackDvar", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use partyUpdateMissingMapPackDvar", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("partyUpdateMissingMapPackDvar"))}, TestGenericScriptStatement(
{
SimpleParserValue::Identifier(TokenPos(), new std::string("partyUpdateMissingMapPackDvar")),
},
R"("partyUpdateMissingMapPackDvar" ; )"); R"("partyUpdateMissingMapPackDvar" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use togglePlayerMute", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use togglePlayerMute", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("togglePlayerMute"))}, R"("togglePlayerMute" ; )"); TestGenericScriptStatement(
{
SimpleParserValue::Identifier(TokenPos(), new std::string("togglePlayerMute")),
},
R"("togglePlayerMute" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use resolveError", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use resolveError", "[parsing][sequence][menu]")
{ {
TestGenericScriptStatement({SimpleParserValue::Identifier(TokenPos(), new std::string("resolveError"))}, R"("resolveError" ; )"); TestGenericScriptStatement(
{
SimpleParserValue::Identifier(TokenPos(), new std::string("resolveError")),
},
R"("resolveError" ; )");
} }
TEST_CASE("EventHandlerSetScopeSequences: Ensure can use lerp scale", "[parsing][sequence][menu]") TEST_CASE("EventHandlerSetScopeSequences: Ensure can use lerp scale", "[parsing][sequence][menu]")
@ -745,7 +901,8 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Identifier(TokenPos(), new std::string("setLocalVarBool")), helper.Tokens({
SimpleParserValue::Identifier(TokenPos(), new std::string("setLocalVarBool")),
SimpleParserValue::Identifier(TokenPos(), new std::string("sample_var")), SimpleParserValue::Identifier(TokenPos(), new std::string("sample_var")),
SimpleParserValue::Identifier(TokenPos(), new std::string("milliseconds")), SimpleParserValue::Identifier(TokenPos(), new std::string("milliseconds")),
SimpleParserValue::Character(TokenPos(), '('), SimpleParserValue::Character(TokenPos(), '('),
@ -753,7 +910,8 @@ namespace test::parsing::menu::sequence::event_handler_set
SimpleParserValue::Character(TokenPos(), '%'), SimpleParserValue::Character(TokenPos(), '%'),
SimpleParserValue::Integer(TokenPos(), 2), SimpleParserValue::Integer(TokenPos(), 2),
SimpleParserValue::Character(TokenPos(), ';'), SimpleParserValue::Character(TokenPos(), ';'),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
REQUIRE(result); REQUIRE(result);
@ -778,7 +936,8 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Identifier(TokenPos(), new std::string("setLocalVarInt")), helper.Tokens({
SimpleParserValue::Identifier(TokenPos(), new std::string("setLocalVarInt")),
SimpleParserValue::Identifier(TokenPos(), new std::string("sample_var")), SimpleParserValue::Identifier(TokenPos(), new std::string("sample_var")),
SimpleParserValue::Identifier(TokenPos(), new std::string("milliseconds")), SimpleParserValue::Identifier(TokenPos(), new std::string("milliseconds")),
SimpleParserValue::Character(TokenPos(), '('), SimpleParserValue::Character(TokenPos(), '('),
@ -786,7 +945,8 @@ namespace test::parsing::menu::sequence::event_handler_set
SimpleParserValue::Character(TokenPos(), '*'), SimpleParserValue::Character(TokenPos(), '*'),
SimpleParserValue::Integer(TokenPos(), 2), SimpleParserValue::Integer(TokenPos(), 2),
SimpleParserValue::Character(TokenPos(), ';'), SimpleParserValue::Character(TokenPos(), ';'),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
REQUIRE(result); REQUIRE(result);
@ -811,7 +971,8 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Identifier(TokenPos(), new std::string("setLocalVarFloat")), helper.Tokens({
SimpleParserValue::Identifier(TokenPos(), new std::string("setLocalVarFloat")),
SimpleParserValue::Identifier(TokenPos(), new std::string("sample_var")), SimpleParserValue::Identifier(TokenPos(), new std::string("sample_var")),
SimpleParserValue::Identifier(TokenPos(), new std::string("milliseconds")), SimpleParserValue::Identifier(TokenPos(), new std::string("milliseconds")),
SimpleParserValue::Character(TokenPos(), '('), SimpleParserValue::Character(TokenPos(), '('),
@ -819,7 +980,8 @@ namespace test::parsing::menu::sequence::event_handler_set
SimpleParserValue::Character(TokenPos(), '/'), SimpleParserValue::Character(TokenPos(), '/'),
SimpleParserValue::Integer(TokenPos(), 2), SimpleParserValue::Integer(TokenPos(), 2),
SimpleParserValue::Character(TokenPos(), ';'), SimpleParserValue::Character(TokenPos(), ';'),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
REQUIRE(result); REQUIRE(result);
@ -844,7 +1006,8 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Identifier(TokenPos(), new std::string("setLocalVarString")), helper.Tokens({
SimpleParserValue::Identifier(TokenPos(), new std::string("setLocalVarString")),
SimpleParserValue::Identifier(TokenPos(), new std::string("sample_var")), SimpleParserValue::Identifier(TokenPos(), new std::string("sample_var")),
SimpleParserValue::Identifier(TokenPos(), new std::string("milliseconds")), SimpleParserValue::Identifier(TokenPos(), new std::string("milliseconds")),
SimpleParserValue::Character(TokenPos(), '('), SimpleParserValue::Character(TokenPos(), '('),
@ -852,7 +1015,8 @@ namespace test::parsing::menu::sequence::event_handler_set
SimpleParserValue::Character(TokenPos(), '+'), SimpleParserValue::Character(TokenPos(), '+'),
SimpleParserValue::String(TokenPos(), new std::string(" Hello")), SimpleParserValue::String(TokenPos(), new std::string(" Hello")),
SimpleParserValue::Character(TokenPos(), ';'), SimpleParserValue::Character(TokenPos(), ';'),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
REQUIRE(result); REQUIRE(result);
@ -881,7 +1045,10 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Character(pos, '}'), SimpleParserValue::EndOfFile(pos)}); helper.Tokens({
SimpleParserValue::Character(pos, '}'),
SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -899,7 +1066,10 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Character(pos, '}'), SimpleParserValue::EndOfFile(pos)}); helper.Tokens({
SimpleParserValue::Character(pos, '}'),
SimpleParserValue::EndOfFile(pos),
});
helper.m_state->m_current_script << R"("fadeIn" "some_element" ; )"; helper.m_state->m_current_script << R"("fadeIn" "some_element" ; )";
@ -925,14 +1095,16 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Identifier(pos, new std::string("if")), helper.Tokens({
SimpleParserValue::Identifier(pos, new std::string("if")),
SimpleParserValue::Character(pos, '('), SimpleParserValue::Character(pos, '('),
SimpleParserValue::Integer(pos, 1336), SimpleParserValue::Integer(pos, 1336),
SimpleParserValue::Character(pos, '+'), SimpleParserValue::Character(pos, '+'),
SimpleParserValue::Integer(pos, 1), SimpleParserValue::Integer(pos, 1),
SimpleParserValue::Character(pos, ')'), SimpleParserValue::Character(pos, ')'),
SimpleParserValue::Character(pos, '{'), SimpleParserValue::Character(pos, '{'),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -969,12 +1141,14 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Identifier(pos, new std::string("if")), helper.Tokens({
SimpleParserValue::Identifier(pos, new std::string("if")),
SimpleParserValue::Character(pos, '('), SimpleParserValue::Character(pos, '('),
SimpleParserValue::Integer(pos, 420), SimpleParserValue::Integer(pos, 420),
SimpleParserValue::Character(pos, ')'), SimpleParserValue::Character(pos, ')'),
SimpleParserValue::Character(pos, '{'), SimpleParserValue::Character(pos, '{'),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
helper.m_state->m_current_script << R"("fadeIn" "some_element" ; )"; helper.m_state->m_current_script << R"("fadeIn" "some_element" ; )";
@ -1006,7 +1180,8 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Character(pos, '}'), helper.Tokens({
SimpleParserValue::Character(pos, '}'),
SimpleParserValue::Identifier(pos, new std::string("elseif")), SimpleParserValue::Identifier(pos, new std::string("elseif")),
SimpleParserValue::Character(pos, '('), SimpleParserValue::Character(pos, '('),
SimpleParserValue::Integer(pos, 1336), SimpleParserValue::Integer(pos, 1336),
@ -1014,7 +1189,8 @@ namespace test::parsing::menu::sequence::event_handler_set
SimpleParserValue::Integer(pos, 1), SimpleParserValue::Integer(pos, 1),
SimpleParserValue::Character(pos, ')'), SimpleParserValue::Character(pos, ')'),
SimpleParserValue::Character(pos, '{'), SimpleParserValue::Character(pos, '{'),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto currentIfCondition = std::make_unique<CommonEventHandlerCondition>(nullptr, std::make_unique<CommonEventHandlerSet>(), nullptr); const auto currentIfCondition = std::make_unique<CommonEventHandlerCondition>(nullptr, std::make_unique<CommonEventHandlerSet>(), nullptr);
helper.m_state->m_current_nested_event_handler_set = currentIfCondition->m_condition_elements.get(); helper.m_state->m_current_nested_event_handler_set = currentIfCondition->m_condition_elements.get();
@ -1058,13 +1234,15 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Character(pos, '}'), helper.Tokens({
SimpleParserValue::Character(pos, '}'),
SimpleParserValue::Identifier(pos, new std::string("elseif")), SimpleParserValue::Identifier(pos, new std::string("elseif")),
SimpleParserValue::Character(pos, '('), SimpleParserValue::Character(pos, '('),
SimpleParserValue::Integer(pos, 420), SimpleParserValue::Integer(pos, 420),
SimpleParserValue::Character(pos, ')'), SimpleParserValue::Character(pos, ')'),
SimpleParserValue::Character(pos, '{'), SimpleParserValue::Character(pos, '{'),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto currentIfCondition = std::make_unique<CommonEventHandlerCondition>(nullptr, std::make_unique<CommonEventHandlerSet>(), nullptr); const auto currentIfCondition = std::make_unique<CommonEventHandlerCondition>(nullptr, std::make_unique<CommonEventHandlerSet>(), nullptr);
helper.m_state->m_current_nested_event_handler_set = currentIfCondition->m_condition_elements.get(); helper.m_state->m_current_nested_event_handler_set = currentIfCondition->m_condition_elements.get();
@ -1100,13 +1278,15 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Character(pos, '}'), helper.Tokens({
SimpleParserValue::Character(pos, '}'),
SimpleParserValue::Identifier(pos, new std::string("elseif")), SimpleParserValue::Identifier(pos, new std::string("elseif")),
SimpleParserValue::Character(pos, '('), SimpleParserValue::Character(pos, '('),
SimpleParserValue::Integer(pos, 420), SimpleParserValue::Integer(pos, 420),
SimpleParserValue::Character(pos, ')'), SimpleParserValue::Character(pos, ')'),
SimpleParserValue::Character(pos, '{'), SimpleParserValue::Character(pos, '{'),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
REQUIRE_THROWS_AS(helper.PerformTest(), ParsingException); REQUIRE_THROWS_AS(helper.PerformTest(), ParsingException);
} }
@ -1115,13 +1295,15 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Character(pos, '}'), helper.Tokens({
SimpleParserValue::Character(pos, '}'),
SimpleParserValue::Identifier(pos, new std::string("elseif")), SimpleParserValue::Identifier(pos, new std::string("elseif")),
SimpleParserValue::Character(pos, '('), SimpleParserValue::Character(pos, '('),
SimpleParserValue::Integer(pos, 420), SimpleParserValue::Integer(pos, 420),
SimpleParserValue::Character(pos, ')'), SimpleParserValue::Character(pos, ')'),
SimpleParserValue::Character(pos, '{'), SimpleParserValue::Character(pos, '{'),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto currentIfCondition = const auto currentIfCondition =
std::make_unique<CommonEventHandlerCondition>(nullptr, std::make_unique<CommonEventHandlerSet>(), std::make_unique<CommonEventHandlerSet>()); std::make_unique<CommonEventHandlerCondition>(nullptr, std::make_unique<CommonEventHandlerSet>(), std::make_unique<CommonEventHandlerSet>());
@ -1136,10 +1318,12 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Character(pos, '}'), helper.Tokens({
SimpleParserValue::Character(pos, '}'),
SimpleParserValue::Identifier(pos, new std::string("else")), SimpleParserValue::Identifier(pos, new std::string("else")),
SimpleParserValue::Character(pos, '{'), SimpleParserValue::Character(pos, '{'),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto currentIfCondition = std::make_unique<CommonEventHandlerCondition>(nullptr, std::make_unique<CommonEventHandlerSet>(), nullptr); const auto currentIfCondition = std::make_unique<CommonEventHandlerCondition>(nullptr, std::make_unique<CommonEventHandlerSet>(), nullptr);
helper.m_state->m_current_nested_event_handler_set = currentIfCondition->m_condition_elements.get(); helper.m_state->m_current_nested_event_handler_set = currentIfCondition->m_condition_elements.get();
@ -1166,10 +1350,12 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Character(pos, '}'), helper.Tokens({
SimpleParserValue::Character(pos, '}'),
SimpleParserValue::Identifier(pos, new std::string("else")), SimpleParserValue::Identifier(pos, new std::string("else")),
SimpleParserValue::Character(pos, '{'), SimpleParserValue::Character(pos, '{'),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto currentIfCondition = std::make_unique<CommonEventHandlerCondition>(nullptr, std::make_unique<CommonEventHandlerSet>(), nullptr); const auto currentIfCondition = std::make_unique<CommonEventHandlerCondition>(nullptr, std::make_unique<CommonEventHandlerSet>(), nullptr);
helper.m_state->m_current_nested_event_handler_set = currentIfCondition->m_condition_elements.get(); helper.m_state->m_current_nested_event_handler_set = currentIfCondition->m_condition_elements.get();
@ -1196,10 +1382,12 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Character(pos, '}'), helper.Tokens({
SimpleParserValue::Character(pos, '}'),
SimpleParserValue::Identifier(pos, new std::string("else")), SimpleParserValue::Identifier(pos, new std::string("else")),
SimpleParserValue::Character(pos, '{'), SimpleParserValue::Character(pos, '{'),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
REQUIRE_THROWS_AS(helper.PerformTest(), ParsingException); REQUIRE_THROWS_AS(helper.PerformTest(), ParsingException);
} }
@ -1208,10 +1396,12 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Character(pos, '}'), helper.Tokens({
SimpleParserValue::Character(pos, '}'),
SimpleParserValue::Identifier(pos, new std::string("else")), SimpleParserValue::Identifier(pos, new std::string("else")),
SimpleParserValue::Character(pos, '{'), SimpleParserValue::Character(pos, '{'),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto currentIfCondition = const auto currentIfCondition =
std::make_unique<CommonEventHandlerCondition>(nullptr, std::make_unique<CommonEventHandlerSet>(), std::make_unique<CommonEventHandlerSet>()); std::make_unique<CommonEventHandlerCondition>(nullptr, std::make_unique<CommonEventHandlerSet>(), std::make_unique<CommonEventHandlerSet>());
@ -1226,7 +1416,10 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Character(pos, '}'), SimpleParserValue::EndOfFile(pos)}); helper.Tokens({
SimpleParserValue::Character(pos, '}'),
SimpleParserValue::EndOfFile(pos),
});
const auto currentIfCondition = std::make_unique<CommonEventHandlerCondition>(nullptr, std::make_unique<CommonEventHandlerSet>(), nullptr); const auto currentIfCondition = std::make_unique<CommonEventHandlerCondition>(nullptr, std::make_unique<CommonEventHandlerSet>(), nullptr);
helper.m_state->m_current_nested_event_handler_set = currentIfCondition->m_condition_elements.get(); helper.m_state->m_current_nested_event_handler_set = currentIfCondition->m_condition_elements.get();
@ -1248,7 +1441,10 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Character(pos, '}'), SimpleParserValue::EndOfFile(pos)}); helper.Tokens({
SimpleParserValue::Character(pos, '}'),
SimpleParserValue::EndOfFile(pos),
});
const auto baseIfCondition = std::make_unique<CommonEventHandlerCondition>(nullptr, std::make_unique<CommonEventHandlerSet>(), nullptr); const auto baseIfCondition = std::make_unique<CommonEventHandlerCondition>(nullptr, std::make_unique<CommonEventHandlerSet>(), nullptr);
helper.m_state->m_current_nested_event_handler_set = baseIfCondition->m_condition_elements.get(); helper.m_state->m_current_nested_event_handler_set = baseIfCondition->m_condition_elements.get();
@ -1274,7 +1470,10 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Character(pos, '}'), SimpleParserValue::EndOfFile(pos)}); helper.Tokens({
SimpleParserValue::Character(pos, '}'),
SimpleParserValue::EndOfFile(pos),
});
const auto baseIfCondition = const auto baseIfCondition =
std::make_unique<CommonEventHandlerCondition>(nullptr, std::make_unique<CommonEventHandlerSet>(), std::make_unique<CommonEventHandlerSet>()); std::make_unique<CommonEventHandlerCondition>(nullptr, std::make_unique<CommonEventHandlerSet>(), std::make_unique<CommonEventHandlerSet>());
@ -1302,7 +1501,10 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Character(pos, '}'), SimpleParserValue::EndOfFile(pos)}); helper.Tokens({
SimpleParserValue::Character(pos, '}'),
SimpleParserValue::EndOfFile(pos),
});
const auto baseIfCondition = std::make_unique<CommonEventHandlerCondition>(nullptr, std::make_unique<CommonEventHandlerSet>(), nullptr); const auto baseIfCondition = std::make_unique<CommonEventHandlerCondition>(nullptr, std::make_unique<CommonEventHandlerSet>(), nullptr);
helper.m_state->m_current_nested_event_handler_set = baseIfCondition->m_condition_elements.get(); helper.m_state->m_current_nested_event_handler_set = baseIfCondition->m_condition_elements.get();
@ -1332,7 +1534,10 @@ namespace test::parsing::menu::sequence::event_handler_set
{ {
EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false); EventHandlerSetSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Character(pos, '}'), SimpleParserValue::EndOfFile(pos)}); helper.Tokens({
SimpleParserValue::Character(pos, '}'),
SimpleParserValue::EndOfFile(pos),
});
const auto baseIfCondition = std::make_unique<CommonEventHandlerCondition>(nullptr, std::make_unique<CommonEventHandlerSet>(), nullptr); const auto baseIfCondition = std::make_unique<CommonEventHandlerCondition>(nullptr, std::make_unique<CommonEventHandlerSet>(), nullptr);
helper.m_state->m_current_nested_event_handler_set = baseIfCondition->m_condition_elements.get(); helper.m_state->m_current_nested_event_handler_set = baseIfCondition->m_condition_elements.get();

View File

@ -66,7 +66,8 @@ namespace test::parsing::menu::sequence::item
{ {
ItemSequenceTestsHelper helper(FeatureLevel::IW4, false); ItemSequenceTestsHelper helper(FeatureLevel::IW4, false);
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Identifier(pos, new std::string("dvarStrList")), helper.Tokens({
SimpleParserValue::Identifier(pos, new std::string("dvarStrList")),
SimpleParserValue::Character(pos, '{'), SimpleParserValue::Character(pos, '{'),
SimpleParserValue::String(pos, new std::string("@MENU_AUTO")), SimpleParserValue::String(pos, new std::string("@MENU_AUTO")),
SimpleParserValue::String(pos, new std::string("auto")), SimpleParserValue::String(pos, new std::string("auto")),
@ -77,7 +78,8 @@ namespace test::parsing::menu::sequence::item
SimpleParserValue::String(pos, new std::string("@MENU_WIDE_16_9")), SimpleParserValue::String(pos, new std::string("@MENU_WIDE_16_9")),
SimpleParserValue::String(pos, new std::string("wide 16:9")), SimpleParserValue::String(pos, new std::string("wide 16:9")),
SimpleParserValue::Character(pos, '}'), SimpleParserValue::Character(pos, '}'),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
helper.m_item->m_feature_type = CommonItemFeatureType::MULTI_VALUE; helper.m_item->m_feature_type = CommonItemFeatureType::MULTI_VALUE;
helper.m_item->m_multi_value_features = std::make_unique<CommonItemFeaturesMultiValue>(); helper.m_item->m_multi_value_features = std::make_unique<CommonItemFeaturesMultiValue>();

View File

@ -59,7 +59,9 @@ namespace test::parsing::simple::expression
protected: protected:
const std::vector<sequence_t*>& GetTestsForState() override const std::vector<sequence_t*>& GetTestsForState() override
{ {
static std::vector<sequence_t*> tests({new SimpleExpressionSequence()}); static std::vector<sequence_t*> tests({
new SimpleExpressionSequence(),
});
return tests; return tests;
} }
@ -140,10 +142,12 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Integer(pos, 1336), helper.Tokens({
SimpleParserValue::Integer(pos, 1336),
SimpleParserValue::Character(pos, '+'), SimpleParserValue::Character(pos, '+'),
SimpleParserValue::Integer(pos, 1), SimpleParserValue::Integer(pos, 1),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -162,10 +166,12 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Integer(pos, 428), helper.Tokens({
SimpleParserValue::Integer(pos, 428),
SimpleParserValue::Character(pos, '-'), SimpleParserValue::Character(pos, '-'),
SimpleParserValue::Integer(pos, 8), SimpleParserValue::Integer(pos, 8),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -184,10 +190,12 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Integer(pos, 105), helper.Tokens({
SimpleParserValue::Integer(pos, 105),
SimpleParserValue::Character(pos, '*'), SimpleParserValue::Character(pos, '*'),
SimpleParserValue::Integer(pos, 4), SimpleParserValue::Integer(pos, 4),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -206,10 +214,12 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Integer(pos, 561540), helper.Tokens({
SimpleParserValue::Integer(pos, 561540),
SimpleParserValue::Character(pos, '/'), SimpleParserValue::Character(pos, '/'),
SimpleParserValue::Integer(pos, 420), SimpleParserValue::Integer(pos, 420),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -228,10 +238,12 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Integer(pos, 92673), helper.Tokens({
SimpleParserValue::Integer(pos, 92673),
SimpleParserValue::Character(pos, '%'), SimpleParserValue::Character(pos, '%'),
SimpleParserValue::Integer(pos, 1337), SimpleParserValue::Integer(pos, 1337),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -250,10 +262,12 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Integer(pos, 0x7FFFFFF0), helper.Tokens({
SimpleParserValue::Integer(pos, 0x7FFFFFF0),
SimpleParserValue::Character(pos, '&'), SimpleParserValue::Character(pos, '&'),
SimpleParserValue::Integer(pos, 0x2AAAAAAA), SimpleParserValue::Integer(pos, 0x2AAAAAAA),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -272,10 +286,12 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Integer(pos, 5), helper.Tokens({
SimpleParserValue::Integer(pos, 5),
SimpleParserValue::Character(pos, '|'), SimpleParserValue::Character(pos, '|'),
SimpleParserValue::Integer(pos, 3), SimpleParserValue::Integer(pos, 3),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -294,11 +310,12 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Integer(pos, 105), helper.Tokens({
SimpleParserValue::MultiCharacter( SimpleParserValue::Integer(pos, 105),
pos, SimpleExpressionMatchers::MULTI_TOKEN_OFFSET_BINARY + static_cast<int>(SimpleBinaryOperationId::SHIFT_LEFT)), SimpleParserValue::MultiCharacter(pos, SimpleExpressionMatchers::MULTI_TOKEN_OFFSET_BINARY + static_cast<int>(SimpleBinaryOperationId::SHIFT_LEFT)),
SimpleParserValue::Integer(pos, 2), SimpleParserValue::Integer(pos, 2),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -317,11 +334,13 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Integer(pos, 42784), helper.Tokens({
SimpleParserValue::MultiCharacter( SimpleParserValue::Integer(pos, 42784),
pos, SimpleExpressionMatchers::MULTI_TOKEN_OFFSET_BINARY + static_cast<int>(SimpleBinaryOperationId::SHIFT_RIGHT)), SimpleParserValue::MultiCharacter(pos,
SimpleExpressionMatchers::MULTI_TOKEN_OFFSET_BINARY + static_cast<int>(SimpleBinaryOperationId::SHIFT_RIGHT)),
SimpleParserValue::Integer(pos, 5), SimpleParserValue::Integer(pos, 5),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -340,10 +359,12 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Integer(pos, 1337), helper.Tokens({
SimpleParserValue::Integer(pos, 1337),
SimpleParserValue::Character(pos, '>'), SimpleParserValue::Character(pos, '>'),
SimpleParserValue::Integer(pos, 420), SimpleParserValue::Integer(pos, 420),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -362,11 +383,13 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Integer(pos, 1337), helper.Tokens({
SimpleParserValue::Integer(pos, 1337),
SimpleParserValue::MultiCharacter( SimpleParserValue::MultiCharacter(
pos, SimpleExpressionMatchers::MULTI_TOKEN_OFFSET_BINARY + static_cast<int>(SimpleBinaryOperationId::GREATER_EQUAL_THAN)), pos, SimpleExpressionMatchers::MULTI_TOKEN_OFFSET_BINARY + static_cast<int>(SimpleBinaryOperationId::GREATER_EQUAL_THAN)),
SimpleParserValue::Integer(pos, 420), SimpleParserValue::Integer(pos, 420),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -385,10 +408,12 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Integer(pos, 420), helper.Tokens({
SimpleParserValue::Integer(pos, 420),
SimpleParserValue::Character(pos, '<'), SimpleParserValue::Character(pos, '<'),
SimpleParserValue::Integer(pos, 421), SimpleParserValue::Integer(pos, 421),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -407,11 +432,13 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Integer(pos, 420), helper.Tokens({
SimpleParserValue::MultiCharacter( SimpleParserValue::Integer(pos, 420),
pos, SimpleExpressionMatchers::MULTI_TOKEN_OFFSET_BINARY + static_cast<int>(SimpleBinaryOperationId::LESS_EQUAL_THAN)), SimpleParserValue::MultiCharacter(pos,
SimpleExpressionMatchers::MULTI_TOKEN_OFFSET_BINARY + static_cast<int>(SimpleBinaryOperationId::LESS_EQUAL_THAN)),
SimpleParserValue::Integer(pos, 421), SimpleParserValue::Integer(pos, 421),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -430,11 +457,12 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens( helper.Tokens({
{SimpleParserValue::Integer(pos, 1337), SimpleParserValue::Integer(pos, 1337),
SimpleParserValue::MultiCharacter(pos, SimpleExpressionMatchers::MULTI_TOKEN_OFFSET_BINARY + static_cast<int>(SimpleBinaryOperationId::EQUALS)), SimpleParserValue::MultiCharacter(pos, SimpleExpressionMatchers::MULTI_TOKEN_OFFSET_BINARY + static_cast<int>(SimpleBinaryOperationId::EQUALS)),
SimpleParserValue::Integer(pos, 1337), SimpleParserValue::Integer(pos, 1337),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -453,11 +481,12 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens( helper.Tokens({
{SimpleParserValue::Integer(pos, 1337), SimpleParserValue::Integer(pos, 1337),
SimpleParserValue::MultiCharacter(pos, SimpleExpressionMatchers::MULTI_TOKEN_OFFSET_BINARY + static_cast<int>(SimpleBinaryOperationId::NOT_EQUAL)), SimpleParserValue::MultiCharacter(pos, SimpleExpressionMatchers::MULTI_TOKEN_OFFSET_BINARY + static_cast<int>(SimpleBinaryOperationId::NOT_EQUAL)),
SimpleParserValue::Integer(pos, 1337), SimpleParserValue::Integer(pos, 1337),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -476,11 +505,12 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens( helper.Tokens({
{SimpleParserValue::Integer(pos, 1337), SimpleParserValue::Integer(pos, 1337),
SimpleParserValue::MultiCharacter(pos, SimpleExpressionMatchers::MULTI_TOKEN_OFFSET_BINARY + static_cast<int>(SimpleBinaryOperationId::AND)), SimpleParserValue::MultiCharacter(pos, SimpleExpressionMatchers::MULTI_TOKEN_OFFSET_BINARY + static_cast<int>(SimpleBinaryOperationId::AND)),
SimpleParserValue::Integer(pos, 420), SimpleParserValue::Integer(pos, 420),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -499,11 +529,12 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens( helper.Tokens({
{SimpleParserValue::Integer(pos, 0), SimpleParserValue::Integer(pos, 0),
SimpleParserValue::MultiCharacter(pos, SimpleExpressionMatchers::MULTI_TOKEN_OFFSET_BINARY + static_cast<int>(SimpleBinaryOperationId::OR)), SimpleParserValue::MultiCharacter(pos, SimpleExpressionMatchers::MULTI_TOKEN_OFFSET_BINARY + static_cast<int>(SimpleBinaryOperationId::OR)),
SimpleParserValue::Integer(pos, 1337), SimpleParserValue::Integer(pos, 1337),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -522,14 +553,16 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Integer(pos, 100), helper.Tokens({
SimpleParserValue::Integer(pos, 100),
SimpleParserValue::Character(pos, '+'), SimpleParserValue::Character(pos, '+'),
SimpleParserValue::Integer(pos, 4), SimpleParserValue::Integer(pos, 4),
SimpleParserValue::Character(pos, '*'), SimpleParserValue::Character(pos, '*'),
SimpleParserValue::Integer(pos, 25), SimpleParserValue::Integer(pos, 25),
SimpleParserValue::Character(pos, '+'), SimpleParserValue::Character(pos, '+'),
SimpleParserValue::Integer(pos, 220), SimpleParserValue::Integer(pos, 220),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -548,14 +581,16 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Character(pos, '('), helper.Tokens({
SimpleParserValue::Character(pos, '('),
SimpleParserValue::Integer(pos, 40), SimpleParserValue::Integer(pos, 40),
SimpleParserValue::Character(pos, '+'), SimpleParserValue::Character(pos, '+'),
SimpleParserValue::Integer(pos, 2), SimpleParserValue::Integer(pos, 2),
SimpleParserValue::Character(pos, ')'), SimpleParserValue::Character(pos, ')'),
SimpleParserValue::Character(pos, '*'), SimpleParserValue::Character(pos, '*'),
SimpleParserValue::Integer(pos, 10), SimpleParserValue::Integer(pos, 10),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -574,12 +609,14 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Integer(pos, 1), helper.Tokens({
SimpleParserValue::Integer(pos, 1),
SimpleParserValue::Character(pos, '?'), SimpleParserValue::Character(pos, '?'),
SimpleParserValue::Integer(pos, 420), SimpleParserValue::Integer(pos, 420),
SimpleParserValue::Character(pos, ':'), SimpleParserValue::Character(pos, ':'),
SimpleParserValue::Integer(pos, 1337), SimpleParserValue::Integer(pos, 1337),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -598,12 +635,14 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Integer(pos, 0), helper.Tokens({
SimpleParserValue::Integer(pos, 0),
SimpleParserValue::Character(pos, '?'), SimpleParserValue::Character(pos, '?'),
SimpleParserValue::Integer(pos, 420), SimpleParserValue::Integer(pos, 420),
SimpleParserValue::Character(pos, ':'), SimpleParserValue::Character(pos, ':'),
SimpleParserValue::Integer(pos, 1337), SimpleParserValue::Integer(pos, 1337),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -622,7 +661,8 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Character(pos, '('), helper.Tokens({
SimpleParserValue::Character(pos, '('),
SimpleParserValue::Integer(pos, 1), SimpleParserValue::Integer(pos, 1),
SimpleParserValue::Character(pos, '?'), SimpleParserValue::Character(pos, '?'),
SimpleParserValue::Integer(pos, 420), SimpleParserValue::Integer(pos, 420),
@ -631,7 +671,8 @@ namespace test::parsing::simple::expression
SimpleParserValue::Character(pos, ')'), SimpleParserValue::Character(pos, ')'),
SimpleParserValue::Character(pos, '+'), SimpleParserValue::Character(pos, '+'),
SimpleParserValue::Integer(pos, 1), SimpleParserValue::Integer(pos, 1),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -650,7 +691,8 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Character(pos, '('), helper.Tokens({
SimpleParserValue::Character(pos, '('),
SimpleParserValue::Integer(pos, 0), SimpleParserValue::Integer(pos, 0),
SimpleParserValue::Character(pos, '?'), SimpleParserValue::Character(pos, '?'),
SimpleParserValue::Integer(pos, 420), SimpleParserValue::Integer(pos, 420),
@ -659,7 +701,8 @@ namespace test::parsing::simple::expression
SimpleParserValue::Character(pos, ')'), SimpleParserValue::Character(pos, ')'),
SimpleParserValue::Character(pos, '+'), SimpleParserValue::Character(pos, '+'),
SimpleParserValue::Integer(pos, 1), SimpleParserValue::Integer(pos, 1),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -678,7 +721,8 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Character(pos, '('), helper.Tokens({
SimpleParserValue::Character(pos, '('),
SimpleParserValue::Integer(pos, -1), SimpleParserValue::Integer(pos, -1),
SimpleParserValue::Character(pos, '+'), SimpleParserValue::Character(pos, '+'),
SimpleParserValue::Integer(pos, 2), SimpleParserValue::Integer(pos, 2),
@ -687,7 +731,8 @@ namespace test::parsing::simple::expression
SimpleParserValue::Integer(pos, 420), SimpleParserValue::Integer(pos, 420),
SimpleParserValue::Character(pos, ':'), SimpleParserValue::Character(pos, ':'),
SimpleParserValue::Integer(pos, 1337), SimpleParserValue::Integer(pos, 1337),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -706,7 +751,8 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Integer(pos, 1), helper.Tokens({
SimpleParserValue::Integer(pos, 1),
SimpleParserValue::Character(pos, '?'), SimpleParserValue::Character(pos, '?'),
SimpleParserValue::Character(pos, '('), SimpleParserValue::Character(pos, '('),
SimpleParserValue::Integer(pos, 210), SimpleParserValue::Integer(pos, 210),
@ -715,7 +761,8 @@ namespace test::parsing::simple::expression
SimpleParserValue::Character(pos, ')'), SimpleParserValue::Character(pos, ')'),
SimpleParserValue::Character(pos, ':'), SimpleParserValue::Character(pos, ':'),
SimpleParserValue::Integer(pos, 1337), SimpleParserValue::Integer(pos, 1337),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();
@ -734,7 +781,8 @@ namespace test::parsing::simple::expression
{ {
SimpleExpressionTestsHelper helper; SimpleExpressionTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({SimpleParserValue::Integer(pos, 0), helper.Tokens({
SimpleParserValue::Integer(pos, 0),
SimpleParserValue::Character(pos, '?'), SimpleParserValue::Character(pos, '?'),
SimpleParserValue::Integer(pos, 420), SimpleParserValue::Integer(pos, 420),
SimpleParserValue::Character(pos, ':'), SimpleParserValue::Character(pos, ':'),
@ -743,7 +791,8 @@ namespace test::parsing::simple::expression
SimpleParserValue::Character(pos, '+'), SimpleParserValue::Character(pos, '+'),
SimpleParserValue::Integer(pos, 1), SimpleParserValue::Integer(pos, 1),
SimpleParserValue::Character(pos, ')'), SimpleParserValue::Character(pos, ')'),
SimpleParserValue::EndOfFile(pos)}); SimpleParserValue::EndOfFile(pos),
});
const auto result = helper.PerformTest(); const auto result = helper.PerformTest();

View File

@ -125,14 +125,16 @@ namespace test::parsing::commands::sequence::sequence_action
{ {
CommandsSequenceTestsHelper helper; CommandsSequenceTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({CommandsParserValue::Identifier(pos, new std::string("set")), helper.Tokens({
CommandsParserValue::Identifier(pos, new std::string("set")),
CommandsParserValue::Identifier(pos, new std::string("action")), CommandsParserValue::Identifier(pos, new std::string("action")),
CommandsParserValue::Identifier(pos, new std::string("test_struct_t")), CommandsParserValue::Identifier(pos, new std::string("test_struct_t")),
CommandsParserValue::Identifier(pos, new std::string("TestMethod")), CommandsParserValue::Identifier(pos, new std::string("TestMethod")),
CommandsParserValue::Character(pos, '('), CommandsParserValue::Character(pos, '('),
CommandsParserValue::Character(pos, ')'), CommandsParserValue::Character(pos, ')'),
CommandsParserValue::Character(pos, ';'), CommandsParserValue::Character(pos, ';'),
CommandsParserValue::EndOfFile(pos)}); CommandsParserValue::EndOfFile(pos),
});
auto result = helper.PerformTest(); auto result = helper.PerformTest();
@ -147,7 +149,8 @@ namespace test::parsing::commands::sequence::sequence_action
{ {
CommandsSequenceTestsHelper helper; CommandsSequenceTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({CommandsParserValue::Identifier(pos, new std::string("set")), helper.Tokens({
CommandsParserValue::Identifier(pos, new std::string("set")),
CommandsParserValue::Identifier(pos, new std::string("action")), CommandsParserValue::Identifier(pos, new std::string("action")),
CommandsParserValue::Identifier(pos, new std::string("test_struct_t")), CommandsParserValue::Identifier(pos, new std::string("test_struct_t")),
CommandsParserValue::Identifier(pos, new std::string("TestMethod")), CommandsParserValue::Identifier(pos, new std::string("TestMethod")),
@ -155,7 +158,8 @@ namespace test::parsing::commands::sequence::sequence_action
CommandsParserValue::Identifier(pos, new std::string("arg_t")), CommandsParserValue::Identifier(pos, new std::string("arg_t")),
CommandsParserValue::Character(pos, ')'), CommandsParserValue::Character(pos, ')'),
CommandsParserValue::Character(pos, ';'), CommandsParserValue::Character(pos, ';'),
CommandsParserValue::EndOfFile(pos)}); CommandsParserValue::EndOfFile(pos),
});
auto result = helper.PerformTest(); auto result = helper.PerformTest();
@ -171,7 +175,8 @@ namespace test::parsing::commands::sequence::sequence_action
{ {
CommandsSequenceTestsHelper helper; CommandsSequenceTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({CommandsParserValue::Identifier(pos, new std::string("set")), helper.Tokens({
CommandsParserValue::Identifier(pos, new std::string("set")),
CommandsParserValue::Identifier(pos, new std::string("action")), CommandsParserValue::Identifier(pos, new std::string("action")),
CommandsParserValue::Identifier(pos, new std::string("test_struct_t")), CommandsParserValue::Identifier(pos, new std::string("test_struct_t")),
CommandsParserValue::Identifier(pos, new std::string("TestMethod")), CommandsParserValue::Identifier(pos, new std::string("TestMethod")),
@ -181,7 +186,8 @@ namespace test::parsing::commands::sequence::sequence_action
CommandsParserValue::Identifier(pos, new std::string("another_arg_t")), CommandsParserValue::Identifier(pos, new std::string("another_arg_t")),
CommandsParserValue::Character(pos, ')'), CommandsParserValue::Character(pos, ')'),
CommandsParserValue::Character(pos, ';'), CommandsParserValue::Character(pos, ';'),
CommandsParserValue::EndOfFile(pos)}); CommandsParserValue::EndOfFile(pos),
});
auto result = helper.PerformTest(); auto result = helper.PerformTest();
@ -198,7 +204,8 @@ namespace test::parsing::commands::sequence::sequence_action
{ {
CommandsSequenceTestsHelper helper; CommandsSequenceTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({CommandsParserValue::Identifier(pos, new std::string("set")), helper.Tokens({
CommandsParserValue::Identifier(pos, new std::string("set")),
CommandsParserValue::Identifier(pos, new std::string("action")), CommandsParserValue::Identifier(pos, new std::string("action")),
CommandsParserValue::Identifier(pos, new std::string("test_struct_t")), CommandsParserValue::Identifier(pos, new std::string("test_struct_t")),
CommandsParserValue::Identifier(pos, new std::string("TestMethod")), CommandsParserValue::Identifier(pos, new std::string("TestMethod")),
@ -210,7 +217,8 @@ namespace test::parsing::commands::sequence::sequence_action
CommandsParserValue::Identifier(pos, new std::string("yeet_t")), CommandsParserValue::Identifier(pos, new std::string("yeet_t")),
CommandsParserValue::Character(pos, ')'), CommandsParserValue::Character(pos, ')'),
CommandsParserValue::Character(pos, ';'), CommandsParserValue::Character(pos, ';'),
CommandsParserValue::EndOfFile(pos)}); CommandsParserValue::EndOfFile(pos),
});
auto result = helper.PerformTest(); auto result = helper.PerformTest();
@ -228,14 +236,16 @@ namespace test::parsing::commands::sequence::sequence_action
{ {
CommandsSequenceTestsHelper helper; CommandsSequenceTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({CommandsParserValue::Identifier(pos, new std::string("set")), helper.Tokens({
CommandsParserValue::Identifier(pos, new std::string("set")),
CommandsParserValue::Identifier(pos, new std::string("action")), CommandsParserValue::Identifier(pos, new std::string("action")),
CommandsParserValue::Identifier(pos, new std::string("unknown_struct_t")), CommandsParserValue::Identifier(pos, new std::string("unknown_struct_t")),
CommandsParserValue::Identifier(pos, new std::string("TestMethod")), CommandsParserValue::Identifier(pos, new std::string("TestMethod")),
CommandsParserValue::Character(pos, '('), CommandsParserValue::Character(pos, '('),
CommandsParserValue::Character(pos, ')'), CommandsParserValue::Character(pos, ')'),
CommandsParserValue::Character(pos, ';'), CommandsParserValue::Character(pos, ';'),
CommandsParserValue::EndOfFile(pos)}); CommandsParserValue::EndOfFile(pos),
});
REQUIRE_THROWS_AS(helper.PerformTest(), ParsingException); REQUIRE_THROWS_AS(helper.PerformTest(), ParsingException);
REQUIRE(helper.m_test_struct->m_post_load_action == nullptr); REQUIRE(helper.m_test_struct->m_post_load_action == nullptr);
@ -245,7 +255,8 @@ namespace test::parsing::commands::sequence::sequence_action
{ {
CommandsSequenceTestsHelper helper; CommandsSequenceTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({CommandsParserValue::Identifier(pos, new std::string("set")), helper.Tokens({
CommandsParserValue::Identifier(pos, new std::string("set")),
CommandsParserValue::Identifier(pos, new std::string("action")), CommandsParserValue::Identifier(pos, new std::string("action")),
CommandsParserValue::Identifier(pos, new std::string("test_struct_t")), CommandsParserValue::Identifier(pos, new std::string("test_struct_t")),
CommandsParserValue::Identifier(pos, new std::string("TestMethod")), CommandsParserValue::Identifier(pos, new std::string("TestMethod")),
@ -257,7 +268,8 @@ namespace test::parsing::commands::sequence::sequence_action
CommandsParserValue::Identifier(pos, new std::string("unknown_type_t")), CommandsParserValue::Identifier(pos, new std::string("unknown_type_t")),
CommandsParserValue::Character(pos, ')'), CommandsParserValue::Character(pos, ')'),
CommandsParserValue::Character(pos, ';'), CommandsParserValue::Character(pos, ';'),
CommandsParserValue::EndOfFile(pos)}); CommandsParserValue::EndOfFile(pos),
});
REQUIRE_THROWS_AS(helper.PerformTest(), ParsingException); REQUIRE_THROWS_AS(helper.PerformTest(), ParsingException);
REQUIRE(helper.m_test_struct->m_post_load_action == nullptr); REQUIRE(helper.m_test_struct->m_post_load_action == nullptr);
@ -267,13 +279,15 @@ namespace test::parsing::commands::sequence::sequence_action
{ {
CommandsSequenceTestsHelper helper; CommandsSequenceTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({CommandsParserValue::Identifier(pos, new std::string("set")), helper.Tokens({
CommandsParserValue::Identifier(pos, new std::string("set")),
CommandsParserValue::Identifier(pos, new std::string("action")), CommandsParserValue::Identifier(pos, new std::string("action")),
CommandsParserValue::Identifier(pos, new std::string("TestMethod")), CommandsParserValue::Identifier(pos, new std::string("TestMethod")),
CommandsParserValue::Character(pos, '('), CommandsParserValue::Character(pos, '('),
CommandsParserValue::Character(pos, ')'), CommandsParserValue::Character(pos, ')'),
CommandsParserValue::Character(pos, ';'), CommandsParserValue::Character(pos, ';'),
CommandsParserValue::EndOfFile(pos)}); CommandsParserValue::EndOfFile(pos),
});
REQUIRE_THROWS_AS(helper.PerformTest(), ParsingException); REQUIRE_THROWS_AS(helper.PerformTest(), ParsingException);
REQUIRE(helper.m_test_struct->m_post_load_action == nullptr); REQUIRE(helper.m_test_struct->m_post_load_action == nullptr);
@ -283,13 +297,15 @@ namespace test::parsing::commands::sequence::sequence_action
{ {
CommandsSequenceTestsHelper helper; CommandsSequenceTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({CommandsParserValue::Identifier(pos, new std::string("set")), helper.Tokens({
CommandsParserValue::Identifier(pos, new std::string("set")),
CommandsParserValue::Identifier(pos, new std::string("action")), CommandsParserValue::Identifier(pos, new std::string("action")),
CommandsParserValue::Identifier(pos, new std::string("TestMethod")), CommandsParserValue::Identifier(pos, new std::string("TestMethod")),
CommandsParserValue::Character(pos, '('), CommandsParserValue::Character(pos, '('),
CommandsParserValue::Character(pos, ')'), CommandsParserValue::Character(pos, ')'),
CommandsParserValue::Character(pos, ';'), CommandsParserValue::Character(pos, ';'),
CommandsParserValue::EndOfFile(pos)}); CommandsParserValue::EndOfFile(pos),
});
helper.m_state->SetInUse(helper.m_test_struct); helper.m_state->SetInUse(helper.m_test_struct);
auto result = helper.PerformTest(); auto result = helper.PerformTest();
@ -305,7 +321,8 @@ namespace test::parsing::commands::sequence::sequence_action
{ {
CommandsSequenceTestsHelper helper; CommandsSequenceTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({CommandsParserValue::Identifier(pos, new std::string("set")), helper.Tokens({
CommandsParserValue::Identifier(pos, new std::string("set")),
CommandsParserValue::Identifier(pos, new std::string("action")), CommandsParserValue::Identifier(pos, new std::string("action")),
CommandsParserValue::Identifier(pos, new std::string("container_struct_t")), CommandsParserValue::Identifier(pos, new std::string("container_struct_t")),
CommandsParserValue::Character(pos, ':'), CommandsParserValue::Character(pos, ':'),
@ -315,7 +332,8 @@ namespace test::parsing::commands::sequence::sequence_action
CommandsParserValue::Character(pos, '('), CommandsParserValue::Character(pos, '('),
CommandsParserValue::Character(pos, ')'), CommandsParserValue::Character(pos, ')'),
CommandsParserValue::Character(pos, ';'), CommandsParserValue::Character(pos, ';'),
CommandsParserValue::EndOfFile(pos)}); CommandsParserValue::EndOfFile(pos),
});
auto result = helper.PerformTest(); auto result = helper.PerformTest();
@ -330,14 +348,16 @@ namespace test::parsing::commands::sequence::sequence_action
{ {
CommandsSequenceTestsHelper helper; CommandsSequenceTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({CommandsParserValue::Identifier(pos, new std::string("set")), helper.Tokens({
CommandsParserValue::Identifier(pos, new std::string("set")),
CommandsParserValue::Identifier(pos, new std::string("action")), CommandsParserValue::Identifier(pos, new std::string("action")),
CommandsParserValue::Identifier(pos, new std::string("m_child")), CommandsParserValue::Identifier(pos, new std::string("m_child")),
CommandsParserValue::Identifier(pos, new std::string("TestMethod")), CommandsParserValue::Identifier(pos, new std::string("TestMethod")),
CommandsParserValue::Character(pos, '('), CommandsParserValue::Character(pos, '('),
CommandsParserValue::Character(pos, ')'), CommandsParserValue::Character(pos, ')'),
CommandsParserValue::Character(pos, ';'), CommandsParserValue::Character(pos, ';'),
CommandsParserValue::EndOfFile(pos)}); CommandsParserValue::EndOfFile(pos),
});
helper.m_state->SetInUse(helper.m_test_struct2); helper.m_state->SetInUse(helper.m_test_struct2);
auto result = helper.PerformTest(); auto result = helper.PerformTest();
@ -353,7 +373,8 @@ namespace test::parsing::commands::sequence::sequence_action
{ {
CommandsSequenceTestsHelper helper; CommandsSequenceTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({CommandsParserValue::Identifier(pos, new std::string("set")), helper.Tokens({
CommandsParserValue::Identifier(pos, new std::string("set")),
CommandsParserValue::Identifier(pos, new std::string("action")), CommandsParserValue::Identifier(pos, new std::string("action")),
CommandsParserValue::Identifier(pos, new std::string("container_struct_t")), CommandsParserValue::Identifier(pos, new std::string("container_struct_t")),
CommandsParserValue::Character(pos, ':'), CommandsParserValue::Character(pos, ':'),
@ -363,7 +384,8 @@ namespace test::parsing::commands::sequence::sequence_action
CommandsParserValue::Character(pos, '('), CommandsParserValue::Character(pos, '('),
CommandsParserValue::Character(pos, ')'), CommandsParserValue::Character(pos, ')'),
CommandsParserValue::Character(pos, ';'), CommandsParserValue::Character(pos, ';'),
CommandsParserValue::EndOfFile(pos)}); CommandsParserValue::EndOfFile(pos),
});
helper.m_state->SetInUse(helper.m_arg_struct2); helper.m_state->SetInUse(helper.m_arg_struct2);
auto result = helper.PerformTest(); auto result = helper.PerformTest();
@ -379,7 +401,8 @@ namespace test::parsing::commands::sequence::sequence_action
{ {
CommandsSequenceTestsHelper helper; CommandsSequenceTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({CommandsParserValue::Identifier(pos, new std::string("set")), helper.Tokens({
CommandsParserValue::Identifier(pos, new std::string("set")),
CommandsParserValue::Identifier(pos, new std::string("action")), CommandsParserValue::Identifier(pos, new std::string("action")),
CommandsParserValue::Identifier(pos, new std::string("test_struct_t")), CommandsParserValue::Identifier(pos, new std::string("test_struct_t")),
CommandsParserValue::Character(pos, ':'), CommandsParserValue::Character(pos, ':'),
@ -389,7 +412,8 @@ namespace test::parsing::commands::sequence::sequence_action
CommandsParserValue::Character(pos, '('), CommandsParserValue::Character(pos, '('),
CommandsParserValue::Character(pos, ')'), CommandsParserValue::Character(pos, ')'),
CommandsParserValue::Character(pos, ';'), CommandsParserValue::Character(pos, ';'),
CommandsParserValue::EndOfFile(pos)}); CommandsParserValue::EndOfFile(pos),
});
REQUIRE_THROWS_AS(helper.PerformTest(), ParsingException); REQUIRE_THROWS_AS(helper.PerformTest(), ParsingException);
REQUIRE(helper.m_test_struct->m_post_load_action == nullptr); REQUIRE(helper.m_test_struct->m_post_load_action == nullptr);

View File

@ -41,10 +41,12 @@ namespace test::parsing::commands::sequence::sequence_architecture
{ {
CommandsSequenceTestsHelper helper; CommandsSequenceTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({CommandsParserValue::Identifier(pos, new std::string("architecture")), helper.Tokens({
CommandsParserValue::Identifier(pos, new std::string("architecture")),
CommandsParserValue::Identifier(pos, new std::string("x86")), CommandsParserValue::Identifier(pos, new std::string("x86")),
CommandsParserValue::Character(pos, ';'), CommandsParserValue::Character(pos, ';'),
CommandsParserValue::EndOfFile(pos)}); CommandsParserValue::EndOfFile(pos),
});
auto result = helper.PerformTest(); auto result = helper.PerformTest();
@ -57,10 +59,12 @@ namespace test::parsing::commands::sequence::sequence_architecture
{ {
CommandsSequenceTestsHelper helper; CommandsSequenceTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({CommandsParserValue::Identifier(pos, new std::string("architecture")), helper.Tokens({
CommandsParserValue::Identifier(pos, new std::string("architecture")),
CommandsParserValue::Identifier(pos, new std::string("x86")), CommandsParserValue::Identifier(pos, new std::string("x86")),
CommandsParserValue::Character(pos, ';'), CommandsParserValue::Character(pos, ';'),
CommandsParserValue::EndOfFile(pos)}); CommandsParserValue::EndOfFile(pos),
});
auto result = helper.PerformTest(); auto result = helper.PerformTest();
@ -73,10 +77,12 @@ namespace test::parsing::commands::sequence::sequence_architecture
{ {
CommandsSequenceTestsHelper helper; CommandsSequenceTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({CommandsParserValue::Identifier(pos, new std::string("architecture")), helper.Tokens({
CommandsParserValue::Identifier(pos, new std::string("architecture")),
CommandsParserValue::Identifier(pos, new std::string("x1337")), CommandsParserValue::Identifier(pos, new std::string("x1337")),
CommandsParserValue::Character(pos, ';'), CommandsParserValue::Character(pos, ';'),
CommandsParserValue::EndOfFile(pos)}); CommandsParserValue::EndOfFile(pos),
});
REQUIRE_THROWS_AS(helper.PerformTest(), ParsingException); REQUIRE_THROWS_AS(helper.PerformTest(), ParsingException);
REQUIRE(helper.m_repository->GetArchitecture() == Architecture::UNKNOWN); REQUIRE(helper.m_repository->GetArchitecture() == Architecture::UNKNOWN);

View File

@ -41,10 +41,12 @@ namespace test::parsing::commands::sequence::sequence_game
{ {
CommandsSequenceTestsHelper helper; CommandsSequenceTestsHelper helper;
const TokenPos pos; const TokenPos pos;
helper.Tokens({CommandsParserValue::Identifier(pos, new std::string("game")), helper.Tokens({
CommandsParserValue::Identifier(pos, new std::string("game")),
CommandsParserValue::Identifier(pos, new std::string("very_cool_game")), CommandsParserValue::Identifier(pos, new std::string("very_cool_game")),
CommandsParserValue::Character(pos, ';'), CommandsParserValue::Character(pos, ';'),
CommandsParserValue::EndOfFile(pos)}); CommandsParserValue::EndOfFile(pos),
});
auto result = helper.PerformTest(); auto result = helper.PerformTest();

View File

@ -10,10 +10,12 @@ namespace test::parsing::header::sequence::sequence_namespace
TEST_CASE("SequenceNamespace: Ensure can parse simple namespace directive", "[parsing][parsingstream]") TEST_CASE("SequenceNamespace: Ensure can parse simple namespace directive", "[parsing][parsingstream]")
{ {
const TokenPos pos; const TokenPos pos;
const auto lexer = const auto lexer = std::make_unique<MockLexer<HeaderParserValue>>(MockLexer<HeaderParserValue>(
std::make_unique<MockLexer<HeaderParserValue>>(MockLexer<HeaderParserValue>({HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE), {
HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE),
HeaderParserValue::Identifier(pos, new std::string("test_namespace")), HeaderParserValue::Identifier(pos, new std::string("test_namespace")),
HeaderParserValue::Character(pos, '{')}, HeaderParserValue::Character(pos, '{'),
},
HeaderParserValue::EndOfFile(pos))); HeaderParserValue::EndOfFile(pos)));
const auto packValueSupplier = std::make_unique<MockPackValueSupplier>(); const auto packValueSupplier = std::make_unique<MockPackValueSupplier>();

View File

@ -79,12 +79,18 @@ namespace test::parsing::matcher
{ {
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE),
HeaderParserValue::Identifier(pos, new std::string("test_namespace")), HeaderParserValue::Identifier(pos, new std::string("test_namespace")),
HeaderParserValue::Character(pos, '{'), HeaderParserValue::Character(pos, '{'),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers({create.Type(HeaderParserValueType::NAMESPACE), create.Identifier(), create.Char('{')}); test.Matchers({
create.Type(HeaderParserValueType::NAMESPACE),
create.Identifier(),
create.Char('{'),
});
REQUIRE(test.PerformTest()); REQUIRE(test.PerformTest());
REQUIRE(test.GetConsumedTokenCount() == 3); REQUIRE(test.GetConsumedTokenCount() == 3);
@ -94,12 +100,18 @@ namespace test::parsing::matcher
{ {
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE),
HeaderParserValue::Identifier(pos, new std::string("test_namespace")), HeaderParserValue::Identifier(pos, new std::string("test_namespace")),
HeaderParserValue::Character(pos, '{'), HeaderParserValue::Character(pos, '{'),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers({create.Type(HeaderParserValueType::NAMESPACE), create.Identifier(), create.Char('+')}); test.Matchers({
create.Type(HeaderParserValueType::NAMESPACE),
create.Identifier(),
create.Char('+'),
});
REQUIRE(!test.PerformTest()); REQUIRE(!test.PerformTest());
} }
@ -109,12 +121,16 @@ namespace test::parsing::matcher
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
auto callbackCalled = false; auto callbackCalled = false;
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE),
HeaderParserValue::Identifier(pos, new std::string("test_namespace")), HeaderParserValue::Identifier(pos, new std::string("test_namespace")),
HeaderParserValue::Character(pos, '{'), HeaderParserValue::Character(pos, '{'),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers({create.Type(HeaderParserValueType::NAMESPACE)}); test.Matchers({
create.Type(HeaderParserValueType::NAMESPACE),
});
test.MatchCallback( test.MatchCallback(
[&callbackCalled](sequence_result_t& result) [&callbackCalled](sequence_result_t& result)
{ {
@ -130,9 +146,14 @@ namespace test::parsing::matcher
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
auto callbackCalled = false; auto callbackCalled = false;
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT), HeaderParserValue::Invalid(pos)}); test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT),
HeaderParserValue::Invalid(pos),
});
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers({create.Type(HeaderParserValueType::NAMESPACE)}); test.Matchers({
create.Type(HeaderParserValueType::NAMESPACE),
});
test.MatchCallback( test.MatchCallback(
[&callbackCalled](sequence_result_t& result) [&callbackCalled](sequence_result_t& result)
{ {
@ -151,15 +172,19 @@ namespace test::parsing::matcher
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers({create.Or({ test.Matchers({
create.Or({
create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE), create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE),
create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT), create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT),
})}); }),
});
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE),
HeaderParserValue::Identifier(pos, new std::string("test_namespace")), HeaderParserValue::Identifier(pos, new std::string("test_namespace")),
HeaderParserValue::Character(pos, '{'), HeaderParserValue::Character(pos, '{'),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
test.MatchCallback( test.MatchCallback(
[](sequence_result_t& result) [](sequence_result_t& result)
{ {
@ -169,10 +194,12 @@ namespace test::parsing::matcher
REQUIRE(test.PerformTest()); REQUIRE(test.PerformTest());
REQUIRE(test.GetConsumedTokenCount() == 1); REQUIRE(test.GetConsumedTokenCount() == 1);
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT),
HeaderParserValue::Identifier(pos, new std::string("test_struct")), HeaderParserValue::Identifier(pos, new std::string("test_struct")),
HeaderParserValue::Character(pos, '{'), HeaderParserValue::Character(pos, '{'),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
test.MatchCallback( test.MatchCallback(
[](sequence_result_t& result) [](sequence_result_t& result)
{ {
@ -191,15 +218,19 @@ namespace test::parsing::matcher
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers({create.Or({ test.Matchers({
create.Or({
create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE), create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE),
create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT), create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT),
})}); }),
});
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::ENUM), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::ENUM),
HeaderParserValue::Identifier(pos, new std::string("test_namespace")), HeaderParserValue::Identifier(pos, new std::string("test_namespace")),
HeaderParserValue::Character(pos, '{'), HeaderParserValue::Character(pos, '{'),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
test.MatchCallback( test.MatchCallback(
[](sequence_result_t& result) [](sequence_result_t& result)
{ {
@ -217,14 +248,18 @@ namespace test::parsing::matcher
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers( test.Matchers({
{create.Loop(create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE)), create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT)}); create.Loop(create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE)),
create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT),
});
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE),
HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE), HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE),
HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE), HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE),
HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT), HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
test.MatchCallback( test.MatchCallback(
[](sequence_result_t& result) [](sequence_result_t& result)
{ {
@ -246,10 +281,15 @@ namespace test::parsing::matcher
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers( test.Matchers({
{create.Loop(create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE)), create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT)}); create.Loop(create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE)),
create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT),
});
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT), HeaderParserValue::Invalid(pos)}); test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT),
HeaderParserValue::Invalid(pos),
});
REQUIRE(!test.PerformTest()); REQUIRE(!test.PerformTest());
} }
@ -262,10 +302,15 @@ namespace test::parsing::matcher
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers({create.OptionalLoop(create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE)), test.Matchers({
create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT)}); create.OptionalLoop(create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE)),
create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT),
});
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT), HeaderParserValue::Invalid(pos)}); test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT),
HeaderParserValue::Invalid(pos),
});
REQUIRE(test.PerformTest()); REQUIRE(test.PerformTest());
REQUIRE(test.GetConsumedTokenCount() == 1); REQUIRE(test.GetConsumedTokenCount() == 1);
@ -280,13 +325,17 @@ namespace test::parsing::matcher
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers({create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE), test.Matchers({
create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE),
create.Optional(create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT)), create.Optional(create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT)),
create.Type(HeaderParserValueType::ENUM).Tag(TAG_ENUM)}); create.Type(HeaderParserValueType::ENUM).Tag(TAG_ENUM),
});
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE),
HeaderParserValue::Keyword(pos, HeaderParserValueType::ENUM), HeaderParserValue::Keyword(pos, HeaderParserValueType::ENUM),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
REQUIRE(test.PerformTest()); REQUIRE(test.PerformTest());
REQUIRE(test.GetConsumedTokenCount() == 2); REQUIRE(test.GetConsumedTokenCount() == 2);
@ -301,14 +350,18 @@ namespace test::parsing::matcher
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers({create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE), test.Matchers({
create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE),
create.Optional(create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT)), create.Optional(create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT)),
create.Type(HeaderParserValueType::ENUM).Tag(TAG_ENUM)}); create.Type(HeaderParserValueType::ENUM).Tag(TAG_ENUM),
});
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE),
HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT), HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT),
HeaderParserValue::Keyword(pos, HeaderParserValueType::ENUM), HeaderParserValue::Keyword(pos, HeaderParserValueType::ENUM),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
REQUIRE(test.PerformTest()); REQUIRE(test.PerformTest());
REQUIRE(test.GetConsumedTokenCount() == 3); REQUIRE(test.GetConsumedTokenCount() == 3);
@ -323,15 +376,19 @@ namespace test::parsing::matcher
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers({create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE), test.Matchers({
create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE),
create.Optional(create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT)), create.Optional(create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT)),
create.Type(HeaderParserValueType::ENUM).Tag(TAG_ENUM)}); create.Type(HeaderParserValueType::ENUM).Tag(TAG_ENUM),
});
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE),
HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT), HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT),
HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT), HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT),
HeaderParserValue::Keyword(pos, HeaderParserValueType::ENUM), HeaderParserValue::Keyword(pos, HeaderParserValueType::ENUM),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
REQUIRE(!test.PerformTest()); REQUIRE(!test.PerformTest());
} }
@ -346,19 +403,28 @@ namespace test::parsing::matcher
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers( test.Matchers({
{create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE), create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE),
create.Loop(create.Or({create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT), create.Type(HeaderParserValueType::TYPEDEF).Tag(TAG_TYPEDEF)})), create.Loop(create.Or({
create.Or({create.Type(HeaderParserValueType::TYPEDEF).Tag(TAG_TYPEDEF), create.Type(HeaderParserValueType::ENUM).Tag(TAG_ENUM)})}); create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT),
create.Type(HeaderParserValueType::TYPEDEF).Tag(TAG_TYPEDEF),
})),
create.Or({
create.Type(HeaderParserValueType::TYPEDEF).Tag(TAG_TYPEDEF),
create.Type(HeaderParserValueType::ENUM).Tag(TAG_ENUM),
}),
});
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE),
HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT), HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT),
HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT), HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT),
HeaderParserValue::Keyword(pos, HeaderParserValueType::TYPEDEF), HeaderParserValue::Keyword(pos, HeaderParserValueType::TYPEDEF),
HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT), HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT),
HeaderParserValue::Keyword(pos, HeaderParserValueType::TYPEDEF), HeaderParserValue::Keyword(pos, HeaderParserValueType::TYPEDEF),
HeaderParserValue::Keyword(pos, HeaderParserValueType::ENUM), HeaderParserValue::Keyword(pos, HeaderParserValueType::ENUM),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
test.MatchCallback( test.MatchCallback(
[](sequence_result_t& result) [](sequence_result_t& result)
@ -386,14 +452,23 @@ namespace test::parsing::matcher
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers({create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE), create.Label(LABEL_TEST)}); test.Matchers({
test.LabeledMatchers({create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT), create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT)}, create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE),
create.Label(LABEL_TEST),
});
test.LabeledMatchers(
{
create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT),
create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT),
},
LABEL_TEST); LABEL_TEST);
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE),
HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT), HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT),
HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT), HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
test.MatchCallback( test.MatchCallback(
[](sequence_result_t& result) [](sequence_result_t& result)
@ -417,14 +492,24 @@ namespace test::parsing::matcher
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers({create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE), create.Label(LABEL_TEST)}); test.Matchers({
test.LabeledMatchers({create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT), create.Optional(create.Label(LABEL_TEST))}, LABEL_TEST); create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE),
create.Label(LABEL_TEST),
});
test.LabeledMatchers(
{
create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT),
create.Optional(create.Label(LABEL_TEST)),
},
LABEL_TEST);
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE),
HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT), HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT),
HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT), HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT),
HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT), HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
test.MatchCallback( test.MatchCallback(
[](sequence_result_t& result) [](sequence_result_t& result)
@ -448,13 +533,18 @@ namespace test::parsing::matcher
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers( test.Matchers({
{create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE), create.Identifier().Capture(CAPTURE_NAMESPACE_NAME), create.Char('{')}); create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE),
create.Identifier().Capture(CAPTURE_NAMESPACE_NAME),
create.Char('{'),
});
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE),
HeaderParserValue::Identifier(pos, new std::string("hello_world")), HeaderParserValue::Identifier(pos, new std::string("hello_world")),
HeaderParserValue::Character(pos, '{'), HeaderParserValue::Character(pos, '{'),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
test.MatchCallback( test.MatchCallback(
[](sequence_result_t& result) [](sequence_result_t& result)
@ -487,20 +577,26 @@ namespace test::parsing::matcher
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers({create.Or({create.And({ test.Matchers({
create.Or({
create.And({
create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE), create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE),
create.Identifier().Capture(CAPTURE_NAMESPACE_NAME), create.Identifier().Capture(CAPTURE_NAMESPACE_NAME),
}), }),
create.And({ create.And({
create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT), create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT),
create.Identifier().Capture(CAPTURE_STRUCT_NAME), create.Identifier().Capture(CAPTURE_STRUCT_NAME),
})}), }),
create.Char('{')}); }),
create.Char('{'),
});
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE),
HeaderParserValue::Identifier(pos, new std::string("hello_world")), HeaderParserValue::Identifier(pos, new std::string("hello_world")),
HeaderParserValue::Character(pos, '{'), HeaderParserValue::Character(pos, '{'),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
test.MatchCallback( test.MatchCallback(
[](sequence_result_t& result) [](sequence_result_t& result)
{ {
@ -520,10 +616,12 @@ namespace test::parsing::matcher
REQUIRE(test.PerformTest()); REQUIRE(test.PerformTest());
REQUIRE(test.GetConsumedTokenCount() == 3); REQUIRE(test.GetConsumedTokenCount() == 3);
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT),
HeaderParserValue::Identifier(pos, new std::string("bye_struct")), HeaderParserValue::Identifier(pos, new std::string("bye_struct")),
HeaderParserValue::Character(pos, '{'), HeaderParserValue::Character(pos, '{'),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
test.MatchCallback( test.MatchCallback(
[](sequence_result_t& result) [](sequence_result_t& result)
{ {
@ -553,16 +651,20 @@ namespace test::parsing::matcher
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers({create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE), test.Matchers({
create.Type(HeaderParserValueType::NAMESPACE).Tag(TAG_NAMESPACE),
create.Loop(create.Identifier().Capture(CAPTURE_NAMESPACE_NAME)), create.Loop(create.Identifier().Capture(CAPTURE_NAMESPACE_NAME)),
create.Char('{')}); create.Char('{'),
});
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE),
HeaderParserValue::Identifier(pos, new std::string("hello_world")), HeaderParserValue::Identifier(pos, new std::string("hello_world")),
HeaderParserValue::Identifier(pos, new std::string("hello_universe")), HeaderParserValue::Identifier(pos, new std::string("hello_universe")),
HeaderParserValue::Identifier(pos, new std::string("hello_everyone")), HeaderParserValue::Identifier(pos, new std::string("hello_everyone")),
HeaderParserValue::Character(pos, '{'), HeaderParserValue::Character(pos, '{'),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
test.MatchCallback( test.MatchCallback(
[](sequence_result_t& result) [](sequence_result_t& result)
@ -607,13 +709,23 @@ namespace test::parsing::matcher
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers( test.Matchers({
{create.And({create.Type(HeaderParserValueType::NAMESPACE), create.Identifier()}).Tag(TAG_AND_GROUP).Capture(CAPTURE_AND_GROUP), create.Char('{')}); create
.And({
create.Type(HeaderParserValueType::NAMESPACE),
create.Identifier(),
})
.Tag(TAG_AND_GROUP)
.Capture(CAPTURE_AND_GROUP),
create.Char('{'),
});
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE),
HeaderParserValue::Identifier(pos, new std::string("hello_world")), HeaderParserValue::Identifier(pos, new std::string("hello_world")),
HeaderParserValue::Character(pos, '{'), HeaderParserValue::Character(pos, '{'),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
test.MatchCallback( test.MatchCallback(
[](sequence_result_t& result) [](sequence_result_t& result)
@ -647,16 +759,25 @@ namespace test::parsing::matcher
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers( test.Matchers({
{create.Loop(create.And({create.Type(HeaderParserValueType::NAMESPACE), create.Identifier()})).Tag(TAG_LOOP_GROUP).Capture(CAPTURE_LOOP_GROUP), create
create.Char('{')}); .Loop(create.And({
create.Type(HeaderParserValueType::NAMESPACE),
create.Identifier(),
}))
.Tag(TAG_LOOP_GROUP)
.Capture(CAPTURE_LOOP_GROUP),
create.Char('{'),
});
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE),
HeaderParserValue::Identifier(pos, new std::string("hello_world")), HeaderParserValue::Identifier(pos, new std::string("hello_world")),
HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE), HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE),
HeaderParserValue::Identifier(pos, new std::string("hello_universe")), HeaderParserValue::Identifier(pos, new std::string("hello_universe")),
HeaderParserValue::Character(pos, '{'), HeaderParserValue::Character(pos, '{'),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
test.MatchCallback( test.MatchCallback(
[](sequence_result_t& result) [](sequence_result_t& result)
@ -700,8 +821,22 @@ namespace test::parsing::matcher
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers({create.Type(HeaderParserValueType::STRUCT), create.Label(LABEL_TYPENAME).Capture(CAPTURE_TYPENAME), create.Char('{')}); test.Matchers({
test.LabeledMatchers({create.And({create.Identifier(), create.OptionalLoop(create.And({create.Char(':'), create.Char(':'), create.Identifier()}))}) create.Type(HeaderParserValueType::STRUCT),
create.Label(LABEL_TYPENAME).Capture(CAPTURE_TYPENAME),
create.Char('{'),
});
test.LabeledMatchers(
{
create
.And({
create.Identifier(),
create.OptionalLoop(create.And({
create.Char(':'),
create.Char(':'),
create.Identifier(),
})),
})
.Transform( .Transform(
[](HeaderMatcherFactory::token_list_t& values) [](HeaderMatcherFactory::token_list_t& values)
{ {
@ -712,16 +847,19 @@ namespace test::parsing::matcher
str << "::" << values[i].get().IdentifierValue(); str << "::" << values[i].get().IdentifierValue();
return HeaderParserValue::TypeName(values[0].get().GetPos(), new std::string(str.str())); return HeaderParserValue::TypeName(values[0].get().GetPos(), new std::string(str.str()));
})}, }),
},
LABEL_TYPENAME); LABEL_TYPENAME);
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT),
HeaderParserValue::Identifier(pos, new std::string("hello")), HeaderParserValue::Identifier(pos, new std::string("hello")),
HeaderParserValue::Character(pos, ':'), HeaderParserValue::Character(pos, ':'),
HeaderParserValue::Character(pos, ':'), HeaderParserValue::Character(pos, ':'),
HeaderParserValue::Identifier(pos, new std::string("world")), HeaderParserValue::Identifier(pos, new std::string("world")),
HeaderParserValue::Character(pos, '{'), HeaderParserValue::Character(pos, '{'),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
test.MatchCallback( test.MatchCallback(
[](sequence_result_t& result) [](sequence_result_t& result)
@ -752,10 +890,22 @@ namespace test::parsing::matcher
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers({create.Type(HeaderParserValueType::STRUCT), create.Label(LABEL_TYPENAME).Capture(CAPTURE_TYPENAME), create.Char('{')}); test.Matchers({
test.LabeledMatchers({create create.Type(HeaderParserValueType::STRUCT),
.And({create.Identifier().Capture(CAPTURE_FIRST_TYPENAME_IDENTIFIER), create.Label(LABEL_TYPENAME).Capture(CAPTURE_TYPENAME),
create.OptionalLoop(create.And({create.Char(':'), create.Char(':'), create.Identifier()}))}) create.Char('{'),
});
test.LabeledMatchers(
{
create
.And({
create.Identifier().Capture(CAPTURE_FIRST_TYPENAME_IDENTIFIER),
create.OptionalLoop(create.And({
create.Char(':'),
create.Char(':'),
create.Identifier(),
})),
})
.Transform( .Transform(
[](HeaderMatcherFactory::token_list_t& values) [](HeaderMatcherFactory::token_list_t& values)
{ {
@ -766,16 +916,19 @@ namespace test::parsing::matcher
str << "::" << values[i].get().IdentifierValue(); str << "::" << values[i].get().IdentifierValue();
return HeaderParserValue::TypeName(values[0].get().GetPos(), new std::string(str.str())); return HeaderParserValue::TypeName(values[0].get().GetPos(), new std::string(str.str()));
})}, }),
},
LABEL_TYPENAME); LABEL_TYPENAME);
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT),
HeaderParserValue::Identifier(pos, new std::string("hello")), HeaderParserValue::Identifier(pos, new std::string("hello")),
HeaderParserValue::Character(pos, ':'), HeaderParserValue::Character(pos, ':'),
HeaderParserValue::Character(pos, ':'), HeaderParserValue::Character(pos, ':'),
HeaderParserValue::Identifier(pos, new std::string("world")), HeaderParserValue::Identifier(pos, new std::string("world")),
HeaderParserValue::Character(pos, '{'), HeaderParserValue::Character(pos, '{'),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
test.MatchCallback( test.MatchCallback(
[](sequence_result_t& result) [](sequence_result_t& result)
@ -812,7 +965,8 @@ namespace test::parsing::matcher
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers({create.Type(HeaderParserValueType::STRUCT), test.Matchers({
create.Type(HeaderParserValueType::STRUCT),
create.Identifier() create.Identifier()
.Capture(CAPTURE_NAME) .Capture(CAPTURE_NAME)
.Transform( .Transform(
@ -822,12 +976,15 @@ namespace test::parsing::matcher
std::transform(str.begin(), str.end(), str.begin(), toupper); std::transform(str.begin(), str.end(), str.begin(), toupper);
return HeaderParserValue::Identifier(tokens[0].get().GetPos(), new std::string(std::move(str))); return HeaderParserValue::Identifier(tokens[0].get().GetPos(), new std::string(std::move(str)));
}), }),
create.Char('{')}); create.Char('{'),
});
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::STRUCT),
HeaderParserValue::Identifier(pos, new std::string("hello_world")), HeaderParserValue::Identifier(pos, new std::string("hello_world")),
HeaderParserValue::Character(pos, '{'), HeaderParserValue::Character(pos, '{'),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
test.MatchCallback( test.MatchCallback(
[](sequence_result_t& result) [](sequence_result_t& result)
@ -852,12 +1009,18 @@ namespace test::parsing::matcher
{ {
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE),
HeaderParserValue::Identifier(pos, new std::string("test_namespace")), HeaderParserValue::Identifier(pos, new std::string("test_namespace")),
HeaderParserValue::Character(pos, '{'), HeaderParserValue::Character(pos, '{'),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers({create.Type(HeaderParserValueType::NAMESPACE), create.Identifier(), create.Char('{').NoConsume()}); test.Matchers({
create.Type(HeaderParserValueType::NAMESPACE),
create.Identifier(),
create.Char('{').NoConsume(),
});
REQUIRE(test.PerformTest()); REQUIRE(test.PerformTest());
REQUIRE(test.GetConsumedTokenCount() == 2); REQUIRE(test.GetConsumedTokenCount() == 2);
@ -869,12 +1032,17 @@ namespace test::parsing::matcher
MatchersTestsHelper test; MatchersTestsHelper test;
const TokenPos pos; const TokenPos pos;
test.Tokens({HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE), test.Tokens({
HeaderParserValue::Keyword(pos, HeaderParserValueType::NAMESPACE),
HeaderParserValue::Identifier(pos, new std::string("test_namespace")), HeaderParserValue::Identifier(pos, new std::string("test_namespace")),
HeaderParserValue::Character(pos, '{'), HeaderParserValue::Character(pos, '{'),
HeaderParserValue::Invalid(pos)}); HeaderParserValue::Invalid(pos),
});
const auto create = test.Factory(); const auto create = test.Factory();
test.Matchers({create.Type(HeaderParserValueType::NAMESPACE), create.Identifier().NoConsume().Capture(CAPTURE_NAME)}); test.Matchers({
create.Type(HeaderParserValueType::NAMESPACE),
create.Identifier().NoConsume().Capture(CAPTURE_NAME),
});
test.MatchCallback( test.MatchCallback(
[](sequence_result_t& result) [](sequence_result_t& result)
{ {