X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/halibut/blobdiff_plain/6e969fcfe897ed651145d5cadfc6764c2a6bce6d..5b1d0032b0eb6f4a347c0c2cfdbe6e4bb4f959ab:/main.c diff --git a/main.c b/main.c index 24e6077..847aea8 100644 --- a/main.c +++ b/main.c @@ -3,6 +3,7 @@ */ #include +#include #include #include #include "halibut.h" @@ -48,6 +49,8 @@ int main(int argc, char **argv) { paragraph *cfg, *cfg_tail; void *pre_backend_data[16]; + setlocale(LC_ALL, ""); + /* * Set up initial (default) parameters. */ @@ -94,9 +97,7 @@ int main(int argc, char **argv) { assert(opt[0] == '-'); for (k = 0; k < (int)lenof(backends); k++) if (!strcmp(opt+1, backends[k].name)) { -printf("%d\n", backendbits); backendbits |= backends[k].bitfield; -printf("%d\n", backendbits); if (val) { paragraph *p = backends[k].filename(val); assert(p); @@ -183,36 +184,26 @@ printf("%d\n", backendbits); * into a config paragraph. */ { - wchar_t *keywords; - char *q; - wchar_t *u; + char *s = dupstr(p), *q, *r; paragraph *para; - keywords = mknewa(wchar_t, 2+strlen(p)); - - u = keywords; - q = p; + para = cmdline_cfg_new(); + q = r = s; while (*q) { if (*q == ':') { - *u++ = L'\0'; + *r = '\0'; + cmdline_cfg_add(para, s); + r = s; } else { if (*q == '\\' && q[1]) q++; - /* FIXME: lacks charset flexibility */ - *u++ = *q; + *r++ = *q; } q++; } - *u = L'\0'; - - para = mknew(paragraph); - memset(para, 0, sizeof(*para)); - para->type = para_Config; - para->keyword = keywords; - para->next = NULL; - para->fpos.filename = ""; - para->fpos.line = para->fpos.col = -1; + *r = '\0'; + cmdline_cfg_add(para, s); if (cfg_tail) cfg_tail->next = para; @@ -243,7 +234,6 @@ printf("%d\n", backendbits); infiles[nfiles++] = p; } } -printf("%d\n", backendbits); if (errs) exit(EXIT_FAILURE); @@ -273,6 +263,7 @@ printf("%d\n", backendbits); in.pushback = NULL; in.reportcols = reportcols; in.stack = NULL; + in.defcharset = charset_from_locale(); idx = make_index(); @@ -297,8 +288,6 @@ printf("%d\n", backendbits); sfree(in.pushback); - mark_attr_ends(sourceform); - sfree(infiles); keywords = get_keywords(sourceform); @@ -313,6 +302,20 @@ printf("%d\n", backendbits); build_index(idx); + /* + * Set up attr_First / attr_Last / attr_Always, in the main + * document and in the index entries. + */ + for (p = sourceform; p; p = p->next) + mark_attr_ends(p->words); + { + int i; + indexentry *entry; + + for (i = 0; (entry = index234(idx->entries, i)) != NULL; i++) + mark_attr_ends(entry->text); + } + if (debug) { index_debug(idx); dbg_prtkws(keywords); @@ -336,7 +339,6 @@ printf("%d\n", backendbits); /* * Run the selected set of backends. */ -printf("%d\n", backendbits); for (k = b = 0; k < (int)lenof(backends); k++) if (b != backends[k].bitfield) { b = backends[k].bitfield;