/*
 * 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 active, [in] LONG other);
    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 */
