ref: e500f7739da07daa6dd429d427ef9f49ed849176
parent: 8fca8241915bea8bb2d1648833d9b75bf837eaf9
author: Ali Gholami Rudi <ali@rudi.ir>
date: Wed Jul 2 05:43:05 EDT 2014
mkfn: rename from mktrfn.c
--- a/Makefile
+++ b/Makefile
@@ -2,10 +2,10 @@
CFLAGS = -O2 -Wall
LDFLAGS =
-all: mktrfn
+all: mkfn
%.o: %.c
$(CC) -c $(CFLAGS) $<
-mktrfn: mktrfn.o trfn.o sbuf.o tab.o
+mkfn: mkfn.o trfn.o sbuf.o tab.o
$(CC) -o $@ $^ $(LDFLAGS)
clean:
- rm -f *.o mktrfn
+ rm -f *.o mkfn
--- /dev/null
+++ b/mkfn.c
@@ -1,0 +1,188 @@
+/*
+ * mktrfn - produce troff font descriptions
+ *
+ * Copyright (C) 2012-2014 Ali Gholami Rudi <ali at rudi dot ir>
+ *
+ * This program is released under the Modified BSD license.
+ */
+#include <ctype.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include "trfn.h"
+
+#define TOKLEN 256
+
+static void otfdump_read(void)
+{
+ char cmd[TOKLEN];
+ char name[TOKLEN];
+ char ch[TOKLEN];
+ char c1[TOKLEN], c2[TOKLEN];
+ char wid[TOKLEN];
+ while (scanf("%s", cmd) == 1) {
+ if (!strcmp("name", cmd)) {
+ scanf("%s", name);
+ trfn_psfont(name);
+ }
+ if (!strcmp("char", cmd)) {
+ scanf("%s width %s", ch, wid);
+ trfn_char(ch, NULL, atoi(wid), 0, 0, 0, 0);
+ }
+ if (!strcmp("kernpair", cmd)) {
+ scanf("%s %s width %s", c1, c2, wid);
+ trfn_kern(c1, c2, atoi(wid));
+ }
+ if (!strcmp("feature", cmd)) {
+ scanf("%s substitution %s %s", name, c1, c2);
+ trfn_sub(c1, c2);
+ }
+ }
+}
+
+static char *afm_charfield(char *s, char *d)
+{
+ while (*s && !isspace(*s) && *s != ';')
+ *d++ = *s++;
+ while (isspace(*s) || *s == ';')
+ s++;
+ *d = '\0';
+ return s;
+}
+
+static void afm_read(void)
+{
+ char ln[1024];
+ char ch[TOKLEN] = "", pos[TOKLEN] = "";
+ char c1[TOKLEN] = "", c2[TOKLEN] = "";
+ char wid[TOKLEN] = "", field[TOKLEN] = "";
+ char llx[TOKLEN] = "0", lly[TOKLEN] = "0";
+ char urx[TOKLEN] = "0", ury[TOKLEN] = "0";
+ char *s;
+ while (fgets(ln, sizeof(ln), stdin)) {
+ if (ln[0] == '#')
+ continue;
+ if (!strncmp("FontName ", ln, 8)) {
+ sscanf(ln, "FontName %s", ch);
+ trfn_psfont(ch);
+ continue;
+ }
+ if (!strncmp("StartCharMetrics", ln, 16))
+ break;
+ }
+ while (fgets(ln, sizeof(ln), stdin)) {
+ if (ln[0] == '#')
+ continue;
+ if (!strncmp("EndCharMetrics", ln, 14))
+ break;
+ s = ln;
+ while (*s) {
+ s = afm_charfield(s, field);
+ if (!strcmp("C", field)) {
+ s = afm_charfield(s, pos);
+ continue;
+ }
+ if (!strcmp("WX", field)) {
+ s = afm_charfield(s, wid);
+ continue;
+ }
+ if (!strcmp("N", field)) {
+ s = afm_charfield(s, ch);
+ continue;
+ }
+ if (!strcmp("B", field)) {
+ s = afm_charfield(s, llx);
+ s = afm_charfield(s, lly);
+ s = afm_charfield(s, urx);
+ s = afm_charfield(s, ury);
+ continue;
+ }
+ if (!strcmp("L", field)) {
+ s = afm_charfield(s, c1);
+ s = afm_charfield(s, c2);
+ continue;
+ }
+ break;
+ }
+ if (ch[0] && pos[0] && wid[0])
+ trfn_char(ch, pos, atoi(wid),
+ atoi(llx), atoi(lly), atoi(urx), atoi(ury));
+ }
+ while (fgets(ln, sizeof(ln), stdin)) {
+ if (ln[0] == '#')
+ continue;
+ if (!strncmp("StartKernPairs", ln, 14))
+ break;
+ }
+ while (fgets(ln, sizeof(ln), stdin)) {
+ if (ln[0] == '#')
+ continue;
+ if (!strncmp("EndKernPairs", ln, 12))
+ break;
+ if (sscanf(ln, "KPX %s %s %s", c1, c2, wid) == 3)
+ trfn_kern(c1, c2, atoi(wid));
+ }
+}
+
+static char *usage =
+ "Usage: mktrfn [options] <input >output\n"
+ "Options:\n"
+ " -a \tread an AFM file (default)\n"
+ " -o \tread the output of otfdump\n"
+ " -s \tspecial font\n"
+ " -p name \toverride font postscript name\n"
+ " -t name \tset font troff name\n"
+ " -r res \tset device resolution (720)\n"
+ " -k kmin \tspecify the minimum amount of kerning (0)\n"
+ " -b \tinclude glyph bounding box\n";
+
+int main(int argc, char *argv[])
+{
+ int afm = 1;
+ int i = 1;
+ int res = 720;
+ int spc = 0;
+ int kmin = 0;
+ int bbox = 0;
+ for (i = 1; i < argc && argv[i][0] == '-'; i++) {
+ switch (argv[i][1]) {
+ case 'a':
+ afm = 1;
+ break;
+ case 'k':
+ kmin = atoi(argv[i][2] ? argv[i] + 2 : argv[++i]);
+ break;
+ case 'o':
+ afm = 0;
+ break;
+ case 'p':
+ trfn_psfont(argv[i][2] ? argv[i] + 2 : argv[++i]);
+ break;
+ case 'r':
+ res = atoi(argv[i][2] ? argv[i] + 2 : argv[++i]);
+ break;
+ case 's':
+ spc = 1;
+ break;
+ case 't':
+ trfn_trfont(argv[i][2] ? argv[i] + 2 : argv[++i]);
+ break;
+ case 'b':
+ bbox = 1;
+ break;
+ default:
+ printf("%s", usage);
+ return 0;
+ }
+ }
+ trfn_init(res, spc, kmin, bbox);
+ if (afm)
+ afm_read();
+ else
+ otfdump_read();
+ trfn_print();
+ trfn_done();
+ return 0;
+}
--- a/mktrfn.c
+++ /dev/null
@@ -1,188 +1,0 @@
-/*
- * mktrfn - produce troff font descriptions
- *
- * Copyright (C) 2012-2014 Ali Gholami Rudi <ali at rudi dot ir>
- *
- * This program is released under the Modified BSD license.
- */
-#include <ctype.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include "trfn.h"
-
-#define TOKLEN 256
-
-static void otfdump_read(void)
-{
- char cmd[TOKLEN];
- char name[TOKLEN];
- char ch[TOKLEN];
- char c1[TOKLEN], c2[TOKLEN];
- char wid[TOKLEN];
- while (scanf("%s", cmd) == 1) {
- if (!strcmp("name", cmd)) {
- scanf("%s", name);
- trfn_psfont(name);
- }
- if (!strcmp("char", cmd)) {
- scanf("%s width %s", ch, wid);
- trfn_char(ch, NULL, atoi(wid), 0, 0, 0, 0);
- }
- if (!strcmp("kernpair", cmd)) {
- scanf("%s %s width %s", c1, c2, wid);
- trfn_kern(c1, c2, atoi(wid));
- }
- if (!strcmp("feature", cmd)) {
- scanf("%s substitution %s %s", name, c1, c2);
- trfn_sub(c1, c2);
- }
- }
-}
-
-static char *afm_charfield(char *s, char *d)
-{
- while (*s && !isspace(*s) && *s != ';')
- *d++ = *s++;
- while (isspace(*s) || *s == ';')
- s++;
- *d = '\0';
- return s;
-}
-
-static void afm_read(void)
-{
- char ln[1024];
- char ch[TOKLEN] = "", pos[TOKLEN] = "";
- char c1[TOKLEN] = "", c2[TOKLEN] = "";
- char wid[TOKLEN] = "", field[TOKLEN] = "";
- char llx[TOKLEN] = "0", lly[TOKLEN] = "0";
- char urx[TOKLEN] = "0", ury[TOKLEN] = "0";
- char *s;
- while (fgets(ln, sizeof(ln), stdin)) {
- if (ln[0] == '#')
- continue;
- if (!strncmp("FontName ", ln, 8)) {
- sscanf(ln, "FontName %s", ch);
- trfn_psfont(ch);
- continue;
- }
- if (!strncmp("StartCharMetrics", ln, 16))
- break;
- }
- while (fgets(ln, sizeof(ln), stdin)) {
- if (ln[0] == '#')
- continue;
- if (!strncmp("EndCharMetrics", ln, 14))
- break;
- s = ln;
- while (*s) {
- s = afm_charfield(s, field);
- if (!strcmp("C", field)) {
- s = afm_charfield(s, pos);
- continue;
- }
- if (!strcmp("WX", field)) {
- s = afm_charfield(s, wid);
- continue;
- }
- if (!strcmp("N", field)) {
- s = afm_charfield(s, ch);
- continue;
- }
- if (!strcmp("B", field)) {
- s = afm_charfield(s, llx);
- s = afm_charfield(s, lly);
- s = afm_charfield(s, urx);
- s = afm_charfield(s, ury);
- continue;
- }
- if (!strcmp("L", field)) {
- s = afm_charfield(s, c1);
- s = afm_charfield(s, c2);
- continue;
- }
- break;
- }
- if (ch[0] && pos[0] && wid[0])
- trfn_char(ch, pos, atoi(wid),
- atoi(llx), atoi(lly), atoi(urx), atoi(ury));
- }
- while (fgets(ln, sizeof(ln), stdin)) {
- if (ln[0] == '#')
- continue;
- if (!strncmp("StartKernPairs", ln, 14))
- break;
- }
- while (fgets(ln, sizeof(ln), stdin)) {
- if (ln[0] == '#')
- continue;
- if (!strncmp("EndKernPairs", ln, 12))
- break;
- if (sscanf(ln, "KPX %s %s %s", c1, c2, wid) == 3)
- trfn_kern(c1, c2, atoi(wid));
- }
-}
-
-static char *usage =
- "Usage: mktrfn [options] <input >output\n"
- "Options:\n"
- " -a \tread an AFM file (default)\n"
- " -o \tread the output of otfdump\n"
- " -s \tspecial font\n"
- " -p name \toverride font postscript name\n"
- " -t name \tset font troff name\n"
- " -r res \tset device resolution (720)\n"
- " -k kmin \tspecify the minimum amount of kerning (0)\n"
- " -b \tinclude glyph bounding box\n";
-
-int main(int argc, char *argv[])
-{
- int afm = 1;
- int i = 1;
- int res = 720;
- int spc = 0;
- int kmin = 0;
- int bbox = 0;
- for (i = 1; i < argc && argv[i][0] == '-'; i++) {
- switch (argv[i][1]) {
- case 'a':
- afm = 1;
- break;
- case 'k':
- kmin = atoi(argv[i][2] ? argv[i] + 2 : argv[++i]);
- break;
- case 'o':
- afm = 0;
- break;
- case 'p':
- trfn_psfont(argv[i][2] ? argv[i] + 2 : argv[++i]);
- break;
- case 'r':
- res = atoi(argv[i][2] ? argv[i] + 2 : argv[++i]);
- break;
- case 's':
- spc = 1;
- break;
- case 't':
- trfn_trfont(argv[i][2] ? argv[i] + 2 : argv[++i]);
- break;
- case 'b':
- bbox = 1;
- break;
- default:
- printf("%s", usage);
- return 0;
- }
- }
- trfn_init(res, spc, kmin, bbox);
- if (afm)
- afm_read();
- else
- otfdump_read();
- trfn_print();
- trfn_done();
- return 0;
-}