Разработчик Keyman 10 не будет соответствовать правилам в сценарии Odia

Я делаю пользовательскую клавиатуру для сценария Oriya / Odia с помощью Keyman Developer 10, но она не будет выполнять контекстные замены, когда весь ввод осуществляется в сценарии Odia. Например

+ [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

Когда я проверяю его, я получаю желаемый результат, когда набираю «ab» или «kc», но не «kt». Будем признательны за любую помощь, объясняющую, почему строка 3 не работает, а строка 4 работает.

Иногда я получаю эту ошибку, когда для параметра «Цели» установлено значение «любой», а не «окна».

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

person coldbreeze16    schedule 27.06.2018    source источник


Ответы (1)


Причина, по которой это не работает, заключается в том, что вы пытаетесь сопоставить значение Unicode вместо нажатия клавиши в строке 3:

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

Вместо U+0B24, который является символом Unicode, вам нужно соответствовать нажатию клавиши, например:

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

Поскольку это третье правило имеет более длинный контекст (U+0B15), оно имеет приоритет над вторым правилом< /а>.

Альтернативный способ решить эту проблему — использовать группу постобработки. В этой модели выходные данные первой группы подаются в контекст второй группы. Обратите внимание, что вторая группа не включает предложение 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
person Marc Durdin    schedule 27.06.2018
comment
Значит, сопоставление по буквам поддерживается только в базовой латинице? Я проверил это и на кириллице, и это не сработает. Я пытаюсь добиться того, чтобы при вводе двух согласных я хотел бы автоматически использовать U + 0B4D между ними. Так ты предлагаешь мне поступить так? store(согласные) 'bcdef' store(consonant_keys) [K_B] [K_C] [K_D] [K_E] [K_F] any(согласные) any(consonant_keys) › index(consonants,1) U+0B4D index((consonant_keys,2 ) - person coldbreeze16; 29.06.2018
comment
@ coldbreeze16, идентификаторы ключей на самом деле не являются базовой латынью; поскольку вы сопоставляете ключ, обозначенный a, который является сокращением для [K_A], который является мнемоническим для ключа C01. Код почти правильный, просто нужен разделитель +: 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) - person Marc Durdin; 29.06.2018
comment
Большое спасибо! Я использую программу в Win для ввода своего языка в Windows, недавно я перешел на Mac, но мне нужен был такой же макет. Это спасло жизнь. Я уже сделал то, что мне было нужно, мне придется углубиться в эти группы постобработки. - person coldbreeze16; 30.06.2018