mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-05 19:42:17 +02:00
git-svn-id: https://only.mawhrin.net/repos/FBReaderJ/trunk@827 6a642e6f-84f6-412e-ac94-c4a38d5a04b0
This commit is contained in:
parent
34d0f3aa85
commit
753bed8fcd
13 changed files with 492 additions and 41 deletions
230
data/encodings/Encodings.xml
Normal file
230
data/encodings/Encodings.xml
Normal file
|
@ -0,0 +1,230 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<known-encodings>
|
||||
<group name="West European">
|
||||
<encoding region="Western" name="ISO-8859-1">
|
||||
<code number="28591"/>
|
||||
</encoding>
|
||||
<encoding region="Western" name="ISO-8859-15">
|
||||
<code number="28605"/>
|
||||
</encoding>
|
||||
<encoding region="Western" name="IBM850">
|
||||
<code number="850"/>
|
||||
</encoding>
|
||||
<encoding region="Western" name="MacRoman">
|
||||
<code number="10000"/>
|
||||
<alias name="Macintosh"/>
|
||||
</encoding>
|
||||
<encoding region="Western" name="US-ASCII">
|
||||
<code number="20127"/>
|
||||
</encoding>
|
||||
<encoding region="Western" name="windows-1252">
|
||||
<code number="1252"/>
|
||||
</encoding>
|
||||
<encoding region="Celtic" name="ISO-8859-14">
|
||||
<code number="28604"/>
|
||||
</encoding>
|
||||
<encoding region="Greek" name="ISO-8859-7">
|
||||
</encoding>
|
||||
<code number="28597"/>
|
||||
<encoding region="Greek" name="MacGreek">
|
||||
<code number="10006"/>
|
||||
</encoding>
|
||||
<encoding region="Greek" name="windows-1253">
|
||||
<code number="1253"/>
|
||||
</encoding>
|
||||
<encoding region="Icelandic" name="MacIcelandic">
|
||||
<code number="10079"/>
|
||||
</encoding>
|
||||
<encoding region="Nordic" name="ISO-8859-10">
|
||||
<code number="28600"/>
|
||||
</encoding>
|
||||
<encoding region="South European" name="ISO-8859-3">
|
||||
<code number="28593"/>
|
||||
</encoding>
|
||||
</group>
|
||||
<group name="East European">
|
||||
<encoding region="Baltic" name="ISO-8859-4">
|
||||
<code number="28594"/>
|
||||
</encoding>
|
||||
<encoding region="Baltic" name="ISO-8859-13">
|
||||
<code number="28603"/>
|
||||
</encoding>
|
||||
<encoding region="Baltic" name="windows-1257">
|
||||
<code number="1257"/>
|
||||
</encoding>
|
||||
<encoding region="Central European" name="IBM852">
|
||||
<code number="852"/>
|
||||
</encoding>
|
||||
<encoding region="Central European" name="ISO-8859-2">
|
||||
<code number="28592"/>
|
||||
</encoding>
|
||||
<encoding region="Central European" name="MacCE">
|
||||
<code number="10029"/>
|
||||
</encoding>
|
||||
<encoding region="Central European" name="windows-1250">
|
||||
<code number="1250"/>
|
||||
</encoding>
|
||||
<encoding region="Croatian" name="MacCroatian">
|
||||
<code number="10082"/>
|
||||
</encoding>
|
||||
<encoding region="Cyrillic" name="IBM855">
|
||||
<code number="855"/>
|
||||
</encoding>
|
||||
<encoding region="Cyrillic" name="ISO-8859-5">
|
||||
<code number="28595"/>
|
||||
</encoding>
|
||||
<encoding region="Cyrillic" name="ISO-IR-111">
|
||||
</encoding>
|
||||
<encoding region="Cyrillic" name="KOI8-R">
|
||||
<code number="20866"/>
|
||||
</encoding>
|
||||
<encoding region="Cyrillic" name="MacCyrillic">
|
||||
<code number="10007"/>
|
||||
</encoding>
|
||||
<encoding region="Cyrillic" name="windows-1251">
|
||||
<code number="1251"/>
|
||||
</encoding>
|
||||
<encoding region="Cyrillic/Russian" name="IBM866">
|
||||
<code number="866"/>
|
||||
</encoding>
|
||||
<encoding region="Cyrillic/Ukrainian" name="KOI8-U">
|
||||
<code number="21866"/>
|
||||
</encoding>
|
||||
<encoding region="Cyrillic/Ukrainian" name="MacUkrainian">
|
||||
<code number="10017"/>
|
||||
</encoding>
|
||||
<encoding region="Romanian" name="ISO-8859-16">
|
||||
<code number="28606"/>
|
||||
</encoding>
|
||||
<encoding region="Romanian" name="MacRomanian">
|
||||
<code number="10010"/>
|
||||
</encoding>
|
||||
</group>
|
||||
<group name="East Asia">
|
||||
<encoding region="Chinese Simplified" name="GB2312">
|
||||
<code number="936"/>
|
||||
</encoding>
|
||||
<encoding region="Chinese Simplified" name="GB18030">
|
||||
<code number="54936"/>
|
||||
</encoding>
|
||||
<encoding region="Chinese Simplified" name="GBK">
|
||||
</encoding>
|
||||
<encoding region="Chinese Simplified" name="HZ">
|
||||
</encoding>
|
||||
<encoding region="Chinese Simplified" name="ISO-2022-CN">
|
||||
</encoding>
|
||||
<encoding region="Chinese Traditional" name="Big5">
|
||||
<code number="950"/>
|
||||
</encoding>
|
||||
<encoding region="Chinese Traditional" name="Big5-HKSCS">
|
||||
</encoding>
|
||||
<encoding region="Chinese Traditional" name="EUC-TW">
|
||||
</encoding>
|
||||
<encoding region="Japanese" name="EUC-JP">
|
||||
<code number="51932"/>
|
||||
</encoding>
|
||||
<encoding region="Japanese" name="ISO-2022-JP">
|
||||
<code number="50222"/>
|
||||
</encoding>
|
||||
<encoding region="Japanese" name="Shift_JIS">
|
||||
<code number="932"/>
|
||||
</encoding>
|
||||
<encoding region="Korean" name="EUC-KR">
|
||||
<code number="51949"/>
|
||||
</encoding>
|
||||
<encoding region="Korean" name="ISO-2022-KR">
|
||||
<code number="50225"/>
|
||||
</encoding>
|
||||
<encoding region="Korean" name="JOHAB">
|
||||
<code number="1361"/>
|
||||
</encoding>
|
||||
<encoding region="Korean" name="UHC">
|
||||
</encoding>
|
||||
</group>
|
||||
<group name="SW & SE Asia">
|
||||
<encoding region="Armenian" name="ARMSCII-8">
|
||||
</encoding>
|
||||
<encoding region="Georgian" name="GEOSTD8">
|
||||
</encoding>
|
||||
<encoding region="Thai" name="IBM874">
|
||||
<code number="874"/>
|
||||
</encoding>
|
||||
<encoding region="Thai" name="ISO-8859-11">
|
||||
<code number="28601"/>
|
||||
</encoding>
|
||||
<encoding region="Thai" name="TIS-620">
|
||||
</encoding>
|
||||
<encoding region="Turkish" name="IBM857">
|
||||
<code number="857"/>
|
||||
</encoding>
|
||||
<encoding region="Turkish" name="ISO-8859-9">
|
||||
<code number="28599"/>
|
||||
</encoding>
|
||||
<encoding region="Turkish" name="MacTurkish">
|
||||
<code number="10081"/>
|
||||
</encoding>
|
||||
<encoding region="Turkish" name="windows-1254">
|
||||
<code number="1254"/>
|
||||
</encoding>
|
||||
<encoding region="Vietnamese" name="TCVN">
|
||||
</encoding>
|
||||
<encoding region="Vietnamese" name="VISCII">
|
||||
</encoding>
|
||||
<encoding region="Vietnamese" name="VPS">
|
||||
</encoding>
|
||||
<encoding region="Vietnamese" name="windows-1258">
|
||||
<code number="1258"/>
|
||||
</encoding>
|
||||
<encoding region="Hindi" name="MacDevanagari">
|
||||
</encoding>
|
||||
<encoding region="Hindi" name="ISCII Devanagari">
|
||||
<code number="57002"/>
|
||||
</encoding>
|
||||
<encoding region="Gujarati" name="MacGujarati">
|
||||
</encoding>
|
||||
<encoding region="Gujarati" name="ISCII Gujarati">
|
||||
<code number="57010"/>
|
||||
</encoding>
|
||||
<encoding region="Gurmukhi" name="MacGurmukhi">
|
||||
</encoding>
|
||||
</group>
|
||||
<group name="Middle Eastern">
|
||||
<encoding region="Arabic" name="ISO-8859-6">
|
||||
<code number="28596"/>
|
||||
</encoding>
|
||||
<encoding region="Arabic" name="IBM864">
|
||||
<code number="864"/>
|
||||
</encoding>
|
||||
<encoding region="Arabic" name="windows-1256">
|
||||
<code number="1256"/>
|
||||
</encoding>
|
||||
<encoding region="Arabic" name="MacArabic">
|
||||
<code number="10004"/>
|
||||
</encoding>
|
||||
<encoding region="Farsi" name="MacFarsi">
|
||||
</encoding>
|
||||
<encoding region="Hebrew" name="IBM862">
|
||||
<code number="862"/>
|
||||
</encoding>
|
||||
<encoding region="Hebrew" name="ISO-8859-8">
|
||||
<code number="28598"/>
|
||||
</encoding>
|
||||
<encoding region="Hebrew" name="ISO-8859-8-I">
|
||||
<code number="38598"/>
|
||||
</encoding>
|
||||
<encoding region="Hebrew" name="MacHebrew">
|
||||
<code number="10005"/>
|
||||
</encoding>
|
||||
<encoding region="Hebrew" name="windows-1255">
|
||||
<code number="1255"/>
|
||||
</encoding>
|
||||
</group>
|
||||
<group name="Unicode">
|
||||
<encoding region="Unicode" name="UTF-8">
|
||||
</encoding>
|
||||
<encoding region="Unicode" name="UTF-7">
|
||||
</encoding>
|
||||
<encoding region="Unicode" name="UTF-16">
|
||||
</encoding>
|
||||
</group>
|
||||
</known-encodings>
|
|
@ -0,0 +1,37 @@
|
|||
package org.geometerplus.fbreader.encoding;
|
||||
|
||||
public class DummyEncodingConverterProvider extends ZLEncodingConverterProvider {
|
||||
|
||||
public ZLEncodingConverter createConverter() {
|
||||
return new DummyEncodingConverter();
|
||||
}
|
||||
|
||||
public ZLEncodingConverter createConverter(String encoding) {
|
||||
return createConverter();
|
||||
}
|
||||
|
||||
public boolean providesConverter(String encoding) {
|
||||
final String lowerCasedEncoding = encoding.toLowerCase();
|
||||
return ("utf-8".equals(lowerCasedEncoding)) || ("us-ascii".equals(lowerCasedEncoding));
|
||||
}
|
||||
|
||||
private static class DummyEncodingConverter extends ZLEncodingConverter {
|
||||
|
||||
private DummyEncodingConverter() {}
|
||||
|
||||
public boolean fillTable(int[] map) {
|
||||
for (int i = 0; i < 255; ++i) {
|
||||
map[i] = i;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public void reset() {}
|
||||
|
||||
//size=end-start
|
||||
public String convert(char [] src, int start, int end) {
|
||||
return new String(src, start, end - start);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
package org.geometerplus.fbreader.encoding;
|
||||
|
||||
public class MyEncodingConverterProvider extends ZLEncodingConverterProvider {
|
||||
|
||||
public ZLEncodingConverter createConverter(String encoding) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean providesConverter(String encoding) {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
|
@ -21,17 +21,29 @@ package org.geometerplus.fbreader.encoding;
|
|||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashMap;
|
||||
import org.geometerplus.zlibrary.core.util.*;
|
||||
|
||||
import org.geometerplus.zlibrary.core.config.ZLConfigManager;
|
||||
import org.geometerplus.zlibrary.core.library.ZLibrary;
|
||||
import org.geometerplus.zlibrary.core.options.ZLBooleanOption;
|
||||
import org.geometerplus.zlibrary.core.options.ZLOption;
|
||||
import org.geometerplus.zlibrary.core.xml.ZLStringMap;
|
||||
import org.geometerplus.zlibrary.core.xml.ZLXMLReaderAdapter;
|
||||
|
||||
public class ZLEncodingCollection {
|
||||
private static ZLEncodingCollection ourInstance;
|
||||
private static ZLBooleanOption ourUseWindows1252HackOption;
|
||||
|
||||
private static ZLBooleanOption ourUseWindows1252HackOption;
|
||||
|
||||
private final ArrayList/*<ZLEncodingSet>*/ mySets = new ArrayList();
|
||||
private final HashMap/*<String,ZLEncodingConverterInfo>*/ myInfosByName = new HashMap();
|
||||
private final ArrayList/*<ZLEncodingConverterProvider>*/ myProviders = new ArrayList();
|
||||
|
||||
private ZLEncodingCollection() {
|
||||
registerProvider(new DummyEncodingConverterProvider());
|
||||
// registerProvider(new MyEncodingConverterProvider());
|
||||
}
|
||||
|
||||
public static ZLEncodingCollection instance() {
|
||||
if (ourInstance == null) {
|
||||
ourInstance = new ZLEncodingCollection();
|
||||
|
@ -39,7 +51,7 @@ public class ZLEncodingCollection {
|
|||
return ourInstance;
|
||||
}
|
||||
public static String encodingDescriptionPath() {
|
||||
return ZLibrary.JAR_DATA_PREFIX + "zlibrary" + File.separator + "encodings";
|
||||
return ZLibrary.JAR_DATA_PREFIX + "data/encodings/Encodings.xml";
|
||||
}
|
||||
|
||||
public static ZLBooleanOption useWindows1252HackOption() {
|
||||
|
@ -74,28 +86,101 @@ public class ZLEncodingCollection {
|
|||
}
|
||||
|
||||
public ZLEncodingConverter defaultConverter() {
|
||||
return null;//DummyEncodingConverterProvider().createConverter();
|
||||
return new DummyEncodingConverterProvider().createConverter();
|
||||
}
|
||||
public void registerProvider(ZLEncodingConverterProvider provider) {
|
||||
myProviders.add(provider);
|
||||
}
|
||||
|
||||
private void addInfo(ZLEncodingConverterInfo info) {
|
||||
|
||||
}
|
||||
// private void addInfo(ZLEncodingConverterInfo info) {}
|
||||
|
||||
ArrayList/*<ZLEncodingConverterProvider>*/ providers() {
|
||||
return myProviders;
|
||||
}
|
||||
|
||||
private final ArrayList/*<ZLEncodingSet>*/ mySets = new ArrayList();
|
||||
private final HashMap/*<String,ZLEncodingConverterInfo>*/ myInfosByName = new HashMap();
|
||||
private final ArrayList/*<ZLEncodingConverterProvider>*/ myProviders = new ArrayList();
|
||||
|
||||
//private ZLEncodingCollection();
|
||||
private void init() {
|
||||
if (mySets.isEmpty()) {
|
||||
String prefix = encodingDescriptionPath() + File.separator;
|
||||
//new ZLEncodingCollectionReader(this).readDocument(prefix + "Encodings.xml");
|
||||
// String prefix = encodingDescriptionPath() + File.separator;
|
||||
// System.out.println("trying to read " + prefix + "Encodings.xml");
|
||||
new ZLEncodingCollectionReader(this).read(encodingDescriptionPath());
|
||||
}
|
||||
}
|
||||
|
||||
private static class ZLEncodingCollectionReader extends ZLXMLReaderAdapter {
|
||||
private final ZLEncodingCollection myCollection;
|
||||
private ZLEncodingSet myCurrentSet;
|
||||
private ZLEncodingConverterInfo myCurrentInfo;
|
||||
private final ArrayList/*<String>*/ myNames = new ArrayList();
|
||||
|
||||
private static final String GROUP = "group";
|
||||
private static final String ENCODING = "encoding";
|
||||
private static final String NAME = "name";
|
||||
private static final String REGION = "region";
|
||||
private static final String ALIAS = "alias";
|
||||
private static final String CODE = "code";
|
||||
private static final String NUMBER = "number";
|
||||
|
||||
public ZLEncodingCollectionReader(ZLEncodingCollection collection) {
|
||||
myCollection = collection;
|
||||
}
|
||||
|
||||
public boolean dontCacheAttributeValues() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean endElementHandler(String tag) {
|
||||
if (myCurrentInfo != null && (ENCODING.equals(tag))) {
|
||||
if (myCurrentInfo.canCreateConverter()) {
|
||||
myCurrentSet.addInfo(myCurrentInfo);
|
||||
final int size = myNames.size();
|
||||
for (int i = 0; i < size; i++) {
|
||||
myCollection.myInfosByName.put(((String) myNames.get(i)).toLowerCase(), myCurrentInfo);
|
||||
}
|
||||
}
|
||||
myCurrentInfo = null;
|
||||
myNames.clear();
|
||||
} else if (myCurrentSet != null && (GROUP.equals(tag))) {
|
||||
if (!myCurrentSet.infos().isEmpty()) {
|
||||
myCollection.mySets.add(myCurrentSet);
|
||||
}
|
||||
myCurrentSet = null;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean startElementHandler(String tag, ZLStringMap attributes) {
|
||||
System.out.println("reading");
|
||||
|
||||
if (GROUP.equals(tag)) {
|
||||
final String name = attributes.getValue(NAME);
|
||||
if (name != null) {
|
||||
myCurrentSet = new ZLEncodingSet(name);
|
||||
}
|
||||
} else if (myCurrentSet != null) {
|
||||
if (ENCODING.equals(tag)) {
|
||||
final String name = attributes.getValue(NAME);
|
||||
final String region = attributes.getValue(REGION);
|
||||
if ((name != null) && (region != null)) {
|
||||
final String sName = name;
|
||||
myCurrentInfo = new ZLEncodingConverterInfo(sName, region);
|
||||
myNames.add(sName);
|
||||
}
|
||||
} else if (myCurrentInfo != null) {
|
||||
String name = null;
|
||||
if (CODE.equals(tag)) {
|
||||
name = attributes.getValue(NUMBER);
|
||||
} else if (ALIAS.equals(tag)) {
|
||||
name = attributes.getValue(NAME);
|
||||
}
|
||||
if (name != null) {
|
||||
final String sName = name;
|
||||
myCurrentInfo.addAlias(sName);
|
||||
myNames.add(sName);
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,9 +23,8 @@ public abstract class ZLEncodingConverter {
|
|||
protected ZLEncodingConverter() {}
|
||||
|
||||
//abstract public void convert(String dst, const char *srcStart, const char *srcEnd);
|
||||
public void convert(String dst, String src) {
|
||||
abstract public String convert(char [] src, int start, int end);
|
||||
//convert(dst, src.toCharArray(), src.data() + src.length());
|
||||
}
|
||||
public abstract void reset();
|
||||
public abstract boolean fillTable(int[] map);
|
||||
|
||||
|
|
|
@ -23,6 +23,10 @@ import java.util.ArrayList;
|
|||
import java.util.Iterator;
|
||||
|
||||
public class ZLEncodingConverterInfo {
|
||||
private String myName = "";
|
||||
private String myVisibleName = "";
|
||||
private ArrayList/*<String>*/ myAliases = new ArrayList();
|
||||
|
||||
public ZLEncodingConverterInfo(String name, String region) {
|
||||
myName = name;
|
||||
myVisibleName = region + " (" + name + ")";
|
||||
|
@ -60,20 +64,16 @@ public class ZLEncodingConverterInfo {
|
|||
public boolean canCreateConverter() {
|
||||
ZLEncodingCollection collection = ZLEncodingCollection.instance();
|
||||
ArrayList<ZLEncodingConverterProvider> providers = collection.providers();
|
||||
for (Iterator it = providers.iterator(); it.hasNext();) {
|
||||
for (Iterator it = providers.iterator(); it.hasNext();) {
|
||||
final ZLEncodingConverterProvider privider = (ZLEncodingConverterProvider)it.next();
|
||||
for (Iterator jt = myAliases.iterator(); jt.hasNext(); ) {
|
||||
if (((ZLEncodingConverterProvider)it.next()).providesConverter((String)jt.next())) {
|
||||
if (privider.providesConverter((String)jt.next())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private String myName = "";
|
||||
private String myVisibleName = "";
|
||||
private ArrayList<String> myAliases = new ArrayList();
|
||||
|
||||
//private ZLEncodingConverterInfo(const ZLEncodingConverterInfo&);
|
||||
//private ZLEncodingConverterInfo &operator=(const ZLEncodingConverterInfo&);
|
||||
}
|
||||
|
|
|
@ -20,8 +20,8 @@
|
|||
package org.geometerplus.fbreader.encoding;
|
||||
|
||||
public abstract class ZLEncodingConverterProvider {
|
||||
protected ZLEncodingConverterProvider() {}
|
||||
|
||||
protected ZLEncodingConverterProvider() {}
|
||||
|
||||
public abstract boolean providesConverter(String encoding);
|
||||
public abstract ZLEncodingConverter createConverter(String encoding);
|
||||
|
||||
|
|
|
@ -22,6 +22,9 @@ package org.geometerplus.fbreader.encoding;
|
|||
import java.util.ArrayList;
|
||||
|
||||
public class ZLEncodingSet {
|
||||
private String myName = "";
|
||||
private ArrayList/*<ZLEncodingConverterInfo>*/ myInfos = new ArrayList();
|
||||
|
||||
public ZLEncodingSet(String name) {
|
||||
|
||||
}
|
||||
|
@ -36,7 +39,4 @@ public class ZLEncodingSet {
|
|||
public ArrayList/*<ZLEncodingConverterInfo>*/ infos() {
|
||||
return myInfos;
|
||||
}
|
||||
|
||||
private String myName = "";
|
||||
private ArrayList/*<ZLEncodingConverterInfo>*/ myInfos = new ArrayList();
|
||||
}
|
||||
|
|
|
@ -50,12 +50,16 @@ public class EncodingEntry extends ZLComboOptionEntry {
|
|||
return;
|
||||
}
|
||||
|
||||
final ArrayList/*<ZLEncodingSet>*/ sets = ZLEncodingCollection.instance().sets();
|
||||
final ArrayList/*<ZLEncodingSet>*/ sets = ZLEncodingCollection.instance().sets();
|
||||
|
||||
System.out.println("sets size = " + sets.size());
|
||||
|
||||
for (int i = 0; i < sets.size(); i++) {
|
||||
ZLEncodingSet es = (ZLEncodingSet) sets.get(i);
|
||||
final ArrayList/*<ZLEncodingConverterInfo>*/ infos = es.infos();
|
||||
final ArrayList/*<ZLEncodingConverterInfo>*/ infos = es.infos();
|
||||
// System.out.println(es.name());
|
||||
mySetNames.add(es.name());
|
||||
ArrayList/*<String>*/ names = (ArrayList) myValues.get(es.name());
|
||||
ArrayList/*<String>*/ names = new ArrayList();
|
||||
for (int j = 0; j < infos.size(); j++) {
|
||||
ZLEncodingConverterInfo eci = (ZLEncodingConverterInfo) infos.get(j);
|
||||
if (eci.name().equals(value)) {
|
||||
|
@ -64,10 +68,11 @@ public class EncodingEntry extends ZLComboOptionEntry {
|
|||
}
|
||||
names.add(eci.visibleName());
|
||||
myValueByName.put(eci.visibleName(), eci.name());
|
||||
}
|
||||
}
|
||||
myValues.put(es.name(), names);
|
||||
}
|
||||
|
||||
if (myInitialSetName.length() == 0) {
|
||||
//TODO:
|
||||
if (myInitialSetName.length() == 0 && !mySetNames.isEmpty()) {
|
||||
myInitialSetName = (String) mySetNames.get(0);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,7 +18,21 @@
|
|||
*/
|
||||
|
||||
package org.geometerplus.fbreader.formats;
|
||||
|
||||
import org.geometerplus.fbreader.encoding.ZLEncodingCollection;
|
||||
import org.geometerplus.fbreader.encoding.ZLEncodingConverter;
|
||||
import org.geometerplus.fbreader.encoding.ZLEncodingConverterInfo;
|
||||
|
||||
public class EncodedTextReader {
|
||||
|
||||
public class EncodedTextReader {
|
||||
private ZLEncodingConverter myConverter;
|
||||
//?static
|
||||
public EncodedTextReader(final String encoding) {
|
||||
ZLEncodingCollection collection = ZLEncodingCollection.instance();
|
||||
ZLEncodingConverterInfo info = collection.info(encoding);
|
||||
myConverter = (info != null) ? info.createConverter() : collection.defaultConverter();
|
||||
}
|
||||
|
||||
public ZLEncodingConverter getConverter() {
|
||||
return myConverter;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ import java.util.ArrayList;
|
|||
|
||||
public class PdbHeader {
|
||||
static public String DocName;
|
||||
static public short Flags;
|
||||
static public int Flags;
|
||||
static public String Id;
|
||||
static public int[] Offsets;
|
||||
|
||||
|
@ -35,7 +35,7 @@ public class PdbHeader {
|
|||
return false;
|
||||
}
|
||||
DocName = new String(buffer);
|
||||
Flags = PdbUtil.readShort(stream);
|
||||
Flags = PdbUtil.readUnsignedShort(stream);
|
||||
|
||||
stream.skip(26);
|
||||
|
||||
|
@ -46,7 +46,7 @@ public class PdbHeader {
|
|||
|
||||
stream.skip(8);
|
||||
|
||||
short numRecords = PdbUtil.readShort(stream);
|
||||
int numRecords = PdbUtil.readUnsignedShort(stream);
|
||||
if (numRecords <= 0) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
package org.geometerplus.fbreader.formats.pdb;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
import org.geometerplus.zlibrary.core.filesystem.ZLFile;
|
||||
|
||||
public class PdbInputStream extends InputStream {
|
||||
private final InputStream myBase;
|
||||
private long myOffset = 0;
|
||||
private final long mySize;
|
||||
|
||||
public PdbInputStream(ZLFile file) throws IOException {
|
||||
mySize = file.size();
|
||||
myBase = file.getInputStream();
|
||||
}
|
||||
|
||||
public int read() throws IOException {
|
||||
int result = myBase.read();
|
||||
if (result != -1) {
|
||||
myOffset ++;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public int available() throws IOException {
|
||||
return super.available();
|
||||
}
|
||||
|
||||
public void close() throws IOException {
|
||||
myOffset = 0;
|
||||
super.close();
|
||||
}
|
||||
|
||||
public synchronized void mark(int readlimit) {
|
||||
super.mark(readlimit);
|
||||
}
|
||||
|
||||
public boolean markSupported() {
|
||||
return super.markSupported();
|
||||
}
|
||||
|
||||
public int read(byte[] b, int off, int len) throws IOException {
|
||||
return super.read(b, off, len);
|
||||
}
|
||||
|
||||
public int read(byte[] b) throws IOException {
|
||||
return super.read(b);
|
||||
}
|
||||
|
||||
public synchronized void reset() throws IOException {
|
||||
// myOffset = 0;
|
||||
super.reset();
|
||||
}
|
||||
|
||||
public long skip(long n) throws IOException {
|
||||
return super.skip(n);
|
||||
}
|
||||
|
||||
public long offset() {
|
||||
return myOffset;
|
||||
}
|
||||
|
||||
public long sizeOfOpened() {
|
||||
return mySize - myOffset;
|
||||
}
|
||||
}
|
|
@ -16,7 +16,6 @@
|
|||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
* 02110-1301, USA.
|
||||
*/
|
||||
|
||||
package org.geometerplus.zlibrary.core.language;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue