merely traverses a list of words, and main() takes responsibility
for applying it to each paragraph in the document. This is so that
it can _also_ be applied to the display form of each index entry,
which Jacob spotted wasn't previously being done.
git-svn-id: svn://svn.tartarus.org/sgt/halibut@4117
cda61777-01e9-0310-a592-
d414129be87e
int compare_wordlists(word *a, word *b);
-void mark_attr_ends(paragraph *sourceform);
+void mark_attr_ends(word *words);
typedef struct tagWrappedLine wrappedline;
struct tagWrappedLine {
\define{eur} \u20AC{EUR }
-\versionid $Id: test.but,v 1.29 2004/04/20 19:20:55 simon Exp $
+\versionid $Id: test.but,v 1.30 2004/04/22 18:01:31 simon Exp $
\C{ch\\ap} First chapter title; for similar wrapping reasons this
chapter title will be ludicrously long. I wonder how much more
It also contains a \W{http://www.tartarus.org/}{hyperlink}.
+Also I'm going to index \i\c{-output} to ensure that its two
+components are displayed as a joined-up code fragment in the index.
+
Here are some subsections with silly chapter titles and interesting
use of Unicode. The Unicode oddities are in the titles rather than
the body text because that way I get to test their handling in the
sfree(in.pushback);
- mark_attr_ends(sourceform);
-
sfree(infiles);
keywords = get_keywords(sourceform);
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);
return compare_wordlists_literally(a, b);
}
-void mark_attr_ends(paragraph *sourceform) {
- paragraph *p;
+void mark_attr_ends(word *words)
+{
word *w, *wp;
- for (p = sourceform; p; p = p->next) {
- wp = NULL;
- for (w = p->words; w; w = w->next) {
- if (isattr(w->type)) {
- int before = (wp && isattr(wp->type) &&
- sameattr(wp->type, w->type));
- int after = (w->next && isattr(w->next->type) &&
- sameattr(w->next->type, w->type));
- w->aux |= (before ?
- (after ? attr_Always : attr_Last) :
- (after ? attr_First : attr_Only));
- }
- wp = w;
+
+ wp = NULL;
+ for (w = words; w; w = w->next) {
+ if (isattr(w->type)) {
+ int before = (wp && isattr(wp->type) &&
+ sameattr(wp->type, w->type));
+ int after = (w->next && isattr(w->next->type) &&
+ sameattr(w->next->type, w->type));
+ w->aux |= (before ?
+ (after ? attr_Always : attr_Last) :
+ (after ? attr_First : attr_Only));
}
+ wp = w;
}
}