in->pos.line++;
c = getc(in->currfp);
if (c == EOF) {
- error(err_afmeof, &in->pos);
+ err_afmeof(&in->pos);
return NULL;
}
line = snewn(len, char);
if (strcmp(key, expected) == 0)
return TRUE;
- error(err_afmkey, &in->pos, expected);
+ err_afmkey(&in->pos, expected);
return FALSE;
}
fi = snew(font_info);
fi->name = NULL;
fi->widths = newtree234(width_cmp);
- fi->fp = NULL;
+ fi->fontfile = NULL;
fi->kerns = newtree234(kern_cmp);
fi->ligs = newtree234(lig_cmp);
fi->fontbbox[0] = fi->fontbbox[1] = fi->fontbbox[2] = fi->fontbbox[3] = 0;
if (!line || !afm_require_key(line, "StartFontMetrics", in))
goto giveup;
if (!(val = strtok(NULL, " \t"))) {
- error(err_afmval, in->pos, "StartFontMetrics", 1);
+ err_afmval(&in->pos, "StartFontMetrics", 1);
goto giveup;
}
if (atof(val) >= 5.0) {
- error(err_afmvers, &in->pos);
+ err_afmvers(&in->pos);
goto giveup;
}
sfree(line);
return;
} else if (strcmp(key, "FontName") == 0) {
if (!(val = strtok(NULL, " \t"))) {
- error(err_afmval, &in->pos, key, 1);
+ err_afmval(&in->pos, key, 1);
goto giveup;
}
fi->name = dupstr(val);
int i;
for (i = 0; i < 3; i++) {
if (!(val = strtok(NULL, " \t"))) {
- error(err_afmval, &in->pos, key, 4);
+ err_afmval(&in->pos, key, 4);
goto giveup;
}
fi->fontbbox[i] = atof(val);
}
} else if (strcmp(key, "CapHeight") == 0) {
if (!(val = strtok(NULL, " \t"))) {
- error(err_afmval, &in->pos, key, 1);
+ err_afmval(&in->pos, key, 1);
goto giveup;
}
fi->capheight = atof(val);
} else if (strcmp(key, "XHeight") == 0) {
if (!(val = strtok(NULL, " \t"))) {
- error(err_afmval, &in->pos, key, 1);
+ err_afmval(&in->pos, key, 1);
goto giveup;
}
fi->xheight = atof(val);
} else if (strcmp(key, "Ascender") == 0) {
if (!(val = strtok(NULL, " \t"))) {
- error(err_afmval, &in->pos, key, 1);
+ err_afmval(&in->pos, key, 1);
goto giveup;
}
fi->ascent = atof(val);
} else if (strcmp(key, "Descender") == 0) {
if (!(val = strtok(NULL, " \t"))) {
- error(err_afmval, &in->pos, key, 1);
+ err_afmval(&in->pos, key, 1);
goto giveup;
}
fi->descent = atof(val);
} else if (strcmp(key, "CapHeight") == 0) {
if (!(val = strtok(NULL, " \t"))) {
- error(err_afmval, &in->pos, key, 1);
+ err_afmval(&in->pos, key, 1);
goto giveup;
}
fi->capheight = atof(val);
} else if (strcmp(key, "StdHW") == 0) {
if (!(val = strtok(NULL, " \t"))) {
- error(err_afmval, &in->pos, key, 1);
+ err_afmval(&in->pos, key, 1);
goto giveup;
}
fi->stemh = atof(val);
} else if (strcmp(key, "StdVW") == 0) {
if (!(val = strtok(NULL, " \t"))) {
- error(err_afmval, &in->pos, key, 1);
+ err_afmval(&in->pos, key, 1);
goto giveup;
}
fi->stemv = atof(val);
} else if (strcmp(key, "ItalicAngle") == 0) {
if (!(val = strtok(NULL, " \t"))) {
- error(err_afmval, &in->pos, key, 1);
+ err_afmval(&in->pos, key, 1);
goto giveup;
}
fi->italicangle = atof(val);
} else if (strcmp(key, "StartCharMetrics") == 0) {
int nglyphs, i;
if (!(val = strtok(NULL, " \t"))) {
- error(err_afmval, &in->pos, key, 1);
+ err_afmval(&in->pos, key, 1);
goto giveup;
}
nglyphs = atoi(val);
if (strcmp(key, "WX") == 0 || strcmp(key, "W0X") == 0) {
if (!(val = strtok(NULL, " \t")) ||
!strcmp(val, ";")) {
- error(err_afmval, &in->pos, key, 1);
+ err_afmval(&in->pos, key, 1);
goto giveup;
}
width = atoi(val);
} else if (strcmp(key, "N") == 0) {
if (!(val = strtok(NULL, " \t")) ||
!strcmp(val, ";")) {
- error(err_afmval, &in->pos, key, 1);
+ err_afmval(&in->pos, key, 1);
goto giveup;
}
g = glyph_intern(val);
+ } else if (strcmp(key, "L") == 0) {
+ glyph succ, lig;
+ if (!(val = strtok(NULL, " \t")) ||
+ !strcmp(val, ";")) {
+ err_afmval(&in->pos, key, 1);
+ goto giveup;
+ }
+ succ = glyph_intern(val);
+ if (!(val = strtok(NULL, " \t")) ||
+ !strcmp(val, ";")) {
+ err_afmval(&in->pos, key, 1);
+ goto giveup;
+ }
+ lig = glyph_intern(val);
+ if (g != NOGLYPH && succ != NOGLYPH &&
+ lig != NOGLYPH) {
+ ligature *l = snew(ligature);
+ l->left = g;
+ l->right = succ;
+ l->lig = lig;
+ add234(fi->ligs, l);
+ }
}
do {
key = strtok(NULL, " \t");
} else if (strcmp(key, "StartKernPairs") == 0 ||
strcmp(key, "StartKernPairs0") == 0) {
int nkerns, i;
- kern_pair *kerns;
if (!(val = strtok(NULL, " \t"))) {
- error(err_afmval, &in->pos, key, 1);
+ err_afmval(&in->pos, key, 1);
goto giveup;
}
nkerns = atoi(val);
sfree(line);
- kerns = snewn(nkerns, kern_pair);
for (i = 0; i < nkerns; i++) {
line = afm_read_line(in);
if (line == NULL)
nr = strtok(NULL, " \t");
val = strtok(NULL, " \t");
if (!val) {
- error(err_afmval, &in->pos, key, 3);
+ err_afmval(&in->pos, key, 3);
goto giveup;
}
l = glyph_intern(nl);