Fergus Duniho's ToDo list for the XDME Excelsior Suite: · Automatic outline indenting. · Learn option for spell-checking. · Paginate should recognize some sort of special footnote symbol and insert footnotes where appropriate. · Spreadsheat mode. · Add wordcounting and formerly registered features to AlphaSpell after I learn what changes have been wrought in C++ by ANSI. · Fix the spell-checking macros to take advantage of AlphaSpell's ability to use multiple dictionaries. · Make AlphaSpell pack and read dictionaries as lisp-like lists. E.g. (a (b (acus e l (e (r))))) would represent the words (abacus abe able abler) No, that won't do. Each part has to complete a full word. But "abl" is not a full word. Try (a (b (acus e (le (r))))) for the words (a ab abacus abe able abler). That should work. A space will mean the end of a word. A "(" will mean the beginning or continuation of a word. A ")" will mean the end of a word and of a list. Functions ought to operate recursively on these lists. These lists will be sort of like representations of tries in a file, but they will not be accessed as tries. It may be even better to do something like this: (a (b (acus e l(e (r))))). In this, a word doesn't finish unless it hits a space or a ")". A "(" immediately following a letter indicates nothing more than a continuation of a word. But what about spaces between strings in a list? OK, let space be the word end indicator, let "(" be the continuation indicator, and let ")" be a list and word end indicator. Maybe I ought to load the entire dictionary into a trie and write the trie to a file. That would seem to be the most efficient way to do this. Using linefeeds in place of spaces would make the dictionary more readable without making it larger. Or how about linefeeds in place of ")" and "-" in place of "("? That might work better. · Make AlphaSpell add words to list-dictionaries without having to unpack them first.