diff options
| author | Ben Harris <bjh21@bjh21.me.uk> | 2007-02-10 12:33:56 +0000 |
|---|---|---|
| committer | Ben Harris <bjh21@bjh21.me.uk> | 2007-02-10 12:33:56 +0000 |
| commit | 7d287800e5a5bcdf0d4d38679ff7980ce8c18250 (patch) | |
| tree | d9171fa7beb13a40f36ffb192cd7d5bdde55cf92 | |
| parent | a0a77360d18d8207cbd67bb00297553fe90bc43a (diff) | |
| download | halibut-7d287800e5a5bcdf0d4d38679ff7980ce8c18250.zip halibut-7d287800e5a5bcdf0d4d38679ff7980ce8c18250.tar.gz halibut-7d287800e5a5bcdf0d4d38679ff7980ce8c18250.tar.bz2 halibut-7d287800e5a5bcdf0d4d38679ff7980ce8c18250.tar.xz | |
Generate a "W" array for CIDFonts, since acroread seems to do very silly
things without one.
[originally from svn r7261]
| -rw-r--r-- | bk_pdf.c | 11 | ||||
| -rw-r--r-- | in_sfnt.c | 9 | ||||
| -rw-r--r-- | paper.h | 4 |
3 files changed, 20 insertions, 4 deletions
@@ -209,7 +209,16 @@ void pdf_backend(paragraph *sourceform, keywordlist *keywords, "/Ordering(Identity)/Supplement 0>>\n"); objtext(cidfont, "/FontDescriptor "); objref(cidfont, fontdesc); - objtext(cidfont, ">>\n"); + objtext(cidfont, "\n/W[0["); + for (i = 0; i < sfnt_nglyphs(fe->font->info->fontfile); i++) { + char buf[20]; + double width; + width = find_width(fe->font, + sfnt_indextoglyph(fe->font->info->fontfile, i)); + sprintf(buf, "%g ", 1000.0 * width / FUNITS_PER_PT); + objtext(cidfont, buf); + } + objtext(cidfont, "]]>>\n"); } else { objtext(font, "/Subtype /Type1\n"); objtext(font, "\n/Encoding <<\n/Type /Encoding\n/Differences ["); @@ -349,7 +349,6 @@ typedef struct { unsigned short index; } glyphmap; -typedef struct sfnt_Tag sfnt; struct sfnt_Tag { void *data; size_t len; @@ -497,11 +496,15 @@ static void sfnt_mapglyphs(font_info *fi) { glyphsbyname_cmp); } -static glyph sfnt_indextoglyph(sfnt *sf, unsigned short idx) { +glyph sfnt_indextoglyph(sfnt *sf, unsigned idx) { return sf->glyphsbyindex[idx]; } -static unsigned short sfnt_glyphtoindex(sfnt *sf, glyph g) { +unsigned sfnt_nglyphs(sfnt *sf) { + return sf->nglyphs; +} + +unsigned sfnt_glyphtoindex(sfnt *sf, glyph g) { cmp_glyphsbyindex = sf->glyphsbyindex; return *(unsigned short *)bsearch(&g, sf->glyphsbyname, sf->nglyphs, sizeof(*sf->glyphsbyname), @@ -418,6 +418,10 @@ void pf_writeps(font_info const *fi, FILE *ofp); /* * Backend functions exported by in_sfnt.c */ +typedef struct sfnt_Tag sfnt; +glyph sfnt_indextoglyph(sfnt *sf, unsigned idx); +unsigned sfnt_glyphtoindex(sfnt *sf, glyph g); +unsigned sfnt_nglyphs(sfnt *sf); void sfnt_writeps(font_info const *fi, FILE *ofp); void sfnt_cmap(font_encoding *fe, object *); void sfnt_data(font_info *fi, char **bufp, size_t *lenp); |