Topic Two letter context question.

We have two new locations for Keyman technical support:

The Tavultesoft Forums are now read only.


# Two letter context question.   2016-02-05 23:17:37.197
br Julian Griffin OSL
Hi,

   The code below was created to meet two requirements:
    1. To allow for two characters and a symbol key to fire a rule that outputs two character with a Unicode symbol between the two characters.
    &
    2. To match the case of the Left-Hand-Side in the Right-Hand-Side of the rule.
:
"oo" + $TieKey > "o" $Tie1 "o"
"Oo" + $TieKey > "O" $Tie1 "o"
"OO" + $TieKey > "O" $Tie1 "O"
"oO" + $TieKey > "o" $Tie1 "O"
                         
"sh" + $TieKey > "s" $Tie2 "h"
"Sh" + $TieKey > "S" $Tie2 "h"
"SH" + $TieKey > "S" $Tie2 "H"
"sH" + $TieKey > "s" $Tie2 "H"

"th" + $TieKey > "t" $Tie2 "h"
"Th" + $TieKey > "T" $Tie2 "h"
"TH" + $TieKey > "T" $Tie2 "H"
"tH" + $TieKey > "t" $Tie2 "H"

   Although this works, I have 23 blocks like these. So to my question, is there a way to simplify this code? Can this code be placed in an external file which is then included in the project? [Hopefully, making the main code easier to understand read and understand.]

Regards
Julian Griffin
# RE: Two letter context question.   2016-02-06 08:02:34.953
Marc Durdin
Tavultesoft Staff
It is possible to reduce the number of rules with use of stores and the context() statement, for example:

:
store(oo) 'oO'
store(ss) 'sS'
store(tt) 'tT'
store(hh) 'hH'

any(oo) any(oo) + $TieKey > context(1) $Tie1 context(2)
any(ss) any(hh) + $TieKey > context(1) $Tie2 context(2)
any(tt) any(hh) + $TieKey > context(1) $Tie2 context(2)


However, this would probably be the cleanest you could get. Keyman Developer does not currently have a way to import rules from an external file.
# RE: Two letter context question.   2016-02-06 10:32:25.940
br Julian Griffin OSL
Thank you, that's great, it works well. It will shorten the code. But, I fear, at the expence of readability.

   I did explore
:
context(1) $Tie context(2)

   But I could not get it to work, it did not occur to me to split the context and to store Caps and Lowercase in the same Store().

   It seems to me that I am only just scratching the surface of what Keyman can do. I'm looking at Deadkeys and Groups next.

Thank you.
Regards
Julian Griffin