This package was developed as part of the GRASP project, where it is used for browsing lexical and ontology information, which is normally stored using‘dictionary' order, rather than the more conventional alphabetical ordering based on character codes. To achieve programmable ordering, the table package defines‘order tables'. An order table is a table with the cardinality of the size of the character set (256 for extended ASCII), and maps each character onto its‘order number', and some characters onto special codes.
The default (exact
) table matches all character codes
onto themselves. The default case_insensitive
table matches
all uppercase characters onto their corresponding lowercase character.
The tables iso_latin_1
and iso_latin_1_case_insensitive
map the ISO-latin-1 letters with diacritics into their plain
counterpart.
To support dictionary ordering, the following special categories are defined:
ignore | Characters of the ignore set are simple discarded from the input. |
break | Characters from the break set are treated as word-breaks, and each non-empty sequence of them is considered equal. A word break precedes a normal character. |
tag | Characters of type tag indicate the start of a‘tag' that should not be considered in ordering, unless both strings are the same upto the tag. |
The following predicates are defined to manage and use these tables:
case_insensitive | Map all upper- to lowercase characters. |
iso_latin_1 | Start with an ISO-Latin-1 table |
iso_latin_1_case_insensitive | Start with a case-insensitive ISO-Latin-1 table |
copy(+Table) | Copy all entries from Table. |
tag(+ListOfCodes) | Add these characters to the set of‘tag' characters. |
ignore(+ListOfCodes) | Add these characters to the set of‘ignore' characters. |
break(+ListOfCodes) | Add these characters to the set of‘break' characters. |
+Code1 = +Code2 | Map Code1 onto Code2. |
break
, ignore
or tag
.<
, =
or >
.