Merge pull request #641 from houqp/new_ui_code

merge latest changes from master branch
This commit is contained in:
{Qingping,Dave} Hou
2012-11-29 07:32:32 -08:00
11 changed files with 90 additions and 108 deletions

View File

@@ -8,8 +8,8 @@ DJVUDIR=djvulibre
KPVCRLIBDIR=kpvcrlib
CRENGINEDIR=$(KPVCRLIBDIR)/crengine
FREETYPEDIR=$(MUPDFDIR)/thirdparty/freetype-2.4.10
JPEGDIR=$(MUPDFDIR)/thirdparty/jpeg-9
FREETYPEDIR=$(MUPDFDIR)/thirdparty/freetype
JPEGDIR=$(MUPDFDIR)/thirdparty/jpeg
LFSDIR=luafilesystem
POPENNSDIR=popen-noshell
@@ -96,6 +96,7 @@ K2PDFOPT_CFLAGS=-I$(K2PDFOPTLIBDIR)/willuslib -I$(K2PDFOPTLIBDIR)/k2pdfoptlib -I
MUPDFLIBS := $(MUPDFLIBDIR)/libfitz.a
DJVULIBS := $(DJVUDIR)/build/libdjvu/.libs/libdjvulibre.so \
$(LIBDIR)/libdjvulibre.so
DJVULIB := $(LIBDIR)/libdjvulibre.so.21
DJVULIBDIR := $(DJVUDIR)/build/libdjvu/.libs/
CRENGINELIBS := $(CRENGINEDIR)/crengine/libcrengine.a \
$(CRENGINEDIR)/thirdparty/chmlib/libchmlib.a \
@@ -111,7 +112,7 @@ THIRDPARTYLIBS := $(MUPDFLIBDIR)/libfreetype.a \
#$(MUPDFLIBDIR)/libjpeg.a \
#$(CRENGINEDIR)/thirdparty/libjpeg/libjpeg.a \
LUALIB := $(LUADIR)/src/libluajit.a
LUALIB := $(LIBDIR)/libluajit-5.1.so.2
POPENNSLIB := $(POPENNSDIR)/libpopen_noshell.a
@@ -136,18 +137,18 @@ kpdfview: kpdfview.o einkfb.o pdf.o blitbuffer.o drawcontext.o koptcontext.o inp
ft.o \
lfs.o \
mupdfimg.o \
$(MUPDFLIBS) \
$(THIRDPARTYLIBS) \
$(LUALIB) \
djvu.o \
pic.o \
pic_jpeg.o \
$(MUPDFLIBS) \
$(THIRDPARTYLIBS) \
djvu.o \
cre.o \
$(CRENGINELIBS) \
$(STATICLIBSTDCPP) \
$(LDFLAGS) \
-Wl,-rpath=$(LIBDIR)/ \
-o $@ \
-lm -ldl -lpthread -lk2pdfopt -ldjvulibre -ljpeg -L$(MUPDFLIBDIR) -L$(LIBDIR)\
-lm -ldl -lpthread -lk2pdfopt -ldjvulibre -lluajit-5.1 -L$(MUPDFLIBDIR) -L$(LIBDIR)\
$(EMU_LDFLAGS) \
$(DYNAMICLIBSTDCPP)
@@ -193,26 +194,19 @@ fetchthirdparty:
test -d $(LUADIR) && (cd $(LUADIR); git checkout .) || echo warn: $(LUADIR) folder not found
git submodule init
git submodule update
cd mupdf && (git submodule init; git submodule update)
ln -sf kpvcrlib/crengine/cr3gui/data data
test -e data/cr3.css || ln kpvcrlib/cr3.css data/
test -d fonts || ln -sf $(TTF_FONTS_DIR) fonts
test -d history || mkdir history
test -d clipboard || mkdir clipboard
# CREngine patch: disable fontconfig
grep USE_FONTCONFIG $(CRENGINEDIR)/crengine/include/crsetup.h && grep -v USE_FONTCONFIG $(CRENGINEDIR)/crengine/include/crsetup.h > /tmp/new && mv /tmp/new $(CRENGINEDIR)/crengine/include/crsetup.h || echo "USE_FONTCONFIG already disabled"
test -f mupdf-thirdparty.zip || wget http://www.mupdf.com/download/mupdf-thirdparty.zip
# CREngine patch: change child nodes' type face
# @TODO replace this dirty hack 24.04 2012 (houqp)
cd kpvcrlib/crengine/crengine/src && \
patch -N -p0 < ../../../lvrend_node_type_face.patch && \
patch -N -p3 < ../../../lvdocview-getCurrentPageLinks.patch || true
unzip mupdf-thirdparty.zip -d mupdf
# check mupdf's thirdparty libs' version, if not matched, remove the old one
# run make fetchthirdparty again to get the latest thirdparty libs.
test -d $(FREETYPEDIR) || ( echo "error: mupdf's thirdparty libs' version not match" ; \
rm -rf mupdf-thirdparty.zip ; exit 1 )
# dirty patch in MuPDF's thirdparty lib for CREngine
cd mupdf/thirdparty/jpeg-*/ && \
patch -N -p0 < ../../../kpvcrlib/jpeg_compress_struct_size.patch &&\
patch -N -p0 < ../../../kpvcrlib/jpeg_decompress_struct_size.patch
# MuPDF patch: use external fonts
cd mupdf && patch -N -p1 < ../mupdf.patch
test -f popen-noshell/popen_noshell.c || svn co http://popen-noshell.googlecode.com/svn/trunk/ popen-noshell
@@ -232,24 +226,18 @@ cleanthirdparty:
test -d $(CRENGINEDIR)/crengine && ($(MAKE) -C $(CRENGINEDIR)/crengine clean) || echo warn: chmlib folder not found
test -d $(KPVCRLIBDIR) && ($(MAKE) -C $(KPVCRLIBDIR) clean) || echo warn: chmlib folder not found
rm -rf $(DJVUDIR)/build
rm -f $(MUPDFDIR)/fontdump.host
rm -f $(MUPDFDIR)/cmapdump.host
$(MAKE) -C $(POPENNSDIR) clean
$(MAKE) -C $(K2PDFOPTLIBDIR) clean
$(MUPDFDIR)/fontdump.host:
CFLAGS="$(HOSTCFLAGS)" $(MAKE) -C mupdf build="release" CC="$(HOSTCC)" $(MUPDFTARGET)/fontdump
cp -a $(MUPDFLIBDIR)/fontdump $(MUPDFDIR)/fontdump.host
$(MAKE) -C mupdf clean
$(MUPDFDIR)/cmapdump.host:
CFLAGS="$(HOSTCFLAGS)" $(MAKE) -C mupdf build="release" CC="$(HOSTCC)" $(MUPDFTARGET)/cmapdump
cp -a $(MUPDFLIBDIR)/cmapdump $(MUPDFDIR)/cmapdump.host
$(MAKE) -C mupdf clean
$(MUPDFLIBS) $(THIRDPARTYLIBS): $(MUPDFDIR)/cmapdump.host $(MUPDFDIR)/fontdump.host
$(MUPDFLIBS) $(THIRDPARTYLIBS):
# build only thirdparty libs, libfitz and pdf utils, which will care for libmupdf.a being built
CFLAGS="$(CFLAGS) -DNOBUILTINFONT" $(MAKE) -C mupdf build="release" CC="$(CC)" CMAPDUMP=cmapdump.host FONTDUMP=fontdump.host MUPDF= MU_APPS= BUSY_APP= XPS_APPS= verbose=1
ifdef EMULATE_READER
$(MAKE) -C mupdf XCFLAGS="$(CFLAGS) -DNOBUILTINFONT" build="release" CC="$(CC)" MUPDF= MU_APPS= BUSY_APP= XPS_APPS= verbose=1 NOX11=yes
else
# generate data headers
$(MAKE) -C mupdf generate build="release"
$(MAKE) -C mupdf XCFLAGS="$(CFLAGS) -DNOBUILTINFONT" build="release" CC="$(CC)" MUPDF= MU_APPS= BUSY_APP= XPS_APPS= verbose=1 NOX11=yes CROSSCOMPILE=yes OS=Kindle
endif
$(DJVULIBS):
mkdir -p $(DJVUDIR)/build
@@ -269,11 +257,14 @@ $(CRENGINELIBS):
$(LUALIB):
ifdef EMULATE_READER
$(MAKE) -C $(LUADIR) BUILDMODE=static
$(MAKE) -C $(LUADIR) BUILDMODE=shared
else
# To recap: build its TARGET_CC from CROSS+CC, so we need HOSTCC in CC. Build its HOST/TARGET_CFLAGS based on CFLAGS, so we need a neutral CFLAGS without arch
$(MAKE) -C $(LUADIR) BUILDMODE=static CC="$(HOSTCC)" HOST_CC="$(HOSTCC) -m32" CFLAGS="$(BASE_CFLAGS)" HOST_CFLAGS="$(HOSTCFLAGS)" TARGET_CFLAGS="$(CFLAGS)" CROSS="$(CHOST)-" TARGET_FLAGS="-DLUAJIT_NO_LOG2 -DLUAJIT_NO_EXP2"
$(MAKE) -C $(LUADIR) BUILDMODE=shared CC="$(HOSTCC)" HOST_CC="$(HOSTCC) -m32" CFLAGS="$(BASE_CFLAGS)" HOST_CFLAGS="$(HOSTCFLAGS)" TARGET_CFLAGS="$(CFLAGS)" CROSS="$(CHOST)-" TARGET_FLAGS="-DLUAJIT_NO_LOG2 -DLUAJIT_NO_EXP2"
endif
test -d $(LIBDIR) || mkdir $(LIBDIR)
cp -a $(LUADIR)/src/libluajit.so* $(LUALIB)
ln -s libluajit-5.1.so.2 $(LIBDIR)/libluajit-5.1.so
$(POPENNSLIB):
$(MAKE) -C $(POPENNSDIR) CC="$(CC)" AR="$(AR)"
@@ -299,10 +290,11 @@ customupdate: all
mkdir -p $(INSTALL_DIR)/{history,screenshots,clipboard,libs}
cp -p README.md COPYING kpdfview extr kpdf.sh $(LUA_FILES) $(INSTALL_DIR)
mkdir $(INSTALL_DIR)/data
cp -L libs/libdjvulibre.so.21 $(K2PDFOPTLIB) $(INSTALL_DIR)/libs
cp -L $(DJVULIB) $(LUALIB) $(K2PDFOPTLIB) $(INSTALL_DIR)/libs
$(STRIP) --strip-unneeded $(INSTALL_DIR)/libs/*
cp -rpL data/*.css $(INSTALL_DIR)/data
cp -rpL fonts $(INSTALL_DIR)
rm $(INSTALL_DIR)/fonts/droid/DroidSansFallback.ttf
cp -r git-rev resources $(INSTALL_DIR)
cp -rpL frontend $(INSTALL_DIR)
mkdir $(INSTALL_DIR)/fonts/host

View File

@@ -15,7 +15,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
@@ -24,6 +23,11 @@
#include "einkfb.h"
#ifdef EMULATE_READER
int emu_w = EMULATE_READER_W;
int emu_h = EMULATE_READER_H;
#endif
static int openFrameBuffer(lua_State *L) {
const char *fb_device = luaL_checkstring(L, 1);
FBInfo *fb = (FBInfo*) lua_newuserdata(L, sizeof(FBInfo));
@@ -114,14 +118,14 @@ static int openFrameBuffer(lua_State *L) {
if(SDL_Init(SDL_INIT_VIDEO) < 0) {
return luaL_error(L, "cannot initialize SDL.");
}
if(!(fb->screen = SDL_SetVideoMode(EMULATE_READER_W, EMULATE_READER_H, 32, SDL_HWSURFACE))) {
if(!(fb->screen = SDL_SetVideoMode(emu_w, emu_h, 32, SDL_HWSURFACE))) {
return luaL_error(L, "can't get video surface %dx%d for 32bpp.",
EMULATE_READER_W, EMULATE_READER_H);
emu_w, emu_h);
}
fb->vinfo.xres = EMULATE_READER_W;
fb->vinfo.yres = EMULATE_READER_H;
fb->buf->pitch = (EMULATE_READER_W + 1) / 2;
fb->buf->data = calloc(fb->buf->pitch * EMULATE_READER_H, sizeof(char));
fb->vinfo.xres = emu_w;
fb->vinfo.yres = emu_h;
fb->buf->pitch = (emu_w + 1) / 2;
fb->buf->data = calloc(fb->buf->pitch * emu_h, sizeof(char));
if(fb->buf->data == NULL) {
return luaL_error(L, "cannot get framebuffer emu memory");
}
@@ -342,7 +346,6 @@ static int einkUpdate(lua_State *L) {
/* NOTICE!!! You must close and reopen framebuffer after called this method.
* Otherwise, screen resolution will not be updated! */
static int einkSetOrientation(lua_State *L) {
#ifndef EMULATE_READER
FBInfo *fb = (FBInfo*) luaL_checkudata(L, 1, "einkfb");
int mode = luaL_optint(L, 2, 0);
@@ -367,12 +370,22 @@ static int einkSetOrientation(lua_State *L) {
* +--------------+
* 0
* */
#ifndef EMULATE_READER
if (mode == 1)
mode = 2;
else if (mode == 2)
mode = 1;
ioctl(fb->fd, FBIO_EINK_SET_DISPLAY_ORIENTATION, mode);
#else
if (mode == 0 || mode == 2) {
emu_w = EMULATE_READER_W;
emu_h = EMULATE_READER_H;
}
else if (mode == 1 || mode == 3) {
emu_w = EMULATE_READER_H;
emu_h = EMULATE_READER_W;
}
#endif
return 0;
}
@@ -390,6 +403,9 @@ static int einkGetOrientation(lua_State *L) {
mode = 1;
else if (mode == 1)
mode = 2;
#else
if (emu_w == EMULATE_READER_H || emu_h == EMULATE_READER_W)
mode = 1;
#endif
lua_pushinteger(L, mode);
return 1;

View File

@@ -3,7 +3,7 @@ require "settings" -- for DEBUG()
Font = {
fontmap = {
-- default font for menu contents
cfont = "droid/DroidSans.ttf",
cfont = "droid/DroidSansFallbackFull.ttf",
-- default font for title
tfont = "NimbusSanL-BoldItal.cff",
-- default font for footer

View File

@@ -21,9 +21,8 @@ fi
# stop cvm
killall -stop cvm
export LD_LIBRARY_PATH=`pwd`/libs
# finally call reader
./reader.lua "$1" 2> /mnt/us/kindlepdfviewer/crash.log || cat /mnt/us/kindlepdfviewer/crash.log
./reader.lua "$1" 2> crash.log
# unmount system fonts
if grep /mnt/us/kindlepdfviewer/fonts/host /proc/mounts; then

View File

@@ -9,14 +9,14 @@ SET(CR_3RDPARTY_DIR crengine/thirdparty)
SET(CR3_PNG 1)
#SET(CR3_JPEG 1)
SET(FREETYPE_INCLUDE_DIRS ${MUPDF_3RDPARTY_DIR}/freetype-2.4.10/include)
SET(FREETYPE_INCLUDE_DIRS ${MUPDF_3RDPARTY_DIR}/freetype/include)
#SET(FREETYPE_INCLUDE_DIRS ${CR_3RDPARTY_DIR}/freetype/include)
SET(ANTIWORD_INCLUDE_DIR ${CR_3RDPARTY_DIR}/antiword)
SET(CHM_INCLUDE_DIRS ${CR_3RDPARTY_DIR}/chmlib)
SET(PNG_INCLUDE_DIR ${CR_3RDPARTY_DIR}/libpng)
SET(ZLIB_INCLUDE_DIR ${MUPDF_3RDPARTY_DIR}/zlib-1.2.7)
SET(ZLIB_INCLUDE_DIR ${MUPDF_3RDPARTY_DIR}/zlib)
#SET(ZLIB_INCLUDE_DIR ${CR_3RDPARTY_DIR}/zlib)
SET(JPEGLIB_INCLUDE_DIR ${MUPDF_3RDPARTY_DIR}/jpeg-9)
SET(JPEGLIB_INCLUDE_DIR ${MUPDF_3RDPARTY_DIR}/jpeg)
#SET(JPEGLIB_INCLUDE_DIR ${CR_3RDPARTY_DIR}/libjpeg)
SET(JCONFIG_INCLUDE_DIR ${MUPDF_DIR}/scripts)

View File

@@ -1,15 +0,0 @@
--- jcapimin.c 2012-04-04 00:02:30.000000000 +0800
+++ jcapimin-patched.c 2012-04-04 00:02:26.000000000 +0800
@@ -36,9 +36,9 @@
cinfo->mem = NULL; /* so jpeg_destroy knows mem mgr not called */
if (version != JPEG_LIB_VERSION)
ERREXIT2(cinfo, JERR_BAD_LIB_VERSION, JPEG_LIB_VERSION, version);
- if (structsize != SIZEOF(struct jpeg_compress_struct))
- ERREXIT2(cinfo, JERR_BAD_STRUCT_SIZE,
- (int) SIZEOF(struct jpeg_compress_struct), (int) structsize);
+ /*if (structsize != SIZEOF(struct jpeg_compress_struct))*/
+ /*ERREXIT2(cinfo, JERR_BAD_STRUCT_SIZE, */
+ /*(int) SIZEOF(struct jpeg_compress_struct), (int) structsize);*/
/* For debugging purposes, we zero the whole master structure.
* But the application has already set the err pointer, and may have set

View File

@@ -1,15 +0,0 @@
--- jdapimin.c 2012-04-04 01:09:00.000000000 +0800
+++ jdapimin-patched.c 2012-04-04 01:42:44.000000000 +0800
@@ -36,9 +36,9 @@
cinfo->mem = NULL; /* so jpeg_destroy knows mem mgr not called */
if (version != JPEG_LIB_VERSION)
ERREXIT2(cinfo, JERR_BAD_LIB_VERSION, JPEG_LIB_VERSION, version);
- if (structsize != SIZEOF(struct jpeg_decompress_struct))
- ERREXIT2(cinfo, JERR_BAD_STRUCT_SIZE,
- (int) SIZEOF(struct jpeg_decompress_struct), (int) structsize);
+ /*if (structsize != SIZEOF(struct jpeg_decompress_struct))*/
+ /*ERREXIT2(cinfo, JERR_BAD_STRUCT_SIZE, */
+ /*(int) SIZEOF(struct jpeg_decompress_struct), (int) structsize);*/
/* For debugging purposes, we zero the whole master structure.
* But the application has already set the err pointer, and may have set

2
mupdf

Submodule mupdf updated: bdb6b688a2...05219d086a

View File

@@ -1,62 +1,60 @@
diff --git a/pdf/pdf_font.c b/pdf/pdf_font.c
index 5e54e0b..38bd1d8 100644
index 33a1a65..c2fdee3 100644
--- a/pdf/pdf_font.c
+++ b/pdf/pdf_font.c
@@ -182,8 +182,13 @@ pdf_load_builtin_font(fz_context *ctx, pdf_font_desc *fontdesc, char *fontname)
@@ -185,7 +185,12 @@ pdf_load_builtin_font(fz_context *ctx, pdf_font_desc *fontdesc, char *fontname)
if (!data)
fz_throw(ctx, "cannot find builtin font: '%s'", fontname);
+#ifndef NOBUILTINFONT
fontdesc->font = fz_new_font_from_memory(ctx, data, len, 0, 1);
/* RJW: "cannot load freetype font from memory" */
fontdesc->font = fz_new_font_from_memory(ctx, fontname, data, len, 0, 1);
+#else
+ fontdesc->font = fz_new_font_from_file(ctx, data, 0, 1);
+ fontdesc->font = fz_new_font_from_file(ctx, fontname, data, 0, 1);
+ free(data);
+#endif
if (!strcmp(fontname, "Symbol") || !strcmp(fontname, "ZapfDingbats"))
fontdesc->flags |= PDF_FD_SYMBOLIC;
@@ -199,8 +204,13 @@ pdf_load_substitute_font(fz_context *ctx, pdf_font_desc *fontdesc, int mono, int
@@ -201,7 +206,12 @@ pdf_load_substitute_font(fz_context *ctx, pdf_font_desc *fontdesc, char *fontnam
if (!data)
fz_throw(ctx, "cannot find substitute font");
+#ifndef NOBUILTINFONT
fontdesc->font = fz_new_font_from_memory(ctx, data, len, 0, 1);
/* RJW: "cannot load freetype font from memory" */
fontdesc->font = fz_new_font_from_memory(ctx, fontname, data, len, 0, 1);
+#else
+ fontdesc->font = fz_new_font_from_file(ctx, data, 0, 1);
+ fontdesc->font = fz_new_font_from_file(ctx, fontname, data, 0, 1);
+ free(data);
+#endif
fontdesc->font->ft_substitute = 1;
fontdesc->font->ft_bold = bold && !ft_is_bold(fontdesc->font->ft_face);
@@ -218,7 +228,12 @@ pdf_load_substitute_cjk_font(fz_context *ctx, pdf_font_desc *fontdesc, int ros,
@@ -219,7 +229,12 @@ pdf_load_substitute_cjk_font(fz_context *ctx, pdf_font_desc *fontdesc, char *fon
fz_throw(ctx, "cannot find builtin CJK font");
/* a glyph bbox cache is too big for droid sans fallback (51k glyphs!) */
+#ifndef NOBUILTINFONT
fontdesc->font = fz_new_font_from_memory(ctx, data, len, 0, 0);
fontdesc->font = fz_new_font_from_memory(ctx, fontname, data, len, 0, 0);
+#else
+ fontdesc->font = fz_new_font_from_file(ctx, data, 0, 0);
+ fontdesc->font = fz_new_font_from_file(ctx, fontname, data, 0, 1);
+ free(data);
+#endif
/* RJW: "cannot load builtin CJK font" */
fontdesc->font->ft_substitute = 1;
}
diff --git a/pdf/pdf_fontfile.c b/pdf/pdf_fontfile.c
index 543ce76..a076033 100644
index 99565da..a91380f 100644
--- a/pdf/pdf_fontfile.c
+++ b/pdf/pdf_fontfile.c
@@ -1,6 +1,8 @@
#include "fitz.h"
#include "mupdf.h"
@@ -15,6 +15,8 @@
Set NODROIDFONT to use the base 14 fonts as substitute fonts.
*/
+#ifndef NOBUILTINFONT
+
#ifdef NOCJK
#define NOCJKFONT
#endif
@@ -129,3 +131,112 @@ pdf_find_substitute_cjk_font(int ros, int serif, unsigned int *len)
@@ -152,3 +154,112 @@ pdf_lookup_substitute_cjk_font(int ros, int serif, unsigned int *len)
return NULL;
#endif
}

View File

@@ -19,7 +19,7 @@ function escape_tex_specialchars()
function usage()
{
echo "Usage: $progname -o file.pdf file1.djvu [file2.mp3] ..."
echo "Usage: $progname -o file.pdf [-a author] file1.djvu [file2.mp3] ..."
exit 1
}
@@ -43,9 +43,13 @@ declare -a infiles=()
declare -a infiles_texclean=()
declare -a infilesize=()
declare -i infcount=0 outfcount=0 totalsize=0
declare author=""
while getopts ":o:" opt; do
while getopts ":o:a:" opt; do
case $opt in
a)
author="$OPTARG"
;;
o)
outfile=$(readlink -f "$OPTARG")
((outfcount++))
@@ -96,6 +100,9 @@ cd $workdir
echo -E "\documentclass{book}" >> tmp.tex
echo -E "\usepackage[margin={1mm},papersize={9cm,12cm}]{geometry}" >> tmp.tex
echo -E "\usepackage{hyperref,attachfile}" >> tmp.tex
if [ ! -z "$author" ] ; then
echo -E "\AtBeginDocument{\hypersetup{pdfauthor={$author}}}" >> tmp.tex
fi
echo -E "\begin{document}" >> tmp.tex
echo -E "\tolerance=10000\pagestyle{empty}\fontsize{7}{13}\selectfont" >> tmp.tex