【首先还是要强调一下,是字体决定复杂文字是如何变形的。Windows中,USP10.DLL决定的是变还是不变。】
【USP10决定变不变,字体决定如何变。】
其实汉字字体、英文字体也涉及到变形,也是字体决定的。
汉字的变形包括竖排标点符号的位置变化、方向变化、形态变化(如引号由 “ ” ‘’ 自动变为『』「」),文字的方向变化(半角和全角变化不同),复杂的还包括文字变体的选择(中国大陆字形、台湾字形、香港字形、日本字形……)。再复杂的,竖排时字形的变化。
英文字体涉及字间距、连体、条件变体(古英语有)等。
对于Windows,复杂文字不能变形,和Uniscribe/USP10.DLL可能有关。为什么说可能,应用程序本身也可能有关。
复杂文字变形错误,基本是字体本身的错误。当然,应用程序也可能造成这个问题。【应用程序造成的问题,通常是小范围的。】
也许有人会有疑问,既然字体决定变形,那Uniscribe好像是多余的。我开始也有这样的疑问。虽然现在没找到精确答案,但根据分析,Uniscribe的一个作用是规定可变化范围和方式。这是非常重要的。
比如,拉丁字母和希腊字母连接在一起,不能变化。满文字母和阿拉伯文字母连在一起,不会分别变成字头形和字尾型。满文标点和满文字母连在一起,也不会变化。即便你在字体里规定了上述变化,输出时还是不会变。
非Unicode的蒙古文输入法因不能使用Uniscribe/USP10.DLL的机制,只好由输入法选择输出需要的字符变体,是非Unicode定义字符,通常是生僻汉字或自定义区。