From e44f985bd4f796d4c4b11eb3555436dbaa2d163b Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Mon, 18 Oct 1999 18:03:37 +0000 Subject: Further development; mid-end index handling pretty much there! [originally from svn r238] --- misc.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'misc.c') diff --git a/misc.c b/misc.c index c9ea115..3ead01c 100644 --- a/misc.c +++ b/misc.c @@ -40,3 +40,47 @@ void *stk_pop(stack s) { else return NULL; } + +int compare_wordlists(word *a, word *b) { + int t; + while (a && b) { + if (a->type != b->type) + return (a->type < b->type ? -1 : +1); /* FIXME? */ + t = a->type; + if ((t != word_Normal && t != word_Code && + t != word_WeakCode && t != word_Emph) || + a->alt || b->alt) { + int c; + if (a->text && b->text) { + c = ustricmp(a->text, b->text); + if (c) + return c; + } + c = compare_wordlists(a->alt, b->alt); + if (c) + return c; + a = a->next; + b = b->next; + } else { + wchar_t *ap = a->text, *bp = b->text; + while (*ap && *bp) { + wchar_t ac = utolower(*ap), bc = utolower(*bp); + if (ac != bc) + return (ac < bc ? -1 : +1); + if (!*++ap && a->next && a->next->type == t && !a->next->alt) + a = a->next, ap = a->text; + if (!*++bp && b->next && b->next->type == t && !b->next->alt) + b = b->next, bp = b->text; + } + if (*ap || *bp) + return (*ap ? +1 : -1); + a = a->next; + b = b->next; + } + } + + if (a || b) + return (a ? +1 : -1); + else + return 0; +} -- cgit v1.1