--- title: Step 4: The Keyboard Body --- The body of the keyboard is the most important part: it determines the behaviour of the keyboard. The body consists of groups, which in turn contain one or more rules which define the responses of the keyboard to certain keystrokes. ## Groups There are two types of groups: * groups that process the keys pressed and the context. * groups that process only the context. For simple keyboards, the latter type of group will not be required. A group begins with a [`group` statement](/developer/language/reference/group), and ends either at the start of another group, or at the end of the keyboard file. We will only use one group in the Quick French keyboard, called `Main`. We mark the start of it with the `group` statement below. Add this line to the keyboard if it's not already there. ```keyman group(Main) using keys ``` The `using keys` clause tells Keyman that this group will process keystrokes. ## Basic Rules A rule tells Keyman the output to produce for a certain input. A rule consists of three parts: the **context**, the **key**, and the **output**. * The **context** specifies the conditions under which a rule will act. If what is shown in the document to the left of the cursor matches the context of a rule, the rule will be processed. * The **key** specifies which keystroke the rule will act upon. * The **output** determines the characters that are produced by a rule. The output replaces the matched context in the document. ## Simple rules The simplest rules in Keyman consist of just a key and output, as below. (The examples in this section are just for illustration, and do not form part of the Quick French keyboard). ```keyman + "a" > "ä" ``` In this rule, the key is a, and the output is `"ä"`. A simple rule begins with a plus sign, followed by the key, a greater-than symbol (suggesting "becomes"), and finally the output. As you might guess, this rule will change a lowercase a key typed by the user into **ä**. The key and output can be written as a character in single or double quotes (as above), or as its Unicode character code, or using a named constant. The rule above could have also been written any of the following ways, among others: ```keyman + 'a' > 'ä' + U+0061 > U+00E4 store(ADIERESIS) 'ä' + 'a' > $ADIERESIS ``` You can also write the key in one form and the context in another. ## Rules with longer output The output of a rule is not limited to a single character. You could, for example, write a rule such as the following: ```keyman + "f" > "ph" ``` This would change any f keys typed into **ph**. If the output of a rule consists of more than one character, you can write the characters in different ways if necessary, with a space separating each part. You can specify multiple characters in quotes, but if you use the Unicode codes to write the characters, you must separate each with a space: ```keyman + "f" > U+0070 U+0068 + "f" > U+0070 "h" ``` These rules are functionally identical to the one [further above](#toc-simple-rules). - [Continue with Step 5: Rules with Context](step-5) - [Back to Step 3: The Keyboard Header](step-3)