| sl@0 |      1 | // Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
 | 
| sl@0 |      2 | // All rights reserved.
 | 
| sl@0 |      3 | // This component and the accompanying materials are made available
 | 
| sl@0 |      4 | // under the terms of "Eclipse Public License v1.0"
 | 
| sl@0 |      5 | // which accompanies this distribution, and is available
 | 
| sl@0 |      6 | // at the URL "http://www.eclipse.org/legal/epl-v10.html".
 | 
| sl@0 |      7 | //
 | 
| sl@0 |      8 | // Initial Contributors:
 | 
| sl@0 |      9 | // Nokia Corporation - initial contribution.
 | 
| sl@0 |     10 | //
 | 
| sl@0 |     11 | // Contributors:
 | 
| sl@0 |     12 | //
 | 
| sl@0 |     13 | // Description:
 | 
| sl@0 |     14 | //
 | 
| sl@0 |     15 | 
 | 
| sl@0 |     16 | #ifndef LINEBREAK_H_
 | 
| sl@0 |     17 | #define LINEBREAK_H_
 | 
| sl@0 |     18 | 
 | 
| sl@0 |     19 | #include <e32def.h>
 | 
| sl@0 |     20 | class MContingentLineBreaker;
 | 
| sl@0 |     21 | class MContingentLineBreakerL;
 | 
| sl@0 |     22 | class TDesC16;
 | 
| sl@0 |     23 | class TUid;
 | 
| sl@0 |     24 | 
 | 
| sl@0 |     25 | 
 | 
| sl@0 |     26 | /**
 | 
| sl@0 |     27 |  This enumeration holds the possible panic codes that may be raised
 | 
| sl@0 |     28 |  by the LineBreak API on detecting an unrecoverable error.
 | 
| sl@0 |     29 | @publishedAll
 | 
| sl@0 |     30 | @released
 | 
| sl@0 |     31 | */
 | 
| sl@0 |     32 | enum TLineBreakPanic
 | 
| sl@0 |     33 | 	{
 | 
| sl@0 |     34 | 	/** Not used */
 | 
| sl@0 |     35 | 	ELineBreakPanic_Unknown				= 0,
 | 
| sl@0 |     36 | 	/** Internal error, error found in data table */
 | 
| sl@0 |     37 | 	ELineBreakPanic_BadTable			= 1,
 | 
| sl@0 |     38 | 	/** One or more of the input parameters to the interface were invalid */
 | 
| sl@0 |     39 | 	ELineBreakPanic_InvalidInputParam	= 2,
 | 
| sl@0 |     40 | 	/** Raised when an output parameter breaks an API condition */
 | 
| sl@0 |     41 | 	ELineBreakPanic_InvalidOutputParam	= 3,
 | 
| sl@0 |     42 | 	};
 | 
| sl@0 |     43 | 
 | 
| sl@0 |     44 | 
 | 
| sl@0 |     45 | 
 | 
| sl@0 |     46 | class MLineBreaker
 | 
| sl@0 |     47 | /**
 | 
| sl@0 |     48 | Customizes the Unicode line-breaking algorithm. 
 | 
| sl@0 |     49 | @publishedAll
 | 
| sl@0 |     50 | @released
 | 
| sl@0 |     51 | */
 | 
| sl@0 |     52 | 	{
 | 
| sl@0 |     53 | public:
 | 
| sl@0 |     54 | 	/** The Unicode line breaking classes; see Unicode Technical Report 14.
 | 
| sl@0 |     55 | 	Not a named enumerated type, so that overriding classes may add new
 | 
| sl@0 |     56 | 	line breaking classes freely.
 | 
| sl@0 |     57 | 	The description of each constant gives the name of the line-breaking
 | 
| sl@0 |     58 | 	class, an example and a brief, imprecise description of the default
 | 
| sl@0 |     59 | 	behaviour of characters of that class.	 */
 | 
| sl@0 |     60 | 	enum
 | 
| sl@0 |     61 | 		{
 | 
| sl@0 |     62 | 		/** Opening Punctuation (e.g. '['). Breaking after prohibited. */
 | 
| sl@0 |     63 | 		EOpLineBreakClass,
 | 
| sl@0 |     64 | 		/** Closing Punctuation (e.g. ']'). Breaking before prohibited. */
 | 
| sl@0 |     65 | 		EClLineBreakClass,
 | 
| sl@0 |     66 | 		/** Ambiguous Quotes (e.g. '"'). Breaking before and after prohibited. */
 | 
| sl@0 |     67 | 		EQuLineBreakClass,
 | 
| sl@0 |     68 | 		/** Glue (e.g. Non-breaking space). Breaking before and after prohibited
 | 
| sl@0 |     69 | 		unless spaces are present. */
 | 
| sl@0 |     70 | 		EGlLineBreakClass,
 | 
| sl@0 |     71 | 		/** Non-Starter (e.g. small Japanese kana). Breaking before prohibited
 | 
| sl@0 |     72 | 		if no spaces present. */
 | 
| sl@0 |     73 | 		ENsLineBreakClass,
 | 
| sl@0 |     74 | 		/** Exclamation or Interrogation (e.g. '?'). Like closing punctuation
 | 
| sl@0 |     75 | 		except before Postfix or Non-starter. */
 | 
| sl@0 |     76 | 		EExLineBreakClass,
 | 
| sl@0 |     77 | 		/** Symbol (e.g. '/'. Like Alphabetic, but allows breaking before
 | 
| sl@0 |     78 | 		Alphabetic. */
 | 
| sl@0 |     79 | 		ESyLineBreakClass,
 | 
| sl@0 |     80 | 		/** Numeric Infix Separator (e.g. ','). Forbids breaking after any and before
 | 
| sl@0 |     81 | 		Numeric. */
 | 
| sl@0 |     82 | 		EIsLineBreakClass,
 | 
| sl@0 |     83 | 		/** Numeric Prefix (e.g. '$'). Forbids breaking before Numeric. */
 | 
| sl@0 |     84 | 		EPrLineBreakClass,
 | 
| sl@0 |     85 | 		/** Numeric Postfix (e.g. '%'). Forbids breaking after Numeric. */
 | 
| sl@0 |     86 | 		EPoLineBreakClass,
 | 
| sl@0 |     87 | 		/** Numeric (e.g. '1'). */
 | 
| sl@0 |     88 | 		ENuLineBreakClass,
 | 
| sl@0 |     89 | 		/** Alphabetic (e.g. 'a'). */
 | 
| sl@0 |     90 | 		EAlLineBreakClass,
 | 
| sl@0 |     91 | 		/** Ideographic (e.g. Japanese Kanji). Generally break before or after */
 | 
| sl@0 |     92 | 		EIdLineBreakClass,
 | 
| sl@0 |     93 | 		/** Inseparable (e.g. ellipsis). Forbid breaks between Inseparables. */
 | 
| sl@0 |     94 | 		EInLineBreakClass,
 | 
| sl@0 |     95 | 		/** Hyphen (e.g. '-'). Allows a break after except before Numeric. */
 | 
| sl@0 |     96 | 		EHyLineBreakClass,
 | 
| sl@0 |     97 | 		/** Break After. Generally allow a break after. Breaking between Break
 | 
| sl@0 |     98 | 		Afters not separated by spaces is prohibited. */
 | 
| sl@0 |     99 | 		EBaLineBreakClass,
 | 
| sl@0 |    100 | 		/** Break Before. Generally allow a break before. Breaking between Break
 | 
| sl@0 |    101 | 		Befores not separated by spaces is prohibited. */
 | 
| sl@0 |    102 | 		EBbLineBreakClass,
 | 
| sl@0 |    103 | 		/** Break Before and After. Generally allow a break before or after.
 | 
| sl@0 |    104 | 		Breaking between Break Before and Afters is prohibited, even if spaces
 | 
| sl@0 |    105 | 		are present. */
 | 
| sl@0 |    106 | 		EB2LineBreakClass,
 | 
| sl@0 |    107 | 		/** Zero-Width Space. Allow a break. */
 | 
| sl@0 |    108 | 		EZwLineBreakClass,
 | 
| sl@0 |    109 | 		/** Combining Mark. Takes on the class of its base class. */
 | 
| sl@0 |    110 | 		ECmLineBreakClass,
 | 
| sl@0 |    111 | 		/** Mandatory Break. */
 | 
| sl@0 |    112 | 		EBkLineBreakClass,
 | 
| sl@0 |    113 | 		/** Carriage Return. Break after unless part of a CRLF pair. */
 | 
| sl@0 |    114 | 		ECrLineBreakClass,
 | 
| sl@0 |    115 | 		/** Line Feed. Break after. */
 | 
| sl@0 |    116 | 		ELfLineBreakClass,
 | 
| sl@0 |    117 | 		/** Surrogate. Half of a surrogate pair. */
 | 
| sl@0 |    118 | 		ESgLineBreakClass,
 | 
| sl@0 |    119 | 		/** Contingent Break (e.g. embedded pictures). Uses external
 | 
| sl@0 |    120 | 		information */
 | 
| sl@0 |    121 | 		ECbLineBreakClass,
 | 
| sl@0 |    122 | 
 | 
| sl@0 |    123 | 		/** Space. Intervening characters of class Space are indicated by
 | 
| sl@0 |    124 | 		aHaveSpaces in LineBreakPossible. */
 | 
| sl@0 |    125 | 		ESpLineBreakClass, 
 | 
| sl@0 |    126 | 
 | 
| sl@0 |    127 | 		/** Complex Context (e.g. Thai). Runs of Complex Context are passed to
 | 
| sl@0 |    128 | 		GetLineBreakInContext. */
 | 
| sl@0 |    129 | 		ESaLineBreakClass,
 | 
| sl@0 |    130 | 
 | 
| sl@0 |    131 | 		/** Ambiguous. Characters of ambiguous East Asian width are treated
 | 
| sl@0 |    132 | 		as Alphabetic, unless they are resolved as being "Wide", in which case
 | 
| sl@0 |    133 | 		they are treated as Ideographic. */
 | 
| sl@0 |    134 | 		EAiLineBreakClass,
 | 
| sl@0 |    135 | 
 | 
| sl@0 |    136 | 		/** The Xx class is used when the class is unknown; e.g.; outside the provided context. */
 | 
| sl@0 |    137 | 		EXxLineBreakClass,
 | 
| sl@0 |    138 | 
 | 
| sl@0 |    139 | 		/** The number of Unicode line break classes. */
 | 
| sl@0 |    140 | 		ELineBreakClasses
 | 
| sl@0 |    141 | 		};
 | 
| sl@0 |    142 | 
 | 
| sl@0 |    143 | 	IMPORT_C virtual TUint LineBreakClass(TUint aCode,
 | 
| sl@0 |    144 | 		TUint& aRangeStart, TUint& aRangeEnd) const;
 | 
| sl@0 |    145 | 	IMPORT_C virtual TBool LineBreakPossible(TUint aPrevClass, TUint aNextClass,
 | 
| sl@0 |    146 | 		TBool aHaveSpaces) const;
 | 
| sl@0 |    147 | 	IMPORT_C virtual TBool GetLineBreakInContext(const TDesC16& aText,
 | 
| sl@0 |    148 | 		TInt aMinBreakPos, TInt aMaxBreakPos, TBool aForwards,
 | 
| sl@0 |    149 | 		TInt& aBreakPos) const;
 | 
| sl@0 |    150 | 	IMPORT_C virtual TBool IsHangingCharacter(TUint aChar) const;
 | 
| sl@0 |    151 | 	IMPORT_C TBool GetLineBreak(const TDesC16& aText,
 | 
| sl@0 |    152 | 		TInt aMinBreakPos, TInt aMaxBreakPos, TBool aForwards,
 | 
| sl@0 |    153 | 		MContingentLineBreaker* aCbDelegate,
 | 
| sl@0 |    154 | 		TInt& aBreakPos, TInt& aBreakPosAfterSpaces) const;
 | 
| sl@0 |    155 | 	IMPORT_C TBool GetLineBreakL(const TDesC16& aText,
 | 
| sl@0 |    156 | 		TInt aMinBreakPos, TInt aMaxBreakPos, TBool aForwards,
 | 
| sl@0 |    157 | 		MContingentLineBreakerL* aCbDelegate,
 | 
| sl@0 |    158 | 		TInt& aBreakPos, TInt& aBreakPosAfterSpaces) const;
 | 
| sl@0 |    159 | 	IMPORT_C virtual void* ExtendedInterface(TUid& aUid) const;
 | 
| sl@0 |    160 | 	};
 | 
| sl@0 |    161 | 
 | 
| sl@0 |    162 | 
 | 
| sl@0 |    163 | class MContingentLineBreaker
 | 
| sl@0 |    164 | /**
 | 
| sl@0 |    165 | Used to determine the line breaks around pictures and other characters with 
 | 
| sl@0 |    166 | the CB (contingent line break) class in situations where this operation cannot 
 | 
| sl@0 |    167 | leave. 
 | 
| sl@0 |    168 | @publishedAll
 | 
| sl@0 |    169 | @released
 | 
| sl@0 |    170 | */
 | 
| sl@0 |    171 | 	{
 | 
| sl@0 |    172 | public:
 | 
| sl@0 |    173 | 	/** Determines if a break is legal before the picture at aTextPosition. 
 | 
| sl@0 |    174 | 	
 | 
| sl@0 |    175 | 	@param aTextPosition The position of a character of line breaking class ECbLineBreakClass 
 | 
| sl@0 |    176 | 	in the text as supplied to MLineBreaker::GetLineBreak(), which may refer to 
 | 
| sl@0 |    177 | 	a picture.
 | 
| sl@0 |    178 | 	@param aPrecedingClass The class of the character preceding aTextPosition.
 | 
| sl@0 |    179 | 	@param aHasSpaces ETrue if spaces separate the preceding class from this.
 | 
| sl@0 |    180 | 	@return ETrue if a line break is legal here. */
 | 
| sl@0 |    181 | 	virtual TBool IsLegalBreakBefore(TInt aTextPosition, TInt aPrecedingClass,
 | 
| sl@0 |    182 | 		TBool aHasSpaces) = 0;
 | 
| sl@0 |    183 | 	/** Determines if a break is legal after the picture at aTextPosition. 
 | 
| sl@0 |    184 | 	
 | 
| sl@0 |    185 | 	@param aTextPosition The position of a character of line breaking class ECbLineBreakClass 
 | 
| sl@0 |    186 | 	in the text as supplied to MLineBreaker::GetLineBreak, which may refer to 
 | 
| sl@0 |    187 | 	a picture.
 | 
| sl@0 |    188 | 	@param aFollowingClass The class of the character immediately following aTextPosition.
 | 
| sl@0 |    189 | 	@param aHasSpaces ETrue if spaces separate the following class from this.
 | 
| sl@0 |    190 | 	@return ETrue if a line break is legal here. */
 | 
| sl@0 |    191 | 	virtual TBool IsLegalBreakAfter(TInt aTextPosition, TInt aFollowingClass,
 | 
| sl@0 |    192 | 		TBool aHasSpaces) = 0;
 | 
| sl@0 |    193 | 	};
 | 
| sl@0 |    194 | 
 | 
| sl@0 |    195 | 
 | 
| sl@0 |    196 | 
 | 
| sl@0 |    197 | class MContingentLineBreakerL
 | 
| sl@0 |    198 | /**
 | 
| sl@0 |    199 | Used to determine the line breaks around pictures and other characters with 
 | 
| sl@0 |    200 | the CB (contingent line break) class in situations where this operation may 
 | 
| sl@0 |    201 | leave. 
 | 
| sl@0 |    202 | @publishedAll
 | 
| sl@0 |    203 | @released
 | 
| sl@0 |    204 | */
 | 
| sl@0 |    205 | 	{
 | 
| sl@0 |    206 | public:
 | 
| sl@0 |    207 | 	/** Determines if a break is legal before the picture at aTextPosition. 
 | 
| sl@0 |    208 | 	
 | 
| sl@0 |    209 | 	@param aTextPosition The position of a character of line breaking class ECbLineBreakClass 
 | 
| sl@0 |    210 | 	in the text as supplied to MLineBreaker::GetLineBreak(), which may refer to 
 | 
| sl@0 |    211 | 	a picture.
 | 
| sl@0 |    212 | 	@param aPrecedingClass The class of the character preceding aTextPosition.
 | 
| sl@0 |    213 | 	@param aHasSpaces ETrue if spaces separate the preceding class from this.
 | 
| sl@0 |    214 | 	@return ETrue if a line break is legal here. */
 | 
| sl@0 |    215 | 	virtual TBool IsLegalBreakBeforeL(TInt aTextPosition, TInt aPrecedingClass,
 | 
| sl@0 |    216 | 		TBool aHasSpaces) = 0;
 | 
| sl@0 |    217 | 	/** Determines if a break is legal after the picture at aTextPosition. 
 | 
| sl@0 |    218 | 	
 | 
| sl@0 |    219 | 	@param aTextPosition The position of a character of line breaking class ECbLineBreakClass 
 | 
| sl@0 |    220 | 	in the text as supplied to MLineBreaker::GetLineBreak(), which may refer to 
 | 
| sl@0 |    221 | 	a picture.
 | 
| sl@0 |    222 | 	@param aFollowingClass The class of the character immediately following aTextPosition.
 | 
| sl@0 |    223 | 	@param aHasSpaces ETrue if spaces separate the preceding class from this.
 | 
| sl@0 |    224 | 	@return ETrue if a line break is legal here. */
 | 
| sl@0 |    225 | 	virtual TBool IsLegalBreakAfterL(TInt aTextPosition, TInt aFollowingClass,
 | 
| sl@0 |    226 | 		TBool aHasSpaces) = 0;
 | 
| sl@0 |    227 | 	};
 | 
| sl@0 |    228 | 
 | 
| sl@0 |    229 | #endif
 |