#pragma once #include "Domain/MenuFeatureLevel.h" #include "Domain/MenuParsingResult.h" #include "MenuAssetZoneState.h" #include "MenuFileParserState.h" #include "Parsing/IParserLineStream.h" #include #include #include namespace menu { class MenuFileReader { public: using include_callback_t = std::function(const std::string& filename, const std::string& sourceFile)>; private: const FeatureLevel m_feature_level; const std::string m_file_name; IParserLineStream* m_stream; std::vector> m_open_streams; 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 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 ReadMenuFile(); }; } // namespace menu