#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace ovdl::v2script { using FileTree = ast::FileTree; using FilePosition = ovdl::FilePosition; class Parser final : public detail::BasicParser { public: Parser(); Parser(std::basic_ostream& error_stream); static Parser from_buffer(const char* data, std::size_t size, std::optional encoding_fallback = std::nullopt); static Parser from_buffer(const char* start, const char* end, std::optional encoding_fallback = std::nullopt); static Parser from_string(const std::string_view string, std::optional encoding_fallback = std::nullopt); static Parser from_file(const char* path, std::optional encoding_fallback = std::nullopt); static Parser from_file(const std::filesystem::path& path, std::optional encoding_fallback = std::nullopt); Parser& load_from_buffer(const char* data, std::size_t size, std::optional encoding_fallback = std::nullopt); Parser& load_from_buffer(const char* start, const char* end, std::optional encoding_fallback = std::nullopt); Parser& load_from_string(const std::string_view string, std::optional encoding_fallback = std::nullopt); Parser& load_from_file(const char* path, std::optional encoding_fallback = std::nullopt); Parser& load_from_file(const std::filesystem::path& path, std::optional encoding_fallback = std::nullopt); constexpr Parser& load_from_file(const detail::HasCstr auto& path, std::optional encoding_fallback = std::nullopt) { return load_from_file(path.c_str(), encoding_fallback); } bool simple_parse(); bool event_parse(); bool decision_parse(); bool lua_defines_parse(); const FileTree* get_file_node() const; std::string_view value(const ovdl::v2script::ast::FlatValue* node) const; std::string make_native_string() const; std::string make_list_string() const; const FilePosition get_position(const ast::Node* node) const; using error_range = ovdl::detail::error_range; Parser::error_range get_errors() const; const FilePosition get_error_position(const error::Error* error) const; void print_errors_to(std::basic_ostream& stream) const; Parser(Parser&&); Parser& operator=(Parser&&); ~Parser(); private: class ParseHandler; std::unique_ptr _parse_handler; template constexpr void _run_load_func(detail::LoadCallback auto func, Args... args); }; }