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())
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);
if (!foundFileToInclude.IsOpen() || !foundFileToInclude.m_stream)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -8,7 +8,9 @@
#include "Sequence/SequenceOpenGlobalScopeBlock.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))
{
CreateTestCollections();

View File

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

View File

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

View File

@ -8,10 +8,12 @@
#include "Domain/CommonMenuDef.h"
#include "Domain/MenuFeatureLevel.h"
namespace menu
{
class MenuFileParserState
{
public:
const MenuFeatureLevel m_feature_level;
const FeatureLevel m_feature_level;
std::vector<std::string> m_menus_to_load;
std::vector<std::unique_ptr<CommonFunctionDef>> m_functions;
@ -25,5 +27,6 @@ public:
std::unique_ptr<CommonMenuDef> m_current_menu;
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/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_file_name(std::move(fileName)),
m_stream(nullptr)
@ -18,7 +20,7 @@ MenuFileReader::MenuFileReader(std::istream& stream, std::string fileName, const
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_file_name(std::move(fileName)),
m_stream(nullptr)
@ -45,10 +47,10 @@ void MenuFileReader::SetupDefinesProxy()
defines->AddDefine(DefinesStreamProxy::Define("PC", "1"));
switch(m_feature_level)
{
case MenuFeatureLevel::IW4:
case FeatureLevel::IW4:
defines->AddDefine(DefinesStreamProxy::Define("FEATURE_LEVEL_IW4", "1"));
break;
case MenuFeatureLevel::IW5:
case FeatureLevel::IW5:
defines->AddDefine(DefinesStreamProxy::Define("FEATURE_LEVEL_IW5", "1"));
break;
default:
@ -97,9 +99,9 @@ bool MenuFileReader::IsValidEndState(const MenuFileParserState* state) const
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_functions = std::move(state->m_functions);
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;
}
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);
if (!parser->Parse())

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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