Keyman developer 10 won't match rules in Odia script


Keyman developer 10 won't match rules in Odia script



I'm making a custom keyboard for Oriya/ Odia script with Keyman developer 10 but it won't do contextual substitutions when all the input is in Odia script. For example


+ [K_K] > U+0B15
+ [K_T] > U+0B24
U+0B15 + U+0B24 > U+0B15 U+0B4D U+0B24
"a" + "b" > U+0B15 U+0B4D U+0B24
U+0B15 + [K_C] > U+0B15 U+0B4D U+0B24



When I test his, I get the desired output when I type 'ab' or 'kc' but not with 'kt'. Any help to explain why line 3 won't work but line 4 does will be appreciated.



I do get this error sometimes when Targets is set to 'any' rather than 'windows'


warning 209A: The rule will never be matched because its key code is never fired.




1 Answer
1



The reason this isn't working is you are trying to match on a Unicode value instead of a keystroke on line 3:


U+0B15 + U+0B24 > U+0B15 U+0B4D U+0B24



Instead of U+0B24, which is a Unicode character, you need to match on the keystroke, for example:


U+0B24


+ [K_K] > U+0B15
+ [K_T] > U+0B24
U+0B15 + [K_T] > U+0B15 U+0B4D U+0B24



As this third rule has a longer context (U+0B15), it takes precedence over the second rule.


U+0B15



An alternate way to solve this issue is to use a post-processing group. In this model, the output from the first group is fed into the context of the second group. Note that the second group does not include a using keys clause.


using keys


group(main) using keys

+ [K_K] > U+0B15
+ [K_T] > U+0B24
match > use(post)

group(post)

U+0B15 U+0B24 > U+0B15 U+0B4D U+0B24





So matching by letters is supported only in basic Latin? I tested that in cyrillic too and it won't work. What I'm trying to achieve is when two consonants are typed I'd like to automatically U+0B4D in between. So you suggest I do it this way? store(consonants) 'bcdef' store(consonant_keys) [K_B] [K_C] [K_D] [K_E] [K_F] any(consonants) any(consonant_keys) > index(consonants,1) U+0B4D index((consonant_keys,2)
– coldbreeze16
2 days ago






@coldbreeze16, The key identifiers are not really basic Latin; as you are matching on a key identified by "a" which is shorthand for [K_A], which is mnemonic for key C01. The code is nearly right, just needs a + delimiter: any(consonants) + any(consonant_keys) > index(consonants,1) U+0B4D index(consonant_keys,2). You can also consider doing post-processing with a secondary group: + any(consonant_keys) > index(consonants, 1) match > use(post) group(post) any(consonant) any(consonant) > context(1) U+0B4D context(2)
– Marc Durdin
2 days ago



+


any(consonants) + any(consonant_keys) > index(consonants,1) U+0B4D index(consonant_keys,2)


+ any(consonant_keys) > index(consonants, 1)


match > use(post)


group(post)


any(consonant) any(consonant) > context(1) U+0B4D context(2)





Thanks a lot! I have been using a program in Win to type my langauge in Windows, recently I migrated to Mac but needed the same layout. This was a life saver. Already accomplished what I needed, I'll have to delve deeper into these post processing groups.
– coldbreeze16
2 days ago






By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Comments

Popular posts from this blog

paramiko-expect timeout is happening after executing the command

Opening a url is failing in Swift

Export result set on Dbeaver to CSV