Stores are a method of grouping multiple characters together, in order to deal
with them all in a similar way. The most common use of stores is to reduce the
number of rules required in a keyboard by allowing a single rule to match
multiple characters through the use of stores and the
any statement. An
example of this is given in the tutorial.
System stores are stores with a name beginning with &, which have a special purpose, usually defining properties or behaviour of the keyboard.
Stores with only a single character are usually used to define named constants.
Stores are created with the
store( %storename% ) %storecontents%
storename is an identifier you give to the store, and
is the store's contents, expressed as a string or a sequence of Unicode or ANSI
character constants. Virtual keys and deadkeys can also be used in stores.
All stores must be given unique identifiers, and are visible throughout the keyboard file. A store statement can be placed anywhere in a keyboard source file, and its visibility is unaffected.
Stores are most often used with the
index keywords. The
any keyword is used in the context or key section of the rule, and will
match any character in the specified store, remembering its index.
any( %store% )
index statement is used to look up a character in a store at the index
where a specified
any statement matched a character. The
statement used to obtain the index is referenced by its position in the context
and key, a 1-based number.
index( %store%, %position% )
Note that an
index statement may reference an
any statement which
uses a different store: the only requirement is that the stores used by each have
the same length.
any(vowel) + '^' > index(vowel_circum, 1)
outs statement can be used to output the contents of a store. This
can be used in another store, or in the context or output of a rule.
outs( %storename% )
IPAMenu.kmn sample keyboard gives an example of the use of stores and
outs to create a menu-based keyboard for entry of characters from the
International Phonetic Alphabet.