如何使用组有效地控制键控键盘中的规范化?

How do I efficiently control normalisation in a keyman keyboard using groups?

我正在重构和重新设计几个键盘中的代码。键盘使用选项来控制是使用 Unicode 规范化形式 C (NFC) 还是规范化形式 D (NFD)。

我目前如何实现它的一个例子是:

if(nfc = "1") + any(diaeresisKeys) > U+0308 use(nfc_processing)
if(nfc = "0") + any(diaeresisKeys) > U+0308 use(nfd_processing)

我将添加对标记音的支持,这将使需要重定向到另一个组的规则数量成倍增加。

有没有更高效的流量控制机制?

您这样做的方式适用于单一规则。如果你有多个地方想做归一化,你可能会发现移动 if() statement to a separate context-only group 更好,例如:

+ any(diaeresisKey) > U+0308 use(normalise)

group(normalise)

if(nfc = "1") > use(nfc_group)
if(nfc = "0") > use(nfd_group)

这意味着您只在一个地方进行测试,规则数量减半。

为了进一步简化,您可以在 use 语句中使用 match rule which is processed once after any rule in its group is matched. This DRYs

+ any(diaeresisKey) > U+0308

match > use(normalise) 

group(normalise)

if(nfc = "1") > use(nfc_group)
if(nfc = "0") > use(nfd_group)