#pragma once namespace xtr { namespace doc { class RSFormDoc; } // namespace doc class ExtSourceManager final : public ccl::SourceManager { public: [[nodiscard]] bool TestDomain(const ccl::src::Descriptor& global, const std::u8string& domain) const override; [[nodiscard]] ccl::src::Descriptor Convert2Local(const ccl::src::Descriptor& global, const std::u8string& domain) const override; [[nodiscard]] ccl::src::Descriptor Convert2Global(const ccl::src::Descriptor& local, const std::u8string& domain) const override; [[nodiscard]] ccl::src::Descriptor CreateLocalDesc(ccl::src::SrcType type, std::u8string localName) const override; [[nodiscard]] ccl::src::Source* Find(const ccl::src::Descriptor& desc) override; [[nodiscard]] ccl::src::Descriptor GetDescriptor(const ccl::src::Source& src) const override; bool ChangeDescriptor(const ccl::src::Descriptor& desc, const ccl::src::Descriptor& newDesc) override; [[nodiscard]] ccl::src::Source* CreateNew(const ccl::src::Descriptor& desc) override; [[nodiscard]] ccl::src::Source* Open(const ccl::src::Descriptor& desc) override; void Close(ccl::src::Source& src) override; bool SaveState(ccl::src::Source& src) override; void Discard(const ccl::src::Descriptor& desc) override; private: static const doc::RSFormDoc& RSCast(const ccl::src::Source& src); static doc::RSFormDoc& RSCast(ccl::src::Source& src); [[nodiscard]] static std::u8string FixFilename(const std::u8string& name); }; } // namespace xtr