mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-09-08 09:47:26 +00:00
chore: parse includes and assetlists while parsing zone definition
This commit is contained in:
@@ -11,36 +11,22 @@
|
||||
|
||||
using namespace menu;
|
||||
|
||||
MenuFileReader::MenuFileReader(std::istream& stream, std::string fileName, const FeatureLevel featureLevel, include_callback_t includeCallback)
|
||||
: m_feature_level(featureLevel),
|
||||
MenuFileReader::MenuFileReader(std::istream& stream, std::string fileName, const FeatureLevel featureLevel, ISearchPath& searchPath)
|
||||
: SearchPathMultiInputStream(searchPath),
|
||||
m_feature_level(featureLevel),
|
||||
m_file_name(std::move(fileName)),
|
||||
m_stream(nullptr),
|
||||
m_zone_state(nullptr),
|
||||
m_permissive_mode(false)
|
||||
{
|
||||
OpenBaseStream(stream, std::move(includeCallback));
|
||||
OpenBaseStream(stream);
|
||||
SetupStreamProxies();
|
||||
m_stream = m_open_streams.back().get();
|
||||
}
|
||||
|
||||
MenuFileReader::MenuFileReader(std::istream& stream, std::string fileName, const FeatureLevel featureLevel)
|
||||
: m_feature_level(featureLevel),
|
||||
m_file_name(std::move(fileName)),
|
||||
m_stream(nullptr),
|
||||
m_zone_state(nullptr),
|
||||
m_permissive_mode(false)
|
||||
bool MenuFileReader::OpenBaseStream(std::istream& stream)
|
||||
{
|
||||
OpenBaseStream(stream, nullptr);
|
||||
SetupStreamProxies();
|
||||
m_stream = m_open_streams.back().get();
|
||||
}
|
||||
|
||||
bool MenuFileReader::OpenBaseStream(std::istream& stream, include_callback_t includeCallback)
|
||||
{
|
||||
if (includeCallback)
|
||||
m_open_streams.emplace_back(std::make_unique<ParserMultiInputStream>(stream, m_file_name, std::move(includeCallback)));
|
||||
else
|
||||
m_open_streams.emplace_back(std::make_unique<ParserSingleInputStream>(stream, m_file_name));
|
||||
m_open_streams.emplace_back(std::make_unique<ParserMultiInputStream>(stream, m_file_name, *this));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@@ -5,6 +5,8 @@
|
||||
#include "MenuAssetZoneState.h"
|
||||
#include "MenuFileParserState.h"
|
||||
#include "Parsing/IParserLineStream.h"
|
||||
#include "SearchPath/ISearchPath.h"
|
||||
#include "SearchPath/SearchPathMultiInputStream.h"
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
@@ -12,12 +14,24 @@
|
||||
|
||||
namespace menu
|
||||
{
|
||||
class MenuFileReader
|
||||
class MenuFileReader : public SearchPathMultiInputStream
|
||||
{
|
||||
public:
|
||||
using include_callback_t = std::function<std::unique_ptr<std::istream>(const std::string& filename, const std::string& sourceFile)>;
|
||||
MenuFileReader(std::istream& stream, std::string fileName, FeatureLevel featureLevel, ISearchPath& searchPath);
|
||||
|
||||
void IncludeZoneState(const MenuAssetZoneState* zoneState);
|
||||
void SetPermissiveMode(bool usePermissiveMode);
|
||||
|
||||
std::unique_ptr<ParsingResult> ReadMenuFile();
|
||||
|
||||
private:
|
||||
bool OpenBaseStream(std::istream& stream);
|
||||
void SetupDefinesProxy();
|
||||
void SetupStreamProxies();
|
||||
|
||||
bool IsValidEndState(const MenuFileParserState* state) const;
|
||||
std::unique_ptr<ParsingResult> CreateParsingResult(MenuFileParserState* state) const;
|
||||
|
||||
const FeatureLevel m_feature_level;
|
||||
const std::string m_file_name;
|
||||
|
||||
@@ -26,21 +40,5 @@ namespace menu
|
||||
|
||||
const MenuAssetZoneState* m_zone_state;
|
||||
bool m_permissive_mode;
|
||||
|
||||
bool OpenBaseStream(std::istream& stream, include_callback_t includeCallback);
|
||||
void SetupDefinesProxy();
|
||||
void SetupStreamProxies();
|
||||
|
||||
bool IsValidEndState(const MenuFileParserState* state) const;
|
||||
std::unique_ptr<ParsingResult> CreateParsingResult(MenuFileParserState* state) const;
|
||||
|
||||
public:
|
||||
MenuFileReader(std::istream& stream, std::string fileName, FeatureLevel featureLevel);
|
||||
MenuFileReader(std::istream& stream, std::string fileName, FeatureLevel featureLevel, include_callback_t includeCallback);
|
||||
|
||||
void IncludeZoneState(const MenuAssetZoneState* zoneState);
|
||||
void SetPermissiveMode(bool usePermissiveMode);
|
||||
|
||||
std::unique_ptr<ParsingResult> ReadMenuFile();
|
||||
};
|
||||
} // namespace menu
|
||||
|
Reference in New Issue
Block a user