/* * Copyright (C) 2007-2011 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. */ package org.geometerplus.fbreader.formats; import org.geometerplus.fbreader.bookmodel.BookModel; import org.geometerplus.fbreader.library.Book; import org.geometerplus.zlibrary.core.filesystem.ZLFile; import org.geometerplus.zlibrary.core.image.ZLImage; public abstract class FormatPlugin { public abstract boolean acceptsFile(ZLFile file); public abstract boolean readMetaInfo(Book book); public abstract boolean readModel(BookModel model); public abstract ZLImage readCover(ZLFile file); public abstract String readAnnotation(ZLFile file); /* public static void detectEncodingAndLanguage(Book book, InputStream stream) throws IOException { String language = book.getLanguage(); String encoding = book.getEncoding(); if (encoding.length() == 0 || language.length() == 0) { PluginCollection collection = PluginCollection.Instance(); if (language.length() == 0) { language = collection.DefaultLanguageOption.getValue(); } if (encoding.length() == 0) { encoding = collection.DefaultEncodingOption.getValue(); } if (collection.LanguageAutoDetectOption.getValue() && stream != null) { int BUFSIZE = 65536; byte[] buffer = new byte[BUFSIZE]; int size = stream.read(buffer, 0, BUFSIZE); stream.close(); ZLLanguageDetector.LanguageInfo info = new ZLLanguageDetector().findInfo(buffer, 0, size); buffer = null; if (info != null) { language = info.Language; encoding = info.Encoding; if ((encoding == "US-ASCII") || (encoding == "ISO-8859-1")) { encoding = "windows-1252"; } } } book.setEncoding(encoding); book.setLanguage(language); } } //Last working version public static void detectEncodingAndLanguage(Book book, InputStream stream) { String encoding = book.getEncoding(); if (encoding.length() == 0) { encoding = EncodingDetector.detect(stream, PluginCollection.Instance().DefaultLanguageOption.getValue()); if (encoding == "unknown") { encoding = "windows-1252"; } book.setEncoding(encoding); } if (book.getLanguage() == "") { if ((encoding.equals("US-ASCII")) || (encoding.equals("ISO-8859-1"))) { book.setLanguage("en"); } else if ((book.getEncoding().equals("KOI8-R")) || (encoding.equals("windows-1251")) || (encoding.equals("ISO-8859-5")) || (encoding.equals("IBM866"))) { book.setLanguage("ru"); } /*else if ( (PluginCollection.Instance().DefaultLanguageOption.getValue() == EncodingDetector.Language.CZECH) && ((encoding == "windows-1250") || (encoding == "ISO-8859-2") || (encoding == "IBM852"))) { book.setLanguage("cs"); }*/ /*} }*/ }