diff --git a/src/ZoneCommon/Parsing/ZoneDefinition/Sequence/SequenceZoneDefinitionIgnore.cpp b/src/ZoneCommon/Parsing/ZoneDefinition/Sequence/SequenceZoneDefinitionIgnore.cpp new file mode 100644 index 00000000..ad81092d --- /dev/null +++ b/src/ZoneCommon/Parsing/ZoneDefinition/Sequence/SequenceZoneDefinitionIgnore.cpp @@ -0,0 +1,19 @@ +#include "SequenceZoneDefinitionIgnore.h" + +#include "Parsing/Simple/Matcher/SimpleMatcherFactory.h" + +SequenceZoneDefinitionIgnore::SequenceZoneDefinitionIgnore() +{ + const SimpleMatcherFactory create(this); + + AddMatchers({ + create.Keyword("ignore"), + create.Char(','), + create.Identifier().Capture(CAPTURE_IGNORE_NAME) + }); +} + +void SequenceZoneDefinitionIgnore::ProcessMatch(ZoneDefinition* state, SequenceResult& result) const +{ + state->m_ignores.emplace_back(result.NextCapture(CAPTURE_IGNORE_NAME).IdentifierValue()); +} diff --git a/src/ZoneCommon/Parsing/ZoneDefinition/Sequence/SequenceZoneDefinitionIgnore.h b/src/ZoneCommon/Parsing/ZoneDefinition/Sequence/SequenceZoneDefinitionIgnore.h new file mode 100644 index 00000000..2654a36f --- /dev/null +++ b/src/ZoneCommon/Parsing/ZoneDefinition/Sequence/SequenceZoneDefinitionIgnore.h @@ -0,0 +1,14 @@ +#pragma once + +#include "Parsing/ZoneDefinition/ZoneDefinitionParser.h" + +class SequenceZoneDefinitionIgnore final : public ZoneDefinitionParser::sequence_t +{ + static constexpr auto CAPTURE_IGNORE_NAME = 1; + +protected: + void ProcessMatch(ZoneDefinition* state, SequenceResult& result) const override; + +public: + SequenceZoneDefinitionIgnore(); +}; diff --git a/src/ZoneCommon/Parsing/ZoneDefinition/Sequence/SequenceZoneDefinitionInclude.cpp b/src/ZoneCommon/Parsing/ZoneDefinition/Sequence/SequenceZoneDefinitionInclude.cpp new file mode 100644 index 00000000..32f77f20 --- /dev/null +++ b/src/ZoneCommon/Parsing/ZoneDefinition/Sequence/SequenceZoneDefinitionInclude.cpp @@ -0,0 +1,19 @@ +#include "SequenceZoneDefinitionInclude.h" + +#include "Parsing/Simple/Matcher/SimpleMatcherFactory.h" + +SequenceZoneDefinitionInclude::SequenceZoneDefinitionInclude() +{ + const SimpleMatcherFactory create(this); + + AddMatchers({ + create.Keyword("include"), + create.Char(','), + create.Identifier().Capture(CAPTURE_INCLUDE_NAME) + }); +} + +void SequenceZoneDefinitionInclude::ProcessMatch(ZoneDefinition* state, SequenceResult& result) const +{ + state->m_includes.emplace_back(result.NextCapture(CAPTURE_INCLUDE_NAME).IdentifierValue()); +} diff --git a/src/ZoneCommon/Parsing/ZoneDefinition/Sequence/SequenceZoneDefinitionInclude.h b/src/ZoneCommon/Parsing/ZoneDefinition/Sequence/SequenceZoneDefinitionInclude.h new file mode 100644 index 00000000..6e57ef66 --- /dev/null +++ b/src/ZoneCommon/Parsing/ZoneDefinition/Sequence/SequenceZoneDefinitionInclude.h @@ -0,0 +1,14 @@ +#pragma once + +#include "Parsing/ZoneDefinition/ZoneDefinitionParser.h" + +class SequenceZoneDefinitionInclude final : public ZoneDefinitionParser::sequence_t +{ + static constexpr auto CAPTURE_INCLUDE_NAME = 1; + +protected: + void ProcessMatch(ZoneDefinition* state, SequenceResult& result) const override; + +public: + SequenceZoneDefinitionInclude(); +}; diff --git a/src/ZoneCommon/Parsing/ZoneDefinition/ZoneDefinitionParser.cpp b/src/ZoneCommon/Parsing/ZoneDefinition/ZoneDefinitionParser.cpp index 6a5a9d0f..c08e88b8 100644 --- a/src/ZoneCommon/Parsing/ZoneDefinition/ZoneDefinitionParser.cpp +++ b/src/ZoneCommon/Parsing/ZoneDefinition/ZoneDefinitionParser.cpp @@ -1,6 +1,8 @@ #include "ZoneDefinitionParser.h" #include "Sequence/SequenceZoneDefinitionEntry.h" +#include "Sequence/SequenceZoneDefinitionIgnore.h" +#include "Sequence/SequenceZoneDefinitionInclude.h" #include "Sequence/SequenceZoneDefinitionMetaData.h" ZoneDefinitionParser::ZoneDefinitionParser(SimpleLexer* lexer) @@ -12,6 +14,8 @@ const std::vector::sequence_t* { static std::vector tests({ new SequenceZoneDefinitionMetaData(), + new SequenceZoneDefinitionInclude(), + new SequenceZoneDefinitionIgnore(), new SequenceZoneDefinitionEntry() }); diff --git a/src/ZoneCommon/Zone/Definition/ZoneDefinition.h b/src/ZoneCommon/Zone/Definition/ZoneDefinition.h index 4e9b410f..65bd3c01 100644 --- a/src/ZoneCommon/Zone/Definition/ZoneDefinition.h +++ b/src/ZoneCommon/Zone/Definition/ZoneDefinition.h @@ -18,5 +18,7 @@ class ZoneDefinition { public: std::unordered_map m_metadata; + std::vector m_includes; + std::vector m_ignores; std::vector m_assets; }; \ No newline at end of file