int nogo;
int errs;
int reportcols;
+ int list_fonts;
+ int input_charset;
int debug;
int backendbits, prebackbits;
int k, b;
paragraph *cfg, *cfg_tail;
void *pre_backend_data[16];
+ /*
+ * Use the specified locale everywhere. It'll be used for
+ * output of error messages, and as the default character set
+ * for input files if one is not explicitly specified.
+ *
+ * However, we need to use standard numeric formatting for
+ * output of things like PDF.
+ */
setlocale(LC_ALL, "");
+ setlocale(LC_NUMERIC, "C");
/*
* Set up initial (default) parameters.
*/
- infiles = mknewa(char *, argc);
+ infiles = snewn(argc, char *);
nfiles = 0;
nogo = errs = FALSE;
reportcols = 0;
+ list_fonts = 0;
+ input_charset = CS_ASCII;
debug = 0;
backendbits = 0;
cfg = cfg_tail = NULL;
*/
while (--argc) {
char *p = *++argv;
- if (*p == '-') {
+ if (*p == '-' && p[1]) {
/*
* An option.
*/
}
if (k < (int)lenof(backends)) {
/* do nothing */;
+ } else if (!strcmp(opt, "-input-charset")) {
+ if (!val) {
+ errs = TRUE, err_optnoarg(opt);
+ } else {
+ int charset = charset_from_localenc(val);
+ if (charset == CS_NONE) {
+ errs = TRUE, err_cmdcharset(val);
+ } else {
+ input_charset = charset;
+ }
+ }
} else if (!strcmp(opt, "-help")) {
help();
nogo = TRUE;
!strcmp(opt, "-license")) {
licence();
nogo = TRUE;
+ } else if (!strcmp(opt, "-list-charsets")) {
+ listcharsets();
+ nogo = TRUE;
+ } else if (!strcmp(opt, "-list-fonts")) {
+ list_fonts = TRUE;
} else if (!strcmp(opt, "-precise")) {
reportcols = 1;
} else {
- errs = TRUE, error(err_nosuchopt, opt);
+ errs = TRUE, err_nosuchopt(opt);
}
}
p = NULL;
char opt[2];
opt[0] = c;
opt[1] = '\0';
- errs = TRUE, error(err_optnoarg, opt);
+ errs = TRUE, err_optnoarg(opt);
}
/*
* Now c is the option and p is the parameter.
while (*q) {
if (*q == ':') {
*r = '\0';
+ /* XXX ad-hoc diagnostic */
+ if (!strcmp(s, "input-charset"))
+ err_futileopt("Cinput-charset",
+ "; use --input-charset");
cmdline_cfg_add(para, s);
r = s;
} else {
char opt[2];
opt[0] = c;
opt[1] = '\0';
- errs = TRUE, error(err_nosuchopt, opt);
+ errs = TRUE, err_nosuchopt(opt);
}
}
}
/*
* A non-option argument.
*/
- infiles[nfiles++] = p;
+ if (!strcmp(p, "-"))
+ infiles[nfiles++] = NULL; /* special case: read stdin */
+ else
+ infiles[nfiles++] = p;
}
}
/*
* Do the work.
*/
- if (nfiles == 0) {
- error(err_noinput);
+ if (nfiles == 0 && !list_fonts) {
+ err_noinput();
usage();
exit(EXIT_FAILURE);
}
in.pushback = NULL;
in.reportcols = reportcols;
in.stack = NULL;
- in.defcharset = charset_from_locale();
+ in.defcharset = input_charset;
idx = make_index();
sourceform = read_input(&in, idx);
+ if (list_fonts) {
+ listfonts();
+ exit(EXIT_SUCCESS);
+ }
if (!sourceform)
exit(EXIT_FAILURE);
printf("\"");
} else
printf("(no text)");
+ if (w->breaks)
+ printf(" [breaks]");
if (w->alt) {
printf(" alt = {\n");
dbg_prtwordlist(level+1, w->alt);