ReactOS 0.4.16-dev-1946-g52006dd
range.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS CTF
3 * LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
4 * PURPOSE: ITfRangeACP implementation
5 * COPYRIGHT: Copyright 2009 Aric Stewart, CodeWeavers
6 * Copyright 2025 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
7 */
8
9#include "precomp.h"
10#include "range.h"
11
12#include <wine/debug.h>
14
16
19 _In_ TfAnchor anchorStart,
20 _In_ TfAnchor anchorEnd
21)
22 : m_cRefs(1)
23 , m_context(context)
24 , m_anchorStart(anchorStart)
25 , m_anchorEnd(anchorEnd)
26{
27 if (context)
28 context->AddRef();
29}
30
32{
33 TRACE("destroying %p\n", this);
34 if (m_context)
36}
37
39{
41 if (!pRange)
42 return NULL;
43 return pRange;
44}
45
47{
48 return E_NOTIMPL;
49}
50
52 TfEditCookie ec,
53 BOOL bEnd,
54 ITfRange *pWidth,
55 TfAnchor aPos,
56 LONG *plResult)
57{
58 return E_NOTIMPL;
59}
60
62{
63 if (!tf || !tsAcp || !tf->range)
64 {
65 ERR("E_INVALIDARG: %p, %p, %p\n", tf, tsAcp, tf->range);
66 return E_INVALIDARG;
67 }
68
69 CRange *This = static_cast<CRange *>(static_cast<ITfRangeACP *>(tf->range));
70 tsAcp->acpStart = This->m_anchorStart;
71 tsAcp->acpEnd = This->m_anchorEnd;
72 tsAcp->style.ase = static_cast<TsActiveSelEnd>(tf->style.ase);
73 tsAcp->style.fInterimChar = tf->style.fInterimChar;
74 return S_OK;
75}
76
78{
79 if (riid == IID_PRIV_CRANGE)
80 {
81 *ppvObj = this;
82 return S_OK; // No AddRef
83 }
84
85 if (riid == IID_IUnknown || riid == IID_ITfRange || riid == IID_ITfRangeACP)
86 *ppvObj = static_cast<ITfRangeACP *>(this);
87 else if (riid == IID_ITfRangeAnchor)
88 *ppvObj = static_cast<ITfRangeAnchor *>(this);
89 else if (riid == IID_ITfSource)
90 *ppvObj = static_cast<ITfSource *>(this);
91 else
92 *ppvObj = NULL;
93
94 if (*ppvObj)
95 {
96 AddRef();
97 return S_OK;
98 }
99
100 WARN("unsupported interface: %s\n", debugstr_guid(&riid));
101 return E_NOINTERFACE;
102}
103
105{
106 TRACE("%p -> ()\n", this);
107 return ::InterlockedIncrement(&m_cRefs);
108}
109
111{
112 TRACE("%p -> ()\n", this);
114 if (!ret)
115 delete this;
116 return ret;
117}
118
122 _Out_ WCHAR *pchText,
124 _Out_ ULONG *pcch)
125{
126 FIXME("\n");
127 return E_NOTIMPL;
128}
129
133 _In_ const WCHAR *pchText,
134 _In_ LONG cch)
135{
136 FIXME("\n");
137 return E_NOTIMPL;
138}
139
142 _Out_ IDataObject **ppDataObject)
143{
144 FIXME("\n");
145 return E_NOTIMPL;
146}
147
150 _In_ REFGUID rguidService,
152 _Out_ IUnknown **ppunk)
153{
154 FIXME("\n");
155 return E_NOTIMPL;
156}
157
161 _In_ IDataObject *pDataObject)
162{
163 FIXME("\n");
164 return E_NOTIMPL;
165}
166
169 _In_ LONG cchReq,
170 _Out_ LONG *pcch,
171 _In_ const TF_HALTCOND *pHalt)
172{
173 FIXME("\n");
174 return E_NOTIMPL;
175}
176
179 _In_ LONG cchReq,
180 _Out_ LONG *pcch,
181 _In_ const TF_HALTCOND *pHalt)
182{
183 FIXME("\n");
184 return E_NOTIMPL;
185}
186
189 _In_ ITfRange *pRange,
190 _In_ TfAnchor aPos)
191{
192 FIXME("\n");
193 return E_NOTIMPL;
194}
195
198 _In_ ITfRange *pRange,
199 _In_ TfAnchor aPos)
200{
201 FIXME("\n");
202 return E_NOTIMPL;
203}
204
208 _Out_ BOOL *pfNoRegion)
209{
210 FIXME("\n");
211 return E_NOTIMPL;
212}
213
217 _Out_ BOOL *pfNoRegion)
218{
219 FIXME("\n");
220 return E_NOTIMPL;
221}
222
225 _Out_ BOOL *pfEmpty)
226{
227 TRACE("(%d, %p)\n", ec, pfEmpty);
228 return IsEqualStart(ec, static_cast<ITfRangeACP *>(this), TF_ANCHOR_END, pfEmpty);
229}
230
233 _In_ TfAnchor aPos)
234{
235 FIXME("\n");
236 return E_NOTIMPL;
237}
238
241 _In_ ITfRange *pWith,
242 _In_ TfAnchor aPos,
243 _Out_ BOOL *pfEqual)
244{
245 FIXME("\n");
246 return _IsEqualX(ec, FALSE, pWith, aPos, pfEqual);
247}
248
251 _In_ ITfRange *pWith,
252 _In_ TfAnchor aPos,
253 _Out_ BOOL *pfEqual)
254{
255 FIXME("\n");
256 return _IsEqualX(ec, TRUE, pWith, aPos, pfEqual);
257}
258
261 _In_ ITfRange *pWith,
262 _In_ TfAnchor aPos,
263 _Out_ LONG *plResult)
264{
265 FIXME("\n");
266 return E_NOTIMPL;
267}
268
271 _In_ ITfRange *pWith,
272 _In_ TfAnchor aPos,
273 _Out_ LONG *plResult)
274{
275 FIXME("\n");
276 return E_NOTIMPL;
277}
278
281 _In_ ULONG cchInsert,
282 _Out_ BOOL *pfInsertOk)
283{
284 FIXME("\n");
285 return E_NOTIMPL;
286}
287
289 _Out_ TfGravity *pgStart,
290 _Out_ TfGravity *pgEnd)
291{
292 FIXME("\n");
293 return E_NOTIMPL;
294}
295
298 _In_ TfGravity gStart,
299 _In_ TfGravity gEnd)
300{
301 FIXME("\n");
302 return E_NOTIMPL;
303}
304
306 _Out_ ITfRange **ppClone)
307{
308 TRACE("%p\n", ppClone);
309
310 if (!ppClone)
311 return E_INVALIDARG;
312
313 CRange *pCloned = _Clone();
314 if (!pCloned)
315 return E_OUTOFMEMORY;
316
317 *ppClone = static_cast<ITfRangeACP *>(pCloned);
318 return S_OK;
319}
320
322 _Out_ ITfContext **ppContext)
323{
324 FIXME("%p\n", ppContext);
325 return E_NOTIMPL;
326}
327
329{
330 FIXME("\n");
331 return E_NOTIMPL;
332}
333
335{
336 FIXME("\n");
337 return E_NOTIMPL;
338}
339
341{
342 FIXME("\n");
343 return E_NOTIMPL;
344}
345
347{
348 FIXME("\n");
349 return E_NOTIMPL;
350}
351
355 _Out_ DWORD *pdwCookie)
356{
357 FIXME("\n");
358 return E_NOTIMPL;
359}
360
362 _In_ DWORD dwCookie)
363{
364 FIXME("\n");
365 return E_NOTIMPL;
366}
367
369
372Range_Constructor(ITfContext *context, DWORD anchorStart, DWORD anchorEnd, ITfRange **ppOut)
373{
374 CRange *This = new(cicNoThrow) CRange(context, (TfAnchor)anchorStart, (TfAnchor)anchorEnd);
375 if (!This)
376 return E_OUTOFMEMORY;
377
378 *ppOut = static_cast<ITfRangeACP *>(This);
379 return S_OK;
380}
381
382/* Internal conversion functions */
383
386{
388}
UINT cchMax
unsigned int dir
Definition: maze.c:112
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
#define ERR(fmt,...)
Definition: precomp.h:57
#define EXTERN_C
Definition: basetyps.h:12
#define STDMETHODIMP
Definition: basetyps.h:43
#define STDMETHODIMP_(t)
Definition: basetyps.h:44
const GUID IID_IUnknown
#define cicNoThrow
Definition: cicbase.h:46
Definition: range.h:9
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj) override
Definition: range.cpp:77
CRange(_In_ ITfContext *context, _In_ TfAnchor anchorStart, _In_ TfAnchor anchorEnd)
Definition: range.cpp:17
CRange * _Clone()
Definition: range.cpp:38
STDMETHODIMP Clone(_Out_ ITfRange **ppClone) override
Definition: range.cpp:305
STDMETHODIMP ShiftStart(_In_ TfEditCookie ec, _In_ LONG cchReq, _Out_ LONG *pcch, _In_ const TF_HALTCOND *pHalt) override
Definition: range.cpp:167
LONG m_cRefs
Definition: range.h:121
STDMETHODIMP Collapse(_In_ TfEditCookie ec, _In_ TfAnchor aPos) override
Definition: range.cpp:231
STDMETHODIMP SetGravity(_In_ TfEditCookie ec, _In_ TfGravity gStart, _In_ TfGravity gEnd) override
Definition: range.cpp:296
STDMETHODIMP GetContext(_Out_ ITfContext **ppContext) override
Definition: range.cpp:321
STDMETHODIMP CompareEnd(_In_ TfEditCookie ec, _In_ ITfRange *pWith, _In_ TfAnchor aPos, _Out_ LONG *plResult) override
Definition: range.cpp:269
STDMETHODIMP ShiftEnd(_In_ TfEditCookie ec, _In_ LONG cchReq, _Out_ LONG *pcch, _In_ const TF_HALTCOND *pHalt) override
Definition: range.cpp:177
STDMETHODIMP ShiftEndToRange(_In_ TfEditCookie ec, _In_ ITfRange *pRange, _In_ TfAnchor aPos) override
Definition: range.cpp:196
STDMETHODIMP AdviseSink(_In_ REFIID riid, _In_ IUnknown *punk, _Out_ DWORD *pdwCookie) override
Definition: range.cpp:352
STDMETHODIMP IsEmpty(_In_ TfEditCookie ec, _Out_ BOOL *pfEmpty) override
Definition: range.cpp:223
STDMETHODIMP UnadviseSink(_In_ DWORD dwCookie) override
Definition: range.cpp:361
STDMETHODIMP ShiftEndRegion(_In_ TfEditCookie ec, _In_ TfShiftDir dir, _Out_ BOOL *pfNoRegion) override
Definition: range.cpp:214
STDMETHODIMP SetExtent(_In_ LONG acpAnchor, _In_ LONG cch) override
Definition: range.cpp:334
STDMETHODIMP CompareStart(_In_ TfEditCookie ec, _In_ ITfRange *pWith, _In_ TfAnchor aPos, _Out_ LONG *plResult) override
Definition: range.cpp:259
static HRESULT TF_SELECTION_to_TS_SELECTION_ACP(const TF_SELECTION *tf, TS_SELECTION_ACP *tsAcp)
Definition: range.cpp:61
STDMETHODIMP ShiftStartRegion(_In_ TfEditCookie ec, _In_ TfShiftDir dir, _Out_ BOOL *pfNoRegion) override
Definition: range.cpp:205
STDMETHODIMP GetFormattedText(_In_ TfEditCookie ec, _Out_ IDataObject **ppDataObject) override
Definition: range.cpp:140
STDMETHODIMP ShiftStartToRange(_In_ TfEditCookie ec, _In_ ITfRange *pRange, _In_ TfAnchor aPos) override
Definition: range.cpp:187
STDMETHODIMP GetEmbedded(_In_ TfEditCookie ec, _In_ REFGUID rguidService, _In_ REFIID riid, _Out_ IUnknown **ppunk) override
Definition: range.cpp:148
HRESULT _CompareX(TfEditCookie ec, BOOL bEnd, ITfRange *pWidth, TfAnchor aPos, LONG *plResult)
Definition: range.cpp:51
TfAnchor m_anchorStart
Definition: range.h:124
STDMETHODIMP GetGravity(_Out_ TfGravity *pgStart, _Out_ TfGravity *pgEnd) override
Definition: range.cpp:288
STDMETHODIMP IsEqualEnd(_In_ TfEditCookie ec, _In_ ITfRange *pWith, _In_ TfAnchor aPos, _Out_ BOOL *pfEqual) override
Definition: range.cpp:249
STDMETHODIMP InsertEmbedded(_In_ TfEditCookie ec, _In_ DWORD dwFlags, _In_ IDataObject *pDataObject) override
Definition: range.cpp:158
HRESULT _IsEqualX(TfEditCookie ec, BOOL bEnd, ITfRange *pWith, TfAnchor aPos, BOOL *pfEqual)
Definition: range.cpp:46
STDMETHODIMP IsEqualStart(_In_ TfEditCookie ec, _In_ ITfRange *pWith, _In_ TfAnchor aPos, _Out_ BOOL *pfEqual) override
Definition: range.cpp:239
STDMETHODIMP GetText(_In_ TfEditCookie ec, _In_ DWORD dwFlags, _Out_ WCHAR *pchText, _In_ ULONG cchMax, _Out_ ULONG *pcch) override
Definition: range.cpp:119
ITfContext * m_context
Definition: range.h:122
STDMETHODIMP SetText(_In_ TfEditCookie ec, _In_ DWORD dwFlags, _In_ const WCHAR *pchText, _In_ LONG cch) override
Definition: range.cpp:130
virtual ~CRange()
Definition: range.cpp:31
STDMETHODIMP GetExtent(_Out_ LONG *pacpAnchor, _Out_ LONG *pcch) override
Definition: range.cpp:328
STDMETHODIMP AdjustForInsert(_In_ TfEditCookie ec, _In_ ULONG cchInsert, _Out_ BOOL *pfInsertOk) override
Definition: range.cpp:279
TfAnchor m_anchorEnd
Definition: range.h:125
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
return ret
Definition: mutex.c:146
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
HFONT tf
Definition: icontest.c:17
REFIID riid
Definition: atlbase.h:39
ULONG AddRef()
ULONG Release()
#define S_OK
Definition: intsafe.h:52
#define debugstr_guid
Definition: kernel32.h:35
TfAnchor
Definition: msctf.idl:153
@ TF_ANCHOR_END
Definition: msctf.idl:153
DWORD TfEditCookie
Definition: msctf.idl:86
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
long LONG
Definition: pedump.c:60
#define REFIID
Definition: guiddef.h:118
_In_opt_ IUnknown * punk
Definition: shlwapi.h:158
EXTERN_C HRESULT TF_SELECTION_to_TS_SELECTION_ACP(const TF_SELECTION *tf, TS_SELECTION_ACP *tsAcp)
Definition: range.cpp:385
EXTERN_C HRESULT Range_Constructor(ITfContext *context, DWORD anchorStart, DWORD anchorEnd, ITfRange **ppOut)
Definition: range.cpp:372
_In_ UINT _In_ UINT cch
Definition: shellapi.h:432
#define TRACE(s)
Definition: solgame.cpp:4
TsActiveSelEnd ase
Definition: textstor.idl:86
TS_SELECTIONSTYLE style
Definition: textstor.idl:94
Definition: scsiwmi.h:51
Definition: http.c:7252
TsActiveSelEnd
Definition: textstor.idl:67
uint32_t ULONG
Definition: typedefs.h:59
#define E_NOINTERFACE
Definition: winerror.h:3479
__wchar_t WCHAR
Definition: xmlstorage.h:180