/*
 *	File: tom.idl
 *
 *	idl file that defines the TOM interfaces and data structures
 */

#include <olectl.h>

import "oaidl.idl";
import "ocidl.idl";

interface ITextSelection;		// Forward declarations
interface ITextRange;
interface ITextFont;
interface ITextPara;
interface ITextStoryRanges;
interface ITextMsgFilter;
interface ITextDocument2;

[uuid(8CC497C9-A1DF-11ce-8098-00AA0047BE5D), version(1.0)]
library tom {
	importlib("stdole2.tlb");

	typedef enum  
	{
		// Quad State
		tomFalse				= 0,
		tomTrue		 			= -1,
		tomUndefined 			= -9999999,
		tomToggle				= -9999998,

		tomAutoColor			= -9999997,
		tomDefault				= -9999996,

		// Undo suspension
		tomSuspend				= -9999995,
		tomResume				= -9999994,

		tomApplyNow				= 0,				// TOM 1.1
		tomApplyLater			= 1,				// TOM 1.1
		tomTrackParms			= 2,				// TOM 1.1
		tomCacheParms			= 3,				// TOM 1.1

		// Counts to reach story start or end in any units
		tomBackward				= 0xc0000001,
		tomForward				= 0x3fffffff,

		tomMove					= 0,
		tomExtend				= 1,

		// SelectionType
		tomNoSelection			= 0,
		tomSelectionIP			= 1,
		tomSelectionNormal		= 2,
		tomSelectionFrame		= 3,
		tomSelectionColumn		= 4,
		tomSelectionRow			= 5,
		tomSelectionBlock		= 6,
		tomSelectionInlineShape	= 7,
		tomSelectionShape		= 8,

		// Selection flags
		tomSelStartActive		= 1,
		tomSelAtEOL				= 2,
		tomSelOvertype			= 4,
		tomSelActive 			= 8,
		tomSelReplace			= 16,

		// Point from selection parameters
		tomEnd					= 0,	// use End of selection (GetPoint method)
		tomStart				= 32,	// use Start of selection (can't conflict
		tomCollapseEnd			= 0,	//  with text align flags, which use low 5
		tomCollapseStart		= 1,	//  bits). Extra values also included
		tomClientCoord			= 256,	// use Client Coordinates (GetPoint method)
										//  default is to use system coordinates

		// Underline
		tomNone					= 0,
		tomSingle				= 1,
		tomWords				= 2,
		tomDouble				= 3,
		tomDotted				= 4,
		tomDash					= 5,
		tomDashDot				= 6,
		tomDashDotDot			= 7,
		tomWave					= 8,
		tomThick				= 9,
		tomHair					= 10,


		// Line Spacing
		tomLineSpaceSingle		= 0,
		tomLineSpace1pt5		= 1,
		tomLineSpaceDouble		= 2,
		tomLineSpaceAtLeast 	= 3,
		tomLineSpaceExactly 	= 4,
		tomLineSpaceMultiple 	= 5,

		// Paragraph, Numbering, and Tab Alignment
		tomAlignLeft			= 0,
		tomAlignCenter			= 1,
		tomAlignRight			= 2,
		tomAlignJustify			= 3,
		tomAlignDecimal			= 3,
		tomAlignBar				= 4,
		tomAlignInterWord		= 3,
		tomAlignInterLetter		= 4,
		tomAlignScaled			= 5,
		tomAlignGlyphs			= 6,
		tomAlignSnapGrid		= 7,


		// Tab leader
		tomSpaces				= 0,
		tomDots					= 1,
		tomDashes				= 2,
		tomLines				= 3,
		tomThickLines			= 4,
		tomEquals				= 5,

		// Tab index
		tomTabBack				= -3,	// Positive numbers are tab index
		tomTabNext				= -2,	// These are relative indices
		tomTabHere				= -1,

		// Numbering
		tomListNone				= 0,
		tomListBullet			= 1,
		tomListNumberAsArabic	= 2,
		tomListNumberAsLCLetter	= 3,
		tomListNumberAsUCLetter	= 4,
		tomListNumberAsLCRoman	= 5,
		tomListNumberAsUCRoman	= 6,
		tomListNumberAsSequence	= 7,	// NumberingStart gives first Unicode to use

		tomListParentheses		= 0x10000,
		tomListPeriod			= 0x20000,
		tomListPlain			= 0x30000,

		// Units
		tomCharacter			= 1,	// character
		tomWord					= 2,	// word
		tomSentence				= 3,	// sentence
		tomParagraph			= 4,	// paragraph
		tomLine					= 5,	// line (on display)
		tomStory				= 6,	// entire story
		tomScreen				= 7,	// window end (or start) (for Ctrl PgUp/PgDn)
		tomSection				= 8,	// section
		tomColumn				= 9,	// table column if in table
		tomRow					= 10,	// table row
		tomWindow				= 11,	// windowful (for PgUp/PgDn)
		tomCell					= 12,	// table cell
		tomCharFormat			= 13,	// run of constant character formatting
		tomParaFormat			= 14,	// run of constant paragraph formatting
		tomTable				= 15,	// table
		tomObject				= 16,	// embedded object

		// Find flags
		tomMatchWord			= 2,	// Match whole words
		tomMatchCase			= 4,	// Match case
		tomMatchPattern			= 8,	// Match pattern

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

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

		// Change Case
		tomLowerCase			= 0,
		tomUpperCase			= 1,
		tomTitleCase			= 2,
		tomSentenceCase			= 4,
		tomToggleCase			= 5,

		// File
		tomReadOnly				= 0x0100,	// Open only for reading
		tomShareDenyRead		= 0x0200,	// Other programs cannot read
		tomShareDenyWrite		= 0x0400,	// Other programs cannot write
		tomPasteFile			= 0x1000,	// Replace selection with file
		tomCreateNew			= 0x0010,	// Create new if one doesn't exist
		tomCreateAlways			= 0x0020,	// Create new file destroying existing
		tomOpenExisting			= 0x0030,	// Open existing file; else fail
		tomOpenAlways			= 0x0040,	// Open if there, else create new
		tomTruncateExisting		= 0x0050,	// Open existing file, but with 0 length
		tomRTF					= 0x0001,	// Open as RTF
		tomText					= 0x0002,	// Open as text (Ansi or Unicode)
		tomHTML					= 0x0003,	// Open as HTML
		tomWordDocument			= 0x0004,	// Open as Word document

		// Attributes
		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,

		// Caret Type
		tomNormalCaret			= 0x0000,	// Default caret
		tomKoreanBlockCaret		= 0x0001,	// Korean block caret

		// Client Rect
		tomIncludeInset			= 0x0001,	// include inset (GetClientRect)

		// GetPreferredFont Option values
		tomIgnoreCurrentFont	= 0x0000,
		tomMatchFontCharset		= 0x0001,
		tomMatchFontSignature	= 0x0002,

		// Special value used in SetLanguageID/GetLanguageID to 
		// Set/Get font charset and pitch/family
		tomCharset				= 0x80000000,

		// GetFEFlags
		tomRE10Mode				= 0x0001,
		tomNoIME				= 0x00080000,
		tomSelfIME				= 0x00040000

	} tomConstants;

	interface ITextDocument;
	interface ITextRange;
	interface ITextSelection;
	interface ITextFont;
	interface ITextPara;
	interface ITextStoryRanges;
	interface ITextDocument2;
	interface ITextMsgFilter;
}


[odl, uuid(8CC497C0-A1DF-11ce-8098-00AA0047BE5D), version(1.0), dual, nonextensible]
interface ITextDocument : IDispatch
{
	// Properties

	[id(0), propget] HRESULT Name ([out, retval] BSTR *pName);
	[id(1), propget] HRESULT Selection ([out, retval] ITextSelection **ppSel);
	[id(2), propget] HRESULT StoryCount ([out, retval] long *pCount);
	[id(3), propget] HRESULT StoryRanges ([out, retval] ITextStoryRanges **ppStories);
	[id(4), propget] HRESULT Saved ([out, retval] long *pValue);
	[id(4), propput] HRESULT Saved ([in] long Value);
	[id(5), propget] HRESULT DefaultTabStop ([out, retval] float *pValue);
	[id(5), propput] HRESULT DefaultTabStop ([in] float Value);

	// Methods

	[id(6)]	 HRESULT New ();
	[id(7)]  HRESULT Open ([in] VARIANT *pVar, [in] long Flags, [in] long CodePage);
   	[id(8)]  HRESULT Save ([in] VARIANT *pVar, [in] long Flags, [in] long CodePage);
	[id(9)]	 HRESULT Freeze ([out, retval] long *pCount);
	[id(10)] HRESULT Unfreeze ([out, retval] long *pCount);
   	[id(11)] HRESULT BeginEditCollection ();
   	[id(12)] HRESULT EndEditCollection ();
	[id(13)] HRESULT Undo ([in] long Count, [out, retval] long *prop);
	[id(14)] HRESULT Redo ([in] long Count, [out, retval] long *prop);
	[id(15)] HRESULT Range ([in] long cp1, [in] long cp2, [out, retval] ITextRange **ppRange);
	[id(16)] HRESULT RangeFromPoint ([in] long x, [in] long y,
								[out, retval] ITextRange **ppRange);
}

[odl, uuid(8CC497C2-A1DF-11ce-8098-00AA0047BE5D), version(1.0), dual, nonextensible]
interface ITextRange : IDispatch	// Start and limit end positions
{
	// Range Properties

	[id(	0), propget] HRESULT Text ([out,retval] BSTR *pbstr);
	[id(	0), propput] HRESULT Text ([in] BSTR bstr);

	[id(0x201), propget] HRESULT Char ([out, retval] long *pch);
	[id(0x201), propput] HRESULT Char ([in] long ch);

	[id(0x202), propget] HRESULT Duplicate ([out, retval] ITextRange **ppRange);

	[id(0x203), propget] HRESULT FormattedText ([out, retval] ITextRange **ppRange);	
	[id(0x203), propput] HRESULT FormattedText ([in] ITextRange *pRange);

	[id(0x204), propget] HRESULT Start ([out, retval] long *pcpFirst);
	[id(0x204), propput] HRESULT Start ([in] long cpFirst);		

	[id(0x205), propget] HRESULT End  ([out, retval] long *pcpLim);
	[id(0x205), propput] HRESULT End  ([in] long cpLim);

	[id(0x206), propget] HRESULT Font ([out, retval] ITextFont **pFont);
	[id(0x206), propput] HRESULT Font ([in] ITextFont *pFont);

	[id(0x207), propget] HRESULT Para ([out, retval] ITextPara **pPara);
	[id(0x207), propput] HRESULT Para ([in] ITextPara *pPara);

	[id(0x208), propget] HRESULT StoryLength ([out, retval] long *pcch);
	[id(0x209), propget] HRESULT StoryType ([out, retval] long *pValue);

	// Range Methods
	
	[id(0x210)] HRESULT Collapse ([in] long bStart);	
	[id(0x211)] HRESULT Expand   ([in] long Unit, [out, retval] long *pDelta);	
	[id(0x212)] HRESULT GetIndex ([in] long Unit, [out, retval] long *pIndex);
	[id(0x213)] HRESULT SetIndex ([in] long Unit, [in] long Index, [in] long Extend);
	[id(0x214)] HRESULT SetRange ([in] long cpActive, [in] long cpOther);
	[id(0x215)] HRESULT InRange  ([in] ITextRange *pRange, [out, retval] long *pb);
	[id(0x216)] HRESULT InStory  ([in] ITextRange *pRange, [out, retval] long *pb);
	[id(0x217)] HRESULT IsEqual  ([in] ITextRange *pRange, [out, retval] long *pb);

	[id(0x218)] HRESULT Select ();
	[id(0x219)] HRESULT StartOf	([in] long Unit, [in] long Extend,
								 [out, retval] long *pDelta);
	[id(0x220)] HRESULT EndOf	([in] long Unit, [in] long Extend,
								 [out, retval] long *pDelta);

	[id(0x221)] HRESULT Move ([in] long Unit, 					   
							[in] long Count, [out, retval] long *pDelta);
	[id(0x222)] HRESULT MoveStart ([in] long Unit, 
							[in] long Count, [out, retval] long *pDelta);
	[id(0x223)] HRESULT MoveEnd ([in] long Unit, 
							[in] long Count, [out, retval] long *pDelta);

	[id(0x224)] HRESULT MoveWhile ([in] VARIANT *Cset, 
							[in] long Count, [out, retval] long *pDelta);
	[id(0x225)] HRESULT MoveStartWhile ([in] VARIANT *Cset, 
							[in] long Count, [out, retval] long *pDelta);
	[id(0x226)] HRESULT MoveEndWhile ([in] VARIANT *Cset, 
							[in] long Count, [out, retval] long *pDelta);

	[id(0x227)] HRESULT MoveUntil ([in] VARIANT *Cset, 
							[in] long Count, [out, retval] long *pDelta);
	[id(0x228)] HRESULT MoveStartUntil ([in] VARIANT *Cset, 
							[in] long Count, [out, retval] long *pDelta);
	[id(0x229)] HRESULT MoveEndUntil ([in] VARIANT *Cset, 
							[in] long Count, [out, retval] long *pDelta);

	[id(0x230)] HRESULT FindText ( [in] BSTR bstr, [in] long cch, 
							[in] long Flags, [out, retval] long *pLength);	
	[id(0x231)] HRESULT FindTextStart ( [in] BSTR bstr, [in] long cch, 
							[in] long Flags, [out, retval] long *pLength);			
	[id(0x232)] HRESULT FindTextEnd ( [in] BSTR bstr, [in] long cch, 
							[in] long Flags, [out, retval] long *pLength);			
				
	[id(0x233)] HRESULT Delete ([in] long Unit, [in] long Count,
							[out, retval] long *pDelta);

	[id(0x234)] HRESULT Cut	 ([out] VARIANT *pVar);
	[id(0x235)] HRESULT Copy ([out] VARIANT *pVar);
	[id(0x236)] HRESULT Paste ([in] VARIANT *pVar, [in] long Format);
	[id(0x237)] HRESULT CanPaste ([in] VARIANT *pVar, [in] long Format,
									[out, retval] long *pb);
	[id(0x238)] HRESULT CanEdit ([out, retval] long *pbCanEdit);
	[id(0x239)] HRESULT ChangeCase ([in] long Type);
	[id(0x240)] HRESULT GetPoint ([in] long Type, [out] long *px, [out] long *py);
	[id(0x241)] HRESULT SetPoint ([in] long x, [in] long y, [in] long Type, [in] long Extend);
	[id(0x242)] HRESULT ScrollIntoView ([in] long Value);
	[id(0x243)] HRESULT GetEmbeddedObject ([out, retval] IUnknown **ppv);
}

[odl, uuid(8CC497C1-A1DF-11ce-8098-00AA0047BE5D), version(1.0), dual, nonextensible]
interface ITextSelection : ITextRange
{
	[id(0x101), propget] HRESULT Flags ([out,retval] long *pFlags);
	[id(0x101), propput] HRESULT Flags ([in] LONG Flags);
	[id(0x102), propget] HRESULT Type ([out, retval] long *pType);
			
	[id(0x103)] HRESULT MoveLeft([in] long Unit, [in] long Count, [in] long Extend,
								 [out, retval] long *pDelta);	
	[id(0x104)] HRESULT MoveRight([in] long Unit, [in] long Count, [in] long Extend,
								 [out, retval] long *pDelta);	
	[id(0x105)] HRESULT MoveUp	([in] long Unit, [in] long Count, [in] long Extend,
								 [out, retval] long *pDelta);	
	[id(0x106)] HRESULT MoveDown([in] long Unit, [in] long Count, [in] long Extend,
								 [out, retval] long *pDelta);	
	[id(0x107)] HRESULT HomeKey ([in] long Unit, [in] long Extend,
								 [out, retval] long *pDelta);	
	[id(0x108)] HRESULT EndKey	([in] long Unit, [in] long Extend,
								 [out, retval] long *pDelta);	
	[id(0x109)] HRESULT TypeText ([in] BSTR bstr);
}

[odl, uuid(8CC497C3-A1DF-11ce-8098-00AA0047BE5D), version(1.0), dual, nonextensible]
interface ITextFont : IDispatch
{
	// Common format properties and methods

	[id(	0), propget] HRESULT Duplicate ([out, retval] ITextFont **ppFont);
	[id(	0), propput] HRESULT Duplicate ([in] ITextFont *pFont);

	[id(0x301)] HRESULT CanChange ([out, retval] long *pB);
	[id(0x302)] HRESULT IsEqual ([in] ITextFont *pFont, [out, retval] long *pB);	
	[id(0x303)] HRESULT Reset ([in] long Value);

	[id(0x304), propget] HRESULT Style ([out, retval] long *pValue);
	[id(0x304), propput] HRESULT Style ([in] long Value);


	// Character format properties and methods

	[id(0x305), propget] HRESULT AllCaps ([out, retval] long *pValue);
	[id(0x305), propput] HRESULT AllCaps ([in] long Value);

	[id(0x306), propget] HRESULT Animation ([out, retval] long *pValue);
	[id(0x306), propput] HRESULT Animation ([in] long Value);

	[id(0x307), propget] HRESULT BackColor ([out, retval] long *pValue);
	[id(0x307), propput] HRESULT BackColor ([in] long Value);

	[id(0x308), propget] HRESULT Bold ([out, retval] long *pValue);
	[id(0x308), propput] HRESULT Bold ([in] long Value);

	[id(0x309), propget] HRESULT Emboss ([out, retval] long *pValue);
	[id(0x309), propput] HRESULT Emboss ([in] long Value);

	[id(0x310), propget] HRESULT ForeColor ([out, retval] long *pValue);
	[id(0x310), propput] HRESULT ForeColor ([in] long Value);

	[id(0x311), propget] HRESULT Hidden ([out, retval] long *pValue);
	[id(0x311), propput] HRESULT Hidden ([in] long Value);

	[id(0x312), propget] HRESULT Engrave ([out, retval] long *pValue);
	[id(0x312), propput] HRESULT Engrave ([in] long Value);

	[id(0x313), propget] HRESULT Italic ([out, retval] long *pValue);
	[id(0x313), propput] HRESULT Italic ([in] long Value);

	[id(0x314), propget] HRESULT Kerning ([out, retval] float *pValue);
	[id(0x314), propput] HRESULT Kerning ([in] float Value);

	[id(0x315), propget] HRESULT LanguageID ([out, retval] long *pValue);
	[id(0x315), propput] HRESULT LanguageID ([in] long Value);

	[id(0x316), propget] HRESULT Name ([out, retval] BSTR *pbstr);
	[id(0x316), propput] HRESULT Name ([in] BSTR bstr);

	[id(0x317), propget] HRESULT Outline ([out, retval] long *pValue);
	[id(0x317), propput] HRESULT Outline ([in] long Value);

	[id(0x318), propget] HRESULT Position ([out, retval] float *pValue);
	[id(0x318), propput] HRESULT Position ([in] float Value);

	[id(0x319), propget] HRESULT Protected ([out, retval] long *pValue);
	[id(0x319), propput] HRESULT Protected ([in] long Value);

	[id(0x320), propget] HRESULT Shadow ([out, retval] long *pValue);
	[id(0x320), propput] HRESULT Shadow ([in] long Value);

	[id(0x321), propget] HRESULT Size ([out, retval] float *pValue);
	[id(0x321), propput] HRESULT Size ([in] float Value);

	[id(0x322), propget] HRESULT SmallCaps ([out, retval] long *pValue);
	[id(0x322), propput] HRESULT SmallCaps ([in] long Value);

	[id(0x323), propget] HRESULT Spacing ([out, retval] float *pValue);
	[id(0x323), propput] HRESULT Spacing ([in] float Value);

	[id(0x324), propget] HRESULT StrikeThrough ([out, retval] long *pValue);
	[id(0x324), propput] HRESULT StrikeThrough ([in] long Value);

	[id(0x325), propget] HRESULT Subscript ([out, retval] long *pValue);
	[id(0x325), propput] HRESULT Subscript ([in] long Value);

	[id(0x326), propget] HRESULT Superscript ([out, retval] long *pValue);
	[id(0x326), propput] HRESULT Superscript ([in] long Value);

	[id(0x327), propget] HRESULT Underline ([out, retval] long *pValue);
	[id(0x327), propput] HRESULT Underline ([in] long Value);

	[id(0x328), propget] HRESULT Weight ([out, retval] long *pValue);
	[id(0x328), propput] HRESULT Weight ([in] long Value);
}

[odl, uuid(8CC497C4-A1DF-11ce-8098-00AA0047BE5D), version(1.0), dual, nonextensible]
interface ITextPara : IDispatch
{
	// Common format properties and methods

	[id(	0), propget] HRESULT Duplicate ([out, retval] ITextPara **ppPara);
	[id(	0), propput] HRESULT Duplicate ([in] ITextPara *pPara);

	[id(0x401)] HRESULT CanChange ([out, retval] long *pB);
	[id(0x402)] HRESULT IsEqual ([in] ITextPara *pPara, [out, retval] long *pB);	
	[id(0x403)] HRESULT Reset ([in] long Value);

	[id(0x404), propget] HRESULT Style ([out, retval] long *pValue);
	[id(0x404), propput] HRESULT Style ([in] long Value);


	// Paragraph format properties and methods

	[id(0x405), propget] HRESULT Alignment ([out,retval] long *pValue);
	[id(0x405), propput] HRESULT Alignment ([in] long Value);

	[id(0x406), propget] HRESULT Hyphenation ([out, retval] long *pValue);
	[id(0x406), propput] HRESULT Hyphenation ([in] long Value);

	[id(0x407), propget] HRESULT FirstLineIndent ([out, retval] float *pValue);

	[id(0x408), propget] HRESULT KeepTogether ([out, retval] long *pValue);
	[id(0x408), propput] HRESULT KeepTogether ([in] long Value);

	[id(0x409), propget] HRESULT KeepWithNext ([out, retval] long *pValue);
	[id(0x409), propput] HRESULT KeepWithNext ([in] long Value);

	[id(0x410), propget] HRESULT LeftIndent ([out, retval] float *pValue);
	[id(0x411), propget] HRESULT LineSpacing ([out, retval] float *pValue);	
	[id(0x412), propget] HRESULT LineSpacingRule ([out, retval] long *pValue);	

	[id(0x413), propget] HRESULT ListAlignment ([out, retval] long *pValue);	
	[id(0x413), propput] HRESULT ListAlignment ([in] long Value);	

	[id(0x414), propget] HRESULT ListLevelIndex ([out, retval] long *pValue);	
	[id(0x414), propput] HRESULT ListLevelIndex ([in] long Value);	

	[id(0x415), propget] HRESULT ListStart ([out, retval] long *pValue);	
	[id(0x415), propput] HRESULT ListStart ([in] long Value);	

	[id(0x416), propget] HRESULT ListTab ([out, retval] float *pValue);	
	[id(0x416), propput] HRESULT ListTab ([in] float Value);	

	[id(0x417), propget] HRESULT ListType ([out, retval] long *pValue);	
	[id(0x417), propput] HRESULT ListType ([in] long Value);	

	[id(0x418), propget] HRESULT NoLineNumber ([out, retval] long *pValue);
	[id(0x418), propput] HRESULT NoLineNumber ([in] long Value);

	[id(0x419), propget] HRESULT PageBreakBefore ([out, retval] long *pValue);
	[id(0x419), propput] HRESULT PageBreakBefore ([in] long Value);

	[id(0x420), propget] HRESULT RightIndent ([out, retval] float *pValue);	
	[id(0x420), propput] HRESULT RightIndent ([in] float Value);	

	[id(0x421)] 		 HRESULT SetIndents ([in] float StartIndent,
							[in] float LeftIndent, [in] float RightIndent);
	[id(0x422)]			 HRESULT SetLineSpacing ([in] long LineSpacingRule,
												 [in] float LineSpacing);

	[id(0x423), propget] HRESULT SpaceAfter ([out, retval] float *pValue);
	[id(0x423), propput] HRESULT SpaceAfter ([in] float Value);

	[id(0x424), propget] HRESULT SpaceBefore ([out, retval] float *pValue);
	[id(0x424), propput] HRESULT SpaceBefore ([in] float Value);

	[id(0x425), propget] HRESULT WidowControl ([out, retval] long *pValue);
	[id(0x425), propput] HRESULT WidowControl ([in] long Value);

	// Tab methods and property

	[id(0x426), propget] HRESULT TabCount ([out, retval] long *pCount);	
	[id(0x427)] HRESULT AddTab ([in] float tbPos, [in] long tbAlign,
								[in] long tbLeader);	
	[id(0x428)] HRESULT ClearAllTabs ();
	[id(0x429)] HRESULT DeleteTab ([in] float tbPos);	
	[id(0x430)] HRESULT GetTab ([in] long iTab, [out] float *ptbPos,
								[out] long *ptbAlign, [out] long *ptbLeader);
}

[odl, uuid(8CC497C5-A1DF-11ce-8098-00AA0047BE5D), version(1.0), dual, nonextensible]
interface ITextStoryRanges : IDispatch
{
	[id(-4), restricted] HRESULT _NewEnum ([out, retval] IUnknown **ppunkEnum);
	[id(0)]  HRESULT Item ([in] long Index, [out, retval] ITextRange **ppRange);
	[id(2), propget] HRESULT Count ([out, retval] long *pCount);
}

[uuid(01c25500-4268-11d1-883a-3c8b00c10000), version(1.0), dual, nonextensible]
interface ITextDocument2 : ITextDocument
{
	[id(21), helpstring("method AttachMsgFilter")]
	HRESULT AttachMsgFilter([in] IUnknown *pFilter);
	[id(22), helpstring("method SetEffectColor")]
	HRESULT SetEffectColor([in] long Index, [in] COLORREF cr);
	[id(23), helpstring("method GetEffectColor")]
	HRESULT GetEffectColor([in] long Index, [out] COLORREF *pcr);
	[id(24), propget, helpstring("method GetCaretType")] 
	HRESULT CaretType ([out, retval] long *pCaretType);	
	[id(24), propput, helpstring("method SetCaretType")] 
	HRESULT CaretType ([in] long CaretType);
	[id(25), helpstring("method GetImmContext")]
	HRESULT GetImmContext([out, retval] long *pContext);
	[id(26), helpstring("method ReleaseImmContext")]
	HRESULT ReleaseImmContext([in] long Context);
	[id(27), helpstring("method GetPreferredFont")]
	HRESULT GetPreferredFont([in] long cp, [in] long CodePage, [in] long Option, 
		[in] long curCodepage, [in] long curFontSize, [out] BSTR *pbstr, 
		[out] long *pPitchAndFamily, [out] long *pNewFontSize );
	[id(28), propget, helpstring("method GetNotificationMode")]
	HRESULT NotificationMode([out, retval] long *pMode);
	[id(28), propput, helpstring("method SetNotificationMode")]
	HRESULT NotificationMode([in] long Mode);	
	[id(29), helpstring("method GetClientRect")]
	HRESULT GetClientRect([in] long Type, 
		[out] long *pLeft,
		[out] long *pTop,
		[out] long *pRight,
		[out] long *pBottom);	
	[id(30), propget, helpstring("method GetSelectionEx")]
	HRESULT SelectionEx([out, retval] ITextSelection **ppSel);
	[id(31), helpstring("method GetWindow")]
	HRESULT GetWindow([out] long *phWnd);
	[id(32), helpstring("method GetFEFlags")]
	HRESULT GetFEFlags([out] long *pFlags);
	[id(33), helpstring("method UpdateWindow")]
	HRESULT UpdateWindow(void);
	[id(34), helpstring("method CheckTextLimit")]
	HRESULT CheckTextLimit(long cch, long *pcch);
	[id(35), helpstring("method IMEInProgress")]
	HRESULT IMEInProgress(long Mode);
	[id(36), helpstring("method SysBeep")]
	HRESULT SysBeep(void);
	[id(37), helpstring("method Update")]
	HRESULT Update([in] long Mode);
	[id(38), helpstring("method Notify")]
	HRESULT Notify([in] long Notify);
}

[uuid(a3787420-4267-11d1-883a-3c8b00c10000), version(1.0),nonextensible]				    
interface ITextMsgFilter : IUnknown
{
	[id(1), helpstring("method AttachDocument")]
	HRESULT AttachDocument([in] HWND hwnd, [in] ITextDocument2 *pTextDoc);
	[id(2), helpstring("method HandleMessage")]
	HRESULT HandleMessage([in,out] UINT *pmsg, [in,out] WPARAM *pwparam, [in,out] LPARAM *plparam, [out] LRESULT *plres);
	[id(3), helpstring("method AttachMsgFilter")]
	HRESULT AttachMsgFilter([in] ITextMsgFilter *pMsgFilter);
}