xindy means flexible indexing system. It is an indexing system that can be used to generate book-like indexes for arbitrary document preparation systems. This term includes systems such as TeX  and LaTeX , the Nroff-family or SGML-based systems (e.g. HTML) that process some kind of text and generate indexing information. It is not fixed to any specific system, but can be configured for a wide variety of purposes.
Authors sometimes wish to include an index into their document, but very often their document preparation systems aren't able to produce indexes on their own, or the capabilities of the built-in indexers are insufficient and produce ugly looking results. More often they use separate specialized tools for this purpose, sometimes called index processors.
In comparison to other index processors xindy has several powerful features that make it an ideal framework for describing and generating complex indexes. Its most interesting features are
xindy can be configured to process indexes for many languages with different letter sets and different sorting rules. For example, many roman languages such as Italian, French, Portuguese or Spanish contain accentuated letters such as À, Á, ñ. Other languages from northern Europe have letters like Ä, Ø, æ or ß which often can't even be processed by many index processors let alone sorting them correctly into an index. The xindy system can be configured to process these alphabets by defining sort and merge rules that allow expressing language specific rules. One example of such a rule would be
(sort-rule "ä" "ae")
defining that a word containing the umlaut-a will be sorted as if it
contained the letters
ae instead. This is one form of how the
umlaut-a ("ä") is sorted into german indexes. With an appropriate set
of rules on can express the complete rules of a specific language.
Locations are the entities an index entry points to. Often used locations are page numbers, section numbers, etc. xindy allows to define new kinds of types to be composed of basic entities like arabic numbers, roman numerals, letters, etc. which can be used to describe new index types. Examples of these entities can be books that have a page numbering scheme that starts from 1 for each new chapter resulting in page numbers of the form 1-13, 2-15, 2-20, etc. This type of locations can often be found in computer manuals. A more complex structure is represented by the locations Psalm 46, 1-8 and Genesis 1, 31. Even the structure of bible verses can be described allowing xindy to correctly sort and process indexes for documents with a completely different structure.
Since a index processor is only one component in a document preparation system it ought to fit smoothly into the complete environment. Many text processing systems use the concept of environments that can be used to describe the markup of the text entities. Our approach is based on this concept which has proved to be expressive enough for most applications. As an example one can view systems such as TeX, SGML and its instance HTML, GNU Info, RTF and the Nroff-familiy of document formatters. The markup of an index can be defined for all of these systems in a very comfortable though extremly powerful way.