wchar_t *th;
int headnumbers;
int mindepth;
+ char *filename;
} manconfig;
static manconfig man_configure(paragraph *source) {
ret.th = NULL;
ret.headnumbers = FALSE;
ret.mindepth = 0;
+ ret.filename = dupstr("output.1");
for (; source; source = source->next) {
if (source->type == para_Config) {
ep = wp;
while (*ep)
ep = uadv(ep);
+ sfree(ret.th);
ret.th = mknewa(wchar_t, ep - wp + 1);
memcpy(ret.th, wp, (ep - wp + 1) * sizeof(wchar_t));
} else if (!ustricmp(source->keyword, L"man-headnumbers")) {
ret.headnumbers = utob(uadv(source->keyword));
} else if (!ustricmp(source->keyword, L"man-mindepth")) {
ret.mindepth = utoi(uadv(source->keyword));
+ } else if (!ustricmp(source->keyword, L"man-filename")) {
+ sfree(ret.filename);
+ ret.filename = utoa_dup(uadv(source->keyword));
}
}
}
static void man_conf_cleanup(manconfig cf)
{
sfree(cf.th);
+ sfree(cf.filename);
+}
+
+paragraph *man_config_filename(char *filename)
+{
+ paragraph *p;
+ wchar_t *ufilename, *up;
+ int len;
+
+ p = mknew(paragraph);
+ memset(p, 0, sizeof(*p));
+ p->type = para_Config;
+ p->next = NULL;
+ p->fpos.filename = "<command line>";
+ p->fpos.line = p->fpos.col = -1;
+
+ ufilename = ufroma_dup(filename);
+ len = ustrlen(ufilename) + 2 + lenof(L"man-filename");
+ p->keyword = mknewa(wchar_t, len);
+ up = p->keyword;
+ ustrcpy(up, L"man-filename");
+ up = uadv(up);
+ ustrcpy(up, ufilename);
+ up = uadv(up);
+ *up = L'\0';
+ assert(up - p->keyword < len);
+ sfree(ufilename);
+
+ return p;
}
#define QUOTE_INITCTRL 1 /* quote initial . and ' on a line */
#define QUOTE_QUOTES 2 /* quote double quotes by doubling them */
void man_backend(paragraph *sourceform, keywordlist *keywords,
- indexdata *idx) {
+ indexdata *idx, void *unused) {
paragraph *p;
FILE *fp;
manconfig conf;
- int done_copyright;
- IGNORE(keywords); /* we don't happen to need this */
- IGNORE(idx); /* or this */
+ IGNORE(unused);
+ IGNORE(keywords);
+ IGNORE(idx);
conf = man_configure(sourceform);
/*
- * Determine the output file name, and open the output file
- *
- * FIXME: want configurable output file names here. For the
- * moment, we'll just call it `output.1'.
+ * Open the output file.
*/
- fp = fopen("output.1", "w");
+ fp = fopen(conf.filename, "w");
if (!fp) {
- error(err_cantopenw, "output.1");
+ error(err_cantopenw, conf.filename);
return;
}
fprintf(fp, ".UC\n");
- done_copyright = FALSE;
-
for (p = sourceform; p; p = p->next) switch (p->type) {
/*
* Things we ignore because we've already processed them or
case para_BR:
case para_Biblio: /* only touch BiblioCited */
case para_VersionID:
- case para_Copyright:
case para_NoCite:
case para_Title:
break;
case para_Heading:
case para_Subsect:
- if (!done_copyright) {
- paragraph *p;
-
- /*
- * The copyright comes just before the first chapter
- * title.
- */
- for (p = sourceform; p; p = p->next)
- if (p->type == para_Copyright) {
- fprintf(fp, ".PP\n");
- man_text(fp, p->words, TRUE, 0);
- }
- done_copyright = TRUE;
- }
-
{
int depth;
if (p->type == para_Subsect)
* Normal paragraphs.
*/
case para_Normal:
+ case para_Copyright:
fprintf(fp, ".PP\n");
man_text(fp, p->words, TRUE, 0);
break;