|
|

楼主 |
发表于 2006-6-12 09:28:22
|
显示全部楼层
原帖由 雪花飞舞 于 2006-6-11 08:43 PM 发表
很多输入法都有unicode 输出。自动变化当然看过。你看过方正9.1 吗?
opentype字体是个开放的技术,它的支持软件比较少。自动变形的处理模块应该是usp10.dll 。
不过还有别的什么东西制约着字体显示。
听说过方正可惜没有机会见。我想他一定是通过扩展编码实现的。
你说的很对,字形自动变换的确在usp10.dll中,我是通过vista的symbols中找到的。
而且字体显示的时候的确有很多东西制约着字体的显示,我想这些制约的东西就是windows
中关于gdi一些技术。
在2k上将usp10替换后虽然在记事本中不能字形自动变换,但是写一个网页,在ie中却可以自动变形。
这说明usp10是起作用的。
还是说说自动变形的实现吧。
当我看到vista的蒙文输入法后,才知道原来文字变形也可以不用编码实现。
我所见过的字形自动变化都是在输入法中,一旦文字确定输出到编辑器就不再变化。
他们的实现方法是每个变化的字形都有一个编码,根据不同的输入组合,输出不同的编码。
这样的输入法我也写过而且在一年前我就公开了源代码,不过我写的需要通过组合按键确
定变形,不是自动变形。
我也想实现微软那样,由于微软的软件继承性做的太好了,导致我不用写程序就能移植蒙文平台。
我一直称微软的蒙文输入部分为蒙文平台,而不是输入法。因为它是在系统中支持蒙文自动变形
而不是只是在输入法中支持蒙文自动变形。而且当你不用输入法,在编辑微软输出的蒙文时字形也会变化。
比如abo(爸爸) 当你在ab之间加一个空格,他会自动变化成 独立的a字母和 bo 字母。如果你在bo之间
再加个空格就会变成独立的a,独立b(自首形), 独立o.
而在其他的输入法输出的蒙文中字形不会变化,会出现 断字的现象。
仔细分析一下各种蒙文输入法中的字体和微软的字体就知道了。非微软的字体中所有变形都有编码。
微软的字体中一个编码的所有变形中只会在第一个字形有编码。这样微软就可以实现只用unicode编码就
能表示了所有蒙文字形,而不用进行编码扩展(编码扩展了就没有标准了,所以就出现了各种蒙文不兼容现象)。
我说说我想实现微软这样的功能,我原打算只是找到vista中自动变形部分代码,然后
在xp/2000上将gdi api GetGlyphIndices hook上,替换成自己函数,判断如果输入
的是unicode的蒙文则输出变形后的字形在字体中位置。GetGlyphIndices这个函数
的功能就是将输入的内码(各种文字的编码)变换成每个编码在字体中的位置,然后其他
的gdi函数用字体中信息将文字画出来。这样不管输入法输入什么,操作系统都会自动
支持蒙文变形。现在不用我做了:)
很多软件(qq,msn)为了用户界面友好或文字显示的更有个性(如图形和文字可以同时显示),在
文字输出部分都是特别制作。所以微软的蒙文字体显示有断的现象。(回答网友tutu)
[ 本帖最后由 ganjike 于 2006-6-12 09:43 AM 编辑 ] |
|