Switch the memory allocation macros from the Halibut ones
[sgt/halibut] / main.c
diff --git a/main.c b/main.c
index 24e6077..f09b33e 100644 (file)
--- a/main.c
+++ b/main.c
@@ -3,6 +3,7 @@
  */
 
 #include <assert.h>
+#include <locale.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include "halibut.h"
@@ -25,8 +26,8 @@ static const struct backend {
     int bitfield, prebackend_bitfield;
 } backends[] = {
     {"text", text_backend, text_config_filename, 0x0001, 0},
-    {"xhtml", xhtml_backend, xhtml_config_filename, 0x0002, 0},
-    {"html", xhtml_backend, xhtml_config_filename, 0x0002, 0},
+    {"xhtml", html_backend, html_config_filename, 0x0002, 0},
+    {"html", html_backend, html_config_filename, 0x0002, 0},
     {"hlp", whlp_backend, whlp_config_filename, 0x0004, 0},
     {"whlp", whlp_backend, whlp_config_filename, 0x0004, 0},
     {"winhelp", whlp_backend, whlp_config_filename, 0x0004, 0},
@@ -48,10 +49,12 @@ int main(int argc, char **argv) {
     paragraph *cfg, *cfg_tail;
     void *pre_backend_data[16];
 
+    setlocale(LC_ALL, "");
+
     /*
      * Set up initial (default) parameters.
      */
-    infiles = mknewa(char *, argc);
+    infiles = snewn(argc, char *);
     nfiles = 0;
     nogo = errs = FALSE;
     reportcols = 0;
@@ -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 = "<command line>";
-                           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;