
{c} + , ç
{ç} + <space> c , <space>
Figure 4: character-key specification example
should turn it into a c followed by a comma and a space.
There is still something not completely satisfactory with this technique.
Namely, the fact that the c cedilla will still be generated in wrong cases ,
even temporarily. Although the user does not have to correct it by hand,
it can still be annoying to see it appear. This problem can p artially be
solved by using more than a single character as t h e context. For instance, in
French, we do not have any word cont aining the s equence <i r a ç>. Con-
sequent ly, if we add the rule “{irac} + ,
i r a c ,” to the input method
specification, we will get immediately the proper characters in that case.
As we can see, by extending the concept o f key sequence to the concept
of character-key sequence, which should not be very hard to implement,
the current inpu t methods could be considerably improved with respect to
the cancelation problems. However, several issues remain problematic:
There exist cases that cannot be corrected with this method. The next
subsection presents some of them.
Specifying all the possible cases similar to the “irac” e x ample would
be enormous. We cannot afford it, espe cially because the user should
still h ave the possibility to customize his key sequences.
3.2 Dynamic solution: relationship with spell checking
One of the problems that the preceding solution cannot solve is ambiguous-
ness. This means that at t h e time a character-key sequence is encountered,
it is not necessarily possible to decide which action should be taken. For in-
stance, in French, the sequence “L ’ e n i” is u n decidable, because the quot e
can really be an apo strophe, but it could also be a french-prefix sequence
for a word beginning with “L é n i” (there are some). As a consequence, it
is only possible to decide what to do after some more characters are typed
in. In our example, the next character can be sufficient. For ins tance, if it is
an “f”, the ke y sequence necessarily represents an “é”, and if it is a “v”, it
is n ecessarily a real apostrophe. Otherwise, the corresponding word does
not exist in French.
It is important to notice th at when we speak of solving ambiguousness,
what we have to do in terms of implementation is actually to look up into
a dictionary and see if such or such word does exist. This process is actu-
ally highly related to the no tion of spell checking. . . This idea of dynamic
checking can also be applied to the cases (described in the previous subsec-
tion) where the decision could be made immediately. Take again the “i r a
5