junk
This commit is contained in:
parent
5af8dd63eb
commit
eaec1e5a39
5 changed files with 211 additions and 0 deletions
93
dist/troff/afm2troff.c
vendored
Normal file
93
dist/troff/afm2troff.c
vendored
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
#include <u.h>
|
||||
#include <libc.h>
|
||||
#include <bio.h>
|
||||
|
||||
int didname;
|
||||
int didfontname;
|
||||
int offset;
|
||||
void run(char*, int);
|
||||
Biobuf bout;
|
||||
|
||||
void
|
||||
usage(void)
|
||||
{
|
||||
fprint(2, "usage: afm2troff [-h] [-o offset] [file...]\n");
|
||||
exits("usage");
|
||||
}
|
||||
|
||||
void
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int i, fd;
|
||||
|
||||
ARGBEGIN{
|
||||
case 'h':
|
||||
didname = 1;
|
||||
didfontname = 1;
|
||||
break;
|
||||
case 'o':
|
||||
offset = atoi(EARGF(usage()));
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
}ARGEND
|
||||
|
||||
Binit(&bout, 1, OWRITE);
|
||||
if(argc == 0)
|
||||
run("<stdin>", 0);
|
||||
else{
|
||||
for(i=0; i<argc; i++){
|
||||
if((fd = open(argv[i], OREAD)) < 0)
|
||||
sysfatal("open %s: %r", argv[i]);
|
||||
run(argv[i], fd);
|
||||
}
|
||||
}
|
||||
Bflush(&bout);
|
||||
}
|
||||
|
||||
void
|
||||
run(char *name, int fd)
|
||||
{
|
||||
char *p, *q, *f[100];
|
||||
int nf, code, wid, ad;
|
||||
Biobuf b;
|
||||
|
||||
Binit(&b, fd, OREAD);
|
||||
while((p = Brdline(&b, '\n')) != nil){
|
||||
p[Blinelen(&b)-1] = 0;
|
||||
q = strchr(p, ' ');
|
||||
if(q == nil)
|
||||
continue;
|
||||
*q++ = 0;
|
||||
while(*q == ' ' || *q == '\t')
|
||||
q++;
|
||||
if(*q == 0)
|
||||
continue;
|
||||
if(strcmp(p, "FontName") == 0 && didname++ == 0)
|
||||
Bprint(&bout, "name %s\n", q);
|
||||
if(strcmp(p, "FullName") == 0 && didfontname++ == 0)
|
||||
Bprint(&bout, "fontname %s\n", q);
|
||||
if(strcmp(p, "C") == 0){
|
||||
nf = getfields(q, f, nelem(f), 1, "\t\r\n\v ");
|
||||
if(nf < 5 || strcmp(f[1], ";") != 0 || strcmp(f[2], "WX") != 0)
|
||||
continue;
|
||||
code = strtol(f[0], 0, 10);
|
||||
wid = strtol(f[3], 0, 10);
|
||||
wid = (wid+5)/10;
|
||||
if(code == 0)
|
||||
continue;
|
||||
code += offset;
|
||||
ad = 0;
|
||||
if(nf < 6 || strcmp(f[nf-6], "B") != 0)
|
||||
continue;
|
||||
if(atoi(f[nf-4]) < -50)
|
||||
ad |= 1;
|
||||
if(atoi(f[nf-2]) > 600)
|
||||
ad |= 2;
|
||||
if(code == ' ')
|
||||
Bprint(&bout, "spacewidth %d\ncharset\n", wid);
|
||||
else
|
||||
Bprint(&bout, "%C\t%d\t%d\t%d %04x\n", code, wid, ad, code, code);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue