mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-21 00:25:44 +00:00
Move item parsing sequences for different scopes into the same class
This commit is contained in:
parent
321794a209
commit
b15efd4a4c
@ -1,14 +1,10 @@
|
|||||||
#include "MenuFileParser.h"
|
#include "MenuFileParser.h"
|
||||||
|
|
||||||
#include "Sequence/SequenceCloseBlock.h"
|
#include "Sequence/FunctionScopeSequences.h"
|
||||||
#include "Sequence/SequenceFunctionDef.h"
|
#include "Sequence/GlobalScopeSequences.h"
|
||||||
#include "Sequence/SequenceItemDef.h"
|
#include "Sequence/ItemScopeSequences.h"
|
||||||
#include "Sequence/SequenceLoadMenu.h"
|
#include "Sequence/MenuScopeSequences.h"
|
||||||
#include "Sequence/SequenceMenuDef.h"
|
#include "Sequence/NoScopeSequences.h"
|
||||||
#include "Sequence/SequenceOpenGlobalScopeBlock.h"
|
|
||||||
#include "Sequence/Properties/FunctionPropertySequences.h"
|
|
||||||
#include "Sequence/Properties/ItemPropertySequences.h"
|
|
||||||
#include "Sequence/Properties/MenuPropertySequences.h"
|
|
||||||
|
|
||||||
using namespace menu;
|
using namespace menu;
|
||||||
|
|
||||||
@ -26,39 +22,31 @@ void MenuFileParser::AddSequence(std::vector<sequence_t*>& collection, std::uniq
|
|||||||
|
|
||||||
void MenuFileParser::CreateNoScopeTests()
|
void MenuFileParser::CreateNoScopeTests()
|
||||||
{
|
{
|
||||||
AddSequence(m_no_scope_tests, std::make_unique<SequenceOpenGlobalScopeBlock>());
|
NoScopeSequences noScopeSequences(m_all_tests, m_no_scope_tests);
|
||||||
|
noScopeSequences.AddSequences(m_state->m_feature_level);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MenuFileParser::CreateGlobalScopeTests()
|
void MenuFileParser::CreateGlobalScopeTests()
|
||||||
{
|
{
|
||||||
AddSequence(m_global_scope_tests, std::make_unique<SequenceCloseBlock>());
|
GlobalScopeSequences globalScopeSequences(m_all_tests, m_global_scope_tests);
|
||||||
AddSequence(m_global_scope_tests, std::make_unique<SequenceMenuDef>());
|
globalScopeSequences.AddSequences(m_state->m_feature_level);
|
||||||
AddSequence(m_global_scope_tests, std::make_unique<SequenceFunctionDef>());
|
|
||||||
AddSequence(m_global_scope_tests, std::make_unique<SequenceLoadMenu>());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MenuFileParser::CreateFunctionScopeTests()
|
void MenuFileParser::CreateFunctionScopeTests()
|
||||||
{
|
{
|
||||||
AddSequence(m_function_scope_tests, std::make_unique<SequenceCloseBlock>());
|
FunctionScopeSequences functionPropertySequences(m_all_tests, m_function_scope_tests);
|
||||||
|
|
||||||
FunctionPropertySequences functionPropertySequences(m_all_tests, m_function_scope_tests);
|
|
||||||
functionPropertySequences.AddSequences(m_state->m_feature_level);
|
functionPropertySequences.AddSequences(m_state->m_feature_level);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MenuFileParser::CreateMenuScopeTests()
|
void MenuFileParser::CreateMenuScopeTests()
|
||||||
{
|
{
|
||||||
AddSequence(m_menu_scope_tests, std::make_unique<SequenceCloseBlock>());
|
MenuScopeSequences menuPropertySequences(m_all_tests, m_menu_scope_tests);
|
||||||
AddSequence(m_menu_scope_tests, std::make_unique<SequenceItemDef>());
|
|
||||||
|
|
||||||
MenuPropertySequences menuPropertySequences(m_all_tests, m_menu_scope_tests);
|
|
||||||
menuPropertySequences.AddSequences(m_state->m_feature_level);
|
menuPropertySequences.AddSequences(m_state->m_feature_level);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MenuFileParser::CreateItemScopeTests()
|
void MenuFileParser::CreateItemScopeTests()
|
||||||
{
|
{
|
||||||
AddSequence(m_item_scope_tests, std::make_unique<SequenceCloseBlock>());
|
ItemScopeSequences itemPropertySequences(m_all_tests, m_item_scope_tests);
|
||||||
|
|
||||||
ItemPropertySequences itemPropertySequences(m_all_tests, m_item_scope_tests);
|
|
||||||
itemPropertySequences.AddSequences(m_state->m_feature_level);
|
itemPropertySequences.AddSequences(m_state->m_feature_level);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,9 +68,6 @@ void MenuFileParser::CreateTestCollections()
|
|||||||
|
|
||||||
const std::vector<MenuFileParser::sequence_t*>& MenuFileParser::GetTestsForState()
|
const std::vector<MenuFileParser::sequence_t*>& MenuFileParser::GetTestsForState()
|
||||||
{
|
{
|
||||||
if (!m_state->m_in_global_scope)
|
|
||||||
return m_no_scope_tests;
|
|
||||||
|
|
||||||
if (m_state->m_current_item)
|
if (m_state->m_current_item)
|
||||||
return m_item_scope_tests;
|
return m_item_scope_tests;
|
||||||
|
|
||||||
@ -92,7 +77,10 @@ const std::vector<MenuFileParser::sequence_t*>& MenuFileParser::GetTestsForState
|
|||||||
if (m_state->m_current_menu)
|
if (m_state->m_current_menu)
|
||||||
return m_menu_scope_tests;
|
return m_menu_scope_tests;
|
||||||
|
|
||||||
|
if (m_state->m_in_global_scope)
|
||||||
return m_global_scope_tests;
|
return m_global_scope_tests;
|
||||||
|
|
||||||
|
return m_no_scope_tests;
|
||||||
}
|
}
|
||||||
|
|
||||||
MenuFileParserState* MenuFileParser::GetState() const
|
MenuFileParserState* MenuFileParser::GetState() const
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
#include "AbstractScopeSequenceHolder.h"
|
||||||
|
|
||||||
|
using namespace menu;
|
||||||
|
|
||||||
|
AbstractScopeSequenceHolder::AbstractScopeSequenceHolder(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences)
|
||||||
|
: m_all_sequences(allSequences),
|
||||||
|
m_scope_sequences(scopeSequences)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void AbstractScopeSequenceHolder::AddSequence(std::unique_ptr<MenuFileParser::sequence_t> test) const
|
||||||
|
{
|
||||||
|
m_scope_sequences.push_back(test.get());
|
||||||
|
m_all_sequences.emplace_back(std::move(test));
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "Parsing/Menu/MenuFileParser.h"
|
||||||
|
|
||||||
|
namespace menu
|
||||||
|
{
|
||||||
|
class AbstractScopeSequenceHolder
|
||||||
|
{
|
||||||
|
std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& m_all_sequences;
|
||||||
|
std::vector<MenuFileParser::sequence_t*>& m_scope_sequences;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
AbstractScopeSequenceHolder(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences);
|
||||||
|
|
||||||
|
void AddSequence(std::unique_ptr<MenuFileParser::sequence_t> test) const;
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual ~AbstractScopeSequenceHolder() = default;
|
||||||
|
AbstractScopeSequenceHolder(const AbstractScopeSequenceHolder& other) = delete;
|
||||||
|
AbstractScopeSequenceHolder(AbstractScopeSequenceHolder&& other) noexcept = default;
|
||||||
|
AbstractScopeSequenceHolder& operator=(const AbstractScopeSequenceHolder& other) = delete;
|
||||||
|
AbstractScopeSequenceHolder& operator=(AbstractScopeSequenceHolder&& other) noexcept = default;
|
||||||
|
|
||||||
|
virtual void AddSequences(FeatureLevel featureLevel) = 0;
|
||||||
|
};
|
||||||
|
}
|
@ -0,0 +1,60 @@
|
|||||||
|
#include "FunctionScopeSequences.h"
|
||||||
|
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
|
#include "Generic/GenericStringPropertySequence.h"
|
||||||
|
#include "Parsing/Menu/Matcher/MenuMatcherFactory.h"
|
||||||
|
|
||||||
|
using namespace menu;
|
||||||
|
|
||||||
|
namespace menu::function_scope_sequences
|
||||||
|
{
|
||||||
|
class SequenceCloseBlock final : public MenuFileParser::sequence_t
|
||||||
|
{
|
||||||
|
static constexpr auto CAPTURE_TOKEN = 1;
|
||||||
|
|
||||||
|
public:
|
||||||
|
SequenceCloseBlock()
|
||||||
|
{
|
||||||
|
const MenuMatcherFactory create(this);
|
||||||
|
|
||||||
|
AddMatchers({
|
||||||
|
create.Char('}')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const override
|
||||||
|
{
|
||||||
|
const auto existingFunction = state->m_functions_by_name.find(state->m_current_function->m_name);
|
||||||
|
if (existingFunction == state->m_functions_by_name.end())
|
||||||
|
{
|
||||||
|
state->m_functions_by_name.emplace(std::make_pair(state->m_current_function->m_name, state->m_current_function.get()));
|
||||||
|
state->m_functions.emplace_back(std::move(state->m_current_function));
|
||||||
|
state->m_current_function = nullptr;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::ostringstream ss;
|
||||||
|
ss << "Function with name \"" << state->m_current_menu->m_name << "\" already exists";
|
||||||
|
throw ParsingException(result.NextCapture(CAPTURE_TOKEN).GetPos(), ss.str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
using namespace function_scope_sequences;
|
||||||
|
|
||||||
|
FunctionScopeSequences::FunctionScopeSequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences)
|
||||||
|
: AbstractScopeSequenceHolder(allSequences, scopeSequences)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void FunctionScopeSequences::AddSequences(FeatureLevel featureLevel)
|
||||||
|
{
|
||||||
|
AddSequence(std::make_unique<SequenceCloseBlock>());
|
||||||
|
AddSequence(std::make_unique<GenericStringPropertySequence>("name", [](const MenuFileParserState* state, const std::string& value)
|
||||||
|
{
|
||||||
|
state->m_current_function->m_name = value;
|
||||||
|
}));
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "AbstractScopeSequenceHolder.h"
|
||||||
|
|
||||||
|
namespace menu
|
||||||
|
{
|
||||||
|
class FunctionScopeSequences final : AbstractScopeSequenceHolder
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
FunctionScopeSequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences);
|
||||||
|
|
||||||
|
void AddSequences(FeatureLevel featureLevel) override;
|
||||||
|
};
|
||||||
|
}
|
112
src/ObjLoading/Parsing/Menu/Sequence/GlobalScopeSequences.cpp
Normal file
112
src/ObjLoading/Parsing/Menu/Sequence/GlobalScopeSequences.cpp
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
#include "GlobalScopeSequences.h"
|
||||||
|
|
||||||
|
#include "Generic/GenericStringPropertySequence.h"
|
||||||
|
#include "Parsing/Menu/Matcher/MenuMatcherFactory.h"
|
||||||
|
|
||||||
|
using namespace menu;
|
||||||
|
|
||||||
|
namespace menu::global_scope_sequences
|
||||||
|
{
|
||||||
|
class SequenceCloseBlock final : public MenuFileParser::sequence_t
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SequenceCloseBlock()
|
||||||
|
{
|
||||||
|
const MenuMatcherFactory create(this);
|
||||||
|
|
||||||
|
AddMatchers({
|
||||||
|
create.Char('}')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const override
|
||||||
|
{
|
||||||
|
state->m_in_global_scope = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class SequenceFunctionDef final : public MenuFileParser::sequence_t
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SequenceFunctionDef()
|
||||||
|
{
|
||||||
|
const MenuMatcherFactory create(this);
|
||||||
|
|
||||||
|
AddMatchers({
|
||||||
|
create.Keyword("functionDef"),
|
||||||
|
create.Char('{'),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const override
|
||||||
|
{
|
||||||
|
state->m_current_function = std::make_unique<CommonFunctionDef>();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class SequenceMenuDef final : public MenuFileParser::sequence_t
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SequenceMenuDef()
|
||||||
|
{
|
||||||
|
const MenuMatcherFactory create(this);
|
||||||
|
|
||||||
|
AddMatchers({
|
||||||
|
create.Keyword("menuDef"),
|
||||||
|
create.Char('{'),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const override
|
||||||
|
{
|
||||||
|
state->m_current_menu = std::make_unique<CommonMenuDef>();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class SequenceLoadMenu final : public MenuFileParser::sequence_t
|
||||||
|
{
|
||||||
|
static constexpr auto CAPTURE_MENU_NAME = 1;
|
||||||
|
|
||||||
|
public:
|
||||||
|
SequenceLoadMenu()
|
||||||
|
{
|
||||||
|
const MenuMatcherFactory create(this);
|
||||||
|
|
||||||
|
AddMatchers({
|
||||||
|
create.Keyword("loadMenu"),
|
||||||
|
create.Char('{'),
|
||||||
|
create.String().Capture(CAPTURE_MENU_NAME),
|
||||||
|
create.Char('}'),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const override
|
||||||
|
{
|
||||||
|
const auto& menuNameToken = result.NextCapture(CAPTURE_MENU_NAME);
|
||||||
|
|
||||||
|
if (menuNameToken.StringValue().empty())
|
||||||
|
throw ParsingException(menuNameToken.GetPos(), "Invalid menu name");
|
||||||
|
|
||||||
|
state->m_menus_to_load.emplace_back(menuNameToken.StringValue());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
using namespace global_scope_sequences;
|
||||||
|
|
||||||
|
GlobalScopeSequences::GlobalScopeSequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences)
|
||||||
|
: AbstractScopeSequenceHolder(allSequences, scopeSequences)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void GlobalScopeSequences::AddSequences(FeatureLevel featureLevel)
|
||||||
|
{
|
||||||
|
AddSequence(std::make_unique<SequenceCloseBlock>());
|
||||||
|
AddSequence(std::make_unique<SequenceFunctionDef>());
|
||||||
|
AddSequence(std::make_unique<SequenceMenuDef>());
|
||||||
|
AddSequence(std::make_unique<SequenceLoadMenu>());
|
||||||
|
}
|
14
src/ObjLoading/Parsing/Menu/Sequence/GlobalScopeSequences.h
Normal file
14
src/ObjLoading/Parsing/Menu/Sequence/GlobalScopeSequences.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "AbstractScopeSequenceHolder.h"
|
||||||
|
|
||||||
|
namespace menu
|
||||||
|
{
|
||||||
|
class GlobalScopeSequences final : AbstractScopeSequenceHolder
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
GlobalScopeSequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences);
|
||||||
|
|
||||||
|
void AddSequences(FeatureLevel featureLevel) override;
|
||||||
|
};
|
||||||
|
}
|
@ -1,19 +1,39 @@
|
|||||||
#include "ItemPropertySequences.h"
|
#include "ItemScopeSequences.h"
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "GenericColorPropertySequence.h"
|
#include "Generic/GenericColorPropertySequence.h"
|
||||||
#include "GenericFloatingPointPropertySequence.h"
|
#include "Generic/GenericFloatingPointPropertySequence.h"
|
||||||
#include "GenericIntPropertySequence.h"
|
#include "Generic/GenericIntPropertySequence.h"
|
||||||
#include "GenericKeywordPropertySequence.h"
|
#include "Generic/GenericKeywordPropertySequence.h"
|
||||||
#include "GenericStringPropertySequence.h"
|
#include "Generic/GenericStringPropertySequence.h"
|
||||||
#include "Parsing/Menu/Matcher/MenuMatcherFactory.h"
|
#include "Parsing/Menu/Matcher/MenuMatcherFactory.h"
|
||||||
|
|
||||||
using namespace menu;
|
using namespace menu;
|
||||||
|
|
||||||
namespace menu::item_properties
|
namespace menu::item_scope_sequences
|
||||||
{
|
{
|
||||||
|
class SequenceCloseBlock final : public MenuFileParser::sequence_t
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SequenceCloseBlock()
|
||||||
|
{
|
||||||
|
const MenuMatcherFactory create(this);
|
||||||
|
|
||||||
|
AddMatchers({
|
||||||
|
create.Char('}')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const override
|
||||||
|
{
|
||||||
|
state->m_current_menu->m_items.emplace_back(std::move(state->m_current_item));
|
||||||
|
state->m_current_item = nullptr;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class SequenceRect final : public MenuFileParser::sequence_t
|
class SequenceRect final : public MenuFileParser::sequence_t
|
||||||
{
|
{
|
||||||
static constexpr auto CAPTURE_X = 1;
|
static constexpr auto CAPTURE_X = 1;
|
||||||
@ -142,15 +162,16 @@ namespace menu::item_properties
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
using namespace item_properties;
|
using namespace item_scope_sequences;
|
||||||
|
|
||||||
ItemPropertySequences::ItemPropertySequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences)
|
ItemScopeSequences::ItemScopeSequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences)
|
||||||
: AbstractPropertySequenceHolder(allSequences, scopeSequences)
|
: AbstractScopeSequenceHolder(allSequences, scopeSequences)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void ItemPropertySequences::AddSequences(FeatureLevel featureLevel)
|
void ItemScopeSequences::AddSequences(FeatureLevel featureLevel)
|
||||||
{
|
{
|
||||||
|
AddSequence(std::make_unique<SequenceCloseBlock>());
|
||||||
AddSequence(std::make_unique<GenericStringPropertySequence>("name", [](const MenuFileParserState* state, const std::string& value)
|
AddSequence(std::make_unique<GenericStringPropertySequence>("name", [](const MenuFileParserState* state, const std::string& value)
|
||||||
{
|
{
|
||||||
state->m_current_item->m_name = value;
|
state->m_current_item->m_name = value;
|
14
src/ObjLoading/Parsing/Menu/Sequence/ItemScopeSequences.h
Normal file
14
src/ObjLoading/Parsing/Menu/Sequence/ItemScopeSequences.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "AbstractScopeSequenceHolder.h"
|
||||||
|
|
||||||
|
namespace menu
|
||||||
|
{
|
||||||
|
class ItemScopeSequences final : AbstractScopeSequenceHolder
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ItemScopeSequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences);
|
||||||
|
|
||||||
|
void AddSequences(FeatureLevel featureLevel) override;
|
||||||
|
};
|
||||||
|
}
|
@ -1,20 +1,80 @@
|
|||||||
#include "MenuPropertySequences.h"
|
#include "MenuScopeSequences.h"
|
||||||
|
|
||||||
#include "GenericBoolPropertySequence.h"
|
#include <sstream>
|
||||||
#include "GenericColorPropertySequence.h"
|
|
||||||
#include "GenericExpressionPropertySequence.h"
|
#include "Generic/GenericBoolPropertySequence.h"
|
||||||
#include "GenericFloatingPointPropertySequence.h"
|
#include "Generic/GenericColorPropertySequence.h"
|
||||||
#include "GenericIntPropertySequence.h"
|
#include "Generic/GenericExpressionPropertySequence.h"
|
||||||
#include "GenericKeywordPropertySequence.h"
|
#include "Generic/GenericFloatingPointPropertySequence.h"
|
||||||
#include "GenericStringPropertySequence.h"
|
#include "Generic/GenericIntPropertySequence.h"
|
||||||
|
#include "Generic/GenericKeywordPropertySequence.h"
|
||||||
|
#include "Generic/GenericStringPropertySequence.h"
|
||||||
#include "Parsing/Menu/Matcher/MenuMatcherFactory.h"
|
#include "Parsing/Menu/Matcher/MenuMatcherFactory.h"
|
||||||
#include "Parsing/Menu/Domain/CommonMenuTypes.h"
|
#include "Parsing/Menu/Domain/CommonMenuTypes.h"
|
||||||
#include "Parsing/Menu/Matcher/MenuCommonMatchers.h"
|
#include "Parsing/Menu/Matcher/MenuCommonMatchers.h"
|
||||||
|
|
||||||
using namespace menu;
|
using namespace menu;
|
||||||
|
|
||||||
namespace menu::menu_properties
|
namespace menu::menu_scope_sequences
|
||||||
{
|
{
|
||||||
|
class SequenceCloseBlock final : public MenuFileParser::sequence_t
|
||||||
|
{
|
||||||
|
static constexpr auto CAPTURE_TOKEN = 1;
|
||||||
|
|
||||||
|
public:
|
||||||
|
SequenceCloseBlock()
|
||||||
|
{
|
||||||
|
const MenuMatcherFactory create(this);
|
||||||
|
|
||||||
|
AddMatchers({
|
||||||
|
create.Char('}').Capture(CAPTURE_TOKEN)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const override
|
||||||
|
{
|
||||||
|
if (state->m_current_menu->m_name.empty())
|
||||||
|
throw ParsingException(result.NextCapture(CAPTURE_TOKEN).GetPos(), "Menu must have a name");
|
||||||
|
|
||||||
|
const auto existingMenu = state->m_menus_by_name.find(state->m_current_menu->m_name);
|
||||||
|
if (existingMenu == state->m_menus_by_name.end())
|
||||||
|
{
|
||||||
|
state->m_menus_by_name.emplace(std::make_pair(state->m_current_menu->m_name, state->m_current_menu.get()));
|
||||||
|
state->m_menus.emplace_back(std::move(state->m_current_menu));
|
||||||
|
state->m_current_menu = nullptr;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::ostringstream ss;
|
||||||
|
ss << "Menu with name \"" << state->m_current_menu->m_name << "\" already exists";
|
||||||
|
throw ParsingException(result.NextCapture(CAPTURE_TOKEN).GetPos(), ss.str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class SequenceItemDef final : public MenuFileParser::sequence_t
|
||||||
|
{
|
||||||
|
static constexpr auto CAPTURE_TOKEN = 1;
|
||||||
|
|
||||||
|
public:
|
||||||
|
SequenceItemDef()
|
||||||
|
{
|
||||||
|
const MenuMatcherFactory create(this);
|
||||||
|
|
||||||
|
AddMatchers({
|
||||||
|
create.Keyword("itemDef"),
|
||||||
|
create.Char('{')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const override
|
||||||
|
{
|
||||||
|
state->m_current_item = std::make_unique<CommonItemDef>();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class SequenceRect final : public MenuFileParser::sequence_t
|
class SequenceRect final : public MenuFileParser::sequence_t
|
||||||
{
|
{
|
||||||
static constexpr auto CAPTURE_X = 1;
|
static constexpr auto CAPTURE_X = 1;
|
||||||
@ -67,15 +127,17 @@ namespace menu::menu_properties
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
using namespace menu_properties;
|
using namespace menu_scope_sequences;
|
||||||
|
|
||||||
MenuPropertySequences::MenuPropertySequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences)
|
MenuScopeSequences::MenuScopeSequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences)
|
||||||
: AbstractPropertySequenceHolder(allSequences, scopeSequences)
|
: AbstractScopeSequenceHolder(allSequences, scopeSequences)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void MenuPropertySequences::AddSequences(FeatureLevel featureLevel)
|
void MenuScopeSequences::AddSequences(FeatureLevel featureLevel)
|
||||||
{
|
{
|
||||||
|
AddSequence(std::make_unique<SequenceCloseBlock>());
|
||||||
|
AddSequence(std::make_unique<SequenceItemDef>());
|
||||||
AddSequence(std::make_unique<GenericStringPropertySequence>("name", [](const MenuFileParserState* state, const std::string& value)
|
AddSequence(std::make_unique<GenericStringPropertySequence>("name", [](const MenuFileParserState* state, const std::string& value)
|
||||||
{
|
{
|
||||||
state->m_current_menu->m_name = value;
|
state->m_current_menu->m_name = value;
|
14
src/ObjLoading/Parsing/Menu/Sequence/MenuScopeSequences.h
Normal file
14
src/ObjLoading/Parsing/Menu/Sequence/MenuScopeSequences.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "AbstractScopeSequenceHolder.h"
|
||||||
|
|
||||||
|
namespace menu
|
||||||
|
{
|
||||||
|
class MenuScopeSequences final : AbstractScopeSequenceHolder
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
MenuScopeSequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences);
|
||||||
|
|
||||||
|
void AddSequences(FeatureLevel featureLevel) override;
|
||||||
|
};
|
||||||
|
}
|
40
src/ObjLoading/Parsing/Menu/Sequence/NoScopeSequences.cpp
Normal file
40
src/ObjLoading/Parsing/Menu/Sequence/NoScopeSequences.cpp
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
#include "NoScopeSequences.h"
|
||||||
|
|
||||||
|
#include "Generic/GenericStringPropertySequence.h"
|
||||||
|
#include "Parsing/Menu/Matcher/MenuMatcherFactory.h"
|
||||||
|
|
||||||
|
using namespace menu;
|
||||||
|
|
||||||
|
namespace menu::no_scope_sequences
|
||||||
|
{
|
||||||
|
class SequenceOpenGlobalScope final : public MenuFileParser::sequence_t
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SequenceOpenGlobalScope()
|
||||||
|
{
|
||||||
|
const MenuMatcherFactory create(this);
|
||||||
|
|
||||||
|
AddMatchers({
|
||||||
|
create.Char('{')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const override
|
||||||
|
{
|
||||||
|
state->m_in_global_scope = true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
using namespace no_scope_sequences;
|
||||||
|
|
||||||
|
NoScopeSequences::NoScopeSequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences)
|
||||||
|
: AbstractScopeSequenceHolder(allSequences, scopeSequences)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void NoScopeSequences::AddSequences(FeatureLevel featureLevel)
|
||||||
|
{
|
||||||
|
AddSequence(std::make_unique<SequenceOpenGlobalScope>());
|
||||||
|
}
|
14
src/ObjLoading/Parsing/Menu/Sequence/NoScopeSequences.h
Normal file
14
src/ObjLoading/Parsing/Menu/Sequence/NoScopeSequences.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "AbstractScopeSequenceHolder.h"
|
||||||
|
|
||||||
|
namespace menu
|
||||||
|
{
|
||||||
|
class NoScopeSequences final : AbstractScopeSequenceHolder
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
NoScopeSequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences);
|
||||||
|
|
||||||
|
void AddSequences(FeatureLevel featureLevel) override;
|
||||||
|
};
|
||||||
|
}
|
@ -1,15 +0,0 @@
|
|||||||
#include "AbstractPropertySequenceHolder.h"
|
|
||||||
|
|
||||||
using namespace menu;
|
|
||||||
|
|
||||||
AbstractPropertySequenceHolder::AbstractPropertySequenceHolder(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences)
|
|
||||||
: m_all_sequences(allSequences),
|
|
||||||
m_scope_sequences(scopeSequences)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void AbstractPropertySequenceHolder::AddSequence(std::unique_ptr<MenuFileParser::sequence_t> test) const
|
|
||||||
{
|
|
||||||
m_scope_sequences.push_back(test.get());
|
|
||||||
m_all_sequences.emplace_back(std::move(test));
|
|
||||||
}
|
|
@ -1,29 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <memory>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#include "Parsing/Menu/MenuFileParser.h"
|
|
||||||
|
|
||||||
namespace menu
|
|
||||||
{
|
|
||||||
class AbstractPropertySequenceHolder
|
|
||||||
{
|
|
||||||
std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& m_all_sequences;
|
|
||||||
std::vector<MenuFileParser::sequence_t*>& m_scope_sequences;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
AbstractPropertySequenceHolder(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences);
|
|
||||||
|
|
||||||
void AddSequence(std::unique_ptr<MenuFileParser::sequence_t> test) const;
|
|
||||||
|
|
||||||
public:
|
|
||||||
virtual ~AbstractPropertySequenceHolder() = default;
|
|
||||||
AbstractPropertySequenceHolder(const AbstractPropertySequenceHolder& other) = delete;
|
|
||||||
AbstractPropertySequenceHolder(AbstractPropertySequenceHolder&& other) noexcept = default;
|
|
||||||
AbstractPropertySequenceHolder& operator=(const AbstractPropertySequenceHolder& other) = delete;
|
|
||||||
AbstractPropertySequenceHolder& operator=(AbstractPropertySequenceHolder&& other) noexcept = default;
|
|
||||||
|
|
||||||
virtual void AddSequences(FeatureLevel featureLevel) = 0;
|
|
||||||
};
|
|
||||||
}
|
|
@ -1,25 +0,0 @@
|
|||||||
#include "FunctionPropertySequences.h"
|
|
||||||
|
|
||||||
#include "GenericStringPropertySequence.h"
|
|
||||||
#include "Parsing/Menu/Matcher/MenuMatcherFactory.h"
|
|
||||||
|
|
||||||
using namespace menu;
|
|
||||||
|
|
||||||
namespace menu::function_properties
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
using namespace function_properties;
|
|
||||||
|
|
||||||
FunctionPropertySequences::FunctionPropertySequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences)
|
|
||||||
: AbstractPropertySequenceHolder(allSequences, scopeSequences)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void FunctionPropertySequences::AddSequences(FeatureLevel featureLevel)
|
|
||||||
{
|
|
||||||
AddSequence(std::make_unique<GenericStringPropertySequence>("name", [](const MenuFileParserState* state, const std::string& value)
|
|
||||||
{
|
|
||||||
state->m_current_function->m_name = value;
|
|
||||||
}));
|
|
||||||
}
|
|
@ -1,14 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "AbstractPropertySequenceHolder.h"
|
|
||||||
|
|
||||||
namespace menu
|
|
||||||
{
|
|
||||||
class FunctionPropertySequences final : AbstractPropertySequenceHolder
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
FunctionPropertySequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences);
|
|
||||||
|
|
||||||
void AddSequences(FeatureLevel featureLevel) override;
|
|
||||||
};
|
|
||||||
}
|
|
@ -1,14 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "AbstractPropertySequenceHolder.h"
|
|
||||||
|
|
||||||
namespace menu
|
|
||||||
{
|
|
||||||
class ItemPropertySequences final : AbstractPropertySequenceHolder
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
ItemPropertySequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences);
|
|
||||||
|
|
||||||
void AddSequences(FeatureLevel featureLevel) override;
|
|
||||||
};
|
|
||||||
}
|
|
@ -1,14 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "AbstractPropertySequenceHolder.h"
|
|
||||||
|
|
||||||
namespace menu
|
|
||||||
{
|
|
||||||
class MenuPropertySequences final : AbstractPropertySequenceHolder
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
MenuPropertySequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences);
|
|
||||||
|
|
||||||
void AddSequences(FeatureLevel featureLevel) override;
|
|
||||||
};
|
|
||||||
}
|
|
@ -1,69 +0,0 @@
|
|||||||
#include "SequenceCloseBlock.h"
|
|
||||||
|
|
||||||
#include <sstream>
|
|
||||||
|
|
||||||
#include "Parsing/Menu/Matcher/MenuMatcherFactory.h"
|
|
||||||
|
|
||||||
using namespace menu;
|
|
||||||
|
|
||||||
SequenceCloseBlock::SequenceCloseBlock()
|
|
||||||
{
|
|
||||||
const MenuMatcherFactory create(this);
|
|
||||||
|
|
||||||
AddMatchers({
|
|
||||||
create.Char('}').Capture(CAPTURE_TOKEN)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void SequenceCloseBlock::ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const
|
|
||||||
{
|
|
||||||
assert(state->m_current_item || state->m_current_menu || state->m_current_function || state->m_in_global_scope);
|
|
||||||
assert(!state->m_current_item || (state->m_current_item && state->m_current_menu));
|
|
||||||
|
|
||||||
if(state->m_current_item && state->m_current_menu)
|
|
||||||
{
|
|
||||||
state->m_current_menu->m_items.emplace_back(std::move(state->m_current_item));
|
|
||||||
state->m_current_item = nullptr;
|
|
||||||
}
|
|
||||||
else if(state->m_current_menu)
|
|
||||||
{
|
|
||||||
if(state->m_current_menu->m_name.empty())
|
|
||||||
throw ParsingException(result.NextCapture(CAPTURE_TOKEN).GetPos(), "Menu must have a name");
|
|
||||||
|
|
||||||
const auto existingMenu = state->m_menus_by_name.find(state->m_current_menu->m_name);
|
|
||||||
if(existingMenu == state->m_menus_by_name.end())
|
|
||||||
{
|
|
||||||
state->m_menus_by_name.emplace(std::make_pair(state->m_current_menu->m_name, state->m_current_menu.get()));
|
|
||||||
state->m_menus.emplace_back(std::move(state->m_current_menu));
|
|
||||||
state->m_current_menu = nullptr;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::ostringstream ss;
|
|
||||||
ss << "Menu with name \"" << state->m_current_menu->m_name << "\" already exists";
|
|
||||||
throw ParsingException(result.NextCapture(CAPTURE_TOKEN).GetPos(), ss.str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(state->m_current_function)
|
|
||||||
{
|
|
||||||
const auto existingFunction = state->m_functions_by_name.find(state->m_current_function->m_name);
|
|
||||||
if (existingFunction == state->m_functions_by_name.end())
|
|
||||||
{
|
|
||||||
state->m_functions_by_name.emplace(std::make_pair(state->m_current_function->m_name, state->m_current_function.get()));
|
|
||||||
state->m_functions.emplace_back(std::move(state->m_current_function));
|
|
||||||
state->m_current_function = nullptr;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::ostringstream ss;
|
|
||||||
ss << "Function with name \"" << state->m_current_menu->m_name << "\" already exists";
|
|
||||||
throw ParsingException(result.NextCapture(CAPTURE_TOKEN).GetPos(), ss.str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(state->m_in_global_scope)
|
|
||||||
{
|
|
||||||
state->m_in_global_scope = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
throw ParsingException(result.NextCapture(CAPTURE_TOKEN).GetPos(), "Invalid close block");
|
|
||||||
}
|
|
@ -1,17 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "Parsing/Menu/MenuFileParser.h"
|
|
||||||
|
|
||||||
namespace menu
|
|
||||||
{
|
|
||||||
class SequenceCloseBlock final : public MenuFileParser::sequence_t
|
|
||||||
{
|
|
||||||
static constexpr auto CAPTURE_TOKEN = 1;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const override;
|
|
||||||
|
|
||||||
public:
|
|
||||||
SequenceCloseBlock();
|
|
||||||
};
|
|
||||||
}
|
|
@ -1,22 +0,0 @@
|
|||||||
#include "SequenceFunctionDef.h"
|
|
||||||
|
|
||||||
#include "Parsing/Menu/Matcher/MenuMatcherFactory.h"
|
|
||||||
|
|
||||||
using namespace menu;
|
|
||||||
|
|
||||||
SequenceFunctionDef::SequenceFunctionDef()
|
|
||||||
{
|
|
||||||
const MenuMatcherFactory create(this);
|
|
||||||
|
|
||||||
AddMatchers({
|
|
||||||
create.Keyword("functionDef"),
|
|
||||||
create.Char('{'),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void SequenceFunctionDef::ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const
|
|
||||||
{
|
|
||||||
assert(!state->m_current_menu);
|
|
||||||
|
|
||||||
state->m_current_item = std::make_unique<CommonItemDef>();
|
|
||||||
}
|
|
@ -1,15 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "Parsing/Menu/MenuFileParser.h"
|
|
||||||
|
|
||||||
namespace menu
|
|
||||||
{
|
|
||||||
class SequenceFunctionDef final : public MenuFileParser::sequence_t
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
void ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const override;
|
|
||||||
|
|
||||||
public:
|
|
||||||
SequenceFunctionDef();
|
|
||||||
};
|
|
||||||
}
|
|
@ -1,22 +0,0 @@
|
|||||||
#include "SequenceItemDef.h"
|
|
||||||
|
|
||||||
#include "Parsing/Menu/Matcher/MenuMatcherFactory.h"
|
|
||||||
|
|
||||||
using namespace menu;
|
|
||||||
|
|
||||||
SequenceItemDef::SequenceItemDef()
|
|
||||||
{
|
|
||||||
const MenuMatcherFactory create(this);
|
|
||||||
|
|
||||||
AddMatchers({
|
|
||||||
create.Keyword("itemDef"),
|
|
||||||
create.Char('{'),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void SequenceItemDef::ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const
|
|
||||||
{
|
|
||||||
assert(state->m_current_menu);
|
|
||||||
|
|
||||||
state->m_current_item = std::make_unique<CommonItemDef>();
|
|
||||||
}
|
|
@ -1,15 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "Parsing/Menu/MenuFileParser.h"
|
|
||||||
|
|
||||||
namespace menu
|
|
||||||
{
|
|
||||||
class SequenceItemDef final : public MenuFileParser::sequence_t
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
void ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const override;
|
|
||||||
|
|
||||||
public:
|
|
||||||
SequenceItemDef();
|
|
||||||
};
|
|
||||||
}
|
|
@ -1,29 +0,0 @@
|
|||||||
#include "SequenceLoadMenu.h"
|
|
||||||
|
|
||||||
#include "Parsing/Menu/Matcher/MenuMatcherFactory.h"
|
|
||||||
|
|
||||||
using namespace menu;
|
|
||||||
|
|
||||||
SequenceLoadMenu::SequenceLoadMenu()
|
|
||||||
{
|
|
||||||
const MenuMatcherFactory create(this);
|
|
||||||
|
|
||||||
AddMatchers({
|
|
||||||
create.Keyword("loadMenu"),
|
|
||||||
create.Char('{'),
|
|
||||||
create.String().Capture(CAPTURE_MENU_NAME),
|
|
||||||
create.Char('}'),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void SequenceLoadMenu::ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const
|
|
||||||
{
|
|
||||||
assert(!state->m_current_menu);
|
|
||||||
|
|
||||||
const auto& menuNameToken = result.NextCapture(CAPTURE_MENU_NAME);
|
|
||||||
|
|
||||||
if (menuNameToken.StringValue().empty())
|
|
||||||
throw ParsingException(menuNameToken.GetPos(), "Invalid menu name");
|
|
||||||
|
|
||||||
state->m_menus_to_load.emplace_back(menuNameToken.StringValue());
|
|
||||||
}
|
|
@ -1,17 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "Parsing/Menu/MenuFileParser.h"
|
|
||||||
|
|
||||||
namespace menu
|
|
||||||
{
|
|
||||||
class SequenceLoadMenu final : public MenuFileParser::sequence_t
|
|
||||||
{
|
|
||||||
static constexpr auto CAPTURE_MENU_NAME = 1;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const override;
|
|
||||||
|
|
||||||
public:
|
|
||||||
SequenceLoadMenu();
|
|
||||||
};
|
|
||||||
}
|
|
@ -1,22 +0,0 @@
|
|||||||
#include "SequenceMenuDef.h"
|
|
||||||
|
|
||||||
#include "Parsing/Menu/Matcher/MenuMatcherFactory.h"
|
|
||||||
|
|
||||||
using namespace menu;
|
|
||||||
|
|
||||||
SequenceMenuDef::SequenceMenuDef()
|
|
||||||
{
|
|
||||||
const MenuMatcherFactory create(this);
|
|
||||||
|
|
||||||
AddMatchers({
|
|
||||||
create.Keyword("menuDef"),
|
|
||||||
create.Char('{'),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void SequenceMenuDef::ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const
|
|
||||||
{
|
|
||||||
assert(!state->m_current_menu);
|
|
||||||
|
|
||||||
state->m_current_menu = std::make_unique<CommonMenuDef>();
|
|
||||||
}
|
|
@ -1,15 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "Parsing/Menu/MenuFileParser.h"
|
|
||||||
|
|
||||||
namespace menu
|
|
||||||
{
|
|
||||||
class SequenceMenuDef final : public MenuFileParser::sequence_t
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
void ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const override;
|
|
||||||
|
|
||||||
public:
|
|
||||||
SequenceMenuDef();
|
|
||||||
};
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
#include "SequenceOpenGlobalScopeBlock.h"
|
|
||||||
|
|
||||||
#include "Parsing/Menu/Matcher/MenuMatcherFactory.h"
|
|
||||||
|
|
||||||
using namespace menu;
|
|
||||||
|
|
||||||
SequenceOpenGlobalScopeBlock::SequenceOpenGlobalScopeBlock()
|
|
||||||
{
|
|
||||||
const MenuMatcherFactory create(this);
|
|
||||||
|
|
||||||
AddMatchers({
|
|
||||||
create.Char('{')
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void SequenceOpenGlobalScopeBlock::ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const
|
|
||||||
{
|
|
||||||
assert(!state->m_in_global_scope);
|
|
||||||
state->m_in_global_scope = true;
|
|
||||||
}
|
|
@ -1,15 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "Parsing/Menu/MenuFileParser.h"
|
|
||||||
|
|
||||||
namespace menu
|
|
||||||
{
|
|
||||||
class SequenceOpenGlobalScopeBlock final : public MenuFileParser::sequence_t
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
void ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const override;
|
|
||||||
|
|
||||||
public:
|
|
||||||
SequenceOpenGlobalScopeBlock();
|
|
||||||
};
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user