summaryrefslogtreecommitdiffstats
path: root/fbreader/src/formats/chm/CHMPlugin.cpp
diff options
context:
space:
mode:
authorMichele Calgaro <michele.calgaro@yahoo.it>2024-06-07 23:30:05 +0900
committerMichele Calgaro <michele.calgaro@yahoo.it>2024-06-07 23:30:05 +0900
commit17b259df9cb6b28779d4881b2b6c805ee2e48eea (patch)
tree5ed61937459cb7081089111b0242c01ec178f1f3 /fbreader/src/formats/chm/CHMPlugin.cpp
parent1cba8bce178eb2d6719c6f7f21e2c9352c5513a6 (diff)
downloadtde-ebook-reader-17b259df9cb6b28779d4881b2b6c805ee2e48eea.tar.gz
tde-ebook-reader-17b259df9cb6b28779d4881b2b6c805ee2e48eea.zip
Rename to tde-ebook-reader
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
Diffstat (limited to 'fbreader/src/formats/chm/CHMPlugin.cpp')
-rw-r--r--fbreader/src/formats/chm/CHMPlugin.cpp252
1 files changed, 0 insertions, 252 deletions
diff --git a/fbreader/src/formats/chm/CHMPlugin.cpp b/fbreader/src/formats/chm/CHMPlugin.cpp
deleted file mode 100644
index 9ea88e4..0000000
--- a/fbreader/src/formats/chm/CHMPlugin.cpp
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Copyright (C) 2004-2012 Geometer Plus <contact@geometerplus.com>
- *
- * 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.
- */
-
-#include <ZLUnicodeUtil.h>
-#include <ZLStringUtil.h>
-#include <ZLFile.h>
-#include <ZLInputStream.h>
-
-#include "CHMPlugin.h"
-#include "CHMFile.h"
-#include "CHMFileImage.h"
-#include "CHMReferenceCollection.h"
-#include "HHCReader.h"
-#include "HHCReferenceCollector.h"
-#include "../txt/PlainTextFormat.h"
-#include "HtmlSectionReader.h"
-#include "../util/MergedStream.h"
-#include "../html/HtmlReaderStream.h"
-
-#include "../../bookmodel/BookModel.h"
-#include "../../library/Book.h"
-
-bool CHMPlugin::acceptsFile(const ZLFile &file) const {
- return file.extension() == "chm";
-}
-
-class CHMTextStream : public MergedStream {
-
-public:
- CHMTextStream(CHMFileInfo &chmFile, shared_ptr<ZLInputStream> base);
-
-private:
- void resetToStart();
- shared_ptr<ZLInputStream> nextStream();
-
-private:
- CHMFileInfo &myCHMFile;
- shared_ptr<ZLInputStream> myBase;
- std::vector<std::string> myEntryNames;
- std::size_t myIndex;
-};
-
-CHMTextStream::CHMTextStream(CHMFileInfo &chmFile, shared_ptr<ZLInputStream> base) : myCHMFile(chmFile), myBase(base) {
-}
-
-void CHMTextStream::resetToStart() {
- myIndex = 0;
-
- if (!myEntryNames.empty()) {
- return;
- }
-
- CHMFileInfo::FileNames names = myCHMFile.sectionNames(myBase);
- if (names.empty()) {
- return;
- }
-
- CHMReferenceCollection referenceCollection;
-
- referenceCollection.addReference(names.Start, false);
- referenceCollection.addReference(names.Home, false);
-
- shared_ptr<ZLInputStream> tocStream = myCHMFile.entryStream(myBase, names.TOC);
- if (!tocStream.isNull() && tocStream->open()) {
- referenceCollection.setPrefix(names.TOC);
- HHCReferenceCollector(referenceCollection).readDocument(*tocStream);
- }
-
- while (referenceCollection.containsNonProcessedReferences()) {
- myEntryNames.push_back(referenceCollection.nextReference());
- }
-}
-
-shared_ptr<ZLInputStream> CHMTextStream::nextStream() {
- while (myIndex < myEntryNames.size()) {
- shared_ptr<ZLInputStream> stream = myCHMFile.entryStream(myBase, myEntryNames[myIndex++]);
- if (!stream.isNull()) {
- return new HtmlReaderStream(stream, 50000);
- }
- }
- return 0;
-}
-
-bool CHMPlugin::readMetaInfo(Book &book) const {
- const ZLFile &file = book.file();
- shared_ptr<ZLInputStream> stream = file.inputStream();
- if (stream.isNull() || !stream->open()) {
- return false;
- }
-
- CHMFileInfo chmFile(file);
- if (!chmFile.init(*stream)) {
- return false;
- }
-
- CHMFileInfo::FileNames names = chmFile.sectionNames(stream);
- if (names.empty()) {
- return false;
- }
-
- /*
- shared_ptr<ZLInputStream> entryStream = chmFile.entryStream(stream, names.Start);
- if (entryStream.isNull()) {
- entryStream = chmFile.entryStream(stream, names.Home);
- }
- if (entryStream.isNull()) {
- entryStream = chmFile.entryStream(stream, names.TOC);
- }
- / *
- if (entryStream.isNull()) {
- chmFile.entryStream(stream, names.Index);
- }
- * /
- if (entryStream.isNull()) {
- return false;
- }
- */
-
- CHMTextStream textStream(chmFile, stream);
- detectEncodingAndLanguage(book, textStream);
- if (book.encoding().empty()) {
- return false;
- }
-
- return true;
-}
-
-bool CHMPlugin::readLanguageAndEncoding(Book &book) const {
- (void)book;
- return true;
-}
-
-class CHMHyperlinkMatcher : public BookModel::HyperlinkMatcher {
-
-public:
- BookModel::Label match(const std::map<std::string,BookModel::Label> &lMap, const std::string &id) const;
-};
-
-BookModel::Label CHMHyperlinkMatcher::match(const std::map<std::string,BookModel::Label> &lMap, const std::string &id) const {
- std::map<std::string,BookModel::Label>::const_iterator it = lMap.find(id);
- if (it != lMap.end()) {
- return it->second;
- }
- std::size_t index = id.find('#');
- if (index != std::string::npos) {
- it = lMap.find(id.substr(0, index));
- }
- return (it != lMap.end()) ? it->second : BookModel::Label(0, -1);
-}
-
-bool CHMPlugin::readModel(BookModel &model) const {
- model.setHyperlinkMatcher(new CHMHyperlinkMatcher());
-
- const Book &book = *model.book();
- const ZLFile &file = book.file();
-
- shared_ptr<ZLInputStream> stream = file.inputStream();
- if (stream.isNull() || !stream->open()) {
- return false;
- }
-
- shared_ptr<CHMFileInfo> info = new CHMFileInfo(file);
- if (!info->init(*stream)) {
- return false;
- }
-
- CHMFileInfo::FileNames names = info->sectionNames(stream);
- if (names.empty()) {
- return false;
- }
-
- CHMReferenceCollection referenceCollection;
-
- referenceCollection.addReference(names.Start, false);
- referenceCollection.addReference(names.Home, false);
-
- const std::string &encoding = book.encoding();
-
- shared_ptr<ZLInputStream> tocStream = info->entryStream(stream, names.TOC);
- HHCReader hhcReader(referenceCollection, model, encoding);
- if (!tocStream.isNull() && tocStream->open()) {
- referenceCollection.setPrefix(names.TOC);
- hhcReader.readDocument(*tocStream);
- }
-
- /*
- if (!tocStream.isNull() && tocStream->open()) {
- std::string buf;
- buf.append(tocStream->sizeOfOpened(), '\0');
- tocStream->read((char*)buf.data(), buf.length());
- std::cerr << "[ " << names.TOC << " ]\n" << buf << "\n";
- }
- */
-
- int contentCounter = 0;
- PlainTextFormat format(file);
- HtmlSectionReader reader(model, format, encoding, info, referenceCollection);
- while (referenceCollection.containsNonProcessedReferences()) {
- const std::string fileName = referenceCollection.nextReference();
- if (ZLStringUtil::stringEndsWith(fileName, ".jpg") ||
- ZLStringUtil::stringEndsWith(fileName, ".gif")) {
- std::string lowerCasedFileName = ZLUnicodeUtil::toLower(fileName);
- BookReader bookReader(model);
- bookReader.setMainTextModel();
- bookReader.addHyperlinkLabel(lowerCasedFileName);
- bookReader.pushKind(REGULAR);
- bookReader.beginParagraph();
- bookReader.addImageReference(lowerCasedFileName);
- bookReader.addImage(fileName, new CHMFileImage(info, fileName));
- bookReader.endParagraph();
- bookReader.insertEndOfTextParagraph();
- } else {
- shared_ptr<ZLInputStream> entryStream = info->entryStream(stream, fileName);
- if (!entryStream.isNull() && entryStream->open()) {
- /*
- std::string buf;
- buf.append(entryStream->sizeOfOpened(), '\0');
- entryStream->read((char*)buf.data(), buf.length());
- std::cerr << "[ " << fileName << " ]\n" << buf << "\n";
- entryStream->open();
- */
- reader.setSectionName(fileName);
- reader.readDocument(*entryStream);
- ++contentCounter;
- }
- }
- }
- if (contentCounter == 0) {
- return false;
- }
-
- hhcReader.setReferences();
-
-
- return true;
-}