/*
 * Copyright 2006 Juan Lang
 * Copyright 2015 Nikolay Sivov for CodeWeavers
 *
 * 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 "unknwn.idl";
import "objidl.idl";
import "oaidl.idl";

#pragma makedep regtypelib

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

[
    uuid(8cc497c9-a1df-11ce-8098-00aa0047be5d),
    version(1.0)
]
library tom
{

importlib("stdole2.tlb");

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

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

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

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

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

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

interface ITextRange;
interface ITextSelection;
interface ITextStoryRanges;

[
    uuid(8cc497c0-a1df-11ce-8098-00aa0047be5d),
    object,
    dual,
    oleautomation
]
interface ITextDocument : IDispatch
{
    [propget, id(DISPID_VALUE)]
    HRESULT Name([retval, out] BSTR *name);

    [propget]
    HRESULT Selection([retval, out] ITextSelection **selection);

    [propget]
    HRESULT StoryCount([retval, out] LONG *count);

    [propget]
    HRESULT StoryRanges([retval, out] ITextStoryRanges **ranges);

    [propget]
    HRESULT Saved([retval, out] LONG *value);

    [propput]
    HRESULT Saved([in] LONG value);

    [propget]
    HRESULT DefaultTabStop([retval, out] float *value);

    [propput]
    HRESULT DefaultTabStop([in] float value);

    HRESULT New();

    HRESULT Open([in] VARIANT *var, [in] LONG flags, [in] LONG codepage);

    HRESULT Save([in] VARIANT *var, [in] LONG flags, [in] LONG codepage);

    HRESULT Freeze([retval, out] LONG *count);
    HRESULT Unfreeze([retval, out] LONG *count);
    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 start, [in] LONG end, [retval, out] ITextRange **range);
    HRESULT RangeFromPoint([in] LONG x, [in] LONG y, [retval, out] ITextRange **range);
}

interface ITextFont;
interface ITextPara;

[
    uuid(8cc497c2-a1df-11ce-8098-00aa0047be5d),
    object,
    dual,
    oleautomation
]
interface ITextRange : IDispatch
{
    [propget, id(DISPID_VALUE)]
    HRESULT Text([retval, out] BSTR *text);

    [propput, id(DISPID_VALUE)]
    HRESULT Text([in] BSTR text);

    [propget]
    HRESULT Char([retval, out] LONG *ch);

    [propput]
    HRESULT Char([in] LONG ch);

    [propget]
    HRESULT Duplicate([retval, out] ITextRange **range);

    [propget]
    HRESULT FormattedText([retval, out] ITextRange **range);

    [propput]
    HRESULT FormattedText([in] ITextRange *range);

    [propget]
    HRESULT Start([retval, out] LONG *start);

    [propput]
    HRESULT Start([in] LONG start);

    [propget]
    HRESULT End([retval, out] LONG *end);

    [propput]
    HRESULT End([in] LONG end);

    [propget]
    HRESULT Font([retval, out] ITextFont **font);

    [propput]
    HRESULT Font([in] ITextFont *font);

    [propget]
    HRESULT Para([retval, out] ITextPara **para);

    [propput]
    HRESULT Para([in] ITextPara *para);

    [propget]
    HRESULT StoryLength([retval, out] LONG *len);

    [propget]
    HRESULT StoryType([retval, out] LONG *value);

    HRESULT Collapse([in] LONG start);
    HRESULT Expand([in] LONG unit, [retval, out] LONG *delta);
    HRESULT GetIndex([in] LONG unit, [retval, out] LONG *index);
    HRESULT SetIndex([in] LONG unit, [in] LONG index, [in] LONG extend);
    HRESULT SetRange([in] LONG anchor, [in] LONG active);
    HRESULT InRange([in] ITextRange *range, [retval, out] LONG *pb);
    HRESULT InStory([in] ITextRange *range, [retval, out] LONG *pb);
    HRESULT IsEqual([in] ITextRange *range, [retval, out] LONG *pb);
    HRESULT Select();
    HRESULT StartOf([in] LONG unit, [in] LONG extend, [retval, out] LONG *delta);
    HRESULT EndOf([in] LONG unit, [in] LONG extend, [retval, out] LONG *delta);
    HRESULT Move([in] LONG unit, [in] LONG count, [retval, out] LONG *delta);
    HRESULT MoveStart([in] LONG unit, [in] LONG count, [retval, out] LONG *delta);
    HRESULT MoveEnd([in] LONG unit, [in] LONG count, [retval, out] LONG *delta);
    HRESULT MoveWhile([in] VARIANT *charset, [in] LONG count, [retval, out] LONG *delta);
    HRESULT MoveStartWhile([in] VARIANT *charset, [in] LONG count, [retval, out] LONG *delta);
    HRESULT MoveEndWhile([in] VARIANT *charset, [in] LONG count, [retval, out] LONG *delta);
    HRESULT MoveUntil([in] VARIANT *charset, [in] LONG count, [retval, out] LONG *delta);
    HRESULT MoveStartUntil([in] VARIANT *charset, [in] LONG count, [retval, out] LONG *delta);
    HRESULT MoveEndUntil([in] VARIANT *charset, [in] LONG count, [retval, out] LONG *delta);
    HRESULT FindText([in] BSTR str, [in] LONG ch, [in] LONG flags, [retval, out] LONG *len);
    HRESULT FindTextStart([in] BSTR str, [in] LONG cch, [in] LONG flags, [retval, out] LONG *len);
    HRESULT FindTextEnd([in] BSTR str, [in] LONG ch, [in] LONG flags, [retval, out] LONG *len);
    HRESULT Delete([in] LONG unit, [in] LONG count, [retval, out] LONG *delta);
    HRESULT Cut([out] VARIANT *var);
    HRESULT Copy([out] VARIANT *var);
    HRESULT Paste([in] VARIANT *var, [in] LONG format);
    HRESULT CanPaste([in] VARIANT *var, [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);
}

[
    uuid(8cc497c1-a1df-11ce-8098-00aa0047be5d),
    object,
    dual,
    oleautomation
]
interface ITextSelection : ITextRange
{
    [propget]
    HRESULT Flags([retval, out] LONG *flags);

    [propput]
    HRESULT Flags([in] LONG flags);

    [propget]
    HRESULT Type([retval, out] LONG *type);

    HRESULT MoveLeft([in] LONG unit, [in] LONG count, [in] LONG extend, [retval, out] LONG *delta);
    HRESULT MoveRight([in] LONG unit, [in] LONG count, [in] LONG extend, [retval, out] LONG *delta);
    HRESULT MoveUp([in] LONG unit, [in] LONG count, [in] LONG extend, [retval, out] LONG *delta);
    HRESULT MoveDown([in] LONG unit, [in] LONG count, [in] LONG extend, [retval, out] LONG *delta);
    HRESULT HomeKey([in] LONG unit, [in] LONG extend, [retval, out] LONG *delta);
    HRESULT EndKey([in] LONG unit, [in] LONG extend, [retval, out] LONG *delta);
    HRESULT TypeText([in] BSTR str);
}

[
    uuid(8cc497c3-a1df-11ce-8098-00aa0047be5d),
    object,
    dual,
    oleautomation
]
interface ITextFont : IDispatch
{
    [propget, id(DISPID_VALUE)]
    HRESULT Duplicate([retval, out] ITextFont **font);

    [propput, id(DISPID_VALUE)]
    HRESULT Duplicate([in] ITextFont *font);

    HRESULT CanChange([out] LONG *pB);
    HRESULT IsEqual([in] ITextFont *font, [retval, out] LONG *pB);
    HRESULT Reset([in] LONG value);

    [propget]
    HRESULT GetStyle([retval, out] LONG *value);

    [propput]
    HRESULT SetStyle([in] LONG value);

    [propget]
    HRESULT AllCaps([retval, out] LONG *value);

    [propput]
    HRESULT AllCaps([in] LONG value);

    [propget]
    HRESULT Animation([retval, out] LONG *value);

    [propput]
    HRESULT Animation([in] LONG value);

    [propget]
    HRESULT BackColor([retval, out] LONG *value);

    [propput]
    HRESULT BackColor([in] LONG value);

    [propget]
    HRESULT Bold([retval, out] LONG *value);

    [propput]
    HRESULT Bold([in] LONG value);

    [propget]
    HRESULT Emboss([retval, out] LONG *value);

    [propput]
    HRESULT Emboss([in] LONG value);

    [propget]
    HRESULT ForeColor([retval, out] LONG *value);

    [propput]
    HRESULT ForeColor([in] LONG value);

    [propget]
    HRESULT Hidden([retval, out] LONG *value);

    [propput]
    HRESULT Hidden([in] LONG value);

    [propget]
    HRESULT Engrave([retval, out] LONG *value);

    [propput]
    HRESULT Engrave([in] LONG value);

    [propget]
    HRESULT Italic([retval, out] LONG *value);

    [propput]
    HRESULT Italic([in] LONG value);

    [propget]
    HRESULT Kerning([retval, out] float *value);

    [propput]
    HRESULT Kerning([in] float value);

    [propget]
    HRESULT LanguageID([retval, out] LONG *value);

    [propput]
    HRESULT LanguageID([in] LONG value);

    [propget]
    HRESULT Name([retval, out] BSTR *value);

    [propput]
    HRESULT Name([in] BSTR value);

    [propget]
    HRESULT Outline([retval, out] LONG *value);

    [propput]
    HRESULT Outline([in] LONG value);

    [propget]
    HRESULT Position([retval, out] float *value);

    [propput]
    HRESULT Position([in] float value);

    [propget]
    HRESULT Protected([retval, out] LONG *value);

    [propput]
    HRESULT Protected([in] LONG value);

    [propget]
    HRESULT Shadow([retval, out] LONG *value);

    [propput]
    HRESULT Shadow([in] LONG value);

    [propget]
    HRESULT Size([retval, out] float *value);

    [propput]
    HRESULT Size([in] float value);

    [propget]
    HRESULT SmallCaps([retval, out] LONG *value);

    [propput]
    HRESULT SmallCaps([in] LONG value);

    [propget]
    HRESULT Spacing([retval, out] float *value);

    [propput]
    HRESULT Spacing([in] float value);

    [propget]
    HRESULT StrikeThrough([retval, out] LONG *value);

    [propput]
    HRESULT StrikeThrough([in] LONG value);

    [propget]
    HRESULT Subscript([retval, out] LONG *value);

    [propput]
    HRESULT Subscript([in] LONG value);

    [propget]
    HRESULT Superscript([retval, out] LONG *value);

    [propput]
    HRESULT Superscript([in] LONG value);

    [propget]
    HRESULT Underline([retval, out] LONG *value);

    [propput]
    HRESULT Underline([in] LONG value);

    [propget]
    HRESULT Weight([retval, out] LONG *value);

    [propput]
    HRESULT Weight([in] LONG value);
}

[
    uuid(8cc497c4-a1df-11ce-8098-00aa0047be5d),
    object,
    dual,
    oleautomation
]
interface ITextPara : IDispatch
{
    [propget, id(DISPID_VALUE)]
    HRESULT Duplicate([retval, out] ITextPara **para);

    [propput, id(DISPID_VALUE)]
    HRESULT Duplicate([in] ITextPara *para);

    HRESULT CanChange([out, retval] LONG *pB);
    HRESULT IsEqual([in] ITextPara *para, [retval, out] LONG *pB);
    HRESULT Reset([in] LONG value);

    [propget]
    HRESULT Style([retval, out] LONG *value);

    [propput]
    HRESULT Style([in] LONG value);

    [propget]
    HRESULT Alignment([retval, out] LONG *value);

    [propput]
    HRESULT Alignment([in] LONG value);

    [propget]
    HRESULT Hyphenation([retval, out]LONG *value);

    [propput]
    HRESULT Hyphenation([in] LONG value);

    [propget]
    HRESULT FirstLineIndent([retval, out] float *value);

    [propget]
    HRESULT KeepTogether([retval, out] LONG *value);

    [propput]
    HRESULT KeepTogether([in] LONG value);

    [propget]
    HRESULT KeepWithNext([retval, out] LONG *value);

    [propput]
    HRESULT KeepWithNext([in] LONG value);

    [propget]
    HRESULT LeftIndent([retval, out] float *value);

    [propget]
    HRESULT LineSpacing([retval, out] float *value);

    [propget]
    HRESULT LineSpacingRule([retval, out] LONG *value);

    [propget]
    HRESULT ListAlignment([retval, out] LONG *value);

    [propput]
    HRESULT ListAlignment([in] LONG value);

    [propget]
    HRESULT ListLevelIndex([retval, out] LONG *value);

    [propput]
    HRESULT ListLevelIndex([in] LONG value);

    [propget]
    HRESULT ListStart([retval, out] LONG *value);

    [propput]
    HRESULT ListStart([in] LONG value);

    [propget]
    HRESULT ListTab([retval, out] float *value);

    [propput]
    HRESULT ListTab([in] float value);

    [propget]
    HRESULT ListType([retval, out] LONG *value);

    [propput]
    HRESULT ListType([in] LONG value);

    [propget]
    HRESULT NoLineNumber([retval, out] LONG *value);

    [propput]
    HRESULT NoLineNumber([in] LONG value);

    [propget]
    HRESULT PageBreakBefore([retval, out] LONG *value);

    [propput]
    HRESULT PageBreakBefore([in] LONG value);

    [propget]
    HRESULT RightIndent([retval, out] float *value);

    [propput]
    HRESULT RightIndent([in] float value);

    HRESULT SetIndents([in] float StartIndent, [in] float LeftIndent, [in] float RightIndent);
    HRESULT SetLineSpacing([in] LONG LineSpacingRule, [in] float LineSpacing);

    [propget]
    HRESULT SpaceAfter([retval, out] float *value);

    [propput]
    HRESULT SpaceAfter([in] float value);

    [propget]
    HRESULT SpaceBefore([retval, out] float *value);

    [propput]
    HRESULT SpaceBefore([in] float value);

    [propget]
    HRESULT WidowControl([retval, out] LONG *value);

    [propput]
    HRESULT WidowControl([in] LONG value);

    [propget]
    HRESULT TabCount([retval, out] LONG *count);

    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);
}

[
    uuid(8cc497c5-a1df-11ce-8098-00aa0047be5d),
    object,
    dual,
    oleautomation
]
interface ITextStoryRanges : IDispatch
{
    [restricted, hidden, id(DISPID_NEWENUM)]
    HRESULT _NewEnum([retval, out] IUnknown **ppEnum);

    [id(DISPID_VALUE)]
    HRESULT Item([in] LONG index, [retval, out] ITextRange **range);

    [propget]
    HRESULT Count([retval, out] LONG *count);
}

} /* Library tom */
