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

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