diff options
| author | Simon Tatham <anakin@pobox.com> | 2001-11-24 17:50:55 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2001-11-24 17:50:55 +0000 |
| commit | 37727cf9cf399f80d8be6994f154256ac09dcfea (patch) | |
| tree | 8a5be197e7033ef6f9aaa6d3ea1c1cc3c718bb68 | |
| parent | f18002e76ef0d9cda618ed0124d9460b7411a487 (diff) | |
| download | halibut-37727cf9cf399f80d8be6994f154256ac09dcfea.zip halibut-37727cf9cf399f80d8be6994f154256ac09dcfea.tar.gz halibut-37727cf9cf399f80d8be6994f154256ac09dcfea.tar.bz2 halibut-37727cf9cf399f80d8be6994f154256ac09dcfea.tar.xz | |
Introduce the ability to relabel a section as an `example' or
`question' or so on, using the syntax
\S{mysection}{example} An example of foobar
so that in cross-references it will be referred to as `example
5.1.2' instead of `section 5.1.2'. NOTE WELL: until now Buttress has
supported multiple section keywords using the same syntax, so that
you could xref the above section as \k{mysection} _or_ \k{example}
with the same effect. This behaviour is now revoked because I don't
think anyone was using it; if you suddenly find you're getting
undefined-keyword errors this may be why.
[originally from svn r1408]
| -rw-r--r-- | buttress.h | 3 | ||||
| -rw-r--r-- | contents.c | 10 | ||||
| -rw-r--r-- | inputs/test.but | 7 | ||||
| -rw-r--r-- | keywords.c | 31 |
4 files changed, 31 insertions, 20 deletions
@@ -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 *); /* @@ -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 @@ -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) { |