summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mupdf/pdf_cmap.c55
-rw-r--r--mupdf/pdf_fontfile.c14
-rw-r--r--mupdf/pdf_unicode.c2
-rw-r--r--world/res_font.c2
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)