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