bool OEBPlugin::readModel(BookModel &model) const { const ZLFile &file = model.book()->file(); model.addUserData( "inputStreamLock", new InputStreamLock(file.inputStream()) ); return OEBBookReader(model).readBook(opfFile(file)); }
static bool initTOC(JNIEnv *env, jobject javaModel, BookModel &model) { ContentsModel &contentsModel = (ContentsModel&)*model.contentsModel(); jobject javaTextModel = createTextModel(env, javaModel, contentsModel); if (javaTextModel == 0) { return false; } std::vector<jint> childrenNumbers; std::vector<jint> referenceNumbers; const size_t size = contentsModel.paragraphsNumber(); childrenNumbers.reserve(size); referenceNumbers.reserve(size); for (size_t pos = 0; pos < size; ++pos) { ZLTextTreeParagraph *par = (ZLTextTreeParagraph*)contentsModel[pos]; childrenNumbers.push_back(par->children().size()); referenceNumbers.push_back(contentsModel.reference(par)); } jintArray javaChildrenNumbers = AndroidUtil::createJavaIntArray(env, childrenNumbers); jintArray javaReferenceNumbers = AndroidUtil::createJavaIntArray(env, referenceNumbers); AndroidUtil::Method_NativeBookModel_initTOC->call(javaModel, javaTextModel, javaChildrenNumbers, javaReferenceNumbers); env->DeleteLocalRef(javaTextModel); env->DeleteLocalRef(javaChildrenNumbers); env->DeleteLocalRef(javaReferenceNumbers); return !env->ExceptionCheck(); }
bool OEBPlugin::readModel(const DBBook &book, BookModel &model) const { model.addUserData( "inputStreamLock", new InputStreamLock(ZLFile(book.fileName()).inputStream()) ); return OEBBookReader(model).readBook(opfFileName(book.fileName())); }
bool TxtPlugin::readModel(BookModel &model) const { Book &book = *model.book(); const ZLFile &file = book.file(); shared_ptr<ZLInputStream> stream = file.inputStream(); if (stream.isNull()) { return false; } PlainTextFormat format(file); if (!format.initialized()) { PlainTextFormatDetector detector; detector.detect(*stream, format); } readLanguageAndEncoding(book); TxtBookReader(model, format, book.encoding()).readDocument(*stream); return true; }
bool HtmlPlugin::readModel(BookModel &model) const { const Book& book = *model.book(); const ZLFile &file = book.file(); shared_ptr<ZLInputStream> stream = file.inputStream(); if (stream.isNull()) { return false; } PlainTextFormat format(file); if (!format.initialized()) { PlainTextFormatDetector detector; detector.detect(*stream, format); } std::string directoryPrefix = MiscUtil::htmlDirectoryPrefix(file.path()); HtmlBookReader reader(directoryPrefix, model, format, book.encoding()); reader.setFileName(MiscUtil::htmlFileName(file.path())); reader.readDocument(*stream); return true; }
static bool initInternalHyperlinks(JNIEnv *env, jobject javaModel, BookModel &model) { ZLCachedMemoryAllocator allocator(131072, Library::Instance().cacheDirectory(), "nlinks"); ZLUnicodeUtil::Ucs2String ucs2id; ZLUnicodeUtil::Ucs2String ucs2modelId; const std::map<std::string,BookModel::Label> &links = model.internalHyperlinks(); std::map<std::string,BookModel::Label>::const_iterator it = links.begin(); for (; it != links.end(); ++it) { const std::string &id = it->first; const BookModel::Label &label = it->second; if (label.Model.isNull()) { continue; } ZLUnicodeUtil::utf8ToUcs2(ucs2id, id); ZLUnicodeUtil::utf8ToUcs2(ucs2modelId, label.Model->id()); const std::size_t idLen = ucs2id.size() * 2; const std::size_t modelIdLen = ucs2modelId.size() * 2; char *ptr = allocator.allocate(idLen + modelIdLen + 8); ZLCachedMemoryAllocator::writeUInt16(ptr, ucs2id.size()); ptr += 2; std::memcpy(ptr, &ucs2id.front(), idLen); ptr += idLen; ZLCachedMemoryAllocator::writeUInt16(ptr, ucs2modelId.size()); ptr += 2; std::memcpy(ptr, &ucs2modelId.front(), modelIdLen); ptr += modelIdLen; ZLCachedMemoryAllocator::writeUInt32(ptr, label.ParagraphNumber); } allocator.flush(); jstring linksDirectoryName = env->NewStringUTF(allocator.directoryName().c_str()); jstring linksFileExtension = env->NewStringUTF(allocator.fileExtension().c_str()); jint linksBlocksNumber = allocator.blocksNumber(); AndroidUtil::Method_NativeBookModel_initInternalHyperlinks->call(javaModel, linksDirectoryName, linksFileExtension, linksBlocksNumber); env->DeleteLocalRef(linksDirectoryName); env->DeleteLocalRef(linksFileExtension); return !env->ExceptionCheck(); }
bool RtfPlugin::readModel(BookModel &model) const { const Book &book = *model.book(); return RtfBookReader(model, book.encoding()).readDocument(book.file()); }
bool DocPlugin::readModel(BookModel &model) const { return DocBookReader(model, model.book()->encoding()).readBook(); }
PluckerBookReader::PluckerBookReader(BookModel &model) : BookReader(model), EncodedTextReader(model.book()->encoding()), myFile(model.book()->file()), myFont(FT_REGULAR) { myCharBuffer = new char[65535]; myForcedEntry = 0; }
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; }
bool OEBPlugin::readModel(BookModel &model) const { const ZLFile &file = model.book()->file(); return OEBBookReader(model).readBook(opfFile(file)); }