/*
 * 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";

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

typedef enum tagTomConstants
{
    tomFalse       = 0,
    tomTrue        = -1,
    tomUndefined   = -9999999,
    tomToggle      = -9999998,
    tomAutoColor   = -9999997,
    tomDefault     = -9999996,
    tomSuspend     = -9999995,
    tomResume      = -9999994,
    tomApplyNow    = 0,
    tomApplyLater  = 1,
    tomTrackParms  = 2,
    tomCacheParms  = 3,
    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,
    tomUnknownStory         = 0,
    tomMainTextStory        = 1,
    tomFootnotesStory       = 2,
    tomEndnotesStory        = 3,
    tomCommentsStory        = 4,
    tomTextFrameStory       = 5,
    tomEvenPagesHeaderStory = 6,
    tomPrimaryHeaderStory   = 7,
    tomEvenPagesFooterStory = 8,
    tomPrimaryFooterStory   = 9,
    tomFirstPageHeaderStory = 10,
    tomFirstPageFooterStory = 11,
    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;

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

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 cpActive, [in]long cpOther);
    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(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]long *pValue);
    HRESULT SetKerning([in]long 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]long *pValue);
    HRESULT SetPosition([in]long 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]long *pValue);
    HRESULT SetSize([in]long 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]long *pValue);
    HRESULT SetListTab([in]long 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 GetWindowControl([retval, out]float *pValue);
    HRESULT SetWindowControl([in]float 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);
}
