summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvipdfm-x/cff.c
diff options
context:
space:
mode:
authorKhaled Hosny <khaledhosny@eglug.org>2014-07-25 13:56:38 +0000
committerKhaled Hosny <khaledhosny@eglug.org>2014-07-25 13:56:38 +0000
commit796176898c849ec72156930daa2ea150b68c48a3 (patch)
treedf9ae1a767183ead147947882f8895cf07f2417a /Build/source/texk/dvipdfm-x/cff.c
parent31053cc388d6f0b348b297a3a0b950e8d707916a (diff)
Remove most of font related #ifdef XETEX
Almost all of this is not needed now since XeTeX’s native fonts are always passed by file name and face index now, so we can use original dvipdfmx direct file based code instead of using a FreeType font face. Has the side effect of fixing: https://sourceforge.net/p/xetex/bugs/97/ git-svn-id: svn://tug.org/texlive/trunk@34718 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/dvipdfm-x/cff.c')
-rw-r--r--Build/source/texk/dvipdfm-x/cff.c104
1 files changed, 36 insertions, 68 deletions
diff --git a/Build/source/texk/dvipdfm-x/cff.c b/Build/source/texk/dvipdfm-x/cff.c
index 7a54e3fecfd..52aaab47528 100644
--- a/Build/source/texk/dvipdfm-x/cff.c
+++ b/Build/source/texk/dvipdfm-x/cff.c
@@ -40,24 +40,12 @@
#define CFF_DEBUG 5
#define CFF_DEBUG_STR "CFF"
-#ifdef XETEX
-#define SFNT_OR_FILE sfnt
-#define SFONT_OR_STREAM sfont
-#define get_card8(s) sfnt_get_byte((s))
-#define get_card16(s) sfnt_get_ushort((s))
-#else
-#define SFNT_OR_FILE FILE
-#define SFONT_OR_STREAM stream
-#define get_card8(s) get_unsigned_byte((s))
-#define get_card16(s) get_unsigned_pair((s))
-#endif
-
-static unsigned long get_unsigned (SFNT_OR_FILE *SFONT_OR_STREAM, int n)
+static unsigned long get_unsigned (FILE *stream, int n)
{
unsigned long v = 0;
while (n-- > 0)
- v = v*0x100u + get_card8(SFONT_OR_STREAM);
+ v = v*0x100u + get_unsigned_byte(stream);
return v;
}
@@ -67,7 +55,7 @@ static unsigned long get_unsigned (SFNT_OR_FILE *SFONT_OR_STREAM, int n)
/*
* Read Header, Name INDEX, Top DICT INDEX, and String INDEX.
*/
-cff_font *cff_open(SFNT_OR_FILE *SFONT_OR_STREAM, long offset, int n)
+cff_font *cff_open(FILE *stream, long offset, int n)
{
cff_font *cff;
cff_index *idx;
@@ -76,7 +64,7 @@ cff_font *cff_open(SFNT_OR_FILE *SFONT_OR_STREAM, long offset, int n)
cff->fontname = NULL;
cff->index = n;
- cff->SFONT_OR_STREAM = SFONT_OR_STREAM;
+ cff->stream = stream;
cff->offset = offset;
cff->filter = 0; /* not used */
cff->flag = 0;
@@ -96,10 +84,10 @@ cff_font *cff_open(SFNT_OR_FILE *SFONT_OR_STREAM, long offset, int n)
cff->_string = NULL;
cff_seek_set(cff, 0);
- cff->header.major = get_card8(cff->SFONT_OR_STREAM);
- cff->header.minor = get_card8(cff->SFONT_OR_STREAM);
- cff->header.hdr_size = get_card8(cff->SFONT_OR_STREAM);
- cff->header.offsize = get_card8(cff->SFONT_OR_STREAM);
+ cff->header.major = get_unsigned_byte(cff->stream);
+ cff->header.minor = get_unsigned_byte(cff->stream);
+ cff->header.hdr_size = get_unsigned_byte(cff->stream);
+ cff->header.offsize = get_unsigned_byte(cff->stream);
if (cff->header.offsize < 1 ||
cff->header.offsize > 4)
ERROR("invalid offsize data");
@@ -153,16 +141,12 @@ cff_font *cff_open(SFNT_OR_FILE *SFONT_OR_STREAM, long offset, int n)
cff->string = cff_get_index(cff);
/* offset to GSubr */
-#ifdef XETEX
- cff->gsubr_offset = cff->sfont->loc - offset;
-#else
cff->gsubr_offset = tell_position(cff->stream) - offset;
-#endif
/* Number of glyphs */
offset = (long) cff_dict_get(cff->topdict, "CharStrings", 0);
cff_seek_set(cff, offset);
- cff->num_glyphs = get_card16(cff->SFONT_OR_STREAM);
+ cff->num_glyphs = get_unsigned_pair(cff->stream);
/* Check for font type */
if (cff_dict_known(cff->topdict, "ROS")) {
@@ -199,10 +183,6 @@ cff_font *cff_open(SFNT_OR_FILE *SFONT_OR_STREAM, long offset, int n)
cff_seek_set(cff, cff->gsubr_offset); /* seek back to GSubr */
-#ifdef XETEX
- cff->ft_to_gid = NULL;
-#endif
-
return cff;
}
@@ -242,11 +222,6 @@ cff_close (cff_font *cff)
if (cff->_string)
cff_release_index(cff->_string);
-#ifdef XETEX
- if (cff->ft_to_gid)
- RELEASE(cff->ft_to_gid);
-#endif
-
RELEASE(cff);
}
@@ -319,15 +294,15 @@ cff_get_index_header (cff_font *cff)
idx = NEW(1, cff_index);
- idx->count = count = get_card16(cff->SFONT_OR_STREAM);
+ idx->count = count = get_unsigned_pair(cff->stream);
if (count > 0) {
- idx->offsize = get_card8(cff->SFONT_OR_STREAM);
+ idx->offsize = get_unsigned_byte(cff->stream);
if (idx->offsize < 1 || idx->offsize > 4)
ERROR("invalid offsize data");
idx->offset = NEW(count+1, l_offset);
for (i=0;i<count+1;i++) {
- (idx->offset)[i] = get_offset(cff->SFONT_OR_STREAM, idx->offsize);
+ (idx->offset)[i] = get_offset(cff->stream, idx->offsize);
}
if (idx->offset[0] != 1)
@@ -352,15 +327,15 @@ cff_get_index (cff_font *cff)
idx = NEW(1, cff_index);
- idx->count = count = get_card16(cff->SFONT_OR_STREAM);
+ idx->count = count = get_unsigned_pair(cff->stream);
if (count > 0) {
- idx->offsize = get_card8(cff->SFONT_OR_STREAM);
+ idx->offsize = get_unsigned_byte(cff->stream);
if (idx->offsize < 1 || idx->offsize > 4)
ERROR("invalid offsize data");
idx->offset = NEW(count + 1, l_offset);
for (i = 0 ; i < count + 1; i++) {
- idx->offset[i] = get_offset(cff->SFONT_OR_STREAM, idx->offsize);
+ idx->offset[i] = get_offset(cff->stream, idx->offsize);
}
if (idx->offset[0] != 1)
@@ -670,27 +645,27 @@ long cff_read_encoding (cff_font *cff)
cff_seek_set(cff, offset);
cff->encoding = encoding = NEW(1, cff_encoding);
- encoding->format = get_card8(cff->SFONT_OR_STREAM);
+ encoding->format = get_unsigned_byte(cff->stream);
length = 1;
switch (encoding->format & (~0x80)) {
case 0:
- encoding->num_entries = get_card8(cff->SFONT_OR_STREAM);
+ encoding->num_entries = get_unsigned_byte(cff->stream);
(encoding->data).codes = NEW(encoding->num_entries, card8);
for (i=0;i<(encoding->num_entries);i++) {
- (encoding->data).codes[i] = get_card8(cff->SFONT_OR_STREAM);
+ (encoding->data).codes[i] = get_unsigned_byte(cff->stream);
}
length += encoding->num_entries + 1;
break;
case 1:
{
cff_range1 *ranges;
- encoding->num_entries = get_card8(cff->SFONT_OR_STREAM);
+ encoding->num_entries = get_unsigned_byte(cff->stream);
encoding->data.range1 = ranges
= NEW(encoding->num_entries, cff_range1);
for (i=0;i<(encoding->num_entries);i++) {
- ranges[i].first = get_card8(cff->SFONT_OR_STREAM);
- ranges[i].n_left = get_card8(cff->SFONT_OR_STREAM);
+ ranges[i].first = get_unsigned_byte(cff->stream);
+ ranges[i].n_left = get_unsigned_byte(cff->stream);
}
length += (encoding->num_entries) * 2 + 1;
}
@@ -704,11 +679,11 @@ long cff_read_encoding (cff_font *cff)
/* Supplementary data */
if ((encoding->format) & 0x80) {
cff_map *map;
- encoding->num_supps = get_card8(cff->SFONT_OR_STREAM);
+ encoding->num_supps = get_unsigned_byte(cff->stream);
encoding->supp = map = NEW(encoding->num_supps, cff_map);
for (i=0;i<(encoding->num_supps);i++) {
- map[i].code = get_card8(cff->SFONT_OR_STREAM);
- map[i].glyph = get_card16(cff->SFONT_OR_STREAM); /* SID */
+ map[i].code = get_unsigned_byte(cff->stream);
+ map[i].glyph = get_unsigned_pair(cff->stream); /* SID */
}
length += (encoding->num_supps) * 3 + 1;
} else {
@@ -886,7 +861,7 @@ long cff_read_charsets (cff_font *cff)
cff_seek_set(cff, offset);
cff->charsets = charset = NEW(1, cff_charsets);
- charset->format = get_card8(cff->SFONT_OR_STREAM);
+ charset->format = get_unsigned_byte(cff->stream);
charset->num_entries = 0;
count = cff->num_glyphs - 1;
@@ -899,7 +874,7 @@ long cff_read_charsets (cff_font *cff)
charset->data.glyphs = NEW(charset->num_entries, s_SID);
length += (charset->num_entries) * 2;
for (i=0;i<(charset->num_entries);i++) {
- charset->data.glyphs[i] = get_card16(cff->SFONT_OR_STREAM);
+ charset->data.glyphs[i] = get_unsigned_pair(cff->stream);
}
count = 0;
break;
@@ -908,8 +883,8 @@ long cff_read_charsets (cff_font *cff)
cff_range1 *ranges = NULL;
while (count > 0 && charset->num_entries < cff->num_glyphs) {
ranges = RENEW(ranges, charset->num_entries + 1, cff_range1);
- ranges[charset->num_entries].first = get_card16(cff->SFONT_OR_STREAM);
- ranges[charset->num_entries].n_left = get_card8(cff->SFONT_OR_STREAM);
+ ranges[charset->num_entries].first = get_unsigned_pair(cff->stream);
+ ranges[charset->num_entries].n_left = get_unsigned_byte(cff->stream);
count -= ranges[charset->num_entries].n_left + 1; /* no-overrap */
charset->num_entries += 1;
charset->data.range1 = ranges;
@@ -922,8 +897,8 @@ long cff_read_charsets (cff_font *cff)
cff_range2 *ranges = NULL;
while (count > 0 && charset->num_entries < cff->num_glyphs) {
ranges = RENEW(ranges, charset->num_entries + 1, cff_range2);
- ranges[charset->num_entries].first = get_card16(cff->SFONT_OR_STREAM);
- ranges[charset->num_entries].n_left = get_card16(cff->SFONT_OR_STREAM);
+ ranges[charset->num_entries].first = get_unsigned_pair(cff->stream);
+ ranges[charset->num_entries].n_left = get_unsigned_pair(cff->stream);
count -= ranges[charset->num_entries].n_left + 1; /* non-overrapping */
charset->num_entries += 1;
}
@@ -1216,7 +1191,7 @@ long cff_read_fdselect (cff_font *cff)
offset = (long) cff_dict_get(cff->topdict, "FDSelect", 0);
cff_seek_set(cff, offset);
cff->fdselect = fdsel = NEW(1, cff_fdselect);
- fdsel->format = get_card8(cff->SFONT_OR_STREAM);
+ fdsel->format = get_unsigned_byte(cff->stream);
length = 1;
@@ -1225,22 +1200,22 @@ long cff_read_fdselect (cff_font *cff)
fdsel->num_entries = cff->num_glyphs;
(fdsel->data).fds = NEW(fdsel->num_entries, card8);
for (i=0;i<(fdsel->num_entries);i++) {
- (fdsel->data).fds[i] = get_card8(cff->SFONT_OR_STREAM);
+ (fdsel->data).fds[i] = get_unsigned_byte(cff->stream);
}
length += fdsel->num_entries;
break;
case 3:
{
cff_range3 *ranges;
- fdsel->num_entries = get_card16(cff->SFONT_OR_STREAM);
+ fdsel->num_entries = get_unsigned_pair(cff->stream);
fdsel->data.ranges = ranges = NEW(fdsel->num_entries, cff_range3);
for (i=0;i<(fdsel->num_entries);i++) {
- ranges[i].first = get_card16(cff->SFONT_OR_STREAM);
- ranges[i].fd = get_card8(cff->SFONT_OR_STREAM);
+ ranges[i].first = get_unsigned_pair(cff->stream);
+ ranges[i].fd = get_unsigned_byte(cff->stream);
}
if (ranges[0].first != 0)
ERROR("Range not starting with 0.");
- if (cff->num_glyphs != get_card16(cff->SFONT_OR_STREAM))
+ if (cff->num_glyphs != get_unsigned_pair(cff->stream))
ERROR("Sentinel value mismatched with number of glyphs.");
length += (fdsel->num_entries) * 3 + 4;
}
@@ -1494,10 +1469,3 @@ long cff_read_private (cff_font *cff)
return len;
}
-
-#ifdef XETEX
-unsigned short* cff_get_ft_to_gid(cff_font *cff)
-{
- return cff->ft_to_gid;
-}
-#endif