mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-21 00:25:44 +00:00
Add Menu Parsing Result
This commit is contained in:
parent
e79376eb3e
commit
ca1059b05c
@ -37,10 +37,25 @@ bool AssetLoaderMenuList::LoadFromRaw(const std::string& assetName, ISearchPath*
|
|||||||
return std::move(foundFileToInclude.m_stream);
|
return std::move(foundFileToInclude.m_stream);
|
||||||
});
|
});
|
||||||
|
|
||||||
if(!reader.ReadMenuFile())
|
const auto menuFileResult = reader.ReadMenuFile();
|
||||||
|
if(menuFileResult)
|
||||||
{
|
{
|
||||||
std::cout << "Could not read menu list \"" << assetName << "\"\n";
|
std::cout << "Successfully read menu list \"" << assetName << "\":\n";
|
||||||
|
|
||||||
|
std::cout << " " << menuFileResult->m_menus_to_load.size() << " menus to load:\n";
|
||||||
|
for (const auto& menuToLoad : menuFileResult->m_menus_to_load)
|
||||||
|
std::cout << " " << menuToLoad << "\n";
|
||||||
|
|
||||||
|
std::cout << " " << menuFileResult->m_menus.size() << " menus:\n";
|
||||||
|
for (const auto& menu : menuFileResult->m_menus)
|
||||||
|
std::cout << " " << menu->m_name << "\n";
|
||||||
|
|
||||||
|
std::cout << " " << menuFileResult->m_functions.size() << " functions:\n";
|
||||||
|
for (const auto& function : menuFileResult->m_functions)
|
||||||
|
std::cout << " " << function->m_name << "\n";
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
std::cout << "Could not read menu list \"" << assetName << "\"\n";
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
15
src/ObjLoading/Parsing/Menu/Domain/MenuParsingResult.h
Normal file
15
src/ObjLoading/Parsing/Menu/Domain/MenuParsingResult.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "CommonFunctionDef.h"
|
||||||
|
#include "CommonMenuDef.h"
|
||||||
|
|
||||||
|
class MenuParsingResult
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
};
|
@ -80,3 +80,8 @@ const std::vector<MenuFileParser::sequence_t*>& MenuFileParser::GetTestsForState
|
|||||||
|
|
||||||
return m_global_scope_tests;
|
return m_global_scope_tests;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MenuFileParserState* MenuFileParser::GetState() const
|
||||||
|
{
|
||||||
|
return m_state.get();
|
||||||
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "Utils/ClassUtils.h"
|
||||||
#include "MenuFileParserState.h"
|
#include "MenuFileParserState.h"
|
||||||
#include "Parsing/Simple/SimpleLexer.h"
|
#include "Parsing/Simple/SimpleLexer.h"
|
||||||
#include "Parsing/Simple/SimpleParserValue.h"
|
#include "Parsing/Simple/SimpleParserValue.h"
|
||||||
@ -27,4 +28,5 @@ protected:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
MenuFileParser(SimpleLexer* lexer, MenuFeatureLevel featureLevel);
|
MenuFileParser(SimpleLexer* lexer, MenuFeatureLevel featureLevel);
|
||||||
|
_NODISCARD MenuFileParserState* GetState() const;
|
||||||
};
|
};
|
||||||
|
@ -68,14 +68,59 @@ void MenuFileReader::SetupStreamProxies()
|
|||||||
m_stream = m_open_streams.back().get();
|
m_stream = m_open_streams.back().get();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MenuFileReader::ReadMenuFile()
|
bool MenuFileReader::IsValidEndState(const MenuFileParserState* state) const
|
||||||
|
{
|
||||||
|
if(state->m_current_item)
|
||||||
|
{
|
||||||
|
std::cout << "In \"" << m_file_name << "\": Unclosed item at end of file!\n";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(state->m_current_menu)
|
||||||
|
{
|
||||||
|
std::cout << "In \"" << m_file_name << "\": Unclosed menu at end of file!\n";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(state->m_current_function)
|
||||||
|
{
|
||||||
|
std::cout << "In \"" << m_file_name << "\": Unclosed function at end of file!\n";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(state->m_in_global_scope)
|
||||||
|
{
|
||||||
|
std::cout << "In \"" << m_file_name << "\": Did not close global scope!\n";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<MenuParsingResult> MenuFileReader::CreateParsingResult(MenuFileParserState* state) const
|
||||||
|
{
|
||||||
|
auto result = std::make_unique<MenuParsingResult>();
|
||||||
|
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);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<MenuParsingResult> 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, false});
|
||||||
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())
|
||||||
return true;
|
{
|
||||||
|
|
||||||
std::cout << "Parsing menu file failed!" << std::endl;
|
std::cout << "Parsing menu file failed!" << std::endl;
|
||||||
return false;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto* parserEndState = parser->GetState();
|
||||||
|
if (!IsValidEndState(parserEndState))
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
return CreateParsingResult(parserEndState);
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,9 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include "MenuFileParserState.h"
|
||||||
#include "Domain/MenuFeatureLevel.h"
|
#include "Domain/MenuFeatureLevel.h"
|
||||||
|
#include "Domain/MenuParsingResult.h"
|
||||||
#include "Parsing/IParserLineStream.h"
|
#include "Parsing/IParserLineStream.h"
|
||||||
|
|
||||||
class MenuFileReader
|
class MenuFileReader
|
||||||
@ -23,9 +25,12 @@ private:
|
|||||||
void SetupDefinesProxy();
|
void SetupDefinesProxy();
|
||||||
void SetupStreamProxies();
|
void SetupStreamProxies();
|
||||||
|
|
||||||
|
bool IsValidEndState(const MenuFileParserState* state) const;
|
||||||
|
std::unique_ptr<MenuParsingResult> CreateParsingResult(MenuFileParserState* state) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MenuFileReader(std::istream& stream, std::string fileName, MenuFeatureLevel featureLevel);
|
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, MenuFeatureLevel featureLevel, include_callback_t includeCallback);
|
||||||
|
|
||||||
bool ReadMenuFile();
|
std::unique_ptr<MenuParsingResult> ReadMenuFile();
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user