我在 Tkbind.c、TkEvent.c 和 TkEntry.c 中的 tk 源代码中看到,有一组指针,eventPtr、dispPtr、bindPtr 以及更多指向不同 C 结构的指针。
有 eventPtr 存储与按下哪个键有关的信息。然后 bindPtr 从 hashtable 中获取一个适当的 glyph,对应于 eventPtr 中的 keySym,并将结果存储到 patPtr(模式指针)指向的结构中。
我想一个例子会有所帮助。
所以,我按下键“A”。这就是 eventPtr 中的内容。如果我关闭了 CAPS LOCK,那么实际文本将是“a”,因此 bindPtr 从哈希表中选择相应的字形“a”。这个“a”被传递到 patPtr。
如果我想写阿拉伯语,再次按“A”,在 eventPtr 中给出相同的 keySym。从哈希表中,bindPtr 将选择适当的字形“ش”。在阿拉伯语中,由于字母的连接,即使是同一个字母,字形也会有所不同。适当的字形被传递到 patPtr。
然后将其传递给 dispPtr。我知道(或者至少我认为)这些指向结构的指针用于形成一个链表,然后将其移交给系统/平台资源以在小部件上呈现文本。
到目前为止,我是在正确的轨道上还是...?我最终打算使用 fribidi(二进制或如果不是二进制,则使用带有相应头文件的动态链接库)来使 tk 能够处理阿拉伯语。如果 fribidi 不是合适的选择,那么我会去 pango/cairo 或其他地方。
谢谢 !ps 我知道这个问题有点具体,只有 Tcl/Tk 维护人员/开发人员才能回答。我希望这是问这个问题的正确地方!