summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2004-06-19 16:04:39 +0000
committerSimon Tatham <anakin@pobox.com>2004-06-19 16:04:39 +0000
commit88cfb9065852d17c763d025c4f720f356c313259 (patch)
tree50ded70797ba631b2f95abbd08a0f017ef91a47a
parentcf4bb9b46153ea9a0cbe8bcc539941bd6cee3abf (diff)
downloadhalibut-88cfb9065852d17c763d025c4f720f356c313259.zip
halibut-88cfb9065852d17c763d025c4f720f356c313259.tar.gz
halibut-88cfb9065852d17c763d025c4f720f356c313259.tar.bz2
halibut-88cfb9065852d17c763d025c4f720f356c313259.tar.xz
Moderately nasty workaround for the fact that Windows Help's index
mechanism is case-insensitive with respect to sorting the list of index entries. We now append nonbreaking spaces to the ends of some index terms to ensure they are considered distinct. (Nasty, but it seems to work.) [originally from svn r4294]
-rw-r--r--bk_whlp.c61
-rw-r--r--inputs/test.but18
2 files changed, 70 insertions, 9 deletions
diff --git a/bk_whlp.c b/bk_whlp.c
index ca15b61..1e1ae31 100644
--- a/bk_whlp.c
+++ b/bk_whlp.c
@@ -246,10 +246,63 @@ void whlp_backend(paragraph *sourceform, keywordlist *keywords,
* Loop over the index entries, preparing final text forms for
* each one.
*/
- for (i = 0; (ie = index234(idx->entries, i)) != NULL; i++) {
- rdstringc rs = {0, 0, NULL};
- whlp_rdaddwc(&rs, ie->text, &conf, NULL);
- ie->backend_data = rs.text;
+ {
+ indexentry *ie_prev = NULL;
+ int nspaces = 1;
+
+ for (i = 0; (ie = index234(idx->entries, i)) != NULL; i++) {
+ rdstringc rs = {0, 0, NULL};
+ charset_state state = CHARSET_INIT_STATE;
+ whlp_rdaddwc(&rs, ie->text, &conf, &state);
+
+ if (ie_prev) {
+ /*
+ * It appears that Windows Help's index mechanism
+ * is inherently case-sensitive. Therefore, if two
+ * adjacent index terms compare equal apart from
+ * case, I'm going to append nonbreaking spaces to
+ * the end of the second one so that Windows will
+ * treat them as distinct.
+ *
+ * This is nasty because we're depending on our
+ * case-insensitive comparison having the same
+ * semantics as the Windows one :-/ but I see no
+ * alternative.
+ */
+ wchar_t *a, *b;
+
+ a = ufroma_dup((char *)ie_prev->backend_data, conf.charset);
+ b = ufroma_dup(rs.text, conf.charset);
+ if (!ustricmp(a, b)) {
+ int j;
+ for (j = 0; j < nspaces; j++)
+ whlp_rdadds(&rs, L"\xA0", &conf, &state);
+ /*
+ * Add one to nspaces, so that if another term
+ * appears which is equivalent to the previous
+ * two it'll acquire one more space.
+ */
+ nspaces++;
+ } else
+ nspaces = 1;
+ sfree(a);
+ sfree(b);
+ }
+
+ whlp_rdadds(&rs, NULL, &conf, &state);
+
+ ie->backend_data = rs.text;
+
+ /*
+ * Only move ie_prev on if nspaces==1 (since when we
+ * have three or more adjacent terms differing only in
+ * case, we will want to compare with the _first_ of
+ * them because that won't have had any extra spaces
+ * added on which will foul up the comparison).
+ */
+ if (nspaces == 1)
+ ie_prev = ie;
+ }
}
whlp_prepare(h);
diff --git a/inputs/test.but b/inputs/test.but
index 887825f..1908609 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.31 2004/06/19 14:44:47 simon Exp $
+\versionid $Id: test.but,v 1.32 2004/06/19 16:04:39 simon Exp $
\C{ch\\ap} First chapter title; for similar wrapping reasons this
chapter title will be ludicrously long. I wonder how much more
@@ -222,10 +222,10 @@ 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
-PDF document outline.
+Here are \I{testone}some \I{testtwo}subsections \I{testthree}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 PDF document outline.
\H{app-one} The 1024 \u00D7{x} 768 screen resolution
@@ -267,3 +267,11 @@ the document even though there is no \cw{\\k} citing it.
\IM{she seems to have an invisible tag}{appendix} Invisible tags
and/or appendices
+
+\# The display forms of these three index terms differ only in case.
+\# This is a fiddly special case in the Windows Help backend,
+\# because Windows Help's index mechanism is case-insensitive...
+
+\IM{testone} Test
+\IM{testtwo} TesT
+\IM{testthree} test