summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2004-04-22 18:01:31 +0000
committerSimon Tatham <anakin@pobox.com>2004-04-22 18:01:31 +0000
commit696363c8dd1637fda63d45f98b4474803bba87b3 (patch)
treedf4134bb5cf60802f3ead1090109a78ad6915c43
parent3e7ac03ca71c9b93c73fa58fd1de9a2042ec13d7 (diff)
downloadhalibut-696363c8dd1637fda63d45f98b4474803bba87b3.zip
halibut-696363c8dd1637fda63d45f98b4474803bba87b3.tar.gz
halibut-696363c8dd1637fda63d45f98b4474803bba87b3.tar.bz2
halibut-696363c8dd1637fda63d45f98b4474803bba87b3.tar.xz
Instead of traversing a list of paragraphs, mark_attr_ends() now
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. [originally from svn r4117]
-rw-r--r--halibut.h2
-rw-r--r--inputs/test.but5
-rw-r--r--main.c16
-rw-r--r--misc.c29
4 files changed, 33 insertions, 19 deletions
diff --git a/halibut.h b/halibut.h
index 26f2e4f..f3de665 100644
--- a/halibut.h
+++ b/halibut.h
@@ -348,7 +348,7 @@ char *rdtrimc(rdstringc *rs);
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 {
diff --git a/inputs/test.but b/inputs/test.but
index abdafcd..cd08ef6 100644
--- a/inputs/test.but
+++ b/inputs/test.but
@@ -32,7 +32,7 @@ a bit]
\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
@@ -219,6 +219,9 @@ whitespace).
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
diff --git a/main.c b/main.c
index 18d644c..847aea8 100644
--- a/main.c
+++ b/main.c
@@ -288,8 +288,6 @@ int main(int argc, char **argv) {
sfree(in.pushback);
- mark_attr_ends(sourceform);
-
sfree(infiles);
keywords = get_keywords(sourceform);
@@ -304,6 +302,20 @@ int main(int argc, char **argv) {
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);
diff --git a/misc.c b/misc.c
index 647d642..12333e7 100644
--- a/misc.c
+++ b/misc.c
@@ -213,23 +213,22 @@ int compare_wordlists(word *a, word *b) {
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;
}
}