微软新一代输入法框架 TSF

虽说是转载的,但是其中,有很多我自己的评论,我会用红色的字标出来,参考的博文有:
TSF架构:
TSF代码实例:
TSF的一个C# 库:
下面内容来自第一篇被引用的文章,TSF架构:
几个关于TSF的术语
TIP(Text Input ), a Textin TSF
,TSF的开发代号,所以微软内部通常称呼TSF框架为
CUAS(),为所有应用程序和控件提供基本的TIP支持
AIMM( Input),和CUAS一起工作
输入法框架

微软新一代输入法框架 TSF

文章插图
先讲一点点历史,提供了两套输入法框架:XP及之前,是IMM (Input),基于纯函数API的 。目前市面上非微软中文输入法基本上都是只实现IMM框架 。
XP开始及以后,提供新的输入框架TSF,是基于COM的 。实际上,到了 Vista,7,所有的应用程序和各种输入控件都是优先使用TSF的实现 。但之所以 Vista,7用户还能使用各种基于IMM的输入法,是因为提供了一个组件来将所有TSF的请求转为IMM的API 。(:难道Win8开始就不提供了吗?!很有可能,因为Win8下很多Imm的函数都不能使用了)
按照微软的说法,TSF会最终取代IMM框架 。而微软拼音基于兼容,功能和性能方面的原因,将这两个框架都实现了 。(:Win8下,只有你们一家还能用Imm的API,很厚道!)
下面主要介绍TSF框架的输入法及与应用程序的交互 。
TSF框架
它的目标是提供一套简单通用并易扩展的框架,用于高级文本输入和自然语言处理 。一个TSF text 能够提供多语言支持和处理:键盘输入(我们通常讲的输入法),手写识别,语言识别等 。
微软新一代输入法框架 TSF

文章插图
TSF的构架图
从上面构架图可以看到,TSF提供一个位于应用和输入法实现的间接层(一个Text /TIP可以是一个输入法,或语音识别,:记住,TIP就是一个输入法提供的一个服务,比如百度输入法提供“语音、手写、键盘”输入,那就是3个Tip,但是一般我们都是用键盘输入,所以可以简单认为Tip是一种输入法 。) 。所以,TSF的优点在于,它是一个设备无关,语言中立,可扩展的系统;同时给用户提供一致的输入体验 。任何TSF-应用程序都能从任何text 接受文字输入,而不用考虑Text 的具体细节 。同时,Text 也不用考虑各种不同应用的差别 。譬如下面的应用场景:
微软新一代输入法框架 TSF

文章插图
上图可以看出,应用程序收到”The boy ate the red apple”这段文字, 但是它不知道这些字是哪个TIP输入的,有可能是” TIP”, 或是” TIP”等 。
微软新一代输入法框架 TSF

文章插图
与应用程序的交互
那么,这个框架是如何工作的?看看下面的组件交互图
在 XP下,默认是CUAS关闭的,其交互如下
微软新一代输入法框架 TSF

文章插图
从上图可见,所有“edit ”(包括)都是直接调用IMM的API,最后调用IMM输入法,而4.1版本后的“ ”(包括等)是直接用TSF实现的输入法)
(:注意,是TSF依赖于Imm)
在 XP下如果打开CUAS,或者在 Vista和 7下,则如下交互:
微软新一代输入法框架 TSF

文章插图
可以看到,IMM32和CUAS中多了一条交互,这意味着如果一个输入法实现了TIP,在 Vista和 7,或CUAS打开的 XP下,应用程序的所有输入由TIP实现完成 。
(:注意,Imm依赖于CUAS了!即可以使用用TSF实现的输入法了,应该就是高级输入)