Move menu parsing classes to menu namespace

This commit is contained in:
Jan 2021-11-01 09:43:07 +01:00
parent 38d60983e8
commit ff823b4722
26 changed files with 197 additions and 132 deletions

View File

@ -28,7 +28,7 @@ bool AssetLoaderMenuList::LoadFromRaw(const std::string& assetName, ISearchPath*
if (!file.IsOpen()) if (!file.IsOpen())
return false; return false;
MenuFileReader reader(*file.m_stream, assetName, MenuFeatureLevel::IW4, [searchPath](const std::string& filename, const std::string& sourceFile) -> std::unique_ptr<std::istream> menu::MenuFileReader reader(*file.m_stream, assetName, menu::FeatureLevel::IW4, [searchPath](const std::string& filename, const std::string& sourceFile) -> std::unique_ptr<std::istream>
{ {
auto foundFileToInclude = searchPath->Open(filename); auto foundFileToInclude = searchPath->Open(filename);
if (!foundFileToInclude.IsOpen() || !foundFileToInclude.m_stream) if (!foundFileToInclude.IsOpen() || !foundFileToInclude.m_stream)

View File

@ -2,8 +2,11 @@
#include <string> #include <string>
namespace menu
{
class CommonFunctionDef class CommonFunctionDef
{ {
public: public:
std::string m_name; std::string m_name;
}; };
}

View File

@ -2,8 +2,11 @@
#include <string> #include <string>
namespace menu
{
class CommonItemDef class CommonItemDef
{ {
public: public:
std::string m_name; std::string m_name;
}; };
}

View File

@ -5,9 +5,12 @@
#include "CommonItemDef.h" #include "CommonItemDef.h"
namespace menu
{
class CommonMenuDef class CommonMenuDef
{ {
public: public:
std::string m_name; std::string m_name;
std::vector<std::unique_ptr<CommonItemDef>> m_items; std::vector<std::unique_ptr<CommonItemDef>> m_items;
}; };
}

View File

@ -1,7 +1,10 @@
#pragma once #pragma once
enum class MenuFeatureLevel namespace menu
{
enum class FeatureLevel
{ {
IW4, IW4,
IW5 IW5
}; };
}

View File

@ -6,10 +6,13 @@
#include "CommonFunctionDef.h" #include "CommonFunctionDef.h"
#include "CommonMenuDef.h" #include "CommonMenuDef.h"
class MenuParsingResult namespace menu
{
class ParsingResult
{ {
public: public:
std::vector<std::unique_ptr<CommonMenuDef>> m_menus; std::vector<std::unique_ptr<CommonMenuDef>> m_menus;
std::vector<std::unique_ptr<CommonFunctionDef>> m_functions; std::vector<std::unique_ptr<CommonFunctionDef>> m_functions;
std::vector<std::string> m_menus_to_load; std::vector<std::string> m_menus_to_load;
}; };
}

View File

@ -8,7 +8,9 @@
#include "Sequence/SequenceOpenGlobalScopeBlock.h" #include "Sequence/SequenceOpenGlobalScopeBlock.h"
#include "Sequence/Properties/SequenceName.h" #include "Sequence/Properties/SequenceName.h"
MenuFileParser::MenuFileParser(SimpleLexer* lexer, const MenuFeatureLevel featureLevel) using namespace menu;
MenuFileParser::MenuFileParser(SimpleLexer* lexer, const FeatureLevel featureLevel)
: AbstractParser(lexer, std::make_unique<MenuFileParserState>(featureLevel)) : AbstractParser(lexer, std::make_unique<MenuFileParserState>(featureLevel))
{ {
CreateTestCollections(); CreateTestCollections();

View File

@ -6,6 +6,8 @@
#include "Parsing/Simple/SimpleParserValue.h" #include "Parsing/Simple/SimpleParserValue.h"
#include "Parsing/Impl/AbstractParser.h" #include "Parsing/Impl/AbstractParser.h"
namespace menu
{
class MenuFileParser final : public AbstractParser<SimpleParserValue, MenuFileParserState> class MenuFileParser final : public AbstractParser<SimpleParserValue, MenuFileParserState>
{ {
std::vector<std::unique_ptr<sequence_t>> m_all_tests; std::vector<std::unique_ptr<sequence_t>> m_all_tests;
@ -27,6 +29,7 @@ protected:
const std::vector<sequence_t*>& GetTestsForState() override; const std::vector<sequence_t*>& GetTestsForState() override;
public: public:
MenuFileParser(SimpleLexer* lexer, MenuFeatureLevel featureLevel); MenuFileParser(SimpleLexer* lexer, FeatureLevel featureLevel);
_NODISCARD MenuFileParserState* GetState() const; _NODISCARD MenuFileParserState* GetState() const;
}; };
}

View File

@ -1,6 +1,8 @@
#include "MenuFileParserState.h" #include "MenuFileParserState.h"
MenuFileParserState::MenuFileParserState(const MenuFeatureLevel featureLevel) using namespace menu;
MenuFileParserState::MenuFileParserState(const FeatureLevel featureLevel)
: m_feature_level(featureLevel), : m_feature_level(featureLevel),
m_in_global_scope(false) m_in_global_scope(false)
{ {

View File

@ -8,10 +8,12 @@
#include "Domain/CommonMenuDef.h" #include "Domain/CommonMenuDef.h"
#include "Domain/MenuFeatureLevel.h" #include "Domain/MenuFeatureLevel.h"
namespace menu
{
class MenuFileParserState class MenuFileParserState
{ {
public: public:
const MenuFeatureLevel m_feature_level; const FeatureLevel m_feature_level;
std::vector<std::string> m_menus_to_load; std::vector<std::string> m_menus_to_load;
std::vector<std::unique_ptr<CommonFunctionDef>> m_functions; std::vector<std::unique_ptr<CommonFunctionDef>> m_functions;
@ -25,5 +27,6 @@ public:
std::unique_ptr<CommonMenuDef> m_current_menu; std::unique_ptr<CommonMenuDef> m_current_menu;
std::unique_ptr<CommonItemDef> m_current_item; std::unique_ptr<CommonItemDef> m_current_item;
explicit MenuFileParserState(MenuFeatureLevel featureLevel); explicit MenuFileParserState(FeatureLevel featureLevel);
}; };
}

View File

@ -8,7 +8,9 @@
#include "Parsing/Impl/ParserSingleInputStream.h" #include "Parsing/Impl/ParserSingleInputStream.h"
#include "Parsing/Simple/SimpleLexer.h" #include "Parsing/Simple/SimpleLexer.h"
MenuFileReader::MenuFileReader(std::istream& stream, std::string fileName, const MenuFeatureLevel featureLevel, include_callback_t includeCallback) using namespace menu;
MenuFileReader::MenuFileReader(std::istream& stream, std::string fileName, const FeatureLevel featureLevel, include_callback_t includeCallback)
: m_feature_level(featureLevel), : m_feature_level(featureLevel),
m_file_name(std::move(fileName)), m_file_name(std::move(fileName)),
m_stream(nullptr) m_stream(nullptr)
@ -18,7 +20,7 @@ MenuFileReader::MenuFileReader(std::istream& stream, std::string fileName, const
m_stream = m_open_streams.back().get(); m_stream = m_open_streams.back().get();
} }
MenuFileReader::MenuFileReader(std::istream& stream, std::string fileName, const MenuFeatureLevel featureLevel) MenuFileReader::MenuFileReader(std::istream& stream, std::string fileName, const FeatureLevel featureLevel)
: m_feature_level(featureLevel), : m_feature_level(featureLevel),
m_file_name(std::move(fileName)), m_file_name(std::move(fileName)),
m_stream(nullptr) m_stream(nullptr)
@ -45,10 +47,10 @@ void MenuFileReader::SetupDefinesProxy()
defines->AddDefine(DefinesStreamProxy::Define("PC", "1")); defines->AddDefine(DefinesStreamProxy::Define("PC", "1"));
switch(m_feature_level) switch(m_feature_level)
{ {
case MenuFeatureLevel::IW4: case FeatureLevel::IW4:
defines->AddDefine(DefinesStreamProxy::Define("FEATURE_LEVEL_IW4", "1")); defines->AddDefine(DefinesStreamProxy::Define("FEATURE_LEVEL_IW4", "1"));
break; break;
case MenuFeatureLevel::IW5: case FeatureLevel::IW5:
defines->AddDefine(DefinesStreamProxy::Define("FEATURE_LEVEL_IW5", "1")); defines->AddDefine(DefinesStreamProxy::Define("FEATURE_LEVEL_IW5", "1"));
break; break;
default: default:
@ -97,9 +99,9 @@ bool MenuFileReader::IsValidEndState(const MenuFileParserState* state) const
return true; return true;
} }
std::unique_ptr<MenuParsingResult> MenuFileReader::CreateParsingResult(MenuFileParserState* state) const std::unique_ptr<ParsingResult> MenuFileReader::CreateParsingResult(MenuFileParserState* state) const
{ {
auto result = std::make_unique<MenuParsingResult>(); auto result = std::make_unique<ParsingResult>();
result->m_menus = std::move(state->m_menus); result->m_menus = std::move(state->m_menus);
result->m_functions = std::move(state->m_functions); result->m_functions = std::move(state->m_functions);
result->m_menus_to_load = std::move(state->m_menus_to_load); result->m_menus_to_load = std::move(state->m_menus_to_load);
@ -107,9 +109,9 @@ std::unique_ptr<MenuParsingResult> MenuFileReader::CreateParsingResult(MenuFileP
return result; return result;
} }
std::unique_ptr<MenuParsingResult> MenuFileReader::ReadMenuFile() std::unique_ptr<ParsingResult> MenuFileReader::ReadMenuFile()
{ {
const auto lexer = std::make_unique<SimpleLexer>(m_stream, SimpleLexer::Config{false, true, false}); const auto lexer = std::make_unique<SimpleLexer>(m_stream, SimpleLexer::Config{false, true, true});
const auto parser = std::make_unique<MenuFileParser>(lexer.get(), m_feature_level); const auto parser = std::make_unique<MenuFileParser>(lexer.get(), m_feature_level);
if (!parser->Parse()) if (!parser->Parse())

View File

@ -9,13 +9,15 @@
#include "Domain/MenuParsingResult.h" #include "Domain/MenuParsingResult.h"
#include "Parsing/IParserLineStream.h" #include "Parsing/IParserLineStream.h"
namespace menu
{
class MenuFileReader class MenuFileReader
{ {
public: public:
using include_callback_t = std::function<std::unique_ptr<std::istream>(const std::string& filename, const std::string& sourceFile)>; using include_callback_t = std::function<std::unique_ptr<std::istream>(const std::string& filename, const std::string& sourceFile)>;
private: private:
const MenuFeatureLevel m_feature_level; const FeatureLevel m_feature_level;
const std::string m_file_name; const std::string m_file_name;
IParserLineStream* m_stream; IParserLineStream* m_stream;
@ -26,11 +28,12 @@ private:
void SetupStreamProxies(); void SetupStreamProxies();
bool IsValidEndState(const MenuFileParserState* state) const; bool IsValidEndState(const MenuFileParserState* state) const;
std::unique_ptr<MenuParsingResult> CreateParsingResult(MenuFileParserState* state) const; std::unique_ptr<ParsingResult> CreateParsingResult(MenuFileParserState* state) const;
public: public:
MenuFileReader(std::istream& stream, std::string fileName, MenuFeatureLevel featureLevel); MenuFileReader(std::istream& stream, std::string fileName, FeatureLevel featureLevel);
MenuFileReader(std::istream& stream, std::string fileName, MenuFeatureLevel featureLevel, include_callback_t includeCallback); MenuFileReader(std::istream& stream, std::string fileName, FeatureLevel featureLevel, include_callback_t includeCallback);
std::unique_ptr<MenuParsingResult> ReadMenuFile(); std::unique_ptr<ParsingResult> ReadMenuFile();
}; };
}

View File

@ -2,6 +2,8 @@
#include "Parsing/Simple/Matcher/SimpleMatcherFactory.h" #include "Parsing/Simple/Matcher/SimpleMatcherFactory.h"
using namespace menu;
SequenceName::SequenceName() SequenceName::SequenceName()
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);

View File

@ -2,6 +2,8 @@
#include "Parsing/Menu/MenuFileParser.h" #include "Parsing/Menu/MenuFileParser.h"
namespace menu
{
class SequenceName final : public MenuFileParser::sequence_t class SequenceName final : public MenuFileParser::sequence_t
{ {
static constexpr auto CAPTURE_NAME = 1; static constexpr auto CAPTURE_NAME = 1;
@ -12,3 +14,4 @@ protected:
public: public:
SequenceName(); SequenceName();
}; };
}

View File

@ -4,6 +4,8 @@
#include "Parsing/Simple/Matcher/SimpleMatcherFactory.h" #include "Parsing/Simple/Matcher/SimpleMatcherFactory.h"
using namespace menu;
SequenceCloseBlock::SequenceCloseBlock() SequenceCloseBlock::SequenceCloseBlock()
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);

View File

@ -2,6 +2,8 @@
#include "Parsing/Menu/MenuFileParser.h" #include "Parsing/Menu/MenuFileParser.h"
namespace menu
{
class SequenceCloseBlock final : public MenuFileParser::sequence_t class SequenceCloseBlock final : public MenuFileParser::sequence_t
{ {
static constexpr auto CAPTURE_TOKEN = 1; static constexpr auto CAPTURE_TOKEN = 1;
@ -12,3 +14,4 @@ protected:
public: public:
SequenceCloseBlock(); SequenceCloseBlock();
}; };
}

View File

@ -2,6 +2,8 @@
#include "Parsing/Simple/Matcher/SimpleMatcherFactory.h" #include "Parsing/Simple/Matcher/SimpleMatcherFactory.h"
using namespace menu;
SequenceFunctionDef::SequenceFunctionDef() SequenceFunctionDef::SequenceFunctionDef()
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);

View File

@ -2,6 +2,8 @@
#include "Parsing/Menu/MenuFileParser.h" #include "Parsing/Menu/MenuFileParser.h"
namespace menu
{
class SequenceFunctionDef final : public MenuFileParser::sequence_t class SequenceFunctionDef final : public MenuFileParser::sequence_t
{ {
protected: protected:
@ -10,3 +12,4 @@ protected:
public: public:
SequenceFunctionDef(); SequenceFunctionDef();
}; };
}

View File

@ -2,6 +2,8 @@
#include "Parsing/Simple/Matcher/SimpleMatcherFactory.h" #include "Parsing/Simple/Matcher/SimpleMatcherFactory.h"
using namespace menu;
SequenceItemDef::SequenceItemDef() SequenceItemDef::SequenceItemDef()
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);

View File

@ -2,6 +2,8 @@
#include "Parsing/Menu/MenuFileParser.h" #include "Parsing/Menu/MenuFileParser.h"
namespace menu
{
class SequenceItemDef final : public MenuFileParser::sequence_t class SequenceItemDef final : public MenuFileParser::sequence_t
{ {
protected: protected:
@ -10,3 +12,4 @@ protected:
public: public:
SequenceItemDef(); SequenceItemDef();
}; };
}

View File

@ -2,6 +2,8 @@
#include "Parsing/Simple/Matcher/SimpleMatcherFactory.h" #include "Parsing/Simple/Matcher/SimpleMatcherFactory.h"
using namespace menu;
SequenceLoadMenu::SequenceLoadMenu() SequenceLoadMenu::SequenceLoadMenu()
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);

View File

@ -2,6 +2,8 @@
#include "Parsing/Menu/MenuFileParser.h" #include "Parsing/Menu/MenuFileParser.h"
namespace menu
{
class SequenceLoadMenu final : public MenuFileParser::sequence_t class SequenceLoadMenu final : public MenuFileParser::sequence_t
{ {
static constexpr auto CAPTURE_MENU_NAME = 1; static constexpr auto CAPTURE_MENU_NAME = 1;
@ -12,3 +14,4 @@ protected:
public: public:
SequenceLoadMenu(); SequenceLoadMenu();
}; };
}

View File

@ -2,6 +2,8 @@
#include "Parsing/Simple/Matcher/SimpleMatcherFactory.h" #include "Parsing/Simple/Matcher/SimpleMatcherFactory.h"
using namespace menu;
SequenceMenuDef::SequenceMenuDef() SequenceMenuDef::SequenceMenuDef()
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);

View File

@ -2,6 +2,8 @@
#include "Parsing/Menu/MenuFileParser.h" #include "Parsing/Menu/MenuFileParser.h"
namespace menu
{
class SequenceMenuDef final : public MenuFileParser::sequence_t class SequenceMenuDef final : public MenuFileParser::sequence_t
{ {
protected: protected:
@ -10,3 +12,4 @@ protected:
public: public:
SequenceMenuDef(); SequenceMenuDef();
}; };
}

View File

@ -2,6 +2,8 @@
#include "Parsing/Simple/Matcher/SimpleMatcherFactory.h" #include "Parsing/Simple/Matcher/SimpleMatcherFactory.h"
using namespace menu;
SequenceOpenGlobalScopeBlock::SequenceOpenGlobalScopeBlock() SequenceOpenGlobalScopeBlock::SequenceOpenGlobalScopeBlock()
{ {
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);

View File

@ -2,6 +2,8 @@
#include "Parsing/Menu/MenuFileParser.h" #include "Parsing/Menu/MenuFileParser.h"
namespace menu
{
class SequenceOpenGlobalScopeBlock final : public MenuFileParser::sequence_t class SequenceOpenGlobalScopeBlock final : public MenuFileParser::sequence_t
{ {
protected: protected:
@ -10,3 +12,4 @@ protected:
public: public:
SequenceOpenGlobalScopeBlock(); SequenceOpenGlobalScopeBlock();
}; };
}