summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2014-05-29 15:17:47 +0200
committerTor Andersson <tor.andersson@artifex.com>2014-05-29 15:18:20 +0200
commit0f0653cac62c7dbcd4b4cd2ea57640769271365c (patch)
tree944517414cd5c41297e436ed5c5b34d97e7e313b
parent803294993c0ec927678f80ffb317770a8785f83b (diff)
downloadmupdf-0f0653cac62c7dbcd4b4cd2ea57640769271365c.tar.xz
Fix 694093: add vertical variant of CJK fallback font.
Replace the DroidSansFallback TTF files with a TTC that has two fonts: The original and a copy where the OpenType 'vert' substitution lookup has been pre-applied by copying the uniXXXX.vert glyph data to uniXXXX.
-rw-r--r--Makefile4
-rw-r--r--platform/win32/generate.bat4
-rw-r--r--resources/fonts/droid/DroidSansFallback.ttcbin0 -> 3804368 bytes
-rw-r--r--resources/fonts/droid/DroidSansFallback.ttfbin3838696 -> 0 bytes
-rw-r--r--resources/fonts/droid/DroidSansFallbackFull.ttc (renamed from resources/fonts/droid/DroidSansFallbackFull.ttf)bin5398328 -> 5357160 bytes
-rw-r--r--source/pdf/pdf-font.c40
6 files changed, 27 insertions, 21 deletions
diff --git a/Makefile b/Makefile
index 50240941..9820568d 100644
--- a/Makefile
+++ b/Makefile
@@ -178,8 +178,8 @@ CMAP_KOREA_SRC := $(wildcard resources/cmaps/korea/*)
FONT_BASE14_SRC := $(wildcard resources/fonts/urw/*.cff)
FONT_DROID_SRC := resources/fonts/droid/DroidSans.ttf resources/fonts/droid/DroidSansMono.ttf
-FONT_CJK_SRC := resources/fonts/droid/DroidSansFallback.ttf
-FONT_CJK_FULL_SRC := resources/fonts/droid/DroidSansFallbackFull.ttf
+FONT_CJK_SRC := resources/fonts/droid/DroidSansFallback.ttc
+FONT_CJK_FULL_SRC := resources/fonts/droid/DroidSansFallbackFull.ttc
$(GEN)/gen_cmap_cns.h : $(CMAP_CNS_SRC)
$(QUIET_GEN) $(CMAPDUMP) $@ $(CMAP_CNS_SRC)
diff --git a/platform/win32/generate.bat b/platform/win32/generate.bat
index 0615a5fb..934dec4b 100644
--- a/platform/win32/generate.bat
+++ b/platform/win32/generate.bat
@@ -16,8 +16,8 @@ if not exist bin2hex.exe goto usage
if not exist generated/gen_font_base14.h fontdump.exe generated/gen_font_base14.h resources/fonts/urw/*.cff
if not exist generated/gen_font_droid.h fontdump.exe generated/gen_font_droid.h resources/fonts/droid/DroidSans.ttf resources/fonts/droid/DroidSansMono.ttf
-if not exist generated/gen_font_cjk.h fontdump.exe generated/gen_font_cjk.h resources/fonts/droid/DroidSansFallback.ttf
-if not exist generated/gen_font_cjk_full.h fontdump.exe generated/gen_font_cjk_full.h resources/fonts/droid/DroidSansFallbackFull.ttf
+if not exist generated/gen_font_cjk.h fontdump.exe generated/gen_font_cjk.h resources/fonts/droid/DroidSansFallback.ttc
+if not exist generated/gen_font_cjk_full.h fontdump.exe generated/gen_font_cjk_full.h resources/fonts/droid/DroidSansFallbackFull.ttc
if not exist generated/gen_cmap_cns.h cmapdump.exe generated/gen_cmap_cns.h resources\cmaps\cns\*
if not exist generated/gen_cmap_gb.h cmapdump.exe generated/gen_cmap_gb.h resources\cmaps\gb\*
diff --git a/resources/fonts/droid/DroidSansFallback.ttc b/resources/fonts/droid/DroidSansFallback.ttc
new file mode 100644
index 00000000..0b7d21b7
--- /dev/null
+++ b/resources/fonts/droid/DroidSansFallback.ttc
Binary files differ
diff --git a/resources/fonts/droid/DroidSansFallback.ttf b/resources/fonts/droid/DroidSansFallback.ttf
deleted file mode 100644
index cfbc66ad..00000000
--- a/resources/fonts/droid/DroidSansFallback.ttf
+++ /dev/null
Binary files differ
diff --git a/resources/fonts/droid/DroidSansFallbackFull.ttf b/resources/fonts/droid/DroidSansFallbackFull.ttc
index 0cacabed..ad34895e 100644
--- a/resources/fonts/droid/DroidSansFallbackFull.ttf
+++ b/resources/fonts/droid/DroidSansFallbackFull.ttc
Binary files differ
diff --git a/source/pdf/pdf-font.c b/source/pdf/pdf-font.c
index 3f6d5601..c6dc7123 100644
--- a/source/pdf/pdf-font.c
+++ b/source/pdf/pdf-font.c
@@ -233,8 +233,9 @@ pdf_load_substitute_cjk_font(fz_context *ctx, pdf_font_desc *fontdesc, char *fon
if (!data)
fz_throw(ctx, FZ_ERROR_GENERIC, "cannot find builtin CJK font");
- /* a glyph bbox cache is too big for droid sans fallback (51k glyphs!) */
- fontdesc->font = fz_new_font_from_memory(ctx, fontname, data, len, 0, 0);
+ /* The DroidSansFallback fonts have both H and V variants in the TTC */
+ /* A glyph bbox cache is too big for DroidSansFallback (51k glyphs!) */
+ fontdesc->font = fz_new_font_from_memory(ctx, fontname, data, len, fontdesc->wmode, 0);
}
fontdesc->font->ft_substitute = 1;
@@ -848,6 +849,7 @@ load_cid_font(pdf_document *doc, pdf_obj *dict, pdf_obj *encoding, pdf_obj *to_u
pdf_obj *widths;
pdf_obj *descriptor;
pdf_font_desc *fontdesc = NULL;
+ pdf_cmap *cmap;
FT_Face face;
char collection[256];
char *basefont;
@@ -889,40 +891,44 @@ load_cid_font(pdf_document *doc, pdf_obj *dict, pdf_obj *encoding, pdf_obj *to_u
fz_strlcat(collection, tmpstr, sizeof collection);
}
- /* Load font file */
-
- fontdesc = pdf_new_font_desc(ctx);
-
- descriptor = pdf_dict_gets(dict, "FontDescriptor");
- if (!descriptor)
- fz_throw(ctx, FZ_ERROR_GENERIC, "syntaxerror: missing font descriptor");
- pdf_load_font_descriptor(fontdesc, doc, descriptor, collection, basefont, 1);
-
- face = fontdesc->font->ft_face;
-
/* Encoding */
if (pdf_is_name(encoding))
{
if (!strcmp(pdf_to_name(encoding), "Identity-H"))
- fontdesc->encoding = pdf_new_identity_cmap(ctx, 0, 2);
+ cmap = pdf_new_identity_cmap(ctx, 0, 2);
else if (!strcmp(pdf_to_name(encoding), "Identity-V"))
- fontdesc->encoding = pdf_new_identity_cmap(ctx, 1, 2);
+ cmap = pdf_new_identity_cmap(ctx, 1, 2);
else
- fontdesc->encoding = pdf_load_system_cmap(ctx, pdf_to_name(encoding));
+ cmap = pdf_load_system_cmap(ctx, pdf_to_name(encoding));
}
else if (pdf_is_indirect(encoding))
{
- fontdesc->encoding = pdf_load_embedded_cmap(doc, encoding);
+ cmap = pdf_load_embedded_cmap(doc, encoding);
}
else
{
fz_throw(ctx, FZ_ERROR_GENERIC, "syntaxerror: font missing encoding");
}
+
+ /* Load font file */
+
+ fontdesc = pdf_new_font_desc(ctx);
+
+ fontdesc->encoding = cmap;
fontdesc->size += pdf_cmap_size(ctx, fontdesc->encoding);
pdf_set_font_wmode(ctx, fontdesc, pdf_cmap_wmode(ctx, fontdesc->encoding));
+ descriptor = pdf_dict_gets(dict, "FontDescriptor");
+ if (!descriptor)
+ fz_throw(ctx, FZ_ERROR_GENERIC, "syntaxerror: missing font descriptor");
+ pdf_load_font_descriptor(fontdesc, doc, descriptor, collection, basefont, 1);
+
+ face = fontdesc->font->ft_face;
+
+ /* Apply encoding */
+
cidtogidmap = pdf_dict_gets(dict, "CIDToGIDMap");
if (pdf_is_indirect(cidtogidmap))
{