Add sequences for ZoneDefinition includes and ignores

This commit is contained in:
Jan 2021-03-09 11:20:05 +01:00
parent 00462b9228
commit 6b80a1f951
6 changed files with 72 additions and 0 deletions

View File

@ -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<SimpleParserValue>& result) const
{
state->m_ignores.emplace_back(result.NextCapture(CAPTURE_IGNORE_NAME).IdentifierValue());
}

View File

@ -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<SimpleParserValue>& result) const override;
public:
SequenceZoneDefinitionIgnore();
};

View File

@ -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<SimpleParserValue>& result) const
{
state->m_includes.emplace_back(result.NextCapture(CAPTURE_INCLUDE_NAME).IdentifierValue());
}

View File

@ -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<SimpleParserValue>& result) const override;
public:
SequenceZoneDefinitionInclude();
};

View File

@ -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<AbstractParser<SimpleParserValue, ZoneDefinition>::sequence_t*
{
static std::vector<sequence_t*> tests({
new SequenceZoneDefinitionMetaData(),
new SequenceZoneDefinitionInclude(),
new SequenceZoneDefinitionIgnore(),
new SequenceZoneDefinitionEntry()
});

View File

@ -18,5 +18,7 @@ class ZoneDefinition
{
public:
std::unordered_map<std::string, std::string> m_metadata;
std::vector<std::string> m_includes;
std::vector<std::string> m_ignores;
std::vector<ZoneDefinitionEntry> m_assets;
};