The purpose of this project is to create a library that can work as a processor for abbreviations. Such a processor is an essential part of many end-user programs such as text editors, IRC clients, or any other application that requires text input from the user.
An abbrev processor can be represented as a standard object, with a number of generic functions that can take such an object as an argument. An abbrev processor can have parent abbrev processors, making it possible for the user to organize his or her abbrevs in a modular way.
Functions for defining abbrevs should accept keyword arguments indicating whether variations in character case are acceptable, and if so, how such variations should be interpreted. Similarly, functions for expanding abbrevs should accept keyword arguments to allow for variations on how the abbrev is to be expanded. As an example of such variations, consider an abbrev that expands to several words. If an all-upper-case abbrev is then submitted, it is ambiguous what kind of expansion is desired: each word with an initial capital letter, or the entire expansion in all capital letters.