Let's not use parentheses in test.but in a way that tempts Halibut
[sgt/halibut] / bk_text.c
index e4a2d81..1a1796e 100644 (file)
--- a/bk_text.c
+++ b/bk_text.c
@@ -10,7 +10,7 @@
 typedef enum { LEFT, LEFTPLUS, CENTRE } alignment;
 typedef struct {
     alignment align;
-    int just_numbers;
+    int number_at_all, just_numbers;
     wchar_t *underline;
     wchar_t *number_suffix;
 } alignstruct;
@@ -67,6 +67,7 @@ static textconfig text_configure(paragraph *source) {
     ret.bullet.alt = NULL;
     ret.bullet.type = word_Normal;
     ret.atitle.just_numbers = FALSE;   /* ignored */
+    ret.atitle.number_at_all = TRUE;   /* ignored */
 
     /*
      * Defaults.
@@ -80,12 +81,14 @@ static textconfig text_configure(paragraph *source) {
     ret.atitle.underline = L"\x2550\0=\0\0";
     ret.achapter.align = LEFT;
     ret.achapter.just_numbers = FALSE;
+    ret.achapter.number_at_all = TRUE;
     ret.achapter.number_suffix = L": ";
     ret.achapter.underline = L"\x203E\0-\0\0";
     ret.nasect = 1;
-    ret.asect = mknewa(alignstruct, ret.nasect);
+    ret.asect = snewn(ret.nasect, alignstruct);
     ret.asect[0].align = LEFTPLUS;
     ret.asect[0].just_numbers = TRUE;
+    ret.asect[0].number_at_all = TRUE;
     ret.asect[0].number_suffix = L" ";
     ret.asect[0].underline = L"\0";
     ret.include_version_id = TRUE;
@@ -126,9 +129,7 @@ static textconfig text_configure(paragraph *source) {
            if (!ustricmp(p->keyword, L"text-indent")) {
                ret.indent = utoi(uadv(p->keyword));
            } else if (!ustricmp(p->keyword, L"text-charset")) {
-               char *csname = utoa_dup(uadv(p->keyword), CS_ASCII);
-               ret.charset = charset_from_localenc(csname);
-               sfree(csname);
+               ret.charset = charset_from_ustr(&p->fpos, uadv(p->keyword));
            } else if (!ustricmp(p->keyword, L"text-filename")) {
                sfree(ret.filename);
                ret.filename = dupstr(adv(p->origkeyword));
@@ -146,6 +147,8 @@ static textconfig text_configure(paragraph *source) {
                ret.achapter.underline = uadv(p->keyword);
            } else if (!ustricmp(p->keyword, L"text-chapter-numeric")) {
                ret.achapter.just_numbers = utob(uadv(p->keyword));
+           } else if (!ustricmp(p->keyword, L"text-chapter-shownumber")) {
+               ret.achapter.number_at_all = utob(uadv(p->keyword));
            } else if (!ustricmp(p->keyword, L"text-chapter-suffix")) {
                ret.achapter.number_suffix = uadv(p->keyword);
            } else if (!ustricmp(p->keyword, L"text-section-align")) {
@@ -157,7 +160,7 @@ static textconfig text_configure(paragraph *source) {
                }
                if (n >= ret.nasect) {
                    int i;
-                   ret.asect = resize(ret.asect, n+1);
+                   ret.asect = sresize(ret.asect, n+1, alignstruct);
                    for (i = ret.nasect; i <= n; i++)
                        ret.asect[i] = ret.asect[ret.nasect-1];
                    ret.nasect = n+1;
@@ -172,7 +175,7 @@ static textconfig text_configure(paragraph *source) {
                }
                if (n >= ret.nasect) {
                    int i;
-                   ret.asect = resize(ret.asect, n+1);
+                   ret.asect = sresize(ret.asect, n+1, alignstruct);
                    for (i = ret.nasect; i <= n; i++)
                        ret.asect[i] = ret.asect[ret.nasect-1];
                    ret.nasect = n+1;
@@ -187,12 +190,27 @@ static textconfig text_configure(paragraph *source) {
                }
                if (n >= ret.nasect) {
                    int i;
-                   ret.asect = resize(ret.asect, n+1);
+                   ret.asect = sresize(ret.asect, n+1, alignstruct);
                    for (i = ret.nasect; i <= n; i++)
                        ret.asect[i] = ret.asect[ret.nasect-1];
                    ret.nasect = n+1;
                }
                ret.asect[n].just_numbers = utob(q);
+           } else if (!ustricmp(p->keyword, L"text-section-shownumber")) {
+               wchar_t *q = uadv(p->keyword);
+               int n = 0;
+               if (uisdigit(*q)) {
+                   n = utoi(q);
+                   q = uadv(q);
+               }
+               if (n >= ret.nasect) {
+                   int i;
+                   ret.asect = sresize(ret.asect, n+1, alignstruct);
+                   for (i = ret.nasect; i <= n; i++)
+                       ret.asect[i] = ret.asect[ret.nasect-1];
+                   ret.nasect = n+1;
+               }
+               ret.asect[n].number_at_all = utob(q);
            } else if (!ustricmp(p->keyword, L"text-section-suffix")) {
                wchar_t *q = uadv(p->keyword);
                int n = 0;
@@ -202,7 +220,7 @@ static textconfig text_configure(paragraph *source) {
                }
                if (n >= ret.nasect) {
                    int i;
-                   ret.asect = resize(ret.asect, n+1);
+                   ret.asect = sresize(ret.asect, n+1, alignstruct);
                    for (i = ret.nasect; i <= n; i++) {
                        ret.asect[i] = ret.asect[ret.nasect-1];
                    }
@@ -617,12 +635,14 @@ static void text_heading(textfile *tf, word *tprefix, word *nprefix,
     int firstlinewidth, wrapwidth;
     wrappedline *wrapping, *p;
 
-    if (align.just_numbers && nprefix) {
-       text_rdaddw(&t, nprefix, NULL, cfg);
-       rdadds(&t, align.number_suffix);
-    } else if (!align.just_numbers && tprefix) {
-       text_rdaddw(&t, tprefix, NULL, cfg);
-       rdadds(&t, align.number_suffix);
+    if (align.number_at_all) {
+       if (align.just_numbers && nprefix) {
+           text_rdaddw(&t, nprefix, NULL, cfg);
+           rdadds(&t, align.number_suffix);
+       } else if (!align.just_numbers && tprefix) {
+           text_rdaddw(&t, tprefix, NULL, cfg);
+           rdadds(&t, align.number_suffix);
+       }
     }
     margin = length = ustrwid(t.text ? t.text : L"", cfg->charset);