Make ZoneDefinition sequences also accept eof instead of new line

This commit is contained in:
Jan 2021-03-10 15:17:36 +01:00
parent 8798779b39
commit 9b15afa70e
6 changed files with 24 additions and 8 deletions

View File

@ -303,8 +303,9 @@ public:
if (static_cast<int>(m_token_cache.size()) <= amount) if (static_cast<int>(m_token_cache.size()) <= amount)
{ {
const auto& lastToken = m_token_cache.back(); const auto& lastToken = m_token_cache.back();
while (m_line_cache.front().m_line_number != lastToken.GetPos().m_line while (!m_line_cache.empty()
|| m_line_cache.front().m_filename.get() != lastToken.GetPos().m_filename.get()) && (m_line_cache.front().m_line_number != lastToken.GetPos().m_line
|| m_line_cache.front().m_filename.get() != lastToken.GetPos().m_filename.get()))
{ {
m_line_cache.pop_front(); m_line_cache.pop_front();
m_line_index--; m_line_index--;
@ -336,7 +337,7 @@ public:
_NODISCARD ParserLine GetLineForPos(const TokenPos& pos) const override _NODISCARD ParserLine GetLineForPos(const TokenPos& pos) const override
{ {
for(const auto& line : m_line_cache) for (const auto& line : m_line_cache)
{ {
if (line.m_filename.get() == pos.m_filename.get() if (line.m_filename.get() == pos.m_filename.get()
&& line.m_line_number == pos.m_line) && line.m_line_number == pos.m_line)

View File

@ -13,7 +13,10 @@ std::unique_ptr<ZoneDefinitionCommonMatchers::matcher_t> ZoneDefinitionCommonMat
create.Identifier(), create.Identifier(),
create.AnyCharBesides({',', '<', '>', '"', '\\', '*', '?', '|', ':'}) create.AnyCharBesides({',', '<', '>', '"', '\\', '*', '?', '|', ':'})
})), })),
create.Type(SimpleParserValueType::NEW_LINE).NoConsume() create.Or({
create.Type(SimpleParserValueType::NEW_LINE),
create.Type(SimpleParserValueType::END_OF_FILE)
}).NoConsume()
}).Transform([](SimpleMatcherFactory::token_list_t& tokens) }).Transform([](SimpleMatcherFactory::token_list_t& tokens)
{ {
std::ostringstream str; std::ostringstream str;

View File

@ -13,7 +13,10 @@ SequenceZoneDefinitionEntry::SequenceZoneDefinitionEntry()
create.Char(','), create.Char(','),
create.Optional(create.Char(',').Tag(TAG_REFERENCE)), create.Optional(create.Char(',').Tag(TAG_REFERENCE)),
create.Label(ZoneDefinitionCommonMatchers::LABEL_ASSET_NAME).Capture(CAPTURE_ASSET_NAME), create.Label(ZoneDefinitionCommonMatchers::LABEL_ASSET_NAME).Capture(CAPTURE_ASSET_NAME),
create.Type(SimpleParserValueType::NEW_LINE) create.Or({
create.Type(SimpleParserValueType::NEW_LINE),
create.Type(SimpleParserValueType::END_OF_FILE)
})
}); });
} }

View File

@ -10,7 +10,10 @@ SequenceZoneDefinitionIgnore::SequenceZoneDefinitionIgnore()
create.Keyword("ignore"), create.Keyword("ignore"),
create.Char(','), create.Char(','),
create.Identifier().Capture(CAPTURE_IGNORE_NAME), create.Identifier().Capture(CAPTURE_IGNORE_NAME),
create.Type(SimpleParserValueType::NEW_LINE) create.Or({
create.Type(SimpleParserValueType::NEW_LINE),
create.Type(SimpleParserValueType::END_OF_FILE)
})
}); });
} }

View File

@ -10,7 +10,10 @@ SequenceZoneDefinitionInclude::SequenceZoneDefinitionInclude()
create.Keyword("include"), create.Keyword("include"),
create.Char(','), create.Char(','),
create.Identifier().Capture(CAPTURE_INCLUDE_NAME), create.Identifier().Capture(CAPTURE_INCLUDE_NAME),
create.Type(SimpleParserValueType::NEW_LINE) create.Or({
create.Type(SimpleParserValueType::NEW_LINE),
create.Type(SimpleParserValueType::END_OF_FILE)
})
}); });
} }

View File

@ -11,7 +11,10 @@ SequenceZoneDefinitionMetaData::SequenceZoneDefinitionMetaData()
create.Identifier().Capture(CAPTURE_KEY), create.Identifier().Capture(CAPTURE_KEY),
create.Char(','), create.Char(','),
create.Identifier().Capture(CAPTURE_VALUE), create.Identifier().Capture(CAPTURE_VALUE),
create.Type(SimpleParserValueType::NEW_LINE) create.Or({
create.Type(SimpleParserValueType::NEW_LINE),
create.Type(SimpleParserValueType::END_OF_FILE)
})
}); });
} }