Generate rather more compact /Differences tables for font encodings, mostly
[sgt/halibut] / bk_pdf.c
index 0a9336b..2697b16 100644 (file)
--- a/bk_pdf.c
+++ b/bk_pdf.c
@@ -133,7 +133,7 @@ void pdf_backend(paragraph *sourceform, keywordlist *keywords,
     objtext(resources, "<<\n/Font <<\n");
     for (fe = doc->fonts->head; fe; fe = fe->next) {
        char fname[40];
-       int i;
+       int i, prev;
        object *font;
 
        sprintf(fname, "f%d", font_index++);
@@ -157,9 +157,13 @@ void pdf_backend(paragraph *sourceform, keywordlist *keywords,
            char buf[20];
            if (!fe->vector[i])
                continue;
-           sprintf(buf, "\n%d /", i);
-           objtext(font, buf);
-           objtext(font, fe->vector[i] ? fe->vector[i] : ".notdef");
+           if (i != prev + 1) {
+               sprintf(buf, "\n%d", i);
+               objtext(font, buf);
+           }
+           objtext(font, i % 8 ? "/" : "\n/");
+           objtext(font, fe->vector[i]);
+           prev = i;
        }
 
        objtext(font, "\n]\n>>\n");
@@ -228,7 +232,20 @@ void pdf_backend(paragraph *sourceform, keywordlist *keywords,
            objtext(fontdesc, buf);
            sprintf(buf, "/StemV %g\n", fi->stemv);
            objtext(fontdesc, buf);
-           objtext(fontdesc, ">>\n");
+           if (fi->fp) {
+               object *fontfile = new_object(&olist);
+               char buf[513];
+               size_t len;
+               rewind(fi->fp);
+               do {
+                   len = fread(buf, 1, sizeof(buf)-1, fi->fp);
+                   buf[len] = 0;
+                   objstream(fontfile, buf);
+               } while (len == sizeof(buf)-1);
+               objtext(fontdesc, "/FontFile ");
+               objref(fontdesc, fontfile);
+           }
+           objtext(fontdesc, "\n>>\n");
        }
 
        objtext(font, "\n>>\n");