diff options
-rw-r--r-- | mupdf/pdf_cmap.c | 55 | ||||
-rw-r--r-- | mupdf/pdf_fontfile.c | 14 | ||||
-rw-r--r-- | mupdf/pdf_unicode.c | 2 | ||||
-rw-r--r-- | world/res_font.c | 2 |
4 files changed, 29 insertions, 44 deletions
diff --git a/mupdf/pdf_cmap.c b/mupdf/pdf_cmap.c index 131bdcea..6728c333 100644 --- a/mupdf/pdf_cmap.c +++ b/mupdf/pdf_cmap.c @@ -50,8 +50,8 @@ struct pdf_cmap_s int ncspace; struct { int n; - unsigned char lo[4]; - unsigned char hi[4]; + unsigned lo; + unsigned hi; } cspace[MAXCODESPACE]; int rlen, rcap; @@ -167,13 +167,7 @@ pdf_debugcmap(pdf_cmap *cmap) printf(" codespaces {\n"); for (i = 0; i < cmap->ncspace; i++) { - printf(" <"); - for (k = 0; k < cmap->cspace[i].n; k++) - printf("%02x", cmap->cspace[i].lo[k]); - printf("> <"); - for (k = 0; k < cmap->cspace[i].n; k++) - printf("%02x", cmap->cspace[i].hi[k]); - printf(">\n"); + printf(" <%x> <%x>\n", cmap->cspace[i].lo, cmap->cspace[i].hi); } printf(" }\n"); @@ -211,19 +205,12 @@ pdf_debugcmap(pdf_cmap *cmap) fz_error * pdf_addcodespace(pdf_cmap *cmap, unsigned lo, unsigned hi, int n) { - int i; - if (cmap->ncspace + 1 == MAXCODESPACE) return fz_throw("assert: too many code space ranges"); cmap->cspace[cmap->ncspace].n = n; - - for (i = 0; i < n; i++) - { - int o = (n - i - 1) * 8; - cmap->cspace[cmap->ncspace].lo[i] = (lo >> o) & 0xFF; - cmap->cspace[cmap->ncspace].hi[i] = (hi >> o) & 0xFF; - } + cmap->cspace[cmap->ncspace].lo = lo; + cmap->cspace[cmap->ncspace].hi = hi; cmap->ncspace ++; @@ -528,31 +515,27 @@ pdf_lookupcmap(pdf_cmap *cmap, int cpt) unsigned char * pdf_decodecmap(pdf_cmap *cmap, unsigned char *buf, int *cpt) { - int i, k; + int i, k, n, c; + c = 0; + for (n = 0; n < 4; n++) + { + c = (c << 8) | buf[n]; for (k = 0; k < cmap->ncspace; k++) { - unsigned char *lo = cmap->cspace[k].lo; - unsigned char *hi = cmap->cspace[k].hi; - int n = cmap->cspace[k].n; - int c = 0; - - for (i = 0; i < n; i++) + if (cmap->cspace[k].n == n + 1) + { + if (c >= cmap->cspace[k].lo && c <= cmap->cspace[k].hi) { - if (lo[i] <= buf[i] && buf[i] <= hi[i]) - c = (c << 8) | buf[i]; - else - break; - } - - if (i == n) { - *cpt = c; - return buf + n; + *cpt = c; + return buf + n + 1; } + } } + } - *cpt = 0; - return buf + 1; + *cpt = 0; + return buf + 1; } /* diff --git a/mupdf/pdf_fontfile.c b/mupdf/pdf_fontfile.c index 0d4006a2..ebd9125a 100644 --- a/mupdf/pdf_fontfile.c +++ b/mupdf/pdf_fontfile.c @@ -106,18 +106,20 @@ found: } static fz_error * -loadcidfont(pdf_fontdesc *font, int csi, int kind) +loadsystemcidfont(pdf_fontdesc *font, int csi, int kind) { #ifndef NOCJK fz_error *error; /* We only have one builtin fallback font, we'd really like * to have one for each combination of CSI and Kind */ + pdf_logfont("loading builtin CJK font\n"); error = fz_newfontfrombuffer(&font->font, fonts_droid_DroidSansFallback_ttf, fonts_droid_DroidSansFallback_ttf_len, 0); if (error) return fz_rethrow(error, "cannot load builtin CJK font"); + font->font->ftsubstitute = 1; /* substitute font */ return fz_okay; #else return fz_throw("no builtin CJK font file"); @@ -167,15 +169,15 @@ pdf_loadsystemfont(pdf_fontdesc *font, char *fontname, char *collection) kind = GOTHIC; if (!strcmp(collection, "Adobe-CNS1")) - return loadcidfont(font, CNS, kind); + return loadsystemcidfont(font, CNS, kind); else if (!strcmp(collection, "Adobe-GB1")) - return loadcidfont(font, GB, kind); + return loadsystemcidfont(font, GB, kind); else if (!strcmp(collection, "Adobe-Japan1")) - return loadcidfont(font, Japan, kind); + return loadsystemcidfont(font, Japan, kind); else if (!strcmp(collection, "Adobe-Japan2")) - return loadcidfont(font, Japan, kind); + return loadsystemcidfont(font, Japan, kind); else if (!strcmp(collection, "Adobe-Korea1")) - return loadcidfont(font, Korea, kind); + return loadsystemcidfont(font, Korea, kind); fz_warn("unknown cid collection: %s", collection); } diff --git a/mupdf/pdf_unicode.c b/mupdf/pdf_unicode.c index a0738020..e4da50a4 100644 --- a/mupdf/pdf_unicode.c +++ b/mupdf/pdf_unicode.c @@ -72,7 +72,7 @@ pdf_loadtounicode(pdf_fontdesc *font, pdf_xref *xref, else if (!strcmp(collection, "Adobe-Japan1")) error = pdf_loadsystemcmap(&font->tounicode, "Adobe-Japan1-UCS2"); else if (!strcmp(collection, "Adobe-Japan2")) - error = pdf_loadsystemcmap(&font->tounicode, "Adobe-Japan2-UCS2"); + error = pdf_loadsystemcmap(&font->tounicode, "Adobe-Japan2-UCS2"); /* where's this? */ else if (!strcmp(collection, "Adobe-Korea1")) error = pdf_loadsystemcmap(&font->tounicode, "Adobe-Korea1-UCS2"); diff --git a/world/res_font.c b/world/res_font.c index ad0d05f9..7238cc3c 100644 --- a/world/res_font.c +++ b/world/res_font.c @@ -389,7 +389,7 @@ fz_debugfont(fz_font *font) { printf(" freetype face %p\n", font->ftface); if (font->ftsubstitute) - printf(" substitute metrics\n"); + printf(" substitute font\n"); } if (font->t3procs) |