mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-03 17:59:33 +02:00
pass font file names to java style
This commit is contained in:
parent
fcd2640be7
commit
ccd1c34858
11 changed files with 102 additions and 11 deletions
|
@ -313,7 +313,6 @@ JNIEXPORT jint JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPlugin
|
|||
env->DeleteLocalRef(javaFootnoteModel);
|
||||
}
|
||||
|
||||
// TODO: synchronize FontManager
|
||||
const std::vector<std::vector<std::string> > familyLists = model->fontManager().familyLists();
|
||||
for (std::vector<std::vector<std::string> >::const_iterator it = familyLists.begin(); it != familyLists.end(); ++it) {
|
||||
const std::vector<std::string> &lst = *it;
|
||||
|
@ -327,6 +326,28 @@ JNIEXPORT jint JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPlugin
|
|||
env->DeleteLocalRef(jList);
|
||||
}
|
||||
|
||||
const std::map<std::string,shared_ptr<FontEntry> > entries = model->fontManager().entries();
|
||||
for (std::map<std::string,shared_ptr<FontEntry> >::const_iterator it = entries.begin(); it != entries.end(); ++it) {
|
||||
if (it->second.isNull()) {
|
||||
continue;
|
||||
}
|
||||
jstring family = AndroidUtil::createJavaString(env, it->first);
|
||||
jstring normal = AndroidUtil::createJavaString(env, it->second->Normal);
|
||||
jstring bold = AndroidUtil::createJavaString(env, it->second->Bold);
|
||||
jstring italic = AndroidUtil::createJavaString(env, it->second->Italic);
|
||||
jstring boldItalic = AndroidUtil::createJavaString(env, it->second->BoldItalic);
|
||||
|
||||
AndroidUtil::Method_NativeBookModel_registerFontEntry->call(
|
||||
javaModel, family, normal, bold, italic, boldItalic
|
||||
);
|
||||
|
||||
if (boldItalic != 0) env->DeleteLocalRef(boldItalic);
|
||||
if (italic != 0) env->DeleteLocalRef(italic);
|
||||
if (bold != 0) env->DeleteLocalRef(bold);
|
||||
if (normal != 0) env->DeleteLocalRef(normal);
|
||||
env->DeleteLocalRef(family);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -280,7 +280,7 @@ static std::string value(const StyleSheetTable::AttributeMap &map, const std::st
|
|||
}
|
||||
|
||||
void StyleSheetMultiStyleParser::processAtRule(const std::string &name, const StyleSheetTable::AttributeMap &attributes) {
|
||||
ZLLogger::Instance().registerClass("FONT");
|
||||
//ZLLogger::Instance().registerClass("FONT");
|
||||
if (name == "@font-face") {
|
||||
std::string family = value(attributes, "font-family");
|
||||
if (family.empty()) {
|
||||
|
|
|
@ -124,6 +124,7 @@ shared_ptr<VoidMethod> AndroidUtil::Method_NativeBookModel_setBookTextModel;
|
|||
shared_ptr<VoidMethod> AndroidUtil::Method_NativeBookModel_setFootnoteModel;
|
||||
shared_ptr<VoidMethod> AndroidUtil::Method_NativeBookModel_addImage;
|
||||
shared_ptr<VoidMethod> AndroidUtil::Method_NativeBookModel_registerFontFamilyList;
|
||||
shared_ptr<VoidMethod> AndroidUtil::Method_NativeBookModel_registerFontEntry;
|
||||
|
||||
//shared_ptr<StaticObjectMethod> AndroidUtil::StaticMethod_BookReadingException_throwForFile;
|
||||
|
||||
|
@ -206,6 +207,7 @@ bool AndroidUtil::init(JavaVM* jvm) {
|
|||
Method_NativeBookModel_setFootnoteModel = new VoidMethod(Class_NativeBookModel, "setFootnoteModel", "(Lorg/geometerplus/zlibrary/text/model/ZLTextModel;)");
|
||||
Method_NativeBookModel_addImage = new VoidMethod(Class_NativeBookModel, "addImage", "(Ljava/lang/String;Lorg/geometerplus/zlibrary/core/image/ZLImage;)");
|
||||
Method_NativeBookModel_registerFontFamilyList = new VoidMethod(Class_NativeBookModel, "registerFontFamilyList", "([Ljava/lang/String;)");
|
||||
Method_NativeBookModel_registerFontEntry = new VoidMethod(Class_NativeBookModel, "registerFontEntry", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)");
|
||||
|
||||
/*
|
||||
Class_BookReadingException = new JavaClass(env, "org/geometerplus/fbreader/bookmodel/BookReadingException");
|
||||
|
@ -286,6 +288,10 @@ std::string AndroidUtil::fromJavaString(JNIEnv *env, jstring from) {
|
|||
return result;
|
||||
}
|
||||
|
||||
jstring AndroidUtil::createJavaString(JNIEnv* env, shared_ptr<std::string> str) {
|
||||
return str.isNull() ? 0 : createJavaString(env, *str);
|
||||
}
|
||||
|
||||
jstring AndroidUtil::createJavaString(JNIEnv* env, const std::string &str) {
|
||||
if (str.empty()) {
|
||||
return 0;
|
||||
|
|
|
@ -146,6 +146,7 @@ public:
|
|||
static shared_ptr<VoidMethod> Method_NativeBookModel_setFootnoteModel;
|
||||
static shared_ptr<VoidMethod> Method_NativeBookModel_addImage;
|
||||
static shared_ptr<VoidMethod> Method_NativeBookModel_registerFontFamilyList;
|
||||
static shared_ptr<VoidMethod> Method_NativeBookModel_registerFontEntry;
|
||||
|
||||
//static shared_ptr<StaticObjectMethod> StaticMethod_BookReadingException_throwForFile;
|
||||
|
||||
|
@ -154,6 +155,7 @@ public:
|
|||
static JNIEnv *getEnv();
|
||||
|
||||
static std::string fromJavaString(JNIEnv *env, jstring from);
|
||||
static jstring createJavaString(JNIEnv* env, shared_ptr<std::string>);
|
||||
static jstring createJavaString(JNIEnv* env, const std::string &str);
|
||||
static std::string convertNonUtfString(const std::string &str);
|
||||
|
||||
|
|
|
@ -22,13 +22,13 @@
|
|||
#include "FontManager.h"
|
||||
|
||||
std::string FontManager::put(const std::string &family, shared_ptr<FontEntry> entry) {
|
||||
shared_ptr<FontEntry> existing = myMap[family];
|
||||
shared_ptr<FontEntry> existing = myEntries[family];
|
||||
if (existing.isNull() || *existing == *entry) {
|
||||
myMap[family] = entry;
|
||||
myEntries[family] = entry;
|
||||
return family;
|
||||
}
|
||||
|
||||
for (std::map<std::string,shared_ptr<FontEntry> >::const_iterator it = myMap.begin(); it != myMap.end(); ++it) {
|
||||
for (std::map<std::string,shared_ptr<FontEntry> >::const_iterator it = myEntries.begin(); it != myEntries.end(); ++it) {
|
||||
if (*it->second == *entry) {
|
||||
return it->first;
|
||||
}
|
||||
|
@ -37,8 +37,8 @@ std::string FontManager::put(const std::string &family, shared_ptr<FontEntry> en
|
|||
for (int i = 1; i < 1000; ++i) {
|
||||
std::string indexed = family + "#";
|
||||
ZLStringUtil::appendNumber(indexed, i);
|
||||
if (myMap[indexed].isNull()) {
|
||||
myMap[indexed] = entry;
|
||||
if (myEntries[indexed].isNull()) {
|
||||
myEntries[indexed] = entry;
|
||||
return indexed;
|
||||
}
|
||||
}
|
||||
|
@ -57,6 +57,10 @@ int FontManager::familyListIndex(const std::vector<std::string> &familyList) {
|
|||
}
|
||||
}
|
||||
|
||||
const std::map<std::string,shared_ptr<FontEntry> > &FontManager::entries() const {
|
||||
return myEntries;
|
||||
}
|
||||
|
||||
const std::vector<std::vector<std::string> > &FontManager::familyLists() const {
|
||||
return myFamilyLists;
|
||||
}
|
||||
|
|
|
@ -33,10 +33,12 @@ class FontManager {
|
|||
public:
|
||||
std::string put(const std::string &family, shared_ptr<FontEntry> entry);
|
||||
int familyListIndex(const std::vector<std::string> &familyList);
|
||||
|
||||
const std::map<std::string,shared_ptr<FontEntry> > &entries() const;
|
||||
const std::vector<std::vector<std::string> > &familyLists() const;
|
||||
|
||||
private:
|
||||
std::map<std::string,shared_ptr<FontEntry> > myMap;
|
||||
std::map<std::string,shared_ptr<FontEntry> > myEntries;
|
||||
std::vector<std::vector<std::string> > myFamilyLists;
|
||||
};
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@ import java.util.Arrays;
|
|||
import java.util.List;
|
||||
|
||||
import org.geometerplus.zlibrary.text.model.*;
|
||||
import org.geometerplus.zlibrary.text.fonts.FontEntry;
|
||||
import org.geometerplus.zlibrary.text.fonts.FontManager;
|
||||
|
||||
import org.geometerplus.fbreader.book.Book;
|
||||
|
@ -100,4 +101,12 @@ public abstract class BookModel {
|
|||
public void registerFontFamilyList(String[] families) {
|
||||
FontManager.index(Arrays.asList(families));
|
||||
}
|
||||
|
||||
public void registerFontEntry(String family, FontEntry entry) {
|
||||
FontManager.Entries.put(family, entry);
|
||||
}
|
||||
|
||||
public void registerFontEntry(String family, String normal, String bold, String italic, String boldItalic) {
|
||||
registerFontEntry(family, new FontEntry(normal, bold, italic, boldItalic));
|
||||
}
|
||||
}
|
||||
|
|
39
src/org/geometerplus/zlibrary/text/fonts/FontEntry.java
Normal file
39
src/org/geometerplus/zlibrary/text/fonts/FontEntry.java
Normal file
|
@ -0,0 +1,39 @@
|
|||
/*
|
||||
* Copyright (C) 2007-2014 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.zlibrary.text.fonts;
|
||||
|
||||
public class FontEntry {
|
||||
public final String Normal;
|
||||
public final String Bold;
|
||||
public final String Italic;
|
||||
public final String BoldItalic;
|
||||
|
||||
public FontEntry(String normal, String bold, String italic, String boldItalic) {
|
||||
Normal = normal;
|
||||
Bold = bold;
|
||||
Italic = italic;
|
||||
BoldItalic = boldItalic;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "FontEntry[" + Normal + ";" + Bold + ";" + Italic + ";" + BoldItalic + "]";
|
||||
}
|
||||
}
|
|
@ -23,6 +23,8 @@ import java.util.*;
|
|||
|
||||
public class FontManager {
|
||||
private final ArrayList<List<String>> myFamilyLists = new ArrayList<List<String>>();
|
||||
public final Map<String,FontEntry> Entries =
|
||||
Collections.synchronizedMap(new HashMap<String,FontEntry>());
|
||||
|
||||
public synchronized int index(List<String> families) {
|
||||
for (int i = 0; i < myFamilyLists.size(); ++i) {
|
||||
|
@ -35,6 +37,7 @@ public class FontManager {
|
|||
}
|
||||
|
||||
public synchronized List<String> getFamilyList(int index) {
|
||||
return index < myFamilyLists.size() ? myFamilyLists.get(index) : Collections.<String>emptyList();
|
||||
return index < myFamilyLists.size()
|
||||
? myFamilyLists.get(index) : Collections.<String>emptyList();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -147,6 +147,10 @@ public abstract class ZLTextStyleEntry {
|
|||
return myFontFamilies;
|
||||
}
|
||||
|
||||
public final FontManager getFontManager() {
|
||||
return myFontManager;
|
||||
}
|
||||
|
||||
final void setFontModifiers(byte supported, byte values) {
|
||||
myFeatureMask |= 1 << Feature.FONT_STYLE_MODIFIER;
|
||||
mySupportedFontModifiers = supported;
|
||||
|
|
|
@ -35,8 +35,9 @@ public class ZLTextExplicitlyDecoratedStyle extends ZLTextDecoratedStyle impleme
|
|||
@Override
|
||||
protected String getFontFamilyInternal() {
|
||||
if (myEntry.isFeatureSupported(FONT_FAMILY)) {
|
||||
System.err.println("FONT FAMILIES LIST = " + myEntry.getFontFamilies());
|
||||
// TODO: implement
|
||||
for (String family : myEntry.getFontFamilies()) {
|
||||
System.err.println("FAMILY = " + family + " => " + myEntry.getFontManager().Entries.get(family));
|
||||
}
|
||||
}
|
||||
return Parent.getFontFamily();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue