summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rw-r--r--resources/fonts/droid/DroidSansFallback.ttcbin3864568 -> 0 bytes
-rw-r--r--resources/fonts/droid/DroidSansFallback.ttfbin0 -> 3556308 bytes
-rw-r--r--resources/fonts/droid/DroidSansFallbackFull.ttcbin5415724 -> 0 bytes
-rw-r--r--resources/fonts/droid/DroidSansFallbackFull.ttfbin0 -> 5074864 bytes
-rw-r--r--source/fitz/noto.c7
-rw-r--r--source/pdf/pdf-font.c61
7 files changed, 63 insertions, 9 deletions
diff --git a/Makefile b/Makefile
index 5ba326a8..cb055d26 100644
--- a/Makefile
+++ b/Makefile
@@ -113,7 +113,7 @@ $(GPRF_OBJ) : $(FITZ_HDR) $(GPRF_HDR) $(GPRF_SRC_HDR)
# --- Generated embedded font files ---
-FONT_BIN_DROID := $(wildcard resources/fonts/droid/*.ttc)
+FONT_BIN_DROID := $(wildcard resources/fonts/droid/*.ttf)
FONT_BIN_NOTO := $(wildcard resources/fonts/noto/*.ttf)
FONT_BIN_URW := $(wildcard resources/fonts/urw/*.cff)
FONT_BIN_SIL := $(wildcard resources/fonts/sil/*.cff)
@@ -127,7 +127,7 @@ FONT_BIN := $(FONT_BIN_DROID) $(FONT_BIN_NOTO) $(FONT_BIN_URW) $(FONT_BIN_SIL)
FONT_GEN := $(FONT_GEN_DROID) $(FONT_GEN_NOTO) $(FONT_GEN_URW) $(FONT_GEN_SIL)
FONT_OBJ := $(subst $(GEN)/, $(OUT)/fonts/, $(addsuffix .o, $(basename $(FONT_GEN))))
-$(GEN)/%.c : resources/fonts/droid/%.ttc $(FONTDUMP)
+$(GEN)/%.c : resources/fonts/droid/%.ttf $(FONTDUMP)
$(QUIET_GEN) $(FONTDUMP) $@ $<
$(GEN)/%.c : resources/fonts/noto/%.ttf $(FONTDUMP)
$(QUIET_GEN) $(FONTDUMP) $@ $<
diff --git a/resources/fonts/droid/DroidSansFallback.ttc b/resources/fonts/droid/DroidSansFallback.ttc
deleted file mode 100644
index b0ac8657..00000000
--- a/resources/fonts/droid/DroidSansFallback.ttc
+++ /dev/null
Binary files differ
diff --git a/resources/fonts/droid/DroidSansFallback.ttf b/resources/fonts/droid/DroidSansFallback.ttf
new file mode 100644
index 00000000..cc7d41d3
--- /dev/null
+++ b/resources/fonts/droid/DroidSansFallback.ttf
Binary files differ
diff --git a/resources/fonts/droid/DroidSansFallbackFull.ttc b/resources/fonts/droid/DroidSansFallbackFull.ttc
deleted file mode 100644
index 4783bdbb..00000000
--- a/resources/fonts/droid/DroidSansFallbackFull.ttc
+++ /dev/null
Binary files differ
diff --git a/resources/fonts/droid/DroidSansFallbackFull.ttf b/resources/fonts/droid/DroidSansFallbackFull.ttf
new file mode 100644
index 00000000..d89a1810
--- /dev/null
+++ b/resources/fonts/droid/DroidSansFallbackFull.ttf
Binary files differ
diff --git a/source/fitz/noto.c b/source/fitz/noto.c
index 3d646b52..4bdc133a 100644
--- a/source/fitz/noto.c
+++ b/source/fitz/noto.c
@@ -126,13 +126,12 @@ fz_lookup_builtin_font(fz_context *ctx, const char *name, int is_bold, int is_it
const char *
fz_lookup_cjk_font(fz_context *ctx, int registry, int serif, int wmode, int *size, int *index)
{
+ if (index) *index = 0;
#ifndef TOFU_CJK
#ifndef TOFU_CJK_EXT
- if (index) *index = wmode;
- { RETURN(DroidSansFallbackFull_ttc); }
+ RETURN(DroidSansFallbackFull_ttf);
#else
- if (index) *index = wmode;
- { RETURN(DroidSansFallback_ttc); }
+ RETURN(DroidSansFallback_ttf);
#endif
#else
return *size = 0, NULL;
diff --git a/source/pdf/pdf-font.c b/source/pdf/pdf-font.c
index eab26139..7e15a287 100644
--- a/source/pdf/pdf-font.c
+++ b/source/pdf/pdf-font.c
@@ -179,6 +179,63 @@ static int ft_cid_to_gid(pdf_font_desc *fontdesc, int cid)
if (fontdesc->to_ttf_cmap)
{
cid = pdf_lookup_cmap(fontdesc->to_ttf_cmap, cid);
+
+ /* vertical presentation forms */
+ if (fontdesc->font->ft_substitute && fontdesc->wmode)
+ {
+ switch (cid)
+ {
+ case 0x0021: cid = 0xFE15; break; /* ! */
+ case 0x0028: cid = 0xFE35; break; /* ( */
+ case 0x0029: cid = 0xFE36; break; /* ) */
+ case 0x002C: cid = 0xFE10; break; /* , */
+ case 0x003A: cid = 0xFE13; break; /* : */
+ case 0x003B: cid = 0xFE14; break; /* ; */
+ case 0x003F: cid = 0xFE16; break; /* ? */
+ case 0x005B: cid = 0xFE47; break; /* [ */
+ case 0x005D: cid = 0xFE48; break; /* ] */
+ case 0x005F: cid = 0xFE33; break; /* _ */
+ case 0x007B: cid = 0xFE37; break; /* { */
+ case 0x007D: cid = 0xFE38; break; /* } */
+ case 0x2013: cid = 0xFE32; break; /* EN DASH */
+ case 0x2014: cid = 0xFE31; break; /* EM DASH */
+ case 0x2025: cid = 0xFE30; break; /* TWO DOT LEADER */
+ case 0x2026: cid = 0xFE19; break; /* HORIZONTAL ELLIPSIS */
+ case 0x3001: cid = 0xFE11; break; /* IDEOGRAPHIC COMMA */
+ case 0x3002: cid = 0xFE12; break; /* IDEOGRAPHIC FULL STOP */
+ case 0x3008: cid = 0xFE3F; break; /* OPENING ANGLE BRACKET */
+ case 0x3009: cid = 0xFE40; break; /* CLOSING ANGLE BRACKET */
+ case 0x300A: cid = 0xFE3D; break; /* LEFT DOUBLE ANGLE BRACKET */
+ case 0x300B: cid = 0xFE3E; break; /* RIGHT DOUBLE ANGLE BRACKET */
+ case 0x300C: cid = 0xFE41; break; /* LEFT CORNER BRACKET */
+ case 0x300D: cid = 0xFE42; break; /* RIGHT CORNER BRACKET */
+ case 0x300E: cid = 0xFE43; break; /* LEFT WHITE CORNER BRACKET */
+ case 0x300F: cid = 0xFE44; break; /* RIGHT WHITE CORNER BRACKET */
+ case 0x3010: cid = 0xFE3B; break; /* LEFT BLACK LENTICULAR BRACKET */
+ case 0x3011: cid = 0xFE3C; break; /* RIGHT BLACK LENTICULAR BRACKET */
+ case 0x3014: cid = 0xFE39; break; /* LEFT TORTOISE SHELL BRACKET */
+ case 0x3015: cid = 0xFE3A; break; /* RIGHT TORTOISE SHELL BRACKET */
+ case 0x3016: cid = 0xFE17; break; /* LEFT WHITE LENTICULAR BRACKET */
+ case 0x3017: cid = 0xFE18; break; /* RIGHT WHITE LENTICULAR BRACKET */
+
+ case 0xFF01: cid = 0xFE15; break; /* FULLWIDTH EXCLAMATION MARK */
+ case 0xFF08: cid = 0xFE35; break; /* FULLWIDTH LEFT PARENTHESIS */
+ case 0xFF09: cid = 0xFE36; break; /* FULLWIDTH RIGHT PARENTHESIS */
+ case 0xFF0C: cid = 0xFE10; break; /* FULLWIDTH COMMA */
+ case 0xFF1A: cid = 0xFE13; break; /* FULLWIDTH COLON */
+ case 0xFF1B: cid = 0xFE14; break; /* FULLWIDTH SEMICOLON */
+ case 0xFF1F: cid = 0xFE16; break; /* FULLWIDTH QUESTION MARK */
+ case 0xFF3B: cid = 0xFE47; break; /* FULLWIDTH LEFT SQUARE BRACKET */
+ case 0xFF3D: cid = 0xFE48; break; /* FULLWIDTH RIGHT SQUARE BRACKET */
+ case 0xFF3F: cid = 0xFE33; break; /* FULLWIDTH LOW LINE */
+ case 0xFF5B: cid = 0xFE37; break; /* FULLWIDTH LEFT CURLY BRACKET */
+ case 0xFF5D: cid = 0xFE38; break; /* FULLWIDTH RIGHT CURLY BRACKET */
+
+ case 0x30FC: cid = 0xFE31; break; /* KATAKANA-HIRAGANA PROLONGED SOUND MARK */
+ case 0xFF0D: cid = 0xFE31; break; /* FULLWIDTH HYPHEN-MINUS */
+ }
+ }
+
return ft_char_index(fontdesc->font->ft_face, cid);
}
@@ -982,9 +1039,7 @@ load_cid_font(fz_context *ctx, pdf_document *doc, pdf_obj *dict, pdf_obj *encodi
{
fterr = FT_Select_Charmap(face, ft_encoding_unicode);
if (fterr)
- {
- fz_throw(ctx, FZ_ERROR_GENERIC, "fonterror: no unicode cmap when emulating CID font: %s", ft_error_string(fterr));
- }
+ fz_throw(ctx, FZ_ERROR_GENERIC, "no unicode cmap when emulating CID font: %s", ft_error_string(fterr));
if (!strcmp(collection, "Adobe-CNS1"))
fontdesc->to_ttf_cmap = pdf_load_system_cmap(ctx, "Adobe-CNS1-UCS2");