/* * Copyright (C) 2004-2012 Geometer Plus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #ifndef __BOOKMODEL_H__ #define __BOOKMODEL_H__ #include #include #include #include #include class ZLImage; class Book; class ContentsModel : public ZLTextTreeModel { public: ContentsModel(const std::string &language); void setReference(const ZLTextTreeParagraph *paragraph, int reference); int reference(const ZLTextTreeParagraph *paragraph) const; private: std::map myReferenceByParagraph; }; class BookModel : public ZLUserDataHolder { public: struct Label { Label(shared_ptr model, int paragraphNumber) : Model(model), ParagraphNumber(paragraphNumber) {} const shared_ptr Model; const int ParagraphNumber; }; public: class HyperlinkMatcher { public: virtual Label match(const std::map &lMap, const std::string &id) const = 0; }; public: BookModel(const shared_ptr book); ~BookModel(); void setHyperlinkMatcher(shared_ptr matcher); shared_ptr bookTextModel() const; shared_ptr contentsModel() const; const ZLImageMap &imageMap() const; Label label(const std::string &id) const; const shared_ptr book() const; private: const shared_ptr myBook; shared_ptr myBookTextModel; shared_ptr myContentsModel; ZLImageMap myImages; std::map > myFootnotes; std::map myInternalHyperlinks; shared_ptr myHyperlinkMatcher; friend class BookReader; }; inline shared_ptr BookModel::bookTextModel() const { return myBookTextModel; } inline shared_ptr BookModel::contentsModel() const { return myContentsModel; } inline const ZLImageMap &BookModel::imageMap() const { return myImages; } #endif /* __BOOKMODEL_H__ */