xref: /reactos/sdk/include/psdk/msctf.idl (revision c8fbd6d3)
1/*
2 * Copyright 2008 Aric Stewart, CodeWeavers
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 */
18
19#ifndef DO_NO_IMPORTS
20import "oaidl.idl";
21import "comcat.idl";
22import "textstor.idl";
23import "ctfutb.idl";
24#endif
25
26cpp_quote("#define TF_E_ALREADY_EXISTS       MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0506)")
27cpp_quote("#define TF_E_COMPOSITION_REJECTED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0508)")
28cpp_quote("#define TF_E_DISCONNECTED         MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0504)")
29cpp_quote("#define TF_E_EMPTYCONTEXT         MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0509)")
30cpp_quote("#define TF_E_FORMAT               MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x020A)")
31cpp_quote("#define TF_E_INVALIDPOINT         MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0207)")
32cpp_quote("#define TF_E_INVALIDPOS           MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0200)")
33cpp_quote("#define TF_E_INVALIDVIEW          MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0505)")
34cpp_quote("#define TF_E_LOCKED               MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0500)")
35cpp_quote("#define TF_E_NOINTERFACE          MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0204)")
36cpp_quote("#define TF_E_NOLAYOUT             MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0206)")
37cpp_quote("#define TF_E_NOLOCK               MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0201)")
38cpp_quote("#define TF_E_NOOBJECT             MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0202)")
39cpp_quote("#define TF_E_NOPROVIDER           MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0503)")
40cpp_quote("#define TF_E_NOSELECTION          MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0205)")
41cpp_quote("#define TF_E_NOSERVICE            MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0203)")
42cpp_quote("#define TF_E_NOTOWNEDRANGE        MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0502)")
43cpp_quote("#define TF_E_RANGE_NOT_COVERED    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0507)")
44cpp_quote("#define TF_E_READONLY             MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0209)")
45cpp_quote("#define TF_E_STACKFULL            MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0501)")
46cpp_quote("#define TF_E_SYNCHRONOUS          MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0208)")
47cpp_quote("#define TF_S_ASYNC                MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0x0300)")
48
49cpp_quote("EXTERN_C HRESULT WINAPI TF_InitSystem(VOID);")
50cpp_quote("EXTERN_C HRESULT WINAPI TF_UninitSystem(VOID);")
51cpp_quote("EXTERN_C HRESULT WINAPI TF_GetGlobalCompartment(_Out_ ITfCompartmentMgr **ppCompMgr);")
52cpp_quote("EXTERN_C HRESULT WINAPI TF_PostAllThreadMsg(DWORD dwUnknown1, DWORD dwUnknown2);")
53cpp_quote("EXTERN_C HRESULT WINAPI TF_CreateThreadMgr(_Out_ ITfThreadMgr **pptim);")
54cpp_quote("EXTERN_C HRESULT WINAPI TF_GetThreadMgr(_Out_ ITfThreadMgr **pptim);")
55cpp_quote("EXTERN_C HRESULT WINAPI TF_CreateInputProcessorProfiles(_Out_ ITfInputProcessorProfiles **ppipr);")
56cpp_quote("EXTERN_C HRESULT WINAPI TF_CreateLangBarMgr(_Out_ ITfLangBarMgr **pppbm);")
57cpp_quote("EXTERN_C HRESULT WINAPI TF_CreateLangBarItemMgr(_Out_ ITfLangBarItemMgr **pplbim);")
58cpp_quote("EXTERN_C HANDLE  WINAPI TF_CreateCicLoadMutex(_Out_ LPBOOL pfWinLogon);")
59cpp_quote("EXTERN_C HRESULT WINAPI TF_InvalidAssemblyListCache(VOID);")
60cpp_quote("EXTERN_C HRESULT WINAPI TF_InvalidAssemblyListCacheIfExist(VOID);")
61cpp_quote("EXTERN_C HRESULT WINAPI TF_DllDetachInOther(VOID);")
62cpp_quote("EXTERN_C HRESULT WINAPI TF_CreateCategoryMgr(_Out_ ITfCategoryMgr **ppcat);")
63cpp_quote("EXTERN_C HRESULT WINAPI TF_CreateDisplayAttributeMgr(_Out_ ITfDisplayAttributeMgr **ppdam);")
64cpp_quote("EXTERN_C HICON WINAPI TF_GetLangIcon(_In_ LANGID LangID, _Out_ LPWSTR pszText, _In_ INT cchText);")
65cpp_quote("EXTERN_C HRESULT WINAPI TF_InitMlngInfo(VOID);")
66cpp_quote("EXTERN_C INT WINAPI TF_MlngInfoCount(VOID);")
67cpp_quote("EXTERN_C BOOL WINAPI TF_GetMlngHKL(_In_ INT iKL, _Out_ HKL *phKL, _Out_ LPWSTR pszText, _In_ INT cchText);")
68cpp_quote("EXTERN_C INT WINAPI TF_GetMlngIconIndex(_In_ INT iKL);")
69cpp_quote("EXTERN_C HICON WINAPI TF_InatExtractIcon(_In_ INT iKL);")
70cpp_quote("EXTERN_C HRESULT WINAPI TF_RunInputCPL(VOID);")
71cpp_quote("EXTERN_C BOOL WINAPI TF_GetThreadFlags(_In_ DWORD dwThreadId, _Out_ LPDWORD pdwFlags1, _Out_ LPDWORD pdwFlags2, _Out_ LPDWORD pdwFlags3);")
72cpp_quote("EXTERN_C LONG WINAPI TF_CheckThreadInputIdle(_In_ DWORD dwThreadId, _In_ DWORD dwMilliseconds);")
73cpp_quote("EXTERN_C BOOL WINAPI TF_IsInMarshaling(_In_ DWORD dwThreadId);")
74
75cpp_quote("EXTERN_C const GUID GUID_PROP_TEXTOWNER;")
76cpp_quote("EXTERN_C const GUID GUID_PROP_ATTRIBUTE;")
77cpp_quote("EXTERN_C const GUID GUID_PROP_LANGID;")
78cpp_quote("EXTERN_C const GUID GUID_PROP_READING;")
79cpp_quote("EXTERN_C const GUID GUID_PROP_COMPOSING;")
80
81cpp_quote("EXTERN_C const CLSID CLSID_TF_ThreadMgr;")
82cpp_quote("EXTERN_C const CLSID CLSID_TF_InputProcessorProfiles;")
83cpp_quote("EXTERN_C const CLSID CLSID_TF_LangBarMgr;")
84cpp_quote("EXTERN_C const CLSID CLSID_TF_CategoryMgr;")
85cpp_quote("EXTERN_C const CLSID CLSID_TF_DisplayAttributeMgr;")
86
87/* GUIDs for Compartments */
88cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_KEYBOARD_DISABLED;")
89cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_KEYBOARD_OPENCLOSE;")
90cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_HANDWRITING_OPENCLOSE;")
91cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_SPEECH_DISABLED;")
92cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_SPEECH_OPENCLOSE;")
93cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_SPEECH_GLOBALSTATE;")
94cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_PERSISTMENUENABLED;")
95cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_EMPTYCONTEXT;")
96cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_TIPUISTATUS;")
97
98/* GUIDs for Categories */
99cpp_quote("EXTERN_C const GUID GUID_TFCAT_TIP_KEYBOARD;")
100cpp_quote("EXTERN_C const GUID GUID_TFCAT_TIP_SPEECH;")
101cpp_quote("EXTERN_C const GUID GUID_TFCAT_TIP_HANDWRITING;")
102cpp_quote("EXTERN_C const GUID GUID_TFCAT_DISPLAYATTRIBUTEPROVIDER;")
103
104typedef [uuid(7213778c-7bb0-4270-b050-6189ee594e97)]  DWORD TfEditCookie;
105typedef [uuid(de403c21-89fd-4f85-8b87-64584d063fbc)] DWORD TfClientId;
106typedef [uuid(88a9c478-f3ec-4763-8345-cd9250443f8d)] DWORD TfGuidAtom;
107
108cpp_quote("#define TF_MOD_ALT                   0x0001")
109cpp_quote("#define TF_MOD_CONTROL               0x0002")
110cpp_quote("#define TF_MOD_SHIFT                 0x0004")
111cpp_quote("#define TF_MOD_RALT                  0x0008")
112cpp_quote("#define TF_MOD_RCONTROL              0x0010")
113cpp_quote("#define TF_MOD_RSHIFT                0x0020")
114cpp_quote("#define TF_MOD_LALT                  0x0040")
115cpp_quote("#define TF_MOD_LCONTROL              0x0080")
116cpp_quote("#define TF_MOD_LSHIFT                0x0100")
117cpp_quote("#define TF_MOD_ON_KEYUP              0x0200")
118cpp_quote("#define TF_MOD_IGNORE_ALL_MODIFIER   0x0400")
119
120cpp_quote("#define TF_PROFILETYPE_INPUTPROCESSOR  0x0001")
121cpp_quote("#define TF_PROFILETYPE_KEYBOARDLAYOUT  0x0002")
122
123cpp_quote("#define TF_IPSINK_FLAG_ACTIVE 0x0001")
124
125interface ITfDocumentMgr;
126interface ITfContext;
127interface IEnumTfDocumentMgrs;
128interface IEnumTfContexts;
129interface ITfCompartmentMgr;
130interface ITfEditSession;
131interface ITfRange;
132interface ITfProperty;
133interface ITfReadOnlyProperty;
134interface IEnumTfLanguageProfiles;
135interface ITfCompositionView;
136interface ITfKeyEventSink;
137interface ITfPersistentPropertyLoaderACP;
138interface ITfRangeACP;
139interface ITfCleanupContextSink;
140interface ITfTextLayoutSink;
141
142cpp_quote("#if 0")
143typedef [uuid(4f5d560f-5ab5-4dde-8c4d-404592857ab0)] UINT_PTR HKL;
144cpp_quote("#endif")
145
146typedef [uuid(e26d9e1d-691e-4f29-90d7-338dcf1f8cef)] struct TF_PERSISTENT_PROPERTY_HEADER_ACP
147{
148    GUID guidType;
149    LONG ichStart;
150    LONG cch;
151    ULONG cb;
152    DWORD dwPrivate;
153    CLSID clsidTIP;
154} TF_PERSISTENT_PROPERTY_HEADER_ACP;
155
156typedef [uuid(e1b5808d-1e46-4c19-84dc-68c5f5978cc8)] struct TF_LANGUAGEPROFILE
157{
158    CLSID clsid;
159    LANGID langid;
160    GUID catid;
161    BOOL fActive;
162    GUID guidProfile;
163} TF_LANGUAGEPROFILE;
164
165typedef [uuid(77c12f95-b783-450d-879f-1cd2362c6521)] struct TF_PRESERVEDKEY
166{
167    UINT uVKey;
168    UINT uModifiers;
169} TF_PRESERVEDKEY;
170
171typedef [uuid(5a886226-ae9a-489b-b991-2b1e25ee59a9)]  enum { TF_ANCHOR_START = 0, TF_ANCHOR_END = 1 } TfAnchor;
172
173[
174    object,
175    uuid(101d6610-0990-11d3-8df0-00105a2799b5),
176    pointer_default(unique)
177]
178interface ITfFunctionProvider : IUnknown
179{
180    HRESULT GetType(
181        [out] GUID *guid);
182
183    HRESULT GetDescription(
184        [out] BSTR *desc);
185
186    HRESULT GetFunction(
187        [in] REFGUID guid,
188        [in] REFIID riid,
189        [out, iid_is(riid)] IUnknown **func);
190}
191
192[
193    object,
194    uuid(e4b24db0-0990-11d3-8df0-00105a2799b5),
195    pointer_default(unique)
196]
197interface IEnumTfFunctionProviders : IUnknown
198{
199    HRESULT Clone(
200        [out] IEnumTfFunctionProviders **ret);
201
202    HRESULT Next(
203        [in] ULONG count,
204        [out, size_is(count), length_is(*fetched)] ITfFunctionProvider **prov,
205        [out] ULONG *fetched);
206
207    HRESULT Reset();
208
209    HRESULT Skip(
210        [in] ULONG count);
211}
212
213[
214    object,
215    uuid(aa80e801-2021-11d2-93e0-0060b067b86e),
216    pointer_default(unique)
217]
218interface ITfThreadMgr: IUnknown
219{
220    HRESULT Activate(
221        [out] TfClientId *ptid);
222
223    HRESULT Deactivate();
224
225    HRESULT CreateDocumentMgr(
226        [out] ITfDocumentMgr **ppdim);
227
228    HRESULT EnumDocumentMgrs(
229        [out] IEnumTfDocumentMgrs **ppEnum);
230
231    HRESULT GetFocus(
232        [out] ITfDocumentMgr **ppdimFocus);
233
234    HRESULT SetFocus(
235        [in] ITfDocumentMgr *pdimFocus);
236
237    HRESULT AssociateFocus(
238        [in] HWND hwnd,
239        [in, unique] ITfDocumentMgr *pdimNew,
240        [out] ITfDocumentMgr **ppdimPrev);
241
242    HRESULT IsThreadFocus(
243        [out] BOOL *pfThreadFocus);
244
245    HRESULT GetFunctionProvider(
246        [in] REFCLSID clsid,
247        [out] ITfFunctionProvider **ppFuncProv);
248
249    HRESULT EnumFunctionProviders(
250        [out] IEnumTfFunctionProviders **ppEnum);
251
252    HRESULT GetGlobalCompartment(
253        [out] ITfCompartmentMgr **ppCompMgr);
254}
255
256[
257    object,
258    uuid(3e90ade3-7594-4cb0-bb58-69628f5f458c),
259    pointer_default(unique)
260]
261interface ITfThreadMgrEx : ITfThreadMgr
262{
263    HRESULT ActivateEx(
264        [out] TfClientId *id,
265        [in] DWORD flags);
266    HRESULT GetActiveFlags(
267        [out] DWORD *flags);
268}
269
270[
271    object,
272    uuid(d7540241-f9a1-4364-befc-dbcd2c4395b7),
273    pointer_default(unique)
274]
275interface ITfCompositionView : IUnknown
276{
277    HRESULT GetOwnerClsid([out] CLSID *pclsid);
278
279    HRESULT GetRange([out] ITfRange **ppRange);
280}
281
282[
283    object,
284    uuid(aa80e7f4-2021-11d2-93e0-0060b067b86e),
285    pointer_default(unique)
286]
287interface ITfDocumentMgr: IUnknown
288{
289    HRESULT CreateContext(
290        [in] TfClientId tidOwner,
291        [in] DWORD dwFlags,
292        [in, unique] IUnknown *punk,
293        [out] ITfContext **ppic,
294        [out] TfEditCookie *pecTextStore);
295
296    HRESULT Push(
297        [in] ITfContext *pic);
298
299    const DWORD TF_POPF_ALL = 0x0001;
300
301    HRESULT Pop(
302        [in] DWORD dwFlags);
303
304    HRESULT GetTop(
305        [out] ITfContext **ppic);
306
307    HRESULT GetBase(
308        [out] ITfContext **ppic);
309
310    HRESULT EnumContexts(
311        [out] IEnumTfContexts **ppEnum);
312}
313
314[
315    object,
316    uuid(2433bf8e-0f9b-435c-ba2c-180611978c30),
317    pointer_default(unique)
318]
319interface ITfContextView : IUnknown
320{
321    HRESULT GetRangeFromPoint(
322        [in] TfEditCookie cookie,
323        [in] const POINT *pt,
324        [in] DWORD flags,
325        [out] ITfRange **range);
326
327    HRESULT GetTextExt(
328        [in] TfEditCookie cookie,
329        [in] ITfRange *range,
330        [out] RECT *rect,
331        [out] BOOL *clipped);
332
333    HRESULT GetScreenExt(
334        [out] RECT *rect);
335
336    HRESULT GetWnd(
337        [out] HWND *hwnd);
338}
339
340[
341    object,
342    uuid(f0c0f8dd-cf38-44e1-bb0f-68cf0d551c78),
343    pointer_default(unique)
344]
345interface IEnumTfContextViews : IUnknown
346{
347    HRESULT Clone(
348        [out] IEnumTfContextViews **ret);
349
350    HRESULT Next(
351        [in] ULONG count,
352        [out, size_is(count), length_is(*fetched)] ITfContextView **views,
353        [out] ULONG *fetched);
354
355    HRESULT Reset();
356
357    HRESULT Skip(
358        [in] ULONG count);
359}
360
361[
362    object,
363    uuid(19188cb0-aca9-11d2-afc5-00105a2799b5),
364    pointer_default(unique)
365]
366interface IEnumTfProperties : IUnknown
367{
368    HRESULT Clone(
369        [out] IEnumTfProperties **ret);
370
371    HRESULT Next(
372        [in] ULONG count,
373        [out, size_is(count), length_is(*fetched)] ITfProperty **props,
374        [out] ULONG *fetched);
375
376    HRESULT Reset();
377
378    HRESULT Skip(
379        [in] ULONG count);
380}
381
382[
383    object,
384    uuid(463a506d-6992-49d2-9b88-93d55e70bb16),
385    pointer_default(unique)
386]
387interface ITfRangeBackup : IUnknown
388{
389    HRESULT Restore(
390        [in] TfEditCookie cookie,
391        [in] ITfRange *range);
392}
393
394[
395    object,
396    uuid(aa80e901-2021-11d2-93e0-0060b067b86e),
397    pointer_default(unique)
398]
399interface ITextStoreACPServices : IUnknown
400{
401    HRESULT Serialize(
402        [in] ITfProperty *prop,
403        [in] ITfRange *range,
404        [out] TF_PERSISTENT_PROPERTY_HEADER_ACP *header,
405        [in] IStream *stream);
406
407    HRESULT Unserialize(
408        [in] ITfProperty *prop,
409        [in] const TF_PERSISTENT_PROPERTY_HEADER_ACP *header,
410        [in] IStream *stream,
411        [in] ITfPersistentPropertyLoaderACP *loader);
412
413    HRESULT ForceLoadProperty(
414        [in] ITfProperty *prop);
415
416    HRESULT CreateRange(
417        [in] LONG start,
418        [in] LONG end,
419        [out] ITfRangeACP **range);
420}
421
422[
423    object,
424    uuid(aa80e7fd-2021-11d2-93e0-0060b067b86e),
425    pointer_default(unique)
426]
427interface ITfContext : IUnknown
428{
429    const DWORD TF_ES_ASYNCDONTCARE = 0x0;
430    const DWORD TF_ES_SYNC          = 0x1;
431    const DWORD TF_ES_READ          = 0x2;
432    const DWORD TF_ES_READWRITE     = 0x6;
433    const DWORD TF_ES_ASYNC         = 0x8;
434
435    HRESULT RequestEditSession(
436        [in] TfClientId tid,
437        [in] ITfEditSession *pes,
438        [in] DWORD dwFlags,
439        [out] HRESULT *phrSession);
440
441    HRESULT InWriteSession(
442        [in] TfClientId tid,
443        [out] BOOL *pfWriteSession);
444
445    typedef [uuid(1690be9b-d3e9-49f6-8d8b-51b905af4c43)] enum { TF_AE_NONE, TF_AE_START, TF_AE_END } TfActiveSelEnd;
446
447    typedef [uuid(36ae42a4-6989-4bdc-b48a-6137b7bf2e42)] struct TF_SELECTIONSTYLE
448    {
449        TfActiveSelEnd ase;
450        BOOL fInterimChar;
451    } TF_SELECTIONSTYLE;
452
453    typedef [uuid(75eb22f2-b0bf-46a8-8006-975a3b6efcf1)] struct TF_SELECTION
454    {
455        ITfRange *range;
456        TF_SELECTIONSTYLE style;
457    } TF_SELECTION;
458
459    const ULONG TF_DEFAULT_SELECTION =  TS_DEFAULT_SELECTION;
460
461    HRESULT GetSelection(
462        [in] TfEditCookie ec,
463        [in] ULONG ulIndex,
464        [in] ULONG ulCount,
465        [out, size_is(ulCount), length_is(*pcFetched)] TF_SELECTION *pSelection,
466        [out] ULONG *pcFetched);
467
468    HRESULT SetSelection(
469        [in] TfEditCookie ec,
470        [in] ULONG ulCount,
471        [in, size_is(ulCount)] const TF_SELECTION *pSelection);
472
473    HRESULT GetStart(
474        [in] TfEditCookie ec,
475        [out] ITfRange **ppStart);
476
477    HRESULT GetEnd(
478        [in] TfEditCookie ec,
479        [out] ITfRange **ppEnd);
480
481    typedef [uuid(bc7d979a-846a-444d-afef-0a9bfa82b961)] TS_STATUS TF_STATUS;
482    const DWORD TF_SD_READONLY    = TS_SD_READONLY;
483    const DWORD TF_SD_LOADING     = TS_SD_LOADING;
484    const DWORD TF_SS_DISJOINTSEL = TS_SS_DISJOINTSEL;
485    const DWORD TF_SS_REGIONS     = TS_SS_REGIONS;
486    const DWORD TF_SS_TRANSITORY  = TS_SS_TRANSITORY;
487
488
489    HRESULT GetActiveView(
490        [out] ITfContextView **ppView);
491
492    HRESULT EnumViews(
493        [out] IEnumTfContextViews **ppEnum);
494
495    HRESULT GetStatus(
496        [out] TF_STATUS *pdcs);
497
498    HRESULT GetProperty(
499        [in] REFGUID guidProp,
500        [out] ITfProperty **ppProp);
501
502    HRESULT GetAppProperty(
503        [in] REFGUID guidProp,
504        [out] ITfReadOnlyProperty **ppProp);
505
506    HRESULT TrackProperties(
507        [in, size_is(cProp)] const GUID **prgProp,
508        [in] ULONG cProp,
509        [in, size_is(cAppProp)] const GUID **prgAppProp,
510        [in] ULONG cAppProp,
511        [out] ITfReadOnlyProperty **ppProperty);
512
513    HRESULT EnumProperties(
514        [out] IEnumTfProperties **ppEnum);
515
516    HRESULT GetDocumentMgr(
517        [out] ITfDocumentMgr **ppDm);
518
519    HRESULT CreateRangeBackup(
520        [in] TfEditCookie ec,
521        [in] ITfRange *pRange,
522        [out] ITfRangeBackup **ppBackup);
523}
524
525const DWORD TF_INVALID_COOKIE = 0xffffffff;
526
527[
528  object,
529  uuid(4ea48a35-60ae-446f-8fd6-e6a8d82459f7),
530  pointer_default(unique)
531]
532interface ITfSource : IUnknown
533{
534    HRESULT AdviseSink(
535        [in] REFIID riid,
536        [in, iid_is(riid)] IUnknown *punk,
537        [out] DWORD *pdwCookie);
538
539    HRESULT UnadviseSink(
540        [in] DWORD dwCookie);
541}
542
543[
544  object,
545  local,
546  uuid(1F02B6C5-7842-4EE6-8A0B-9A24183A95CA),
547  pointer_default(unique)
548]
549interface ITfInputProcessorProfiles : IUnknown
550{
551    HRESULT Register(
552        [in] REFCLSID rclsid);
553
554    HRESULT Unregister(
555        [in] REFCLSID rclsid);
556
557    HRESULT AddLanguageProfile(
558        [in] REFCLSID rclsid,
559        [in] LANGID langid,
560        [in] REFGUID guidProfile,
561        [in, size_is(cchDesc)] const WCHAR *pchDesc,
562        [in] ULONG cchDesc,
563        [in, size_is(cchFile)] const WCHAR *pchIconFile,
564        [in] ULONG cchFile,
565        [in] ULONG uIconIndex);
566
567    HRESULT RemoveLanguageProfile(
568        [in] REFCLSID rclsid,
569        [in] LANGID langid,
570        [in] REFGUID guidProfile);
571
572    HRESULT EnumInputProcessorInfo(
573        [out] IEnumGUID **ppEnum);
574
575    HRESULT GetDefaultLanguageProfile(
576        [in] LANGID langid,
577        [in] REFGUID catid,
578        [out] CLSID *pclsid,
579        [out] GUID *pguidProfile);
580
581    HRESULT SetDefaultLanguageProfile(
582        [in] LANGID langid,
583        [in] REFCLSID rclsid,
584        [in] REFGUID guidProfiles);
585
586    HRESULT ActivateLanguageProfile(
587        [in] REFCLSID rclsid,
588        [in] LANGID langid,
589        [in] REFGUID guidProfiles);
590
591    HRESULT GetActiveLanguageProfile(
592        [in] REFCLSID rclsid,
593        [out] LANGID *plangid,
594        [out] GUID *pguidProfile);
595
596    HRESULT GetLanguageProfileDescription(
597        [in] REFCLSID rclsid,
598        [in] LANGID langid,
599        [in] REFGUID guidProfile,
600        [out] BSTR *pbstrProfile);
601
602    HRESULT GetCurrentLanguage(
603        [out] LANGID *plangid);
604
605    HRESULT ChangeCurrentLanguage(
606        [in] LANGID langid);
607
608    HRESULT GetLanguageList(
609        [out] LANGID **ppLangId,
610        [out] ULONG *pulCount);
611
612    HRESULT EnumLanguageProfiles(
613        [in] LANGID langid,
614        [out] IEnumTfLanguageProfiles **ppEnum);
615
616    HRESULT EnableLanguageProfile(
617        [in] REFCLSID rclsid,
618        [in] LANGID langid,
619        [in] REFGUID guidProfile,
620        [in] BOOL fEnable);
621
622    HRESULT IsEnabledLanguageProfile(
623        [in] REFCLSID rclsid,
624        [in] LANGID langid,
625        [in] REFGUID guidProfile,
626        [out] BOOL *pfEnable);
627
628    HRESULT EnableLanguageProfileByDefault(
629        [in] REFCLSID rclsid,
630        [in] LANGID langid,
631        [in] REFGUID guidProfile,
632        [in] BOOL fEnable);
633
634    HRESULT SubstituteKeyboardLayout(
635        [in] REFCLSID rclsid,
636        [in] LANGID langid,
637        [in] REFGUID guidProfile,
638        [in] HKL hKL);
639}
640
641typedef [uuid(44d2825a-10e5-43b2-877f-6cb2f43b7e7e)]
642struct TF_INPUTPROCESSORPROFILE {
643    DWORD dwProfileType;
644    LANGID langid;
645    CLSID clsid;
646    GUID guidProfile;
647    GUID catid;
648    HKL hklSubstitute;
649    DWORD dwCaps;
650    HKL hkl;
651    DWORD dwFlags;
652} TF_INPUTPROCESSORPROFILE;
653
654[
655    object,
656    uuid(71c6e74d-0f28-11d8-a82a-00065b84435c),
657    pointer_default(unique)
658]
659interface IEnumTfInputProcessorProfiles : IUnknown
660{
661    HRESULT Clone(
662        [out] IEnumTfInputProcessorProfiles **ppEnum);
663
664    HRESULT Next(
665        [in] ULONG ulCount,
666        [out, size_is(ulCount), length_is(*pcFetch)] TF_INPUTPROCESSORPROFILE *pProfile,
667        [out] ULONG *pcFetch);
668
669    HRESULT Reset();
670
671    HRESULT Skip(
672        [in] ULONG ulCount);
673}
674
675[
676    object,
677    uuid(71c6e74c-0f28-11d8-a82a-00065b84435c),
678    pointer_default(unique)
679]
680interface ITfInputProcessorProfileMgr : IUnknown
681{
682    HRESULT ActivateProfile(
683        [in] DWORD dwProfileType,
684        [in] LANGID langid,
685        [in] REFCLSID clsid,
686        [in] REFGUID guidProfile,
687        [in] HKL hkl,
688        [in] DWORD dwFlags);
689
690    HRESULT DeactivateProfile(
691        [in] DWORD dwProfileType,
692        [in] LANGID langid,
693        [in] REFCLSID clsid,
694        [in] REFGUID guidProfile,
695        [in] HKL hkl,
696        [in] DWORD dwFlags);
697
698    HRESULT GetProfile(
699        [in] DWORD dwProfileType,
700        [in] LANGID langid,
701        [in] REFCLSID clsid,
702        [in] REFGUID guidProfile,
703        [in] HKL hkl,
704        [out] TF_INPUTPROCESSORPROFILE *pProfile);
705
706
707    HRESULT EnumProfiles(
708        [in] LANGID langid,
709        [out] IEnumTfInputProcessorProfiles **ppEnum);
710
711    HRESULT ReleaseInputProcessor(
712        [in] REFCLSID rclsid,
713        [in] DWORD dwFlags);
714
715    HRESULT RegisterProfile(
716        [in] REFCLSID rclsid,
717        [in] LANGID langid,
718        [in] REFGUID guidProfile,
719        [in, size_is(cchDesc)] const WCHAR *pchDesc,
720        [in] ULONG cchDesc,
721        [in, size_is(cchFile)] const WCHAR *pchIconFile,
722        [in] ULONG cchFile,
723        [in] ULONG uIconIndex,
724        [in] HKL hklsubstitute,
725        [in] DWORD dwPreferredLayout,
726        [in] BOOL bEnabledByDefault,
727        [in] DWORD dwFlags);
728
729    HRESULT UnregisterProfile(
730        [in] REFCLSID rclsid,
731        [in] LANGID langid,
732        [in] REFGUID guidProfile,
733        [in] DWORD dwFlags);
734
735    HRESULT GetActiveProfile(
736        [in] REFGUID catid,
737        [out] TF_INPUTPROCESSORPROFILE *pProfile);
738}
739
740typedef [uuid(c4cc07f1-80cc-4a7b-bc54-98512782cbe3)]
741enum {
742    TF_LS_NONE      = 0,
743    TF_LS_SOLID     = 1,
744    TF_LS_DOT       = 2,
745    TF_LS_DASH      = 3,
746    TF_LS_SQUIGGLE  = 4
747} TF_DA_LINESTYLE;
748
749typedef [uuid(d9b92e21-084a-401b-9c64-1e6dad91a1ab)]
750enum {
751    TF_CT_NONE      = 0,
752    TF_CT_SYSCOLOR  = 1,
753    TF_CT_COLORREF  = 2
754} TF_DA_COLORTYPE;
755
756typedef [uuid(90d0cb5e-6520-4a0f-b47c-c39bd955f0d6)]
757struct TF_DA_COLOR {
758    TF_DA_COLORTYPE type;
759    [switch_type(TF_DA_COLORTYPE), switch_is(type)]
760    union {
761        [case(TF_CT_SYSCOLOR)] int nIndex;
762        [case(TF_CT_COLORREF)] COLORREF cr;
763    };
764} TF_DA_COLOR;
765
766typedef [uuid(33d2fe4b-6c24-4f67-8d75-3bc1819e4126)]
767enum {
768    TF_ATTR_INPUT                = 0,
769    TF_ATTR_TARGET_CONVERTED     = 1,
770    TF_ATTR_CONVERTED            = 2,
771    TF_ATTR_TARGET_NOTCONVERTED  = 3,
772    TF_ATTR_INPUT_ERROR          = 4,
773    TF_ATTR_FIXEDCONVERTED       = 5,
774    TF_ATTR_OTHER                = -1
775} TF_DA_ATTR_INFO;
776
777typedef [uuid(1bf1c305-419b-4182-a4d2-9bfadc3f021f)]
778struct TF_DISPLAYATTRIBUTE {
779    TF_DA_COLOR      crText;
780    TF_DA_COLOR      crBk;
781    TF_DA_LINESTYLE  lsStyle;
782    BOOL             fBoldLine;
783    TF_DA_COLOR      crLine;
784    TF_DA_ATTR_INFO  bAttr;
785} TF_DISPLAYATTRIBUTE;
786
787[
788    object,
789    uuid(70528852-2f26-4aea-8c96-215150578932),
790    pointer_default(unique)
791]
792interface ITfDisplayAttributeInfo : IUnknown
793{
794    HRESULT GetGUID([out] GUID *pguid);
795
796    HRESULT GetDescription([out] BSTR *pbstrDesc);
797
798    HRESULT GetAttributeInfo([out] TF_DISPLAYATTRIBUTE *pda);
799
800    HRESULT SetAttributeInfo([in] const TF_DISPLAYATTRIBUTE *pda);
801
802    HRESULT Reset();
803}
804
805[
806    object,
807    uuid(7cef04d7-cb75-4e80-a7ab-5f5bc7d332de),
808    pointer_default(unique)
809]
810interface IEnumTfDisplayAttributeInfo : IUnknown
811{
812    HRESULT Clone([out] IEnumTfDisplayAttributeInfo **ppEnum);
813
814    HRESULT Next(
815            [in] ULONG ulCount,
816            [out, size_is(ulCount), length_is(*pcFetched)] ITfDisplayAttributeInfo **rgInfo,
817            [out] ULONG *pcFetched);
818
819    HRESULT Reset();
820
821    HRESULT Skip([in] ULONG ulCount);
822}
823
824[
825    object,
826    local,
827    uuid(8ded7393-5db1-475c-9e71-a39111b0ff67),
828    pointer_default(unique)
829]
830interface ITfDisplayAttributeMgr : IUnknown
831{
832    HRESULT OnUpdateInfo();
833
834    HRESULT EnumDisplayAttributeInfo([out] IEnumTfDisplayAttributeInfo **ppEnum);
835
836    HRESULT GetDisplayAttributeInfo(
837            [in] REFGUID guid,
838            [out] ITfDisplayAttributeInfo **ppInfo,
839            [out] CLSID *pclsidOwner);
840
841}
842
843[
844  object,
845  local,
846  uuid(c3acefb5-f69d-4905-938f-fcadcf4be830),
847  pointer_default(unique)
848]
849interface ITfCategoryMgr : IUnknown
850{
851    HRESULT RegisterCategory([in] REFCLSID rclsid,
852                             [in] REFGUID rcatid,
853                             [in] REFGUID rguid);
854
855    HRESULT UnregisterCategory([in] REFCLSID rclsid,
856                               [in] REFGUID rcatid,
857                               [in] REFGUID rguid);
858
859    HRESULT EnumCategoriesInItem([in] REFGUID rguid,
860                                 [out] IEnumGUID **ppEnum);
861
862    HRESULT EnumItemsInCategory([in] REFGUID rcatid,
863                                [out] IEnumGUID **ppEnum);
864
865    HRESULT FindClosestCategory([in] REFGUID rguid,
866                                [out] GUID *pcatid,
867                                [in, size_is(ulCount)] const GUID **ppcatidList,
868                                [in] ULONG ulCount);
869
870    HRESULT RegisterGUIDDescription([in] REFCLSID rclsid,
871                                    [in] REFGUID rguid,
872                                    [in, size_is(cch)] const WCHAR *pchDesc,
873                                    [in] ULONG cch);
874
875    HRESULT UnregisterGUIDDescription([in] REFCLSID rclsid,
876                                      [in] REFGUID rguid);
877
878    HRESULT GetGUIDDescription([in] REFGUID rguid,
879                               [out] BSTR *pbstrDesc);
880
881    HRESULT RegisterGUIDDWORD([in] REFCLSID rclsid,
882                              [in] REFGUID rguid,
883                              [in] DWORD dw);
884
885    HRESULT UnregisterGUIDDWORD([in] REFCLSID rclsid,
886                                [in] REFGUID rguid);
887
888    HRESULT GetGUIDDWORD([in] REFGUID rguid,
889                         [out] DWORD *pdw);
890
891    HRESULT RegisterGUID([in] REFGUID rguid,
892                         [out] TfGuidAtom *pguidatom);
893
894    HRESULT GetGUID([in] TfGuidAtom guidatom,
895                    [out] GUID *pguid);
896
897    HRESULT IsEqualTfGuidAtom([in] TfGuidAtom guidatom,
898                              [in] REFGUID rguid,
899                              [out] BOOL *pfEqual);
900}
901
902[
903    object,
904    uuid(f99d3f40-8e32-11d2-bf46-00105a2799b5),
905    pointer_default(unique)
906]
907interface IEnumTfRanges : IUnknown
908{
909    HRESULT Clone([out] IEnumTfRanges **ppEnum);
910
911    HRESULT Next(
912            [in] ULONG ulCount,
913            [out, size_is(ulCount), length_is(*pcFetched)] ITfRange **ppRange,
914            [out] ULONG *pcFetched);
915
916    HRESULT Reset();
917
918    HRESULT Skip(ULONG ulCount);
919}
920
921[
922    object,
923    uuid(42d4d099-7c1a-4a89-b836-6c6f22160df0),
924    pointer_default(unique)
925]
926interface ITfEditRecord : IUnknown
927{
928    const DWORD TF_GTP_INCL_TEXT = 0x1;
929
930    HRESULT GetSelectionStatus(
931        [out] BOOL *changed);
932
933    HRESULT GetTextAndPropertyUpdates(
934        [in] DWORD flags,
935        [in, size_is(count)] const GUID **props,
936        [in] ULONG count,
937        [out] IEnumTfRanges **ret);
938}
939
940[
941  object,
942  uuid(8127d409-ccd3-4683-967a-b43d5b482bf7),
943  pointer_default(unique)
944]
945interface ITfTextEditSink : IUnknown
946{
947    HRESULT OnEndEdit(
948        [in] ITfContext *pic,
949        [in] TfEditCookie ecReadOnly,
950        [in] ITfEditRecord *pEditRecord);
951}
952
953[
954    object,
955    uuid(5F20AA40-B57A-4F34-96AB-3576F377CC79),
956    pointer_default(unique)
957]
958interface ITfContextOwnerCompositionSink : IUnknown
959{
960    HRESULT OnStartComposition(
961        [in] ITfCompositionView *pComposition,
962        [out] BOOL *pfOk);
963
964    HRESULT OnUpdateComposition(
965        [in] ITfCompositionView *pComposition,
966        [in] ITfRange *pRangeNew);
967
968    HRESULT OnEndComposition(
969        [in] ITfCompositionView *pComposition);
970}
971
972[
973    object,
974    uuid(b246cb75-a93e-4652-bf8c-b3fe0cfd7e57),
975    pointer_default(unique)
976]
977interface ITfActiveLanguageProfileNotifySink : IUnknown
978{
979    HRESULT OnActivated(
980        [in] REFCLSID clsid,
981        [in] REFGUID guidProfile,
982        [in] BOOL fActivated);
983}
984
985[
986  object,
987  uuid(3d61bf11-ac5f-42c8-a4cb-931bcc28c744),
988  pointer_default(unique)
989]
990interface IEnumTfLanguageProfiles : IUnknown
991{
992    HRESULT Clone(
993        [out] IEnumTfLanguageProfiles **ppEnum);
994
995    HRESULT Next(
996        [in] ULONG ulCount,
997        [out, size_is(ulCount), length_is(*pcFetch)] TF_LANGUAGEPROFILE *pProfile,
998        [out] ULONG *pcFetch);
999
1000    HRESULT Reset();
1001
1002    HRESULT Skip(
1003        [in] ULONG ulCount);
1004}
1005
1006[
1007  object,
1008  local,
1009  uuid(aa80e7f7-2021-11d2-93e0-0060b067b86e),
1010  pointer_default(unique)
1011]
1012interface ITfTextInputProcessor : IUnknown
1013{
1014    HRESULT Activate(
1015        [in] ITfThreadMgr *ptim,
1016        [in] TfClientId tid);
1017
1018    HRESULT Deactivate();
1019}
1020
1021[
1022  object,
1023  uuid(aa80e80e-2021-11d2-93e0-0060b067b86e),
1024  pointer_default(unique)
1025]
1026interface ITfThreadMgrEventSink : IUnknown
1027{
1028    HRESULT OnInitDocumentMgr(
1029        [in] ITfDocumentMgr *pdim);
1030
1031    HRESULT OnUninitDocumentMgr(
1032        [in] ITfDocumentMgr *pdim);
1033
1034    HRESULT OnSetFocus(
1035        [in] ITfDocumentMgr *pdimFocus,
1036        [in] ITfDocumentMgr *pdimPrevFocus);
1037
1038    HRESULT OnPushContext(
1039        [in] ITfContext *pic);
1040
1041    HRESULT OnPopContext(
1042        [in] ITfContext *pic);
1043}
1044
1045[
1046  object,
1047  local,
1048  uuid(aa80e7f0-2021-11d2-93e0-0060b067b86e),
1049  pointer_default(unique)
1050]
1051interface ITfKeystrokeMgr : IUnknown
1052{
1053    HRESULT AdviseKeyEventSink(
1054        [in] TfClientId tid,
1055        [in] ITfKeyEventSink *pSink,
1056        [in] BOOL fForeground);
1057
1058    HRESULT UnadviseKeyEventSink(
1059        [in] TfClientId tid);
1060
1061    HRESULT GetForeground(
1062        [out] CLSID *pclsid);
1063
1064    HRESULT TestKeyDown(
1065        [in] WPARAM wParam,
1066        [in] LPARAM lParam,
1067        [out] BOOL *pfEaten);
1068
1069    HRESULT TestKeyUp(
1070        [in] WPARAM wParam,
1071        [in] LPARAM lParam,
1072        [out] BOOL *pfEaten);
1073
1074    HRESULT KeyDown(
1075        [in] WPARAM wParam,
1076        [in] LPARAM lParam,
1077        [out] BOOL *pfEaten);
1078
1079    HRESULT KeyUp(
1080        [in] WPARAM wParam,
1081        [in] LPARAM lParam,
1082        [out] BOOL *pfEaten);
1083
1084    HRESULT GetPreservedKey(
1085        [in] ITfContext *pic,
1086        [in] const TF_PRESERVEDKEY *pprekey,
1087        [out] GUID *pguid);
1088
1089    HRESULT IsPreservedKey(
1090        [in] REFGUID rguid,
1091        [in] const TF_PRESERVEDKEY *pprekey,
1092        [out] BOOL *pfRegistered);
1093
1094    HRESULT PreserveKey(
1095        [in] TfClientId tid,
1096        [in] REFGUID rguid,
1097        [in] const TF_PRESERVEDKEY *prekey,
1098        [in, size_is(cchDesc)] const WCHAR *pchDesc,
1099        [in] ULONG cchDesc);
1100
1101    HRESULT UnpreserveKey(
1102        [in] REFGUID rguid,
1103        [in] const TF_PRESERVEDKEY *pprekey);
1104
1105    HRESULT SetPreservedKeyDescription(
1106        [in] REFGUID rguid,
1107        [in, size_is(cchDesc)] const WCHAR *pchDesc,
1108        [in] ULONG cchDesc);
1109
1110    HRESULT GetPreservedKeyDescription(
1111        [in] REFGUID rguid,
1112        [out] BSTR *pbstrDesc);
1113
1114    HRESULT SimulatePreservedKey(
1115        [in] ITfContext *pic,
1116        [in] REFGUID rguid,
1117        [out] BOOL *pfEaten);
1118}
1119
1120[
1121  object,
1122  local,
1123  uuid(aa80e7f5-2021-11d2-93e0-0060b067b86e),
1124  pointer_default(unique)
1125]
1126interface ITfKeyEventSink : IUnknown
1127{
1128    HRESULT OnSetFocus(
1129        [in] BOOL fForeground);
1130
1131    HRESULT OnTestKeyDown(
1132        [in] ITfContext *pic,
1133        [in] WPARAM wParam,
1134        [in] LPARAM lParam,
1135        [out] BOOL *pfEaten);
1136
1137    HRESULT OnTestKeyUp(
1138        [in] ITfContext *pic,
1139        [in] WPARAM wParam,
1140        [in] LPARAM lParam,
1141        [out] BOOL *pfEaten);
1142
1143    HRESULT OnKeyDown(
1144        [in] ITfContext *pic,
1145        [in] WPARAM wParam,
1146        [in] LPARAM lParam,
1147        [out] BOOL *pfEaten);
1148
1149    HRESULT OnKeyUp(
1150        [in] ITfContext *pic,
1151        [in] WPARAM wParam,
1152        [in] LPARAM lParam,
1153        [out] BOOL *pfEaten);
1154
1155    HRESULT OnPreservedKey(
1156        [in] ITfContext *pic,
1157        [in] REFGUID rguid,
1158        [out] BOOL *pfEaten);
1159}
1160
1161[
1162  object,
1163  local,
1164  uuid(1cd4c13b-1c36-4191-a70a-7f3e611f367d),
1165  pointer_default(unique)
1166]
1167interface ITfKeyTraceEventSink : IUnknown
1168{
1169    HRESULT OnKeyTraceDown(
1170        [in] WPARAM wParam,
1171        [in] LPARAM lParam);
1172
1173    HRESULT OnKeyTraceUp(
1174        [in] WPARAM wParam,
1175        [in] LPARAM lParam);
1176}
1177
1178[
1179  object,
1180  local,
1181  uuid(ea1ea136-19df-11d7-a6d2-00065b84435c),
1182  pointer_default(unique)
1183]
1184interface ITfUIElementSink : IUnknown
1185{
1186    HRESULT BeginUIElement(
1187        [in] DWORD id,
1188        [in, out] BOOL *show);
1189
1190    HRESULT UpdateUIElement(
1191        [in] DWORD id);
1192
1193    HRESULT EndUIElement(
1194        [in] DWORD id);
1195}
1196
1197[
1198  object,
1199  local,
1200  uuid(8f1b8ad8-0b6b-4874-90c5-bd76011e8f7c),
1201  pointer_default(unique)
1202]
1203interface ITfMessagePump : IUnknown
1204{
1205    HRESULT PeekMessageA(
1206        [out] LPMSG pMsg,
1207        [in] HWND hwnd,
1208        [in] UINT wMsgFilterMin,
1209        [in] UINT wMsgFilterMax,
1210        [in] UINT wRemoveMsg,
1211        [out] BOOL *pfResult);
1212
1213    HRESULT GetMessageA(
1214        [out] LPMSG pMsg,
1215        [in] HWND hwnd,
1216        [in] UINT wMsgFilterMin,
1217        [in] UINT wMsgFilterMax,
1218        [out] BOOL *pfResult);
1219
1220    HRESULT PeekMessageW(
1221        [out] LPMSG pMsg,
1222        [in] HWND hwnd,
1223        [in] UINT wMsgFilterMin,
1224        [in] UINT wMsgFilterMax,
1225        [in] UINT wRemoveMsg,
1226        [out] BOOL *pfResult);
1227
1228    HRESULT GetMessageW(
1229        [out] LPMSG pMsg,
1230        [in] HWND hwnd,
1231        [in] UINT wMsgFilterMin,
1232        [in] UINT wMsgFilterMax,
1233        [out] BOOL *pfResult);
1234}
1235
1236[
1237  object,
1238  local,
1239  uuid(d60a7b49-1b9f-4be2-b702-47e9dc05dec3),
1240  pointer_default(unique)
1241]
1242interface ITfClientId : IUnknown
1243{
1244    HRESULT GetClientId(
1245        [in] REFCLSID rclsid,
1246        [out] TfClientId *ptid);
1247}
1248
1249[
1250  object,
1251  uuid(43c9fe15-f494-4c17-9de2-b8a4ac350aa8),
1252  pointer_default(unique)
1253]
1254interface ITfLanguageProfileNotifySink : IUnknown
1255{
1256    HRESULT OnLanguageChange(
1257        [in] LANGID langid,
1258        [out] BOOL *pfAccept);
1259
1260    HRESULT OnLanguageChanged();
1261}
1262
1263[
1264  object,
1265  uuid(aa80e803-2021-11d2-93e0-0060b067b86e),
1266  pointer_default(unique)
1267]
1268interface ITfEditSession : IUnknown
1269{
1270    HRESULT DoEditSession(
1271        [in] TfEditCookie ec);
1272}
1273
1274[
1275  object,
1276  uuid(aa80e7ff-2021-11d2-93e0-0060b067b86e),
1277  pointer_default(unique)
1278]
1279interface ITfRange : IUnknown
1280{
1281    const WCHAR TF_CHAR_EMBEDDED     = TS_CHAR_EMBEDDED;
1282
1283    typedef [uuid(cf610f06-2882-46f6-abe5-298568b664c4)] enum { TF_GRAVITY_BACKWARD = 0, TF_GRAVITY_FORWARD = 1 } TfGravity;
1284
1285    typedef [uuid(1e512533-bbdc-4530-9a8e-a1dc0af67468)] enum { TF_SD_BACKWARD = 0, TF_SD_FORWARD = 1 } TfShiftDir;
1286
1287    const DWORD TF_HF_OBJECT         = 1;
1288    const DWORD TF_TF_MOVESTART      = 1;
1289    const DWORD TF_TF_IGNOREEND      = 2;
1290    const DWORD TF_ST_CORRECTION     = 1;
1291    const DWORD TF_IE_CORRECTION     = 1;
1292
1293    typedef [uuid(49930d51-7d93-448c-a48c-fea5dac192b1)] struct  TF_HALTCOND
1294    {
1295        ITfRange *pHaltRange;
1296        TfAnchor aHaltPos;
1297        DWORD dwFlags;
1298    } TF_HALTCOND;
1299
1300    HRESULT GetText(
1301        [in] TfEditCookie ec,
1302        [in] DWORD dwFlags,
1303        [out, size_is(cchMax), length_is(*pcch)] WCHAR *pchText,
1304        [in] ULONG cchMax,
1305        [out] ULONG *pcch);
1306
1307    HRESULT SetText(
1308        [in] TfEditCookie ec,
1309        [in] DWORD dwFlags,
1310        [in, size_is(cch), unique] const WCHAR *pchText,
1311        [in] LONG cch);
1312
1313    HRESULT GetFormattedText(
1314        [in] TfEditCookie ec,
1315        [out] IDataObject **ppDataObject);
1316
1317    HRESULT GetEmbedded(
1318        [in] TfEditCookie ec,
1319        [in] REFGUID rguidService,
1320        [in] REFIID riid,
1321        [out, iid_is(riid)] IUnknown **ppunk);
1322
1323    HRESULT InsertEmbedded(
1324        [in] TfEditCookie ec,
1325        [in] DWORD dwFlags,
1326        [in] IDataObject *pDataObject);
1327
1328    HRESULT ShiftStart(
1329        [in] TfEditCookie ec,
1330        [in] LONG cchReq,
1331        [out] LONG *pcch,
1332        [in, unique] const TF_HALTCOND *pHalt);
1333
1334    HRESULT ShiftEnd(
1335        [in] TfEditCookie ec,
1336        [in] LONG cchReq,
1337        [out] LONG *pcch,
1338        [in, unique] const TF_HALTCOND *pHalt);
1339
1340    HRESULT ShiftStartToRange(
1341        [in] TfEditCookie ec,
1342        [in] ITfRange *pRange,
1343        [in] TfAnchor aPos);
1344
1345    HRESULT ShiftEndToRange(
1346        [in] TfEditCookie ec,
1347        [in] ITfRange *pRange,
1348        [in] TfAnchor aPos);
1349
1350    HRESULT ShiftStartRegion(
1351        [in] TfEditCookie ec,
1352        [in] TfShiftDir dir,
1353        [out] BOOL *pfNoRegion);
1354
1355    HRESULT ShiftEndRegion(
1356        [in] TfEditCookie ec,
1357        [in] TfShiftDir dir,
1358        [out] BOOL *pfNoRegion);
1359
1360    HRESULT IsEmpty(
1361        [in] TfEditCookie ec,
1362        [out] BOOL *pfEmpty);
1363
1364    HRESULT Collapse(
1365        [in] TfEditCookie ec,
1366        [in] TfAnchor aPos);
1367
1368    HRESULT IsEqualStart(
1369        [in] TfEditCookie ec,
1370        [in] ITfRange *pWith,
1371        [in] TfAnchor aPos,
1372        [out] BOOL *pfEqual);
1373
1374    HRESULT IsEqualEnd(
1375        [in] TfEditCookie ec,
1376        [in] ITfRange *pWith,
1377        [in] TfAnchor aPos,
1378        [out] BOOL *pfEqual);
1379
1380    HRESULT CompareStart(
1381        [in] TfEditCookie ec,
1382        [in] ITfRange *pWith,
1383        [in] TfAnchor aPos,
1384        [out] LONG *plResult);
1385
1386    HRESULT CompareEnd(
1387        [in] TfEditCookie ec,
1388        [in] ITfRange *pWith,
1389        [in] TfAnchor aPos,
1390        [out] LONG *plResult);
1391
1392    HRESULT AdjustForInsert(
1393        [in] TfEditCookie ec,
1394        [in] ULONG cchInsert,
1395        [out] BOOL *pfInsertOk);
1396
1397    HRESULT GetGravity(
1398        [out] TfGravity *pgStart,
1399        [out] TfGravity *pgEnd);
1400
1401    HRESULT SetGravity(
1402        [in] TfEditCookie ec,
1403        [in] TfGravity gStart,
1404        [in] TfGravity gEnd);
1405
1406    HRESULT Clone(
1407        [out] ITfRange **ppClone);
1408
1409    HRESULT GetContext(
1410        [out] ITfContext **ppContext);
1411}
1412
1413[
1414    object,
1415    uuid(057a6296-029b-4154-b79a-0d461d4ea94c),
1416    pointer_default(unique)
1417]
1418interface ITfRangeACP : ITfRange
1419{
1420    HRESULT GetExtent([out] LONG *pacpAnchor,
1421                      [out] LONG *pcch);
1422
1423    HRESULT SetExtent([in] LONG acpAnchor,
1424                      [in] LONG cch);
1425}
1426
1427[
1428    object,
1429    uuid(55ce16ba-3014-41c1-9ceb-fade1446ac6c),
1430    pointer_default(unique)
1431]
1432interface ITfInsertAtSelection : IUnknown
1433{
1434    const DWORD TF_IAS_NOQUERY   = 0x1;
1435    const DWORD TF_IAS_QUERYONLY = 0x2;
1436    const DWORD TF_IAS_NO_DEFAULT_COMPOSITION = 0x80000000;
1437
1438    HRESULT InsertTextAtSelection(
1439        [in] TfEditCookie ec,
1440        [in] DWORD dwFlags,
1441        [in, size_is(cch)] const WCHAR *pchText,
1442        [in] LONG cch,
1443        [out] ITfRange **ppRange);
1444
1445    HRESULT InsertEmbeddedAtSelection(
1446        [in] TfEditCookie ec,
1447        [in] DWORD dwFlags,
1448        [in] IDataObject *pDataObject,
1449        [out] ITfRange **ppRange);
1450}
1451
1452[
1453    object,
1454    uuid(6834b120-88cb-11d2-bf45-00105a2799b5),
1455    pointer_default(unique)
1456]
1457interface ITfPropertyStore : IUnknown
1458{
1459    const DWORD TF_TU_CORRECTION = 0x1;
1460
1461    HRESULT GetType([out] GUID *pguid);
1462
1463    HRESULT GetDataType([out] DWORD *pdwReserved);
1464
1465    HRESULT GetData([out] VARIANT *pvarValue);
1466
1467    HRESULT OnTextUpdated(
1468            [in] DWORD dwFlags,
1469            [in] ITfRange *pRangeNew,
1470            [out] BOOL *pfAccept);
1471
1472    HRESULT Shrink(
1473            [in] ITfRange *pRangeNew,
1474            [out] BOOL *pfFree);
1475
1476    HRESULT Divide(
1477            [in] ITfRange *pRangeThis,
1478            [in] ITfRange *pRangeNew,
1479            [out] ITfPropertyStore **ppPropStore);
1480
1481    HRESULT Clone(
1482            [out] ITfPropertyStore **pPropStore);
1483
1484    HRESULT GetPropertyRangeCreator(
1485            [out] CLSID *pclsid);
1486
1487    HRESULT Serialize(
1488            [in] IStream *pStream,
1489            [out] ULONG *pcb);
1490}
1491
1492[
1493    object,
1494    uuid(5efd22Ba-7838-46cb-88e2-cadb14124f8f),
1495    pointer_default(unique)
1496]
1497interface IEnumITfCompositionView : IUnknown
1498{
1499    HRESULT Clone([out] IEnumITfCompositionView **ppEnum);
1500
1501    HRESULT Next(
1502            [in] ULONG ulCount,
1503            [out, size_is(ulCount), length_is(*pcFetched)] ITfCompositionView **rgCompositionView,
1504            [out] ULONG *pcFetched);
1505
1506    HRESULT Reset();
1507
1508    HRESULT Skip([in] ULONG ulCount);
1509}
1510
1511[
1512    object,
1513    uuid(20168d64-5a8f-4a5a-b7bd-cfa29f4D0fd9),
1514    pointer_default(unique)
1515]
1516interface ITfComposition : IUnknown
1517{
1518    HRESULT GetRange([out] ITfRange **ppRange);
1519
1520    HRESULT ShiftStart(
1521            [in] TfEditCookie ecWrite,
1522            [in] ITfRange *pNewStart);
1523
1524    HRESULT ShiftEnd(
1525            [in] TfEditCookie ecWrite,
1526            [in] ITfRange *pNewEnd);
1527
1528    HRESULT EndComposition([in] TfEditCookie ecWrite);
1529}
1530
1531[
1532    object,
1533    uuid(a781718c-579a-4b15-a280-32b8577acc5e),
1534    pointer_default(unique)
1535]
1536interface ITfCompositionSink : IUnknown
1537{
1538    HRESULT OnCompositionTerminated(
1539            [in] TfEditCookie ecWrite,
1540            [in] ITfComposition *pComposition);
1541}
1542
1543[
1544    object,
1545    uuid(01689689-7acb-4e9b-ab7c-7ea46b12b522),
1546    pointer_default(unique)
1547]
1548interface ITfCleanupContextSink : IUnknown
1549{
1550    HRESULT OnCleanupContext(
1551            [in] TfEditCookie ecWrite,
1552            [in] ITfContext   *pic);
1553}
1554
1555[
1556    object,
1557    uuid(d40C8aae-aC92-4fc7-9a11-0ee0e23aa39b),
1558    pointer_default(unique)
1559]
1560interface ITfContextComposition : IUnknown
1561{
1562    HRESULT StartComposition(
1563            [in] TfEditCookie ecWrite,
1564            [in] ITfRange *pCompositionRange,
1565            [in] ITfCompositionSink *pSink,
1566            [out] ITfComposition **ppComposition);
1567
1568    HRESULT EnumCompositions([out] IEnumITfCompositionView **ppEnum);
1569
1570    HRESULT FindComposition(
1571            [in] TfEditCookie ecRead,
1572            [in] ITfRange *pTestRange,
1573            [out] IEnumITfCompositionView **ppEnum);
1574
1575    HRESULT TakeOwnership(
1576            [in] TfEditCookie ecWrite,
1577            [in] ITfCompositionView *pComposition,
1578            [in] ITfCompositionSink *pSink,
1579            [out] ITfComposition **ppComposition);
1580}
1581
1582[
1583    object,
1584    uuid(86462810-593b-4916-9764-19c08e9ce110),
1585    pointer_default(unique)
1586]
1587interface ITfContextOwnerCompositionServices : ITfContextComposition
1588{
1589    HRESULT TerminateComposition([in] ITfCompositionView *pComposition);
1590}
1591
1592[
1593    object,
1594    uuid(4ef89150-0807-11d3-8df0-00105a2799b5),
1595    pointer_default(unique)
1596]
1597interface ITfPersistentPropertyLoaderACP : IUnknown
1598{
1599    HRESULT LoadProperty(
1600            [in] const TF_PERSISTENT_PROPERTY_HEADER_ACP *pHdr,
1601            [out] IStream **ppStream);
1602}
1603
1604[
1605    object,
1606    uuid(b23eb630-3e1c-11d3-a745-0050040ab407),
1607    pointer_default(unique)
1608]
1609interface ITfContextOwnerServices : IUnknown
1610{
1611    HRESULT OnLayoutChange();
1612
1613    HRESULT OnStatusChange([in] DWORD dwFlags);
1614
1615    HRESULT OnAttributeChange([in] REFGUID rguidAttribute);
1616
1617    HRESULT Serialize(
1618            [in] ITfProperty *pProp,
1619            [in] ITfRange *pRange,
1620            [out] TF_PERSISTENT_PROPERTY_HEADER_ACP *pHdr,
1621            [in] IStream *pStream);
1622
1623    HRESULT Unserialize(
1624            [in] ITfProperty *pProp,
1625            [in] const TF_PERSISTENT_PROPERTY_HEADER_ACP *pHdr,
1626            [in] IStream *pStream,
1627            [in] ITfPersistentPropertyLoaderACP *pLoader);
1628
1629    HRESULT ForceLoadProperty([in] ITfProperty *pProp);
1630
1631    HRESULT CreateRange(
1632            [in] LONG acpStart,
1633            [in] LONG acpEnd,
1634            [out] ITfRangeACP **ppRange);
1635}
1636
1637[
1638    object,
1639    uuid(17d49a3d-f8b8-4b2f-b254-52319dd64c53),
1640    pointer_default(unique)
1641]
1642interface ITfReadOnlyProperty : IUnknown
1643{
1644    HRESULT GetType([out] GUID *pguid);
1645
1646    HRESULT EnumRanges(
1647            [in] TfEditCookie ec,
1648            [out] IEnumTfRanges **ppEnum,
1649            [in] ITfRange *pTargetRange);
1650
1651    HRESULT GetValue(
1652            [in] TfEditCookie ec,
1653            [in] ITfRange *pRange,
1654            [out] VARIANT *pvarValue);
1655
1656    HRESULT GetContext([out] ITfContext **ppContext);
1657}
1658
1659[
1660    object,
1661    uuid(e2449660-9542-11d2-bf46-00105a2799b5),
1662    pointer_default(unique)
1663]
1664interface ITfProperty : ITfReadOnlyProperty
1665{
1666    HRESULT FindRange(
1667            [in] TfEditCookie ec,
1668            [in] ITfRange *pRange,
1669            [out] ITfRange **ppRange,
1670            [in] TfAnchor aPos);
1671
1672    HRESULT SetValueStore(
1673            [in] TfEditCookie ec,
1674            [in] ITfRange *pRange,
1675            [in] ITfPropertyStore *pPropStore);
1676
1677    HRESULT SetValue(
1678            [in] TfEditCookie ec,
1679            [in] ITfRange *pRange,
1680            [in] const VARIANT *pvarValue);
1681
1682    HRESULT Clear(
1683            [in] TfEditCookie ec,
1684            [in] ITfRange *pRange);
1685}
1686
1687[
1688  object,
1689  uuid(bb08f7a9-607a-4384-8623-056892b64371),
1690  pointer_default(unique)
1691]
1692interface ITfCompartment : IUnknown
1693{
1694    HRESULT SetValue(
1695        [in] TfClientId tid,
1696        [in] const VARIANT *pvarValue);
1697
1698    HRESULT GetValue(
1699        [out] VARIANT *pvarValue);
1700}
1701
1702[
1703  object,
1704  uuid(7dcf57ac-18ad-438b-824d-979bffb74b7c),
1705  pointer_default(unique)
1706]
1707interface ITfCompartmentMgr : IUnknown
1708{
1709    HRESULT GetCompartment(
1710        [in] REFGUID rguid,
1711        [out] ITfCompartment **ppcomp);
1712
1713    HRESULT ClearCompartment(
1714        [in] TfClientId tid,
1715        [in] REFGUID rguid);
1716
1717    HRESULT EnumCompartments(
1718        [out] IEnumGUID **ppEnum);
1719}
1720
1721[
1722  object,
1723  uuid(743abd5f-f26d-48df-8cc5-238492419b64),
1724  pointer_default(unique)
1725]
1726interface ITfCompartmentEventSink : IUnknown
1727{
1728    HRESULT OnChange(
1729        [in] REFGUID rguid);
1730}
1731
1732[
1733  object,
1734  uuid(8f1a7ea6-1654-4502-a86e-b2902344d507),
1735  pointer_default(unique)
1736]
1737interface IEnumTfContexts : IUnknown
1738{
1739    HRESULT Clone(
1740        [out] IEnumTfContexts **ppEnum);
1741
1742    HRESULT Next(
1743        [in] ULONG ulCount,
1744        [out, size_is(ulCount), length_is(*pcFetched)] ITfContext **rgContext,
1745        [out] ULONG *pcFetched);
1746
1747    HRESULT Reset();
1748
1749    HRESULT Skip(
1750        [in] ULONG ulCount);
1751}
1752
1753[
1754  object,
1755  uuid(aa80e808-2021-11d2-93e0-0060b067b86e),
1756  pointer_default(unique)
1757]
1758interface IEnumTfDocumentMgrs : IUnknown
1759{
1760    HRESULT Clone(
1761        [out] IEnumTfDocumentMgrs **ppEnum);
1762
1763    HRESULT Next(
1764        [in] ULONG ulCount,
1765        [out, size_is(ulCount), length_is(*pcFetched)] ITfDocumentMgr **rgDocumentMgr,
1766        [out] ULONG *pcFetched);
1767
1768    HRESULT Reset();
1769
1770    HRESULT Skip(
1771        [in] ULONG ulCount);
1772}
1773
1774[
1775    object,
1776    local,
1777    uuid(ea1ea137-19df-11d7-a6d2-00065b84435c),
1778    pointer_default(unique)
1779]
1780interface ITfUIElement : IUnknown
1781{
1782    HRESULT GetDescription(
1783        [out] BSTR *description);
1784
1785    HRESULT GetGUID(
1786        [out] GUID *guid);
1787
1788    HRESULT Show(
1789        [in] BOOL show);
1790
1791    HRESULT IsShown(
1792        [out] BOOL *show);
1793}
1794
1795[
1796    object,
1797    local,
1798    uuid(887aa91e-acba-4931-84da-3c5208cf543f),
1799    pointer_default(unique)
1800]
1801interface IEnumTfUIElements : IUnknown
1802{
1803    HRESULT Clone(
1804        [out] IEnumTfUIElements **enum_elements);
1805
1806    HRESULT Next(
1807        [in] ULONG count,
1808        [out, size_is(count), length_is(fetched)] ITfUIElement **element,
1809        [out] ULONG fetched);
1810
1811    HRESULT Reset();
1812
1813    HRESULT Skip(
1814        [in] ULONG count);
1815}
1816
1817[
1818    object,
1819    local,
1820    uuid(ea1ea135-19df-11d7-a6d2-00065b84435c),
1821    pointer_default(unique)
1822]
1823interface ITfUIElementMgr : IUnknown
1824{
1825    HRESULT BeginUIElement(
1826        [in] ITfUIElement *element,
1827        [in, out] BOOL *show,
1828        [out] DWORD *id);
1829
1830    HRESULT UpdateUIElement(
1831        [in] DWORD id);
1832
1833    HRESULT EndUIElement(
1834        [in] DWORD id);
1835
1836    HRESULT GetUIElement(
1837        [in] DWORD id,
1838        [out] ITfUIElement **element);
1839
1840    HRESULT EnumUIElements(
1841        [out] IEnumTfUIElements **enum_elements);
1842}
1843
1844[
1845  object,
1846  uuid(73131f9c-56a9-49dd-b0ee-d046633f7528),
1847  pointer_default(unique)
1848]
1849interface ITfSourceSingle : IUnknown
1850{
1851    HRESULT AdviseSingleSink(
1852        [in] TfClientId tid,
1853        [in] REFIID riid,
1854        [in, iid_is(riid)] IUnknown *punk);
1855
1856    HRESULT UnadviseSingleSink(
1857        [in] TfClientId tid,
1858        [in] REFIID riid);
1859}
1860
1861[
1862  object,
1863  local,
1864  uuid(c0f1db0c-3a20-405c-a303-96b6010a885f),
1865  pointer_default(unique)
1866]
1867interface ITfThreadFocusSink : IUnknown
1868{
1869    HRESULT OnSetThreadFocus();
1870
1871    HRESULT OnKillThreadFocus();
1872}
1873
1874[
1875  object,
1876  uuid(71c6e74e-0f28-11d8-a82a-00065b84435c),
1877  pointer_default(unique)
1878]
1879interface ITfInputProcessorProfileActivationSink : IUnknown
1880{
1881    HRESULT OnActivated(
1882        [in] DWORD dwProfileType,
1883        [in] LANGID langid,
1884        [in] REFCLSID clsid,
1885        [in] REFGUID catid,
1886        [in] REFGUID guidProfile,
1887        [in] HKL hkl,
1888        [in] DWORD dwFlags);
1889}
1890
1891[
1892    object,
1893    local,
1894    uuid(a1adaaa2-3a24-449d-ac96-5183e7f5c217),
1895    pointer_default(unique)
1896]
1897interface ITfMouseSink : IUnknown
1898{
1899    HRESULT OnMouseEvent(
1900        [in] ULONG uEdge,
1901        [in] ULONG uQuadrant,
1902        [in] DWORD dwBtnStatus,
1903        [out] BOOL *pfEaten);
1904}
1905
1906[
1907    object,
1908    uuid(09d146cd-a544-4132-925b-7afa8ef322d0),
1909    pointer_default(unique)
1910]
1911interface ITfMouseTracker : IUnknown
1912{
1913    HRESULT AdviseMouseSink(
1914        [in] ITfRange *range,
1915        [in] ITfMouseSink *pSink,
1916        [out] DWORD *pdwCookie);
1917
1918    HRESULT UnadviseMouseSink([in] DWORD dwCookie);
1919}
1920
1921[
1922    object,
1923    uuid(3bdd78e2-c16e-47fd-b883-ce6facc1a208),
1924    pointer_default(unique)
1925]
1926interface ITfMouseTrackerACP : IUnknown
1927{
1928    HRESULT AdviseMouseSink(
1929        [in] ITfRangeACP *range,
1930        [in] ITfMouseSink *pSink,
1931        [out] DWORD *pdwCookie);
1932
1933    HRESULT UnadviseMouseSink([in] DWORD dwCookie);
1934}
1935
1936[
1937    object,
1938    local,
1939    uuid(a615096f-1c57-4813-8a15-55ee6e5a839c),
1940    pointer_default(unique)
1941]
1942interface ITfTransitoryExtensionSink : IUnknown
1943{
1944    HRESULT OnTransitoryExtensionUpdated(
1945        [in] ITfContext *pic,
1946        [in] TfEditCookie ecReadOnly,
1947        [in] ITfRange *pResultRange,
1948        [in] ITfRange *pCompositionRange,
1949        [out] BOOL *pfDeleteResultRange);
1950}
1951
1952[
1953    object,
1954    uuid(2af2d06a-dd5b-4927-a0b4-54f19c91fade),
1955    pointer_default(unique)
1956]
1957interface ITfTextLayoutSink : IUnknown
1958{
1959    typedef [uuid(603553cf-9edd-4cc1-9ecc-069e4a427734)] enum
1960    {
1961        TF_LC_CREATE = 0,
1962        TF_LC_CHANGE = 1,
1963        TF_LC_DESTROY = 2
1964    } TfLayoutCode;
1965
1966    HRESULT OnLayoutChange(
1967        [in] ITfContext     *pic,
1968        [in] TfLayoutCode   lcode,
1969        [in] ITfContextView *pView);
1970}
1971