/*
 * Copyright 2006 Juan Lang
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

import "oaidl.idl";
import "ocidl.idl";

cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
cpp_quote("#undef FindText")
cpp_quote("#endif")

typedef enum tagTomConstants
{
    tomFalse       = (int) 0,
    tomTrue        = (int) -1,
    tomUndefined   = (int) -9999999,
    tomToggle      = (int) -9999998,
    tomAutoColor   = (int) -9999997,
    tomDefault     = (int) -9999996,
    tomSuspend     = (int) -9999995,
    tomResume      = (int) -9999994,

    /* ITextFont::Reset() modes */
    tomApplyNow         = (int) 0,
    tomApplyLater       = (int) 1,
    tomTrackParms       = (int) 2,
    tomCacheParms       = (int) 3,
    tomApplyTmp         = (int) 4,
    tomDisableSmartFont = (int) 8,
    tomEnableSmartFont  = (int) 9,
    tomUsePoints        = (int) 10,
    tomUseTwips         = (int) 11,

    tomBackward    = (int) 0xc0000001,
    tomForward     = (int) 0x3fffffff,
    tomMove        = (int) 0,
    tomExtend      = (int) 1,
    tomNoSelection          = (int) 0,
    tomSelectionIP          = (int) 1,
    tomSelectionNormal      = (int) 2,
    tomSelectionFrame       = (int) 3,
    tomSelectionColumn      = (int) 4,
    tomSelectionRow         = (int) 5,
    tomSelectionBlock       = (int) 6,
    tomSelectionInlineShape = (int) 7,
    tomSelectionShape       = (int) 8,
    tomSelStartActive = (int) 1,
    tomSelAtEOL       = (int) 2,
    tomSelOvertype    = (int) 4,
    tomSelActive      = (int) 8,
    tomSelReplace     = (int) 16,
    tomEnd   = (int) 0,
    tomStart = (int) 32,
    tomCollapseEnd   = (int) 0,
    tomCollapseStart = (int) 1,
    tomClientCoord = (int) 256,
    tomNone       = (int) 0,
    tomSingle     = (int) 1,
    tomWords      = (int) 2,
    tomDouble     = (int) 3,
    tomDotted     = (int) 4,
    tomDash       = (int) 5,
    tomDashDot    = (int) 6,
    tomDashDotDot = (int) 7,
    tomWave       = (int) 8,
    tomThick      = (int) 9,
    tomHair       = (int) 10,
    tomLineSpaceSingle   = (int) 0,
    tomLineSpace1pt5     = (int) 1,
    tomLineSpaceDouble   = (int) 2,
    tomLineSpaceAtLeast  = (int) 3,
    tomLineSpaceExactly  = (int) 4,
    tomLineSpaceMultiple = (int) 5,
    tomAlignLeft        = (int) 0,
    tomAlignCenter      = (int) 1,
    tomAlignRight       = (int) 2,
    tomAlignJustify     = (int) 3,
    tomAlignDecimal     = (int) 3,
    tomAlignBar         = (int) 4,
    tomAlignInterWord   = (int) 3,
    tomAlignInterLetter = (int) 4,
    tomAlignScaled      = (int) 5,
    tomAlignGlyphs      = (int) 6,
    tomAlignSnapGrid    = (int) 7,
    tomSpaces     = (int) 0,
    tomDots       = (int) 1,
    tomDashes     = (int) 2,
    tomLines      = (int) 3,
    tomThickLines = (int) 4,
    tomEquals     = (int) 5,
    tomTabBack = (int) -3,
    tomTabNext = (int) -2,
    tomTabHere = (int) -1,
    tomListBullet           = (int) 1,
    tomListNumberAsArabic   = (int) 2,
    tomListNumberAsLCLetter = (int) 3,
    tomListNumberAsUCLetter = (int) 4,
    tomListNumberAsLCRoman  = (int) 5,
    tomListNumberAsUCRoman  = (int) 6,
    tomListNumberAsSequence = (int) 7,
    tomListParentheses      = (int) 0x10000,
    tomListPeriod           = (int) 0x20000,
    tomListPlain            = (int) 0x30000,
    tomCharacter  = (int) 1,
    tomWord       = (int) 2,
    tomSentence   = (int) 3,
    tomParagraph  = (int) 4,
    tomLine       = (int) 5,
    tomStory      = (int) 6,
    tomScreen     = (int) 7,
    tomSection    = (int) 8,
    tomColumn     = (int) 9,
    tomRow        = (int) 10,
    tomWindow     = (int) 11,
    tomCell       = (int) 12,
    tomCharFormat = (int) 13,
    tomParaFormat = (int) 14,
    tomTable      = (int) 15,
    tomObject     = (int) 16,
    tomMatchWord    = (int) 2,
    tomMatchCase    = (int) 4,
    tomMatchPattern = (int) 8,

    /* ITextRange story type values */
    tomUnknownStory         = (int) 0,
    tomMainTextStory        = (int) 1,
    tomFootnotesStory       = (int) 2,
    tomEndnotesStory        = (int) 3,
    tomCommentsStory        = (int) 4,
    tomTextFrameStory       = (int) 5,
    tomEvenPagesHeaderStory = (int) 6,
    tomPrimaryHeaderStory   = (int) 7,
    tomEvenPagesFooterStory = (int) 8,
    tomPrimaryFooterStory   = (int) 9,
    tomFirstPageHeaderStory = (int) 10,
    tomFirstPageFooterStory = (int) 11,

    /* ITextFont animation property */
    tomNoAnimation        = (int) 0,
    tomLasVegasLights     = (int) 1,
    tomBlinkingBackground = (int) 2,
    tomSparkleText        = (int) 3,
    tomMarchingBlackAnts  = (int) 4,
    tomMarchingRedAnts    = (int) 5,
    tomShimmer            = (int) 6,
    tomWipeDown           = (int) 7,
    tomWipeRight          = (int) 8,
    tomAnimationMax       = (int) 8,

    tomLowerCase     = (int) 0,
    tomUpperCase     = (int) 1,
    tomTitleCase     = (int) 2,
    tomSentenceCase  = (int) 4,
    tomToggleCase    = (int) 5,
    tomReadOnly         = (int) 0x100,
    tomShareDenyRead    = (int) 0x200,
    tomShareDenyWrite   = (int) 0x400,
    tomPasteFile        = (int) 0x1000,
    tomCreateNew        = (int) 0x10,
    tomCreateAlways     = (int) 0x20,
    tomOpenExisting     = (int) 0x30,
    tomOpenAlways       = (int) 0x40,
    tomTruncateExisting = (int) 0x50,
    tomRTF              = (int) 0x1,
    tomText             = (int) 0x2,
    tomHTML             = (int) 0x3,
    tomWordDocument     = (int) 0x4,
    tomBold      = (int) 0x80000001,
    tomItalic    = (int) 0x80000002,
    tomUnderline = (int) 0x80000004,
    tomStrikeout = (int) 0x80000008,
    tomProtected = (int) 0x80000010,
    tomLink      = (int) 0x80000020,
    tomSmallCaps = (int) 0x80000040,
    tomAllCaps   = (int) 0x80000080,
    tomHidden    = (int) 0x80000100,
    tomOutline   = (int) 0x80000200,
    tomShadow    = (int) 0x80000400,
    tomEmboss    = (int) 0x80000800,
    tomImprint   = (int) 0x80001000,
    tomDisabled  = (int) 0x80002000,
    tomRevised   = (int) 0x80004000,
    tomNormalCaret      = (int) 0,
    tomKoreanBlockCaret = (int) 0x1,
    tomIncludeInset = (int) 0x1,
    tomIgnoreCurrentFont  = (int) 0,
    tomMatchFontCharset   = (int) 0x1,
    tomMatchFontSignature = (int) 0x2,
    tomCharset = (int) 0x80000000,
    tomRE10Mode = (int) 0x1,
    tomNoIME   = (int) 0x80000,
    tomSelfIME = (int) 0x40000
} tomConstants;

interface ITextRange;
interface ITextSelection;
interface ITextStoryRanges;

[
  object,
  uuid(8cc497c0-a1df-11ce-8098-00aa0047be5d)
]
interface ITextDocument : IDispatch
{
    HRESULT GetName([retval, out]BSTR *pName);
    HRESULT GetSelection([retval, out]ITextSelection **ppSel);
    HRESULT GetStoryCount([retval, out]LONG *pCount);
    HRESULT GetStoryRanges([retval, out]ITextStoryRanges **ppStories);
    HRESULT GetSaved([retval, out]LONG *pValue);
    HRESULT SetSaved([in]LONG Value);
    HRESULT GetDefaultTabStop([retval, out]float *pValue);
    HRESULT SetDefaultTabStop([in]float Value);
    HRESULT New();
    HRESULT Open([in]VARIANT *pVar, [in]LONG Flags, [in]LONG CodePage);
    HRESULT Save([in]VARIANT *pVar, [in]LONG Flags, [in]LONG CodePage);
    HRESULT Freeze([retval, out]LONG *pCount);
    HRESULT Unfreeze([retval, out]LONG *pCount);
    HRESULT BeginEditCollection();
    HRESULT EndEditCollection();
    HRESULT Undo([in]LONG Count, [retval, out]LONG *prop);
    HRESULT Redo([in]LONG Count, [retval, out]LONG *prop);
    HRESULT Range([in]LONG cp1, [in]LONG cp2, [retval, out]ITextRange **ppRange);
    HRESULT RangeFromPoint([in]LONG x, [in]LONG y, [retval, out]ITextRange **ppRange);
}

[
  object,
  uuid(01c25500-4268-11d1-883a-3c8b00c10000)
]
interface ITextDocument2Old : ITextDocument
{
    HRESULT AttachMsgFilter([in]IUnknown *filter);
    HRESULT SetEffectColor([in]LONG index, [in]COLORREF cr);
    HRESULT GetEffectColor([in]LONG index, [out]COLORREF *cr);
    HRESULT GetCaretType([retval, out]LONG *type);
    HRESULT SetCaretType([in]LONG type);
    HRESULT GetImmContext([retval, out]LONG *context);
    HRESULT ReleaseImmContext([in]LONG context);
    HRESULT GetPreferredFont([in]LONG cp, [in]LONG codepage, [in]LONG option, [in]LONG current_codepage, [in]LONG current_fontsize,
                             [out]BSTR *bstr, [out]LONG *pitch_family, [out]LONG *new_fontsize);
    HRESULT GetNotificationMode([retval, out]LONG *mode);
    HRESULT SetNotificationMode([in]LONG mode);
    HRESULT GetClientRect([in]LONG type, [out]LONG *left, [out]LONG *top, [out]LONG *right, [out]LONG *bottom);
    HRESULT GetSelectionEx([retval, out]ITextSelection **selection);
    HRESULT GetWindow([out]LONG *hwnd);
    HRESULT GetFEFlags([out]LONG *flags);
    HRESULT UpdateWindow();
    HRESULT CheckTextLimit([in]LONG cch, [out]LONG  *exceed);
    HRESULT IMEInProgress([in]LONG mode);
    HRESULT SysBeep();
    HRESULT Update([in]LONG mode);
    HRESULT Notify([in]LONG notify);
}

interface ITextDisplays;
interface ITextFont2;
interface ITextPara2;
interface ITextRange2;
interface ITextSelection2;
interface ITextStory;
interface ITextStoryRanges2;
interface ITextStrings;

[
    object,
    uuid(c241f5ef-7206-11d8-a2c7-00a0d1d6c6b3)
]
interface ITextRow : IDispatch
{
    HRESULT GetAlignment([retval, out] LONG *value);
    HRESULT SetAlignment([in] LONG value);
    HRESULT GetCellCount([retval, out] LONG *value);
    HRESULT SetCellCount([in] LONG value);
    HRESULT GetCellCountCache([retval, out] LONG *value);
    HRESULT SetCellCountCache([in] LONG value);
    HRESULT GetCellIndex([retval, out] LONG *value);
    HRESULT SetCellIndex([in] LONG value);
    HRESULT GetCellMargin([retval, out] LONG *value);
    HRESULT SetCellMargin([in] LONG value);
    HRESULT GetHeight([retval, out] LONG *value);
    HRESULT SetHeight([in] LONG value);
    HRESULT GetIndent([retval, out] LONG *value);
    HRESULT SetIndent([in] LONG value);
    HRESULT GetKeepTogether([retval, out] LONG *value);
    HRESULT SetKeepTogether([in] LONG value);
    HRESULT GetKeepWithNext([retval, out] LONG *value);
    HRESULT SetKeepWithNext([in] LONG value);
    HRESULT GetNestLevel([retval, out] LONG *value);
    HRESULT GetRTL([retval, out] LONG *value);
    HRESULT SetRTL([in] LONG value);
    HRESULT GetCellAlignment([retval, out] LONG *value);
    HRESULT SetCellAlignment([in] LONG value);
    HRESULT GetCellColorBack([retval, out] LONG *value);
    HRESULT SetCellColorBack([in] LONG value);
    HRESULT GetCellColorFore([retval, out] LONG *value);
    HRESULT SetCellColorFore([in] LONG value);
    HRESULT GetCellMergeFlags([retval, out] LONG *value);
    HRESULT SetCellMergeFlags([in] LONG value);
    HRESULT GetCellShading([retval, out] LONG *value);
    HRESULT SetCellShading([in] LONG value);
    HRESULT GetCellVerticalText([retval, out] LONG *value);
    HRESULT SetCellVerticalText([in] LONG value);
    HRESULT GetCellWidth([retval, out] LONG *value);
    HRESULT SetCellWidth([in] LONG value);
    HRESULT GetCellBorderColors([out] LONG *left, [out] LONG *top,
            [out] LONG *right, [out] LONG *bottom);
    HRESULT GetCellBorderWidths([out] LONG *left, [out] LONG *top,
            [out] LONG *right, [out] LONG *bottom);
    HRESULT SetCellBorderColors([in] LONG left, [in] LONG top,
            [in] LONG right, [in] LONG bottom);
    HRESULT SetCellBorderWidths([in] LONG left, [in] LONG top,
            [in] LONG right, [in] LONG bottom);
    HRESULT Apply([in] LONG row, [in] LONG flags);
    HRESULT CanChange([retval, out] LONG *value);
    HRESULT GetProperty([in] LONG type, [out] LONG *value);
    HRESULT Insert([in] LONG row);
    HRESULT IsEqual([in] ITextRow *row, [retval, out] LONG *r);
    HRESULT Reset([in] LONG value);
    HRESULT SetProperty([in] LONG type, [in] LONG value);
}

[
  object,
  uuid(c241f5e0-7206-11d8-a2c7-00a0d1d6c6b3)
]
interface ITextDocument2 : ITextDocument
{
    HRESULT GetCaretType([retval, out]LONG *value);
    HRESULT SetCaretType([in]LONG value);
    HRESULT GetDisplays([retval, out]ITextDisplays **displays);
    HRESULT GetDocumentFont([retval, out]ITextFont2 **font);
    HRESULT SetDocumentFont([in]ITextFont2 *font);
    HRESULT GetDocumentPara([retval, out]ITextPara2 **para);
    HRESULT SetDocumentPara([in]ITextPara2 *para);
    HRESULT GetEastAsianFlags([retval, out]LONG *flags);
    HRESULT GetGenerator([retval, out]BSTR *bstr);
    HRESULT SetIMEInProgress([in]LONG value);
    HRESULT GetNotificationMode([retval, out]LONG *mode);
    HRESULT SetNotificationMode([in]LONG mode);
    HRESULT GetSelection2([retval, out]ITextSelection2 **selection);
    HRESULT GetStoryRanges2([retval, out]ITextStoryRanges2 **stories);
    HRESULT GetTypographyOptions([retval, out]LONG *options);
    HRESULT GetVersion([retval, out]LONG *value);
    HRESULT GetWindow([retval, out]LONG *hwnd);
    HRESULT AttachMsgFilter([in]IUnknown *filter);
    HRESULT CheckTextLimit([in]LONG cch, [out]LONG  *exceed);
    HRESULT GetCallManager([retval, out]IUnknown **manager);
    HRESULT GetClientRect([in]LONG type, [out]LONG *left, [out]LONG *top, [out]LONG *right, [out]LONG *bottom);
    HRESULT GetEffectColor([in]LONG index, [out]COLORREF *cr);
    HRESULT GetImmContext([retval, out]LONG *context);
    HRESULT GetPreferredFont([in]LONG cp, [in]LONG codepage, [in]LONG option, [in]LONG current_codepage, [in]LONG current_fontsize,
                             [out]BSTR *bstr, [out]LONG *pitch_family, [out]LONG *new_fontsize);
    HRESULT GetProperty([in]LONG type, [out]LONG *value);
    HRESULT GetStrings([out]ITextStrings **strings);
    HRESULT Notify([in]LONG notify);
    HRESULT Range2([in]LONG cp_active, [in]LONG cp_anchor, [retval, out]ITextRange2 **range);
    HRESULT RangeFromPoint2([in]LONG x, [in]LONG y, [in]LONG type, [retval, out]ITextRange2 **range);
    HRESULT ReleaseCallManager([in]IUnknown *manager);
    HRESULT ReleaseImmContext([in]LONG context);
    HRESULT SetEffectColor([in]LONG index, [in]LONG value);
    HRESULT SetProperty([in]LONG type, [in]LONG value);
    HRESULT SetTypographyOptions([in]LONG options, [in]LONG mask);
    HRESULT SysBeep();
    HRESULT Update([in]LONG value);
    HRESULT UpdateWindow();
    HRESULT GetMathProperties([out]LONG *options);
    HRESULT SetMathProperties([in]LONG options, [in]LONG mask);
    HRESULT GetActiveStory([retval, out]ITextStory **story);
    HRESULT SetActiveStory([in]ITextStory *story);
    HRESULT GetMainStory([retval, out]ITextStory **story);
    HRESULT GetNewStory([retval, out]ITextStory **story);
    HRESULT GetStory([in]LONG index, [retval, out]ITextStory **story);
}

interface ITextFont;
interface ITextPara;

[
  object,
  uuid(8cc497c2-a1df-11ce-8098-00aa0047be5d)
]
interface ITextRange : IDispatch
{
    HRESULT GetText([retval, out]BSTR *pbstr);
    HRESULT SetText([in]BSTR bstr);
    HRESULT GetChar([retval, out]LONG *pch);
    HRESULT SetChar([in]LONG ch);
    HRESULT GetDuplicate([retval, out]ITextRange **ppRange);
    HRESULT GetFormattedText([retval, out]ITextRange **ppRange);
    HRESULT SetFormattedText([in]ITextRange *pRange);
    HRESULT GetStart([retval, out]LONG *pcpFirst);
    HRESULT SetStart([in]LONG cpFirst);
    HRESULT GetEnd([retval, out]LONG *pcpLim);
    HRESULT SetEnd([in]LONG cpLim);
    HRESULT GetFont([retval, out]ITextFont **pFont);
    HRESULT SetFont([in]ITextFont *pFont);
    HRESULT GetPara([retval, out]ITextPara **ppPara);
    HRESULT SetPara([in]ITextPara *pPara);
    HRESULT GetStoryLength([retval, out]LONG *pcch);
    HRESULT GetStoryType([retval, out]LONG *pValue);
    HRESULT Collapse([in]LONG bStart);
    HRESULT Expand([in]LONG Unit, [retval, out]LONG *pDelta);
    HRESULT GetIndex([in]LONG Unit, [retval, out]LONG *pIndex);
    HRESULT SetIndex([in]LONG Unit, [in]LONG Index, [in]LONG Extend);
    HRESULT SetRange([in]LONG anchor, [in]LONG active);
    HRESULT InRange([in]ITextRange *pRange, [retval, out]LONG *pb);
    HRESULT InStory([in]ITextRange *pRange, [retval, out]LONG *pb);
    HRESULT IsEqual([in]ITextRange *pRange, [retval, out]LONG *pb);
    HRESULT Select();
    HRESULT StartOf([in]LONG Unit, [in]LONG Extend, [retval, out]LONG *pDelta);
    HRESULT EndOf([in]LONG Unit, [in]LONG Extend, [retval, out]LONG *pDelta);
    HRESULT Move([in]LONG Unit, [in]LONG Count, [retval, out]LONG *pDelta);
    HRESULT MoveStart([in]LONG Unit, [in]LONG Count, [retval, out]LONG *pDelta);
    HRESULT MoveEnd([in]LONG Unit, [in]LONG Count, [retval, out]LONG *pDelta);
    HRESULT MoveWhile([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);
    HRESULT MoveStartWhile([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);
    HRESULT MoveEndWhile([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);
    HRESULT MoveUntil([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);
    HRESULT MoveStartUntil([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);
    HRESULT MoveEndUntil([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);
    HRESULT FindText([in]BSTR bstr, [in]LONG cch, [in]LONG Flags, [retval, out]LONG *pLength);
    HRESULT FindTextStart([in]BSTR bstr, [in]LONG cch, [in]LONG Flags, [retval, out]LONG *pLength);
    HRESULT FindTextEnd([in]BSTR bstr, [in]LONG cch, [in]LONG Flags, [retval, out]LONG *pLength);
    HRESULT Delete([in]LONG Unit, [in]LONG Count, [retval, out]LONG *pDelta);
    HRESULT Cut([out]VARIANT *pVar);
    HRESULT Copy([out]VARIANT *pVar);
    HRESULT Paste([in]VARIANT *pVar, [in]LONG Format);
    HRESULT CanPaste([in]VARIANT *pVar, [in]LONG Format, [retval, out]LONG *pb);
    HRESULT CanEdit([retval, out]LONG *pb);
    HRESULT ChangeCase([in]LONG Type);
    HRESULT GetPoint([in]LONG Type, [out]LONG *cx, [out]LONG *cy);
    HRESULT SetPoint([in]LONG x, [in]LONG y, [in]LONG Type, [in]LONG Extend);
    HRESULT ScrollIntoView([in]LONG Value);
    HRESULT GetEmbeddedObject([retval, out]IUnknown **ppv);
}

[
  object,
  uuid(8cc497c1-a1df-11ce-8098-00aa0047be5d)
]
interface ITextSelection : ITextRange
{
    HRESULT GetFlags([retval, out]LONG *pFlags);
    HRESULT SetFlags([in]LONG Flags);
    HRESULT GetType([retval, out]LONG *pType);
    HRESULT MoveLeft([in]LONG Unit, [in]LONG Count, [in]LONG Extend, [retval, out]LONG *pDelta);
    HRESULT MoveRight([in]LONG Unit, [in]LONG Count, [in]LONG Extend, [retval, out]LONG *pDelta);
    HRESULT MoveUp([in]LONG Unit, [in]LONG Count, [in]LONG Extend, [retval, out]LONG *pDelta);
    HRESULT MoveDown([in]LONG Unit, [in]LONG Count, [in]LONG Extend, [retval, out]LONG *pDelta);
    HRESULT HomeKey([in]LONG Unit, [in]LONG Extend, [retval, out]LONG *pDelta);
    HRESULT EndKey([in]LONG Unit, [in]LONG Extend, [retval, out]LONG *pDelta);
    HRESULT TypeText([in]BSTR bstr);
}

[
    object,
    uuid(c241f5e2-7206-11d8-a2c7-00a0d1d6c6b3)
]
interface ITextRange2 : ITextSelection
{
    HRESULT GetCch([retval, out] LONG *count);
    HRESULT GetCells([retval, out] IUnknown **cells);
    HRESULT GetColumn([retval, out] IUnknown **column);
    HRESULT GetCount([retval, out] LONG *count);
    HRESULT GetDuplicate2([retval, out] ITextRange2 **range);
    HRESULT GetFont2([retval, out] ITextFont2 **font);
    HRESULT SetFont2([in] ITextFont2 *font);
    HRESULT GetFormattedText2([retval, out] ITextRange2 **range);
    HRESULT SetFormattedText2([in] ITextRange2 *range);
    HRESULT GetGravity([retval, out] LONG *value);
    HRESULT SetGravity([in] LONG value);
    HRESULT GetPara2([retval, out] ITextPara2 **para);
    HRESULT SetPara2([in] ITextPara2 *para);
    HRESULT GetRow([retval, out] ITextRow **row);
    HRESULT GetStartPara([retval, out] LONG *value);
    HRESULT GetTable([retval, out] IUnknown **table);
    HRESULT GetURL([retval, out] BSTR *url);
    HRESULT SetURL([in] BSTR url);
    HRESULT AddSubrange([in] LONG cp1, [in] LONG cp2, [in] LONG activate);
    HRESULT BuildUpMath([in] LONG flags);
    HRESULT DeleteSubrange([in] LONG first, [in] LONG lim);
    HRESULT Find([in] ITextRange2 *range, [in] LONG count, [in] LONG flags, [out] LONG *delta);
    HRESULT GetChar2([out] LONG *ch, [in] LONG offset);
    HRESULT GetDropCap([out] LONG *line, [out] LONG *pos);
    HRESULT GetInlineObject([out] LONG *type, [out] LONG *align, [out] LONG *ch,
            [out] LONG *ch1, [out] LONG *ch2, [out] LONG *count, [out] LONG *texstyle,
            [out] LONG *ccol, [out] LONG *level);
    HRESULT GetProperty([in] LONG type, [out] LONG *value);
    HRESULT GetRect([in] LONG type, [out] LONG *left, [out] LONG *top,
            [out] LONG *right, [out] LONG *bottom, [out] LONG *hit);
    HRESULT GetSubrange([in] LONG subrange, [out] LONG *first, [out] LONG *limit);
    HRESULT GetText2([in] LONG flags, [out] BSTR *str);
    HRESULT HexToUnicode();
    HRESULT InsertTable([in] LONG col, [in] LONG row, [in] LONG autofit);
    HRESULT Linearize([in] LONG flags);
    HRESULT SetActiveSubrange([in] LONG anchor, [in] LONG active);
    HRESULT SetDropCap([in] LONG line, [in] LONG pos);
    HRESULT SetProperty([in] LONG type, [in] LONG value);
    HRESULT SetText2([in] LONG flags, [in] BSTR str);
    HRESULT UnicodeToHex();
    HRESULT SetInlineObject([in] LONG type, [in] LONG align, [in] LONG ch,
            [in] LONG ch1, [in] LONG ch2, [in] LONG count, [in] LONG texstyle,
            [in] LONG ccol);
    HRESULT GetMathFunctionType([in] BSTR str, [out] LONG *value);
    HRESULT InsertImage([in] LONG width, [in] LONG height, [in] LONG ascent,
            [in] LONG type, [in] BSTR alttext, [in] IStream *stream);
}

[
    object,
    uuid(c241f5e1-7206-11d8-a2c7-00a0d1d6c6b3)
]
interface ITextSelection2 : ITextRange2
{
}


[
  object,
  uuid(8cc497c3-a1df-11ce-8098-00aa0047be5d)
]
interface ITextFont : IDispatch
{
    HRESULT GetDuplicate([retval, out]ITextFont **ppFont);
    HRESULT SetDuplicate([in]ITextFont *pFont);
    HRESULT CanChange([out]LONG *pB);
    HRESULT IsEqual([in]ITextFont *pFont, [retval, out]LONG *pB);
    HRESULT Reset([in]LONG Value);
    HRESULT GetStyle([retval, out]LONG *pValue);
    HRESULT SetStyle([in]LONG Value);
    HRESULT GetAllCaps([retval, out]LONG *pValue);
    HRESULT SetAllCaps([in]LONG Value);
    HRESULT GetAnimation([retval, out]LONG *pValue);
    HRESULT SetAnimation([in]LONG Value);
    HRESULT GetBackColor([retval, out]LONG *pValue);
    HRESULT SetBackColor([in]LONG Value);
    HRESULT GetBold([retval, out]LONG *pValue);
    HRESULT SetBold([in]LONG Value);
    HRESULT GetEmboss([retval, out]LONG *pValue);
    HRESULT SetEmboss([in]LONG Value);
    HRESULT GetForeColor([retval, out]LONG *pValue);
    HRESULT SetForeColor([in]LONG Value);
    HRESULT GetHidden([retval, out]LONG *pValue);
    HRESULT SetHidden([in]LONG Value);
    HRESULT GetEngrave([retval, out]LONG *pValue);
    HRESULT SetEngrave([in]LONG Value);
    HRESULT GetItalic([retval, out]LONG *pValue);
    HRESULT SetItalic([in]LONG Value);
    HRESULT GetKerning([retval, out]float *pValue);
    HRESULT SetKerning([in]float Value);
    HRESULT GetLanguageID([retval, out]LONG *pValue);
    HRESULT SetLanguageID([in]LONG Value);
    HRESULT GetName([retval, out]BSTR *pValue);
    HRESULT SetName([in]BSTR Value);
    HRESULT GetOutline([retval, out]LONG *pValue);
    HRESULT SetOutline([in]LONG Value);
    HRESULT GetPosition([retval, out]float *pValue);
    HRESULT SetPosition([in]float Value);
    HRESULT GetProtected([retval, out]LONG *pValue);
    HRESULT SetProtected([in]LONG Value);
    HRESULT GetShadow([retval, out]LONG *pValue);
    HRESULT SetShadow([in]LONG Value);
    HRESULT GetSize([retval, out]float *pValue);
    HRESULT SetSize([in]float Value);
    HRESULT GetSmallCaps([retval, out]LONG *pValue);
    HRESULT SetSmallCaps([in]LONG Value);
    HRESULT GetSpacing([retval, out]float *pValue);
    HRESULT SetSpacing([in]float Value);
    HRESULT GetStrikeThrough([retval, out]LONG *pValue);
    HRESULT SetStrikeThrough([in]LONG Value);
    HRESULT GetSubscript([retval, out]LONG *pValue);
    HRESULT SetSubscript([in]LONG Value);
    HRESULT GetSuperscript([retval, out]LONG *pValue);
    HRESULT SetSuperscript([in]LONG Value);
    HRESULT GetUnderline([retval, out]LONG *pValue);
    HRESULT SetUnderline([in]LONG Value);
    HRESULT GetWeight([retval, out]LONG *pValue);
    HRESULT SetWeight([in]LONG Value);
}

[
  object,
  uuid(8cc497c4-a1df-11ce-8098-00aa0047be5d)
]
interface ITextPara : IDispatch
{
    HRESULT GetDuplicate([retval, out]ITextPara **ppPara);
    HRESULT SetDuplicate([in]ITextPara *pPara);
    HRESULT CanChange([out]LONG *pB);
    HRESULT IsEqual([in]ITextPara *pPara, [retval, out]LONG *pB);
    HRESULT Reset([in]LONG Value);
    HRESULT GetStyle([retval, out]LONG *pValue);
    HRESULT SetStyle([in]LONG Value);
    HRESULT GetAlignment([retval, out]LONG *pValue);
    HRESULT SetAlignment([in]LONG Value);
    HRESULT GetHyphenation([retval, out]LONG *pValue);
    HRESULT SetHyphenation([in]LONG Value);
    HRESULT GetFirstLineIndent([retval, out]float *pValue);
    HRESULT GetKeepTogether([retval, out]LONG *pValue);
    HRESULT SetKeepTogether([in]LONG Value);
    HRESULT GetKeepWithNext([retval, out]LONG *pValue);
    HRESULT SetKeepWithNext([in]LONG Value);
    HRESULT GetLeftIndent([retval, out]float *pValue);
    HRESULT GetLineSpacing([retval, out]float *pValue);
    HRESULT GetLineSpacingRule([retval, out]LONG *pValue);
    HRESULT GetListAlignment([retval, out]LONG *pValue);
    HRESULT SetListAlignment([in]LONG Value);
    HRESULT GetListLevelIndex([retval, out]LONG *pValue);
    HRESULT SetListLevelIndex([in]LONG Value);
    HRESULT GetListStart([retval, out]LONG *pValue);
    HRESULT SetListStart([in]LONG Value);
    HRESULT GetListTab([retval, out]float *pValue);
    HRESULT SetListTab([in]float Value);
    HRESULT GetListType([retval, out]LONG *pValue);
    HRESULT SetListType([in]LONG Value);
    HRESULT GetNoLineNumber([retval, out]LONG *pValue);
    HRESULT SetNoLineNumber([in]LONG Value);
    HRESULT GetPageBreakBefore([retval, out]LONG *pValue);
    HRESULT SetPageBreakBefore([in]LONG Value);
    HRESULT GetRightIndent([retval, out]float *pValue);
    HRESULT SetRightIndent([in]float Value);
    HRESULT SetIndents([in]float StartIndent, [in]float LeftIndent, [in]float RightIndent);
    HRESULT SetLineSpacing([in]LONG LineSpacingRule, [in]float LineSpacing);
    HRESULT GetSpaceAfter([retval, out]float *pValue);
    HRESULT SetSpaceAfter([in]float Value);
    HRESULT GetSpaceBefore([retval, out]float *pValue);
    HRESULT SetSpaceBefore([in]float Value);
    HRESULT GetWidowControl([retval, out]LONG *pValue);
    HRESULT SetWidowControl([in]LONG Value);
    HRESULT GetTabCount([retval, out]LONG *pCount);
    HRESULT AddTab([in]float tbPos, [in]LONG tbAlign, [in]LONG tbLeader);
    HRESULT ClearAllTabs();
    HRESULT DeleteTab([in]float tbPos);
    HRESULT GetTab([in]LONG iTab, [out]float *ptbPos, [out]LONG *ptbAlign, [out]LONG *ptbLeader);
}

[
  object,
  uuid(8cc497c5-a1df-11ce-8098-00aa0047be5d)
]
interface ITextStoryRanges : IDispatch
{
    HRESULT _NewEnum([retval, out]IUnknown **ppUnkEnum);
    HRESULT Item([in]LONG Index, [retval, out]ITextRange **ppRange);
    HRESULT GetCount([retval, out]LONG *pCount);
}
