1
0
Fork 0
mirror of https://github.com/geometer/FBReaderJ.git synced 2025-10-03 17:59:33 +02:00

ZLEncodingConverter has a name; Rtf plugin as compilable again

Conflicts:

	jni/NativeFormats/fbreader/src/formats/rtf/RtfDescriptionReader.cpp
This commit is contained in:
Nikolay Pultsin 2012-03-22 18:40:23 +00:00
parent 50d6d2c00f
commit 5f6eb8a469
12 changed files with 42 additions and 16 deletions

View file

@ -51,7 +51,7 @@ void FormatPlugin::detectEncodingAndLanguage(Book &book, ZLInputStream &stream)
language = info->Language; language = info->Language;
} }
encoding = info->Encoding; encoding = info->Encoding;
if ((encoding == "US-ASCII") || (encoding == "ISO-8859-1")) { if ((encoding == "us-ascii") || (encoding == "iso-8859-1")) {
encoding = "windows-1252"; encoding = "windows-1252";
} }
} }

View file

@ -87,16 +87,16 @@ shared_ptr<Book> Book::loadFromJavaBook(JNIEnv *env, jobject javaBook) {
jstring javaString; jstring javaString;
jobject javaFile = env->GetObjectField(javaBook, AndroidUtil::FID_Book_File); jobject javaFile = env->GetObjectField(javaBook, AndroidUtil::FID_Book_File);
javaString = (jstring) env->CallObjectMethod(javaFile, AndroidUtil::MID_ZLFile_getPath); javaString = (jstring)env->CallObjectMethod(javaFile, AndroidUtil::MID_ZLFile_getPath);
const std::string path = AndroidUtil::fromJavaString(env, javaString); const std::string path = AndroidUtil::fromJavaString(env, javaString);
env->DeleteLocalRef(javaString); env->DeleteLocalRef(javaString);
env->DeleteLocalRef(javaFile); env->DeleteLocalRef(javaFile);
javaString = (jstring) env->CallObjectMethod(javaBook, AndroidUtil::MID_Book_getTitle); javaString = (jstring)env->CallObjectMethod(javaBook, AndroidUtil::MID_Book_getTitle);
const std::string title = AndroidUtil::fromJavaString(env, javaString); const std::string title = AndroidUtil::fromJavaString(env, javaString);
env->DeleteLocalRef(javaString); env->DeleteLocalRef(javaString);
javaString = (jstring) env->CallObjectMethod(javaBook, AndroidUtil::MID_Book_getLanguage); javaString = (jstring)env->CallObjectMethod(javaBook, AndroidUtil::MID_Book_getLanguage);
const std::string language = AndroidUtil::fromJavaString(env, javaString); const std::string language = AndroidUtil::fromJavaString(env, javaString);
env->DeleteLocalRef(javaString); env->DeleteLocalRef(javaString);

View file

@ -62,6 +62,7 @@ jmethodID AndroidUtil::SMID_PluginCollection_Instance;
jmethodID AndroidUtil::MID_Encoding_createConverter; jmethodID AndroidUtil::MID_Encoding_createConverter;
jfieldID AndroidUtil::FID_EncodingConverter_Name;
jmethodID AndroidUtil::MID_EncodingConverter_convert; jmethodID AndroidUtil::MID_EncodingConverter_convert;
jmethodID AndroidUtil::MID_EncodingConverter_reset; jmethodID AndroidUtil::MID_EncodingConverter_reset;
@ -161,6 +162,7 @@ bool AndroidUtil::init(JavaVM* jvm) {
env->DeleteLocalRef(cls); env->DeleteLocalRef(cls);
CHECK_NULL( cls = env->FindClass(Class_EncodingConverter) ); CHECK_NULL( cls = env->FindClass(Class_EncodingConverter) );
CHECK_NULL( FID_EncodingConverter_Name = env->GetFieldID(cls, "Name", "Ljava/lang/String;") );
CHECK_NULL( MID_EncodingConverter_convert = env->GetMethodID(cls, "convert", "([BII[BI)I") ); CHECK_NULL( MID_EncodingConverter_convert = env->GetMethodID(cls, "convert", "([BII[BI)I") );
CHECK_NULL( MID_EncodingConverter_reset = env->GetMethodID(cls, "reset", "()V") ); CHECK_NULL( MID_EncodingConverter_reset = env->GetMethodID(cls, "reset", "()V") );
env->DeleteLocalRef(cls); env->DeleteLocalRef(cls);

View file

@ -80,6 +80,7 @@ public:
static jmethodID MID_Encoding_createConverter; static jmethodID MID_Encoding_createConverter;
static jfieldID FID_EncodingConverter_Name;
static jmethodID MID_EncodingConverter_convert; static jmethodID MID_EncodingConverter_convert;
static jmethodID MID_EncodingConverter_reset; static jmethodID MID_EncodingConverter_reset;

View file

@ -24,14 +24,18 @@
class DummyEncodingConverter : public ZLEncodingConverter { class DummyEncodingConverter : public ZLEncodingConverter {
private: private:
DummyEncodingConverter(); DummyEncodingConverter(const std::string &name);
public: public:
~DummyEncodingConverter(); ~DummyEncodingConverter();
std::string name() const;
void convert(std::string &dst, const char *srcStart, const char *srcEnd); void convert(std::string &dst, const char *srcStart, const char *srcEnd);
void reset(); void reset();
bool fillTable(int *map); bool fillTable(int *map);
private:
const std::string myName;
friend class DummyEncodingConverterProvider; friend class DummyEncodingConverterProvider;
}; };
@ -40,20 +44,20 @@ bool DummyEncodingConverterProvider::providesConverter(const std::string &encodi
return (lowerCasedEncoding == "utf-8") || (lowerCasedEncoding == "us-ascii"); return (lowerCasedEncoding == "utf-8") || (lowerCasedEncoding == "us-ascii");
} }
shared_ptr<ZLEncodingConverter> DummyEncodingConverterProvider::createConverter() { shared_ptr<ZLEncodingConverter> DummyEncodingConverterProvider::createConverter(const std::string &name) {
return new DummyEncodingConverter(); return new DummyEncodingConverter(name);
} }
shared_ptr<ZLEncodingConverter> DummyEncodingConverterProvider::createConverter(const std::string&) { DummyEncodingConverter::DummyEncodingConverter(const std::string &name) : myName(name) {
return createConverter();
}
DummyEncodingConverter::DummyEncodingConverter() {
} }
DummyEncodingConverter::~DummyEncodingConverter() { DummyEncodingConverter::~DummyEncodingConverter() {
} }
std::string DummyEncodingConverter::name() const {
return myName;
}
void DummyEncodingConverter::convert(std::string &dst, const char *srcStart, const char *srcEnd) { void DummyEncodingConverter::convert(std::string &dst, const char *srcStart, const char *srcEnd) {
dst.append(srcStart, srcEnd - srcStart); dst.append(srcStart, srcEnd - srcStart);
} }

View file

@ -27,7 +27,6 @@ class DummyEncodingConverterProvider : public ZLEncodingConverterProvider {
public: public:
bool providesConverter(const std::string &encoding); bool providesConverter(const std::string &encoding);
shared_ptr<ZLEncodingConverter> createConverter();
shared_ptr<ZLEncodingConverter> createConverter(const std::string &encoding); shared_ptr<ZLEncodingConverter> createConverter(const std::string &encoding);
}; };

View file

@ -29,6 +29,7 @@ private:
public: public:
~JavaEncodingConverter(); ~JavaEncodingConverter();
std::string name() const;
void convert(std::string &dst, const char *srcStart, const char *srcEnd); void convert(std::string &dst, const char *srcStart, const char *srcEnd);
void reset(); void reset();
bool fillTable(int *map); bool fillTable(int *map);
@ -85,6 +86,14 @@ JavaEncodingConverter::~JavaEncodingConverter() {
env->DeleteLocalRef(myJavaConverter); env->DeleteLocalRef(myJavaConverter);
} }
std::string JavaEncodingConverter::name() const {
JNIEnv *env = AndroidUtil::getEnv();
jstring javaName = (jstring)env->GetObjectField(myJavaConverter, AndroidUtil::FID_EncodingConverter_Name);
const std::string result = AndroidUtil::fromJavaString(env, javaName);
env->DeleteLocalRef(javaName);
return result;
}
void JavaEncodingConverter::convert(std::string &dst, const char *srcStart, const char *srcEnd) { void JavaEncodingConverter::convert(std::string &dst, const char *srcStart, const char *srcEnd) {
JNIEnv *env = AndroidUtil::getEnv(); JNIEnv *env = AndroidUtil::getEnv();
const int srcLen = srcEnd - srcStart; const int srcLen = srcEnd - srcStart;

View file

@ -61,6 +61,12 @@ shared_ptr<ZLEncodingConverter> ZLEncodingCollection::converter(const std::strin
return 0; return 0;
} }
shared_ptr<ZLEncodingConverter> ZLEncodingCollection::defaultConverter() const { shared_ptr<ZLEncodingConverter> ZLEncodingCollection::converter(int code) const {
return DummyEncodingConverterProvider().createConverter(); std::string name;
ZLStringUtil::appendNumber(name, code);
return converter(name);
}
shared_ptr<ZLEncodingConverter> ZLEncodingCollection::defaultConverter() const {
return DummyEncodingConverterProvider().createConverter("utf-8");
} }

View file

@ -33,6 +33,7 @@ protected:
public: public:
virtual ~ZLEncodingConverter(); virtual ~ZLEncodingConverter();
virtual std::string name() const = 0;
virtual void convert(std::string &dst, const char *srcStart, const char *srcEnd) = 0; virtual void convert(std::string &dst, const char *srcStart, const char *srcEnd) = 0;
void convert(std::string &dst, const std::string &src); void convert(std::string &dst, const std::string &src);
virtual void reset() = 0; virtual void reset() = 0;
@ -56,6 +57,7 @@ private:
public: public:
shared_ptr<ZLEncodingConverter> converter(const std::string &name) const; shared_ptr<ZLEncodingConverter> converter(const std::string &name) const;
shared_ptr<ZLEncodingConverter> converter(int code) const;
shared_ptr<ZLEncodingConverter> defaultConverter() const; shared_ptr<ZLEncodingConverter> defaultConverter() const;
void registerProvider(shared_ptr<ZLEncodingConverterProvider> provider); void registerProvider(shared_ptr<ZLEncodingConverterProvider> provider);

View file

@ -85,7 +85,7 @@ static std::string naiveEncodingDetection(const unsigned char *buffer, size_t le
return std::string(); return std::string();
} }
} }
return ascii ? "ascii" : "utf-8"; return ascii ? "us-ascii" : "utf-8";
} }
shared_ptr<ZLLanguageDetector::LanguageInfo> ZLLanguageDetector::findInfo(const char *buffer, size_t length, int matchingCriterion) { shared_ptr<ZLLanguageDetector::LanguageInfo> ZLLanguageDetector::findInfo(const char *buffer, size_t length, int matchingCriterion) {

View file

@ -41,6 +41,7 @@
} }
-keep class org.geometerplus.fbreader.formats.EncodingConverter -keep class org.geometerplus.fbreader.formats.EncodingConverter
-keepclassmembers class org.geometerplus.fbreader.formats.EncodingConverter { -keepclassmembers class org.geometerplus.fbreader.formats.EncodingConverter {
public ** Name;
public int convert(byte[],int,int,byte[],int); public int convert(byte[],int,int,byte[],int);
public void reset(); public void reset();
} }

View file

@ -23,10 +23,12 @@ import java.nio.*;
import java.nio.charset.*; import java.nio.charset.*;
public class EncodingConverter { public class EncodingConverter {
public final String Name;
private CharsetDecoder myDecoder; private CharsetDecoder myDecoder;
private CharsetEncoder myEncoder; private CharsetEncoder myEncoder;
EncodingConverter(String encoding) { EncodingConverter(String encoding) {
Name = encoding;
myDecoder = Charset.forName(encoding).newDecoder() myDecoder = Charset.forName(encoding).newDecoder()
.onMalformedInput(CodingErrorAction.REPLACE) .onMalformedInput(CodingErrorAction.REPLACE)
.onUnmappableCharacter(CodingErrorAction.REPLACE); .onUnmappableCharacter(CodingErrorAction.REPLACE);