如何使用组有效地控制键控键盘中的规范化?
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)
我正在重构和重新设计几个键盘中的代码。键盘使用选项来控制是使用 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)