summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--buttress.h3
-rw-r--r--contents.c10
-rw-r--r--inputs/test.but7
-rw-r--r--keywords.c31
4 files changed, 31 insertions, 20 deletions
diff --git a/buttress.h b/buttress.h
index 04c0dbb..4d8de8e 100644
--- a/buttress.h
+++ b/buttress.h
@@ -375,7 +375,8 @@ void index_debug(index *);
*/
numberstate *number_init(void);
void number_cfg(numberstate *, paragraph *);
-word *number_mktext(numberstate *, int, int, int, word **, filepos, int *);
+word *number_mktext(numberstate *, int, int, wchar_t *,
+ int, word **, filepos, int *);
void number_free(numberstate *);
/*
diff --git a/contents.c b/contents.c
index 6032133..dae0d8d 100644
--- a/contents.c
+++ b/contents.c
@@ -115,8 +115,8 @@ void number_cfg(numberstate *state, paragraph *source) {
}
}
-word *number_mktext(numberstate *state, int para, int aux, int prev,
- word **auxret, filepos fpos, int *errflag) {
+word *number_mktext(numberstate *state, int para, int aux, wchar_t *category,
+ int prev, word **auxret, filepos fpos, int *errflag) {
word *ret = NULL;
word **ret2 = &ret;
word **pret = &ret;
@@ -127,7 +127,7 @@ word *number_mktext(numberstate *state, int para, int aux, int prev,
state->chapternum++;
for (i = 0; i < state->maxsectlevel; i++)
state->sectionlevels[i] = 0;
- dotext(&pret, state->chaptertext);
+ dotext(&pret, category ? category : state->chaptertext);
dospace(&pret);
ret2 = pret;
donumber(&pret, state->chapternum);
@@ -151,7 +151,7 @@ word *number_mktext(numberstate *state, int para, int aux, int prev,
state->sectionlevels[level]++;
for (i = level+1; i < state->maxsectlevel; i++)
state->sectionlevels[i] = 0;
- dotext(&pret, state->sectiontext);
+ dotext(&pret, category ? category : state->sectiontext);
dospace(&pret);
ret2 = pret;
if (state->ischapter)
@@ -169,7 +169,7 @@ word *number_mktext(numberstate *state, int para, int aux, int prev,
state->appendixnum++;
for (i = 0; i < state->maxsectlevel; i++)
state->sectionlevels[i] = 0;
- dotext(&pret, state->apptext);
+ dotext(&pret, category ? category : state->apptext);
dospace(&pret);
ret2 = pret;
doanumber(&pret, state->appendixnum);
diff --git a/inputs/test.but b/inputs/test.but
index ba2a9d4..acc19c7 100644
--- a/inputs/test.but
+++ b/inputs/test.but
@@ -19,7 +19,7 @@ a bit]
\define{coopt} co\u00F6{-o}pt
-\versionid $Id: test.but,v 1.13 2001/10/25 12:48:31 simon Exp $
+\versionid $Id: test.but,v 1.14 2001/11/24 17:50:55 simon Exp $
\C{ch\\ap} First chapter title; for similar wrapping reasons this
chapter title will be ludicrously long. I wonder how much more
@@ -93,9 +93,10 @@ An index tag containing non-alternatived Unicode: \i{\u00BFChe?}
An invisible index tag: \I{she seems to have an invisible tag}yeah.
-\S2{sub-sub} Smaller heading still
+\S2{sub-sub}{florble} Smaller heading still
-A tiny section. Awww. How cute.
+A tiny section. Awww. How cute. Actually, this one's a \e{florble},
+and here's a reference to it: \k{sub-sub}.
\A{app} Needless appendix
diff --git a/keywords.c b/keywords.c
index b401690..26580f8 100644
--- a/keywords.c
+++ b/keywords.c
@@ -99,25 +99,34 @@ keywordlist *get_keywords(paragraph *source) {
kl->nlooseends = kl->looseendssize = 0;
kl->looseends = NULL;
for (; source; source = source->next) {
+ wchar_t *p, *q;
+ p = q = source->keyword;
+
+ /*
+ * Look for the section type override (`example',
+ * `question' or whatever - to replace `chapter' or
+ * `section' on a per-section basis).
+ */
+ if (q) {
+ q = uadv(q); /* point q at the word beyond */
+ if (!*q) q = NULL;
+ }
+
/*
* Number the chapter / section / list-item / whatever.
*/
- source->kwtext = number_mktext(n, source->type, source->aux,
+ source->kwtext = number_mktext(n, source->type, source->aux, q,
prevpara, &source->kwtext2,
source->fpos, &errors);
prevpara = source->type;
- if (source->keyword && *source->keyword) {
+ if (p && *p) {
if (source->kwtext || source->type == para_Biblio) {
- wchar_t *p = source->keyword;
- while (*p) {
- keyword *kw = mknew(keyword);
- kw->key = p;
- kw->text = source->kwtext;
- kw->para = source;
- heap_add(kl, kw);
- p = uadv(p);
- }
+ keyword *kw = mknew(keyword);
+ kw->key = p;
+ kw->text = source->kwtext;
+ kw->para = source;
+ heap_add(kl, kw);
}
} else {
if (kl->nlooseends >= kl->looseendssize) {