char: handle multibyte characters in charnext_delim()
[neatroff.git] / roff.c
blobf0ea39dc44d6f7730fc856ff4266c4c69b0484f1
1 /*
2 * neatroff troff clone
4 * Copyright (C) 2012-2013 Ali Gholami Rudi <ali at rudi dot ir>
6 * This program is released under the modified BSD license.
7 */
8 #include <stdarg.h>
9 #include <stdio.h>
10 #include <string.h>
11 #include "roff.h"
13 static void g_init(void)
15 n_o = SC_IN;
16 n_p = SC_IN * 11;
17 n_lg = 1;
18 n_kn = 0;
21 void errmsg(char *fmt, ...)
23 va_list ap;
24 va_start(ap, fmt);
25 vfprintf(stderr, fmt, ap);
26 va_end(ap);
29 static char *usage =
30 "Usage: neatcc [options] input\n"
31 "Options:\n"
32 " -mx \tinclude macro x\n"
33 " -C \tenable compatibility mode\n"
34 " -Tdev \tset output device\n"
35 " -Fdir \tset font directory (" TROFFFDIR ")\n"
36 " -Mdir \tset macro directory (" TROFFMDIR ")\n";
38 int main(int argc, char **argv)
40 char fontdir[PATHLEN] = TROFFFDIR;
41 char macrodir[PATHLEN] = TROFFMDIR;
42 char dev[PATHLEN] = "utf";
43 char path[PATHLEN];
44 int i;
45 int ret;
46 for (i = 1; i < argc; i++) {
47 if (argv[i][0] != '-' || !argv[i][1])
48 break;
49 switch (argv[i][1]) {
50 case 'C':
51 n_cp = 1;
52 break;
53 case 'm':
54 sprintf(path, "%s/tmac.%s", macrodir, argv[i] + 2);
55 in_queue(path);
56 break;
57 case 'F':
58 strcpy(fontdir, argv[i][2] ? argv[i] + 2 : argv[++i]);
59 break;
60 case 'M':
61 strcpy(macrodir, argv[i][2] ? argv[i] + 2 : argv[++i]);
62 break;
63 case 'T':
64 strcpy(dev, argv[i][2] ? argv[i] + 2 : argv[++i]);
65 break;
66 default:
67 printf("%s", usage);
68 return 0;
71 if (dev_open(fontdir, dev)) {
72 fprintf(stderr, "neatroff: cannot open device %s\n", dev);
73 return 1;
75 env_init();
76 tr_init();
77 g_init();
78 if (i == argc)
79 in_queue(NULL); /* reading from standard input */
80 for (; i < argc; i++)
81 in_queue(!strcmp("-", argv[i]) ? NULL : argv[i]);
82 str_set(REG('.', 'P'), macrodir);
83 out("s%d\n", n_s);
84 out("f%d\n", n_f);
85 ret = render();
86 out("V%d\n", n_p);
87 env_done();
88 dev_close();
89 return ret;