+/* ITextRange interface */
+static inline ITextRangeImpl *impl_from_ITextRange(ITextRange *iface)
+{
+ return CONTAINING_RECORD(iface, ITextRangeImpl, ITextRange_iface);
+}
+
+static HRESULT WINAPI ITextRange_fnQueryInterface(ITextRange *me, REFIID riid, void **ppvObj)
+{
+ *ppvObj = NULL;
+ if (IsEqualGUID(riid, &IID_IUnknown)
+ || IsEqualGUID(riid, &IID_IDispatch)
+ || IsEqualGUID(riid, &IID_ITextRange))
+ {
+ *ppvObj = me;
+ ITextRange_AddRef(me);
+ return S_OK;
+ }
+
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI ITextRange_fnAddRef(ITextRange *me)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ return InterlockedIncrement(&This->ref);
+}
+
+static ULONG WINAPI ITextRange_fnRelease(ITextRange *me)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ ULONG ref = InterlockedDecrement(&This->ref);
+
+ TRACE ("%p ref=%u\n", This, ref);
+ if (ref == 0)
+ {
+ if (This->reOle)
+ {
+ list_remove(&This->entry);
+ This->reOle = NULL;
+ }
+ heap_free(This);
+ }
+ return ref;
+}
+
+static HRESULT WINAPI ITextRange_fnGetTypeInfoCount(ITextRange *me, UINT *pctinfo)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnGetTypeInfo(ITextRange *me, UINT iTInfo, LCID lcid,
+ ITypeInfo **ppTInfo)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnGetIDsOfNames(ITextRange *me, REFIID riid, LPOLESTR *rgszNames,
+ UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnInvoke(ITextRange *me, DISPID dispIdMember, REFIID riid,
+ LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
+ VARIANT *pVarResult, EXCEPINFO *pExcepInfo,
+ UINT *puArgErr)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnGetText(ITextRange *me, BSTR *pbstr)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnSetText(ITextRange *me, BSTR bstr)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT range_GetChar(ME_TextEditor *editor, ME_Cursor *cursor, LONG *pch)
+{
+ WCHAR wch[2];
+
+ ME_GetTextW(editor, wch, 1, cursor, 1, FALSE, cursor->pRun->next->type == diTextEnd);
+ *pch = wch[0];
+
+ return S_OK;
+}
+
+static HRESULT WINAPI ITextRange_fnGetChar(ITextRange *me, LONG *pch)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ ME_Cursor cursor;
+
+ if (!This->reOle)
+ return CO_E_RELEASED;
+ TRACE("%p\n", pch);
+ if (!pch)
+ return E_INVALIDARG;
+
+ ME_CursorFromCharOfs(This->reOle->editor, This->start, &cursor);
+ return range_GetChar(This->reOle->editor, &cursor, pch);
+}
+
+static HRESULT WINAPI ITextRange_fnSetChar(ITextRange *me, LONG ch)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT CreateITextRange(IRichEditOleImpl *reOle, LONG start, LONG end, ITextRange** ppRange);
+
+static HRESULT WINAPI ITextRange_fnGetDuplicate(ITextRange *me, ITextRange **ppRange)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ TRACE("%p %p\n", This, ppRange);
+ if (!ppRange)
+ return E_INVALIDARG;
+
+ return CreateITextRange(This->reOle, This->start, This->end, ppRange);
+}
+
+static HRESULT WINAPI ITextRange_fnGetFormattedText(ITextRange *me, ITextRange **ppRange)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnSetFormattedText(ITextRange *me, ITextRange *pRange)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnGetStart(ITextRange *me, LONG *pcpFirst)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ if (!pcpFirst)
+ return E_INVALIDARG;
+ *pcpFirst = This->start;
+ TRACE("%d\n", *pcpFirst);
+ return S_OK;
+}
+
+static HRESULT WINAPI ITextRange_fnSetStart(ITextRange *me, LONG cpFirst)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnGetEnd(ITextRange *me, LONG *pcpLim)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ if (!pcpLim)
+ return E_INVALIDARG;
+ *pcpLim = This->end;
+ TRACE("%d\n", *pcpLim);
+ return S_OK;
+}
+
+static HRESULT WINAPI ITextRange_fnSetEnd(ITextRange *me, LONG cpLim)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnGetFont(ITextRange *me, ITextFont **pFont)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnSetFont(ITextRange *me, ITextFont *pFont)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnGetPara(ITextRange *me, ITextPara **ppPara)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnSetPara(ITextRange *me, ITextPara *pPara)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnGetStoryLength(ITextRange *me, LONG *pcch)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnGetStoryType(ITextRange *me, LONG *pValue)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT range_Collapse(LONG bStart, LONG *start, LONG *end)
+{
+ if (*end == *start)
+ return S_FALSE;
+
+ if (bStart == tomEnd || bStart == tomFalse)
+ *start = *end;
+ else
+ *end = *start;
+ return S_OK;
+}
+
+static HRESULT WINAPI ITextRange_fnCollapse(ITextRange *me, LONG bStart)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ return range_Collapse(bStart, &This->start, &This->end);
+}
+
+static HRESULT WINAPI ITextRange_fnExpand(ITextRange *me, LONG Unit, LONG *pDelta)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnGetIndex(ITextRange *me, LONG Unit, LONG *pIndex)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnSetIndex(ITextRange *me, LONG Unit, LONG Index,
+ LONG Extend)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnSetRange(ITextRange *me, LONG cpActive, LONG cpOther)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnInRange(ITextRange *me, ITextRange *pRange, LONG *pb)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnInStory(ITextRange *me, ITextRange *pRange, LONG *pb)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnIsEqual(ITextRange *me, ITextRange *pRange, LONG *pb)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnSelect(ITextRange *me)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnStartOf(ITextRange *me, LONG Unit, LONG Extend,
+ LONG *pDelta)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnEndOf(ITextRange *me, LONG Unit, LONG Extend,
+ LONG *pDelta)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnMove(ITextRange *me, LONG Unit, LONG Count, LONG *pDelta)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnMoveStart(ITextRange *me, LONG Unit, LONG Count,
+ LONG *pDelta)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnMoveEnd(ITextRange *me, LONG Unit, LONG Count,
+ LONG *pDelta)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnMoveWhile(ITextRange *me, VARIANT *Cset, LONG Count,
+ LONG *pDelta)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnMoveStartWhile(ITextRange *me, VARIANT *Cset, LONG Count,
+ LONG *pDelta)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnMoveEndWhile(ITextRange *me, VARIANT *Cset, LONG Count,
+ LONG *pDelta)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnMoveUntil(ITextRange *me, VARIANT *Cset, LONG Count,
+ LONG *pDelta)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnMoveStartUntil(ITextRange *me, VARIANT *Cset, LONG Count,
+ LONG *pDelta)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnMoveEndUntil(ITextRange *me, VARIANT *Cset, LONG Count,
+ LONG *pDelta)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnFindText(ITextRange *me, BSTR bstr, LONG cch, LONG Flags,
+ LONG *pLength)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnFindTextStart(ITextRange *me, BSTR bstr, LONG cch,
+ LONG Flags, LONG *pLength)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnFindTextEnd(ITextRange *me, BSTR bstr, LONG cch,
+ LONG Flags, LONG *pLength)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnDelete(ITextRange *me, LONG Unit, LONG Count,
+ LONG *pDelta)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnCut(ITextRange *me, VARIANT *pVar)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnCopy(ITextRange *me, VARIANT *pVar)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnPaste(ITextRange *me, VARIANT *pVar, LONG Format)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnCanPaste(ITextRange *me, VARIANT *pVar, LONG Format,
+ LONG *pb)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnCanEdit(ITextRange *me, LONG *pb)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnChangeCase(ITextRange *me, LONG Type)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnGetPoint(ITextRange *me, LONG Type, LONG *cx, LONG *cy)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnSetPoint(ITextRange *me, LONG x, LONG y, LONG Type,
+ LONG Extend)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnScrollIntoView(ITextRange *me, LONG Value)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ITextRange_fnGetEmbeddedObject(ITextRange *me, IUnknown **ppv)
+{
+ ITextRangeImpl *This = impl_from_ITextRange(me);
+ if (!This->reOle)
+ return CO_E_RELEASED;
+
+ FIXME("not implemented %p\n", This);
+ return E_NOTIMPL;
+}
+
+static const ITextRangeVtbl trvt = {
+ ITextRange_fnQueryInterface,
+ ITextRange_fnAddRef,
+ ITextRange_fnRelease,
+ ITextRange_fnGetTypeInfoCount,
+ ITextRange_fnGetTypeInfo,
+ ITextRange_fnGetIDsOfNames,
+ ITextRange_fnInvoke,
+ ITextRange_fnGetText,
+ ITextRange_fnSetText,
+ ITextRange_fnGetChar,
+ ITextRange_fnSetChar,
+ ITextRange_fnGetDuplicate,
+ ITextRange_fnGetFormattedText,
+ ITextRange_fnSetFormattedText,
+ ITextRange_fnGetStart,
+ ITextRange_fnSetStart,
+ ITextRange_fnGetEnd,
+ ITextRange_fnSetEnd,
+ ITextRange_fnGetFont,
+ ITextRange_fnSetFont,
+ ITextRange_fnGetPara,
+ ITextRange_fnSetPara,
+ ITextRange_fnGetStoryLength,
+ ITextRange_fnGetStoryType,
+ ITextRange_fnCollapse,
+ ITextRange_fnExpand,
+ ITextRange_fnGetIndex,
+ ITextRange_fnSetIndex,
+ ITextRange_fnSetRange,
+ ITextRange_fnInRange,
+ ITextRange_fnInStory,
+ ITextRange_fnIsEqual,
+ ITextRange_fnSelect,
+ ITextRange_fnStartOf,
+ ITextRange_fnEndOf,
+ ITextRange_fnMove,
+ ITextRange_fnMoveStart,
+ ITextRange_fnMoveEnd,
+ ITextRange_fnMoveWhile,
+ ITextRange_fnMoveStartWhile,
+ ITextRange_fnMoveEndWhile,
+ ITextRange_fnMoveUntil,
+ ITextRange_fnMoveStartUntil,
+ ITextRange_fnMoveEndUntil,
+ ITextRange_fnFindText,
+ ITextRange_fnFindTextStart,
+ ITextRange_fnFindTextEnd,
+ ITextRange_fnDelete,
+ ITextRange_fnCut,
+ ITextRange_fnCopy,
+ ITextRange_fnPaste,
+ ITextRange_fnCanPaste,
+ ITextRange_fnCanEdit,
+ ITextRange_fnChangeCase,
+ ITextRange_fnGetPoint,
+ ITextRange_fnSetPoint,
+ ITextRange_fnScrollIntoView,
+ ITextRange_fnGetEmbeddedObject
+};
+/* ITextRange interface */
+