epoc32/include/txtfrmat.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 2 2fe1408b6811
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
     1 /*
     2 * Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     5 * under the terms of "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     8 *
     9 * Initial Contributors:
    10 * Nokia Corporation - initial contribution.
    11 *
    12 * Contributors:
    13 *
    14 * Description: 
    15 *
    16 */
    17 
    18 
    19 #ifndef __TXTFRMAT_H__
    20 #define __TXTFRMAT_H__
    21 
    22 #include <e32std.h>
    23 #include <e32base.h>
    24 #include <gdi.h>
    25 
    26 
    27 // Classes declared in this file:
    28 class TTabStop;
    29 class TParaBorder;
    30 class TBullet;
    31 class TParaBorderArray;
    32 class CParaFormat;
    33 class TParaFormatMask;
    34 class TFontPresentation;
    35 class TCharFormat;
    36 class TCharFormatMask;
    37 
    38 /** 
    39 Provides support for system colours, in addition to literal colours, in 
    40 text formatting.
    41 
    42 The base class TRgb stores the 24-bit literal colour value using a TUint32. 
    43 TLogicalRgb uses the MSB from iValue2 data member as an 8-bit index. The 
    44 purpose of the  index is to allow applications to use logical colours. If the 
    45 index is zero, the value is not a logical colour; it is treated as an ordinary 
    46 TRgb value. If the index is non zero (1-255), the colour should be translated by the 
    47 application into a system colour. Indices 254 and 255 are reserved for the 
    48 system foreground and background colours, respectively and should be translated 
    49 into them. Translation from index to RGB colour occurs in the implementation of 
    50 MFormParam::SystemColor().
    51 
    52 All colours in the Text and Text Attributes API are stored using TLogicalRgb 
    53 values and are initialised to either TLogicalRgb::ESystemForegroundColor or 
    54 TLogicalRgb::ESystemBackgroundColor.
    55 
    56 This system allows an application to set its text colours once, perhaps using 
    57 the system-wide colour scheme, rather than having to set the colours each 
    58 time a text object is created. It is also compatible with legacy code which 
    59 expects TRgb rather than TLogicalRgb values: for example, the logical 
    60 foreground and background colours have their bottom three bytes filled with 
    61 black and white respectively so that code which expects TRgb values can still 
    62 use them. 
    63 @publishedAll
    64 @released
    65 */
    66 class TLogicalRgb : public TRgb
    67 	{
    68 	public:
    69  
    70 	/*
    71 	Reserved colour indices for default foreground and background colours,
    72 	and colours for the selection highlight. The top 128 indices (128-255)
    73 	are reserved for future expansion, but the first 126 non-zero indices
    74 	(1-127) can be used by the GUI as convenient.
    75 	*/ 
    76 	enum
    77 		{
    78 		ESystemSelectionForegroundIndex = 252,
    79 		ESystemSelectionBackgroundIndex = 253,
    80 		/** Index reserved for the system foreground colour (=254). */
    81 		ESystemForegroundIndex = 254,
    82 		/** Index reserved for the system background colour (=255). */
    83 		ESystemBackgroundIndex = 255
    84 		};
    85 
    86 	
    87 	 
    88 	/** Used to construct TLogicalRgb objects which should use either the 
    89 	system foreground or background colour. */
    90 	enum TSystemColor
    91 		{
    92 		ESystemSelectionForegroundColor = ESystemSelectionForegroundIndex << 24,
    93 		ESystemSelectionBackgroundColor = ESystemSelectionBackgroundIndex << 24,
    94 		/** The system foreground colour. */
    95 		ESystemForegroundColor = ESystemForegroundIndex << 24,
    96 		/** The system background colour. */
    97 		ESystemBackgroundColor = (ESystemBackgroundIndex << 24) | 0xFFFFFF
    98 		};
    99 		 
   100 	/** Constructs a new TLogicalRgb object. */
   101 	TLogicalRgb() : 
   102 		iValue2(0) 
   103 		{ 
   104 		}
   105 	
   106 	/** Constructs the object with a 32-bit integer. The index is stored in the 
   107 	MSB of iValue2 data member. A TRgb value may be stored in the base TRgb class. 
   108 	@param aValue Integer holding the logical colour index. */
   109 	TLogicalRgb(TUint32 aValue): 
   110 		iValue2(aValue & 0xFF000000)
   111 		{ 
   112 		SetInternal((TUint32)aValue | 0xFF000000);
   113 		}
   114 		
   115 	/** Constructs the object with a TSystemColor value.
   116 	@param aValue Identifies whether the colour is the system foreground or 
   117 	system background colour. */
   118 	TLogicalRgb(TSystemColor aValue) : 
   119 		iValue2((TUint32)aValue & 0xFF000000)
   120 		{ 
   121 		SetInternal((TUint32)aValue | 0xFF000000);
   122 		}
   123 
   124 	/** Constructs a new TLogicalRgb object from an existing one. */
   125 	TLogicalRgb(const TRgb& aRgb) : 
   126 		TRgb(aRgb),
   127 		iValue2(0)
   128 		{ 
   129 		}
   130 	 
   131 	/** Returns the logical colour's index value. Zero indicates that the value 
   132 	is not a logical colour; it is an ordinary TRgb value. 254 and 255 indicate 
   133 	the system foreground and background colours, respectively.
   134 	@return The index: between zero and 255 inclusive. */
   135 	TUint SystemColorIndex() const 
   136 		{ 
   137 		return iValue2 >> 24; 
   138 		}
   139 		
   140 	/** Sets the logical colour's index value.
   141 	@param aIndex The new index value (between 1 and 253 inclusive). */
   142 	void SetSystemColorIndex(TUint aIndex) 
   143 		{ 
   144 		iValue2 = aIndex << 24; 
   145 		}
   146 	
   147 private:	
   148 	TUint32 iValue2;
   149 	
   150 	};
   151 
   152 /** 
   153 Indicates which format attributes are relevant when setting or sensing text 
   154 formatting. 
   155 @publishedAll
   156 @released
   157 */
   158 enum TTextFormatAttribute
   159 	{
   160 	// Paragraph format attributes.
   161 	/** Language of the paragraph for proofing. */
   162 	EAttParaLanguage,
   163 	/** Background colour of the paragraph. */
   164 	EAttFillColor,
   165 	/** Leading text margin. */
   166 	EAttLeftMargin,
   167 	/** Trailing text margin. */
   168 	EAttRightMargin,
   169 	/** First line leading indent. */
   170 	EAttIndent,
   171 	/** Horizontal alignment of paragraph. */
   172 	EAttAlignment,
   173 	/** Vertical paragraph alignment. */
   174 	EAttVerticalAlignment,
   175 	/** Inter-line spacing. */
   176 	EAttLineSpacing,
   177 	/** Control for EAttLineSpacing. */
   178 	EAttLineSpacingControl,
   179 	/** Space above paragraph. */
   180 	EAttSpaceBefore,
   181 	/** Space below paragraph. */
   182 	EAttSpaceAfter,
   183 	/** Whether a page break can occur within the paragraph. */
   184 	EAttKeepTogether,
   185 	/** Whether a page break can occur between this and the next paragraph. */
   186 	EAttKeepWithNext,
   187 	/** Whether a page break should be inserted before this paragraph. */
   188 	EAttStartNewPage,
   189 	/** Whether the last line of a paragraph can appear by itself at the top of a new 
   190 	page, (widow), or the first line of a paragraph can appear by itself at the 
   191 	bottom of the page, (orphan). */
   192 	EAttWidowOrphan,
   193 	/** Whether the paragraph should line wrap at the right margin. */
   194 	EAttWrap,
   195 	/** Distance between paragraph border and enclosed text. */
   196 	EAttBorderMargin,
   197 	/** Top of paragraph border. */
   198 	EAttTopBorder,
   199 	/** Bottom of paragraph border. */
   200 	EAttBottomBorder,
   201 	/** Left-hand side of paragraph border. */
   202 	EAttLeftBorder,
   203 	/** Right-hand side of paragraph border. */
   204 	EAttRightBorder,
   205 	/** Bullet point associated with paragraph. */
   206 	EAttBullet,
   207 	/** Spacing between default tab stops. */
   208 	EAttDefaultTabWidth,
   209 	/** Tab stop. */
   210 	EAttTabStop,
   211 
   212 	// Character format attributes.
   213 	/** Language of individual characters within a paragraph for proofing. */
   214 	EAttCharLanguage,
   215 	/** Text colour. */
   216 	EAttColor,
   217 	/** Text highlight colour. */
   218 	EAttFontHighlightColor,
   219 	/** Text highlight style. */
   220 	EAttFontHighlightStyle,
   221 	/** Font height. */
   222 	EAttFontHeight,
   223 	/** Font posture (i.e. italics). */
   224 	EAttFontPosture,
   225 	/** Font stroke weight (i.e. bold). */
   226 	EAttFontStrokeWeight,
   227 	/** Subscript, superscript or normal print position. */
   228 	EAttFontPrintPos,
   229 	/** Underlining. */
   230 	EAttFontUnderline,
   231 	/** Strikethrough. */
   232 	EAttFontStrikethrough,
   233 	/** The typeface name. */
   234 	EAttFontTypeface,
   235 	/** Vertical picture alignment. */
   236 	EAttFontPictureAlignment,
   237 	/** Hidden text. */
   238 	EAttFontHiddenText,
   239 
   240 	/** Used internally to indicate the count of all attributes. */
   241 	ETextFormatAttributeCount
   242 	};
   243 
   244 /*
   245 Following enum and variable should not be used by external developers.
   246 */
   247 enum {EVariableLengthValue = 0};
   248 
   249 const TInt KMaxStyleName = 0x20;
   250 const TInt KMaxParaAttributes = EAttTabStop;
   251 const TInt KMaxCharAttributes = EAttFontHiddenText - KMaxParaAttributes;
   252 const TInt KTabNotFound = -1;
   253 
   254 /** 
   255 A tab stop.
   256 
   257 This is a position on a page used to align columns of text. It has a twips 
   258 position and an alignment. The twips position is the width in twips (1/1440th 
   259 of an inch) of the tab stop, i.e. the number of twips from the start of the 
   260 line at which text can be inserted. It uniquely identifies the tab stop. The 
   261 alignment (left, right, or centre) indicates how text inserted at the tab 
   262 stop should be aligned.
   263 
   264 Tab stops are paragraph format attributes. They are owned by the CParaFormat 
   265 class, through which tab stops can be added and removed. 
   266 @publishedAll
   267 @released
   268 */
   269 class TTabStop
   270 	{
   271 public:
   272 	/** Text alignment at the tab stop. */
   273 	enum TTabType
   274 		{
   275 		/** No tab. */
   276 		ENullTab, 
   277 		/** Text is aligned to the tab stop's leading edge (left for
   278 		left-to-right paragraphs, right for right-to-left paragraphs). */
   279 		ELeftTab, 
   280 		/** Text is aligned to the tab stop's trailing edge (right for
   281 		left-to-right paragraphs, left for right-to-left paragraphs). */
   282 		ECenteredTab, 
   283 		/** Text is right aligned at the tab stop. */
   284 		ERightTab
   285 		};
   286 public:
   287 	IMPORT_C TTabStop();
   288 	IMPORT_C TTabStop(const TTabStop& aTabStop);
   289 	IMPORT_C TTabStop& operator=(const TTabStop& aTabStop);
   290 	IMPORT_C TBool operator==(const TTabStop& aTabStop) const;
   291 	inline TBool operator!=(const TTabStop& aTabStop) const;
   292 public:
   293 	/** The twips position. This is the width in twips of the tab stop, i.e. 
   294 	the number of twips from the start of the line at which text can be 
   295 	inserted. */
   296 	TUint32 iTwipsPosition;
   297 	/** Text alignment at the tab stop. */
   298 	TTabType iType;
   299 	};
   300 
   301 /** 
   302 Defines the characteristics of one of the four sides of a paragraph border. 
   303 
   304 These are the line style, thickness and colour. Paragraph borders are paragraph 
   305 format attributes. They are owned by the CParaFormat class which allows 
   306 paragraph borders to be added and removed. The CParaFormat::TParaBorderSide 
   307 enumeration identifies which side of the paragraph the object applies to. 
   308 @publishedAll
   309 @released
   310 */
   311 class TParaBorder
   312 	{
   313 public:
   314 	
   315 	/** Line styles. */
   316 	enum TLineStyle 
   317 		{
   318 		/** No line style. */
   319 		ENullLineStyle, 
   320 		/** Solid line. */
   321 		ESolid, 
   322 		/** Double solid line. */
   323 		EDouble,
   324 		/** Dotted line. */
   325 		EDotted, 
   326 		/** Dashed line. */
   327 		EDashed, 
   328 		/** Alternating dots and dashes. */
   329 		EDotDash, 
   330 		/** Alternating sequence of two dots and a dash. */
   331 		EDotDotDash
   332 		};
   333 	//
   334 	IMPORT_C TParaBorder();
   335 	IMPORT_C TBool operator==(const TParaBorder& aParaBorder) const;
   336 	inline TBool operator!=(const TParaBorder& aParaBorder) const;
   337 public:
   338 	/** The line style. By default, ENullLineStyle. */
   339 	TLineStyle iLineStyle;
   340 	/** The line thickness in twips. By default, zero. */
   341 	TInt iThickness;
   342 	/** The line colour. By default, the system's default foreground colour. */
   343 	TLogicalRgb iColor;
   344 	/** ETrue indicates that the line colour is set to the default or current 
   345 	text colour, overriding iColor. EFalse indicates that the iColor value is 
   346 	used. By default, ETrue. */
   347 	TBool iAutoColor;
   348 	};
   349 
   350 /** 
   351 Stores the four sides of a paragraph border.
   352 
   353 Paragraph borders sides are set individually using functions provided by class 
   354 CParaFormat. 
   355 @publishedAll
   356 @released
   357 */
   358 class TParaBorderArray
   359 	{
   360 public:
   361 	TParaBorder iBorder[4];
   362 	};
   363 
   364 /** 
   365 A bullet point. 
   366 
   367 This is a paragraph format attribute, stored as the iBullet member of class 
   368 CParaFormat.
   369 
   370 Bullet points have a typeface, height, colour and a character code (defines 
   371 the symbol displayed). Single level bullets only are supported. Bullets may 
   372 also have a hanging indent. If set, this means that the rest of the paragraph 
   373 following the line containing the bullet point is indented. 
   374 @publishedAll
   375 @released
   376 */
   377 class TBullet
   378 	{
   379 	public:
   380 	IMPORT_C TBullet();
   381 	IMPORT_C TBool operator ==(const TBullet& aBullet) const;
   382 	inline TBool operator !=(const TBullet& aBullet) const;
   383 
   384 	/**
   385 	Identifies the bullet style.
   386 
   387 	Note: Styles other than ENullStyle and EBulletStyle are not currently supported.
   388 	They have the same effect as the EBulletStyle.
   389 	*/
   390 	enum TStyle
   391 		{
   392 		/**
   393 		No bullet. Used for style layers that override a bullet with the absence of a bullet.
   394 		*/
   395 		ENullStyle,
   396 		/**
   397 		A bullet point. Character with code 0x2022 is used by default.
   398 		*/
   399 		EBulletStyle,
   400 		EArabicNumberStyle,
   401 		ESmallRomanNumberStyle,
   402 		ECapitalRomanNumberStyle,
   403 		ESmallLetterStyle,
   404 		ECapitalLetterStyle
   405 		};
   406 
   407 	/** Paragraph alignment */
   408 	enum TAlignment
   409 		{
   410 		/** Paragraph left aligned. */
   411 		ELeftAlign,
   412 		/** Paragraph centre aligned. */
   413 		ECenterAlign,
   414 		/** Paragraph right aligned. */
   415 		ERightAlign
   416 		};
   417 
   418 	/** The Unicode character used to represent the bullet point. By default 
   419 	0x2022. */
   420 	TChar iCharacterCode;		// the bullet or other symbol used if iStyle is EBulletStyle
   421 	/** The height in twips of the font used for the bullet point character. 
   422 	By default, zero. */
   423 	TUint iHeightInTwips;
   424 	/** The typeface used for the bullet point character. */
   425 	TTypeface iTypeface;
   426 	/** ETrue to indent the rest of the paragraph from the bullet point. 
   427 	EFalse to align the bullet point character with the rest of the paragraph. */
   428 	TBool iHangingIndent;
   429 	/** The colour of the bullet point character. By default, the system's 
   430 	default foreground colour. */
   431 	TLogicalRgb iColor;
   432 	TStyle iStyle;				// is this a bullet or a number or a letter?
   433 	TInt iStartNumber;			// the number of the first paragraph in a run of paragraphs in this style
   434 	TAlignment iAlignment;		// alignment of the bullet or number within the margin
   435 	};
   436 
   437 /** 
   438 A transient container of paragraph format attributes, including tab stops, 
   439 bullet points and paragraph borders. 
   440 
   441 Rich and global text objects store paragraph formatting using paragraph format 
   442 layers (see class CParaFormatLayer). The CParaFormat class is used to store 
   443 the relevant attribute values when setting or sensing a CParaFormatLayer. 
   444 It is normally used in combination with a TParaFormatMask, to specify which 
   445 attributes are relevant to the function concerned.
   446 
   447 On construction, all CParaFormat member data is initialised. The attributes 
   448 which are not explicitly set are assigned default values. 
   449 @publishedAll
   450 @released
   451 */
   452 class CParaFormat: public CBase
   453 	{
   454 public:
   455 	/** Miscellaneous constants. */
   456 	enum
   457 		{
   458 		/** The maximum number of paragraph borders (= 4). */
   459 		EMaxParaBorder = 4
   460 		};
   461 
   462 	/** Paragraph border sides */
   463 	enum TParaBorderSide
   464 		{
   465 		/** The border at the top of the paragraph. */
   466 		EParaBorderTop,
   467 		/** The border at the bottom of the paragraph. */
   468 		EParaBorderBottom,
   469 		/** The border on the left hand side. */
   470 		EParaBorderLeft,
   471 		/** The border on the right hand side. */
   472 		EParaBorderRight
   473 		};
   474 
   475 	/** Line spacing control */
   476 	enum TLineSpacingControl
   477 		{
   478 		/** Twips line spacing must be at least as wide as the 
   479 		iLineSpacingInTwips value. */
   480 		ELineSpacingAtLeastInTwips,
   481 		/** Twips line spacing must be exactly the iLineSpacingInTwips value. */
   482 		ELineSpacingExactlyInTwips,
   483 		/** Pixels line spacing must be at least as wide as the line spacing 
   484 		value in pixels. */
   485 		ELineSpacingAtLeastInPixels,
   486 		/** Pixels line spacing must be exactly the same as the line spacing 
   487 		value in pixels. */
   488 		ELineSpacingExactlyInPixels
   489 		};
   490 
   491 	/** Paragraph alignment */
   492 	enum TAlignment
   493 		{
   494 		/** Paragraph aligned to the leading margin (left for left-to-right
   495 		paragraphs, right for right-to-left paragraphs). */
   496 		ELeftAlign,
   497 		/** Paragraph top aligned. */
   498 		ETopAlign = ELeftAlign,
   499 		/** Paragraph centre aligned. */
   500 		ECenterAlign,
   501 		/** Paragraph aligned to the trailing margin (right for left-to-right
   502 		paragraphs, left for right-to-left paragraphs). */
   503 		ERightAlign,
   504 		/** Paragraph bottom aligned. */
   505 		EBottomAlign = ERightAlign,
   506 		/** Paragraph justified. */
   507 		EJustifiedAlign,
   508 		/** Used by the spreadsheet application. Unlike ETopAlign and 
   509 		EBottomAlign, provides no default implementation. */
   510 		EUnspecifiedAlign,
   511 		/** User-defined paragraph alignment. */
   512 		ECustomAlign,
   513 		/** Absolute left alignment */
   514 		EAbsoluteLeftAlign,
   515 		/** Absolute right alignment */
   516 		EAbsoluteRightAlign
   517 		};
   518 
   519 	/** Attribute sense mode */
   520 	enum TParaFormatGetMode
   521 		{
   522 		/** Indicates that all paragraph format attributes are written to the 
   523 		result when sensing paragraph format attributes. */
   524 		EAllAttributes,
   525 		/** Indicates that tabs, bullets and borders are not sensed. */
   526 		EFixedAttributes
   527 		};
   528 
   529 	IMPORT_C static CParaFormat* NewL();
   530 	IMPORT_C static CParaFormat* NewLC();
   531 	IMPORT_C static CParaFormat* NewL(const CParaFormat& aFormat);
   532 	IMPORT_C CParaFormat();
   533 	IMPORT_C ~CParaFormat();
   534 	IMPORT_C void ResetNonDestructive();  // preserves any allocated tabs, bullets or borders.
   535 	IMPORT_C void Reset();  // full reset, deletes and nulls any allocated tabs, bullets or borders.
   536 	IMPORT_C void CopyL(const CParaFormat& aFormat, const TParaFormatMask& aMask);
   537 	IMPORT_C void CopyL(const CParaFormat& aFormat);
   538 	IMPORT_C void Strip();  // Cleans up this paragraph format.
   539 	IMPORT_C TBool IsEqual(const CParaFormat& aFormat, const TParaFormatMask& aMask) const;
   540 	IMPORT_C TBool IsEqual(const CParaFormat& aFormat) const;
   541 	IMPORT_C void StoreTabL(const TTabStop& aTabStop);
   542 	IMPORT_C void RemoveTab(TInt aTabTwipsPosition);
   543 	inline void RemoveAllTabs();
   544 	IMPORT_C const TTabStop TabStop(TInt aTabIndex) const;
   545 	inline TInt TabCount() const;
   546 	IMPORT_C TInt LocateTab(TInt aTabTwipsPosition) const;
   547 	IMPORT_C void SetParaBorderL(TParaBorderSide aSide, const TParaBorder& aBorder);  // Overwrites any existing border for that side
   548 	IMPORT_C void RemoveAllBorders();
   549 	IMPORT_C const TParaBorder ParaBorder(TParaBorderSide aSide) const;
   550 
   551 	/** Tests whether any paragraph borders have been set.
   552 	
   553 	@return ETrue if any paragraph borders have been set, EFalse if not. */
   554 	inline TBool BordersPresent() const { return iParaBorderArray != NULL;}
   555 	
   556     inline TParaBorder* ParaBorderPtr(TParaBorderSide aSide)
   557 
   558 	/** Gets a pointer to the paragraph border on the side specified. If no 
   559 	paragraph border array has been allocated, returns NULL.
   560 	
   561 	@param aSide The side for the paragraph border. 
   562 	@return Pointer to the paragraph border on the specified side. */
   563 		{ return iParaBorderArray ? &iParaBorderArray->iBorder[aSide] : NULL; }
   564 	IMPORT_C TBool AllBordersEqual(const CParaFormat& aFormat) const;
   565 	IMPORT_C TBool IsBorderEqual(TParaBorderSide aSide, const CParaFormat& aFormat) const;
   566 private:
   567 	CParaFormat(const CParaFormat& aFormat);
   568 	void CreateTabListL();
   569 	enum
   570 		{
   571 		ETabStoreGranularity = 2
   572 		};
   573 
   574 	CParaFormat& operator=(const CParaFormat& aParaFormat);	// intentionally unimplemented
   575 private:
   576 	CArrayFixFlat<TTabStop>* iTabList;			// ordered list of tab stops; null if none
   577 	TParaBorderArray* iParaBorderArray;			// array of paragraph borders; null if none
   578 public:
   579 	/** The background colour of the paragraph. By default the default system 
   580 	background colour. This colour applies to the area bounded by the paragraph 
   581 	border, if one exists. */
   582 	TLogicalRgb iFillColor;
   583 	/** The language of the paragraph for proofing. By default 
   584 	KParaDefaultLanguage. Used for example when spell checking a document 
   585 	which contains text in more than one language, so that the program 
   586 	recognises the text as being in another language. */
   587 	TInt32 iLanguage;						
   588 	/** The width in twips of the leading margin (left for left-to-right
   589 	paragraphs, right for right-to-left paragraphs). By default
   590 	KParaDefaultLeftMargin (zero). */
   591 	TInt32 iLeftMarginInTwips;
   592 	/** The width in twips of the trailing margin (right for left-to-right
   593 	paragraphs, left for right-to-left paragraphs). By default
   594 	KParaDefaultRightMargin (zero). */
   595 	TInt32 iRightMarginInTwips;
   596 	/** An indent for the first line in the paragraph, relative to the leading
   597 	margin (left for left-to-right paragraphs, right for right-to-left
   598 	paragraphs). By default KParaDefaultIndent (zero). */
   599 	TInt32 iIndentInTwips;
   600 	/** Horizontal alignment of paragraph. By default KParaDefaultHorizAlign 
   601 	(left). */
   602 	TAlignment iHorizontalAlignment;
   603 	/** Vertical alignment of paragraph, (intended for use by spreadsheet 
   604 	applications). 	By default KParaDefaultVertAlign (unspecified). */
   605 	TAlignment iVerticalAlignment;
   606 	/** Inter-line spacing within the paragraph, in twips. By default 
   607 	KParaDefaultLineSpacing (200 twips). */
   608 	TInt32 iLineSpacingInTwips;	// distance between successive baselines
   609 	/** Control for the iLineSpacingInTwips value. By default, 
   610 	KParaDefaultLineSpacingControl 	(ELineSpacingAtLeastInTwips). */
   611 	TLineSpacingControl iLineSpacingControl;	// whether iLineSpacingInTwips means 'at least' or 'exactly'
   612 	/** Space above paragraph. By default KParaDefaultSpaceBefore (zero). */
   613 	TInt32 iSpaceBeforeInTwips;	
   614 	/** Space below paragraph. By default KParaDefaultSpaceAfter (zero). */
   615 	TInt32 iSpaceAfterInTwips;	
   616 	/** Prevents a page break within paragraph if ETrue. By default 
   617 	KParaDefaultKeepTogether (EFalse). */
   618 	TBool iKeepTogether;	
   619 	/** Prevents a page break between this paragraph and the following 
   620 	paragraph if ETrue. By default, KParaDefaultKeepWithNext (EFalse). */
   621 	TBool iKeepWithNext;	
   622 	/** Inserts a page break immediately before this paragraph if ETrue. 
   623 	By default, KParaDefaultStartNewPage (EFalse). */
   624 	TBool iStartNewPage;		
   625 	/** Prevents the printing of the last line of a paragraph at the top 
   626 	of the page (referred to as a widow), or the first line of a paragraph 
   627 	at the bottom of the page, (referred to as an orphan). By default, 
   628 	KParaDefaultWidowOrphan (EFalse). */
   629 	TBool iWidowOrphan;	
   630 	/** Specifies whether the paragraph should line wrap at the right margin. 
   631 	By default KParaDefaultWrap (ETrue). */
   632 	TBool iWrap;
   633 	/** Distance in twips between the paragraph border and the enclosed text. 
   634 	By default KParaDefaultBorderMargin (zero). */
   635 	TInt32 iBorderMarginInTwips;	
   636 	/** The bullet point associated with the paragraph. A NULL value indicates 
   637 	no bullet point. By default NULL. */
   638 	TBullet* iBullet;		
   639 	/** Specifies the default tab stop width. By default KParaDefaultTabWidth 
   640 	(360 twips). */
   641 	TUint32 iDefaultTabWidthInTwips;
   642 	};
   643 
   644 /** 
   645 Masks the paragraph format attributes which are involved when setting and 
   646 sensing paragraph formatting. 
   647 
   648 Used in conjunction with an object of class CParaFormat. When setting formatting, 
   649 only the attributes which are set in the mask will participate in the relevant 
   650 function. When sensing formatting, on return, the mask indicates which attributes 
   651 were sensed from the format layer, and were not taken from the default values. 
   652 @publishedAll
   653 @released
   654 */
   655 class TParaFormatMask
   656 	{
   657 public:
   658 	inline TParaFormatMask();
   659 	inline void SetAttrib(TTextFormatAttribute aAttribute);
   660 	inline void ClearAttrib(TTextFormatAttribute aAttribute);
   661 	IMPORT_C void SetAll();
   662 	IMPORT_C void ClearAll();
   663 	inline TBool AttribIsSet(TTextFormatAttribute aAttribute) const;
   664 	inline TBool IsNull() const;
   665 	IMPORT_C TBool operator==(const TParaFormatMask& aMask) const;
   666 	inline TBool operator!=(const TParaFormatMask& aMask) const;
   667 
   668 private:
   669 	TUint32 iGuard;
   670 	};
   671 
   672 /** 
   673 Specifies the font-independent character format attributes, including bold, 
   674 italics and underlining.
   675 
   676 An instance of this class is owned by the character formatting container (class 
   677 TCharFormat). 
   678 @publishedAll
   679 @released
   680 */
   681 class TFontPresentation
   682 	{
   683 public:
   684 		
   685 	/** Highlight style */
   686 	enum TFontHighlightStyle
   687 		{
   688 		/** No highlighting used. */
   689 		EFontHighlightNone,
   690 		/** Normal (square cornered) highlighting used. */
   691 		EFontHighlightNormal,
   692 		/** Rounded corner highlighting used. */
   693 		EFontHighlightRounded,
   694 		/** Text is drawn offset towards the bottom-right in the highlight 
   695 		colour, (iHighlightColor) before being drawn again in the text colour, 
   696 		(iTextColor) creating a shadow effect. */
   697 		EFontHighlightShadow,
   698 		/** Placeholder for "unrecognised word" highlighting style for FEPs */
   699 		EFontHighlightNoMatchesIndicator,
   700 		/** First custom highlighting style is used.
   701 		@see MFormCustomDraw::DrawText(). */
   702 		EFontHighlightFirstCustomStyle = 128,
   703 		/** Second custom highlighting style is used. 
   704 		@see MFormCustomDraw::DrawText(). */
   705 		EFontHighlightLastCustomStyle = 255
   706 		};
   707 	
   708 	
   709 	/** Vertical picture alignment */
   710 	enum TAlignment
   711 		{
   712 		/** The top of the picture is aligned flush with the top of the font's 
   713 		ascent, so that the picture may descend below the line. */
   714 		EAlignTop,
   715 		/** The bottom of the picture is aligned flush with the bottom of the 
   716 		font's descent so that the picture may extend above the line. */
   717 		EAlignBottom,
   718 		/** The picture is aligned so that its centre is positioned at the 
   719 		baseline of the line. */
   720 		EAlignCentered,
   721 		/** The bottom of the picture is aligned with the baseline of the font.
   722 		This is the default. */
   723 		EAlignBaseLine
   724 		};
   725 	//
   726 	IMPORT_C TFontPresentation();
   727 	//
   728 	// Enquiry function
   729 	IMPORT_C TBool IsEqual(const TFontPresentation& aFontPresentation, const TCharFormatMask& aMask) const;
   730 public:
   731 	/** The text colour. By default, the default system foreground colour. */
   732 	TLogicalRgb iTextColor;
   733 	/** The highlight colour for selected text. Only takes effect if 
   734 	iHighlightStyle is not EFontHighlightNone. By default, the default system 
   735 	foreground colour. */
   736 	TLogicalRgb iHighlightColor;  // Background color
   737 	/** Style for character highlighting. By default EFontHighlightNone. */
   738 	TFontHighlightStyle iHighlightStyle;
   739 	/** The value of the strikethrough attribute. By default EStrikethroughOff. */
   740 	TFontStrikethrough iStrikethrough;
   741 	/** The value of the underline attribute. By default EUnderlineOff. */
   742 	TFontUnderline iUnderline;
   743 	/** Specifies whether or not text is hidden. Note that hidden text is not 
   744 	currently supported by the text layout engine. This attribute is provided 
   745 	to preserve information when copying from and to devices which support 
   746 	hidden text. By default EFalse. */
   747 	TBool iHiddenText;
   748 	/** The vertical alignment of a picture character. By default 
   749 	EAlignBaseLine. */
   750 	TAlignment iPictureAlignment;
   751 	};
   752 
   753 /** 
   754 A transient container of character format attributes, including 
   755 font-dependent and font-independent attributes. 
   756 
   757 The font-independent attributes are stored in a TFontPresentation object. 
   758 Rich and global text objects store character formatting using character format 
   759 layers (see class CCharFormatLayer). The TCharFormat class is used to store 
   760 the relevant attribute values when setting or sensing a CCharFormatLayer. 
   761 It is normally used in combination with a TCharFormatMask, to specify which 
   762 attributes are relevant to the function concerned. 
   763 @publishedAll
   764 @released
   765 */
   766 class TCharFormat
   767 	{
   768 public:
   769 	IMPORT_C TCharFormat();
   770 	IMPORT_C TCharFormat(const TDesC &aTypefaceName, TInt aHeight);
   771 	//
   772 	// Enquiry functions
   773 	IMPORT_C TBool IsEqual(const TCharFormat& aFormat, const TCharFormatMask& aMask) const;
   774 	IMPORT_C TBool IsEqual(const TCharFormat& aFormat) const;
   775 public:
   776 	/** Specifies the language of individual characters for proofing. Used for 
   777 	example when spell checking a document which contains text in more than one 
   778 	language, so that the program recognises the text as being in another 
   779 	language. Language is also a paragraph format attribute. If the language 
   780 	setting of a character is different from the language setting of the 
   781 	containing paragraph, the character's setting takes precedence. */
   782 	TInt32 iLanguage;
   783 	/** Font independent character format attributes. */
   784 	TFontPresentation iFontPresentation; 
   785 	/** Device independent font specification. */
   786 	TFontSpec iFontSpec;  
   787 	};
   788 
   789 /** 
   790 Masks the character format attributes which are involved when setting and 
   791 sensing character formatting.
   792 
   793 Used in conjunction with an object of class TCharFormat.
   794 
   795 When setting formatting, only the attributes which are set in the mask should 
   796 participate in the relevant function. When sensing formatting, on return, 
   797 the mask indicates which attributes were sensed from the format layer, and 
   798 were not taken from the default values. 
   799 @publishedAll
   800 @released
   801 */
   802 class TCharFormatMask
   803 	{
   804 public:
   805 	inline TCharFormatMask();
   806 	inline void SetAttrib(TTextFormatAttribute aAttribute);
   807 	inline void ClearAttrib(TTextFormatAttribute aAttribute);
   808 	inline TBool AttribIsSet(TTextFormatAttribute aAttribute) const;
   809 	IMPORT_C void SetAll();
   810 	IMPORT_C void ClearAll();
   811 	inline TBool IsNull()const;
   812 	IMPORT_C TBool operator==(const TCharFormatMask& aMask) const;
   813 	inline TBool operator!=(const TCharFormatMask& aMask) const;
   814 
   815 private:
   816 	TUint32 iGuard;
   817 	};
   818 
   819 #include <txtfrmat.inl>
   820 
   821 #endif