Merge 1. Pull in cpp files in the performance enhanced Khronos RI OVG files which are newly added. I've ignored platform-specific cpp files for linux, macosx, and null operating systems because this local solution has its own platform glue (i.e. facility to target Bitmaps but no full windowing support). I've ignored sfEGLInterface.cpp because this is used as a bridge to go from EGL to Nokia's Platsim which offers an EGL service. That's not relevant to this implementation because this is ARM side code, not Intel side. I just left a comment to sfEGLInterface.cpp in case we need to pick up this later on. The current code compiles on winscw. Prior to this fix, the code works on winscw, and can launch the SVG tiger (tiger.exe). That takes about 20 seconds to render. I hope to always be able to show this icon on each commit, and the plan is for the render time to reduce with this series of submissions. On this commit, the tiger renders ok in 20 seconds.
// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of "Eclipse Public License v1.0"
// which accompanies this distribution, and is available
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
//
// Initial Contributors:
// Nokia Corporation - initial contribution.
//
// Contributors:
//
// Description:
//
#ifndef LINEBREAK_H_
#define LINEBREAK_H_
#include <e32def.h>
class MContingentLineBreaker;
class MContingentLineBreakerL;
class TDesC16;
class TUid;
/**
This enumeration holds the possible panic codes that may be raised
by the LineBreak API on detecting an unrecoverable error.
@publishedAll
@released
*/
enum TLineBreakPanic
{
/** Not used */
ELineBreakPanic_Unknown = 0,
/** Internal error, error found in data table */
ELineBreakPanic_BadTable = 1,
/** One or more of the input parameters to the interface were invalid */
ELineBreakPanic_InvalidInputParam = 2,
/** Raised when an output parameter breaks an API condition */
ELineBreakPanic_InvalidOutputParam = 3,
};
class MLineBreaker
/**
Customizes the Unicode line-breaking algorithm.
@publishedAll
@released
*/
{
public:
/** The Unicode line breaking classes; see Unicode Technical Report 14.
Not a named enumerated type, so that overriding classes may add new
line breaking classes freely.
The description of each constant gives the name of the line-breaking
class, an example and a brief, imprecise description of the default
behaviour of characters of that class. */
enum
{
/** Opening Punctuation (e.g. '['). Breaking after prohibited. */
EOpLineBreakClass,
/** Closing Punctuation (e.g. ']'). Breaking before prohibited. */
EClLineBreakClass,
/** Ambiguous Quotes (e.g. '"'). Breaking before and after prohibited. */
EQuLineBreakClass,
/** Glue (e.g. Non-breaking space). Breaking before and after prohibited
unless spaces are present. */
EGlLineBreakClass,
/** Non-Starter (e.g. small Japanese kana). Breaking before prohibited
if no spaces present. */
ENsLineBreakClass,
/** Exclamation or Interrogation (e.g. '?'). Like closing punctuation
except before Postfix or Non-starter. */
EExLineBreakClass,
/** Symbol (e.g. '/'. Like Alphabetic, but allows breaking before
Alphabetic. */
ESyLineBreakClass,
/** Numeric Infix Separator (e.g. ','). Forbids breaking after any and before
Numeric. */
EIsLineBreakClass,
/** Numeric Prefix (e.g. '$'). Forbids breaking before Numeric. */
EPrLineBreakClass,
/** Numeric Postfix (e.g. '%'). Forbids breaking after Numeric. */
EPoLineBreakClass,
/** Numeric (e.g. '1'). */
ENuLineBreakClass,
/** Alphabetic (e.g. 'a'). */
EAlLineBreakClass,
/** Ideographic (e.g. Japanese Kanji). Generally break before or after */
EIdLineBreakClass,
/** Inseparable (e.g. ellipsis). Forbid breaks between Inseparables. */
EInLineBreakClass,
/** Hyphen (e.g. '-'). Allows a break after except before Numeric. */
EHyLineBreakClass,
/** Break After. Generally allow a break after. Breaking between Break
Afters not separated by spaces is prohibited. */
EBaLineBreakClass,
/** Break Before. Generally allow a break before. Breaking between Break
Befores not separated by spaces is prohibited. */
EBbLineBreakClass,
/** Break Before and After. Generally allow a break before or after.
Breaking between Break Before and Afters is prohibited, even if spaces
are present. */
EB2LineBreakClass,
/** Zero-Width Space. Allow a break. */
EZwLineBreakClass,
/** Combining Mark. Takes on the class of its base class. */
ECmLineBreakClass,
/** Mandatory Break. */
EBkLineBreakClass,
/** Carriage Return. Break after unless part of a CRLF pair. */
ECrLineBreakClass,
/** Line Feed. Break after. */
ELfLineBreakClass,
/** Surrogate. Half of a surrogate pair. */
ESgLineBreakClass,
/** Contingent Break (e.g. embedded pictures). Uses external
information */
ECbLineBreakClass,
/** Space. Intervening characters of class Space are indicated by
aHaveSpaces in LineBreakPossible. */
ESpLineBreakClass,
/** Complex Context (e.g. Thai). Runs of Complex Context are passed to
GetLineBreakInContext. */
ESaLineBreakClass,
/** Ambiguous. Characters of ambiguous East Asian width are treated
as Alphabetic, unless they are resolved as being "Wide", in which case
they are treated as Ideographic. */
EAiLineBreakClass,
/** The Xx class is used when the class is unknown; e.g.; outside the provided context. */
EXxLineBreakClass,
/** The number of Unicode line break classes. */
ELineBreakClasses
};
IMPORT_C virtual TUint LineBreakClass(TUint aCode,
TUint& aRangeStart, TUint& aRangeEnd) const;
IMPORT_C virtual TBool LineBreakPossible(TUint aPrevClass, TUint aNextClass,
TBool aHaveSpaces) const;
IMPORT_C virtual TBool GetLineBreakInContext(const TDesC16& aText,
TInt aMinBreakPos, TInt aMaxBreakPos, TBool aForwards,
TInt& aBreakPos) const;
IMPORT_C virtual TBool IsHangingCharacter(TUint aChar) const;
IMPORT_C TBool GetLineBreak(const TDesC16& aText,
TInt aMinBreakPos, TInt aMaxBreakPos, TBool aForwards,
MContingentLineBreaker* aCbDelegate,
TInt& aBreakPos, TInt& aBreakPosAfterSpaces) const;
IMPORT_C TBool GetLineBreakL(const TDesC16& aText,
TInt aMinBreakPos, TInt aMaxBreakPos, TBool aForwards,
MContingentLineBreakerL* aCbDelegate,
TInt& aBreakPos, TInt& aBreakPosAfterSpaces) const;
IMPORT_C virtual void* ExtendedInterface(TUid& aUid) const;
};
class MContingentLineBreaker
/**
Used to determine the line breaks around pictures and other characters with
the CB (contingent line break) class in situations where this operation cannot
leave.
@publishedAll
@released
*/
{
public:
/** Determines if a break is legal before the picture at aTextPosition.
@param aTextPosition The position of a character of line breaking class ECbLineBreakClass
in the text as supplied to MLineBreaker::GetLineBreak(), which may refer to
a picture.
@param aPrecedingClass The class of the character preceding aTextPosition.
@param aHasSpaces ETrue if spaces separate the preceding class from this.
@return ETrue if a line break is legal here. */
virtual TBool IsLegalBreakBefore(TInt aTextPosition, TInt aPrecedingClass,
TBool aHasSpaces) = 0;
/** Determines if a break is legal after the picture at aTextPosition.
@param aTextPosition The position of a character of line breaking class ECbLineBreakClass
in the text as supplied to MLineBreaker::GetLineBreak, which may refer to
a picture.
@param aFollowingClass The class of the character immediately following aTextPosition.
@param aHasSpaces ETrue if spaces separate the following class from this.
@return ETrue if a line break is legal here. */
virtual TBool IsLegalBreakAfter(TInt aTextPosition, TInt aFollowingClass,
TBool aHasSpaces) = 0;
};
class MContingentLineBreakerL
/**
Used to determine the line breaks around pictures and other characters with
the CB (contingent line break) class in situations where this operation may
leave.
@publishedAll
@released
*/
{
public:
/** Determines if a break is legal before the picture at aTextPosition.
@param aTextPosition The position of a character of line breaking class ECbLineBreakClass
in the text as supplied to MLineBreaker::GetLineBreak(), which may refer to
a picture.
@param aPrecedingClass The class of the character preceding aTextPosition.
@param aHasSpaces ETrue if spaces separate the preceding class from this.
@return ETrue if a line break is legal here. */
virtual TBool IsLegalBreakBeforeL(TInt aTextPosition, TInt aPrecedingClass,
TBool aHasSpaces) = 0;
/** Determines if a break is legal after the picture at aTextPosition.
@param aTextPosition The position of a character of line breaking class ECbLineBreakClass
in the text as supplied to MLineBreaker::GetLineBreak(), which may refer to
a picture.
@param aFollowingClass The class of the character immediately following aTextPosition.
@param aHasSpaces ETrue if spaces separate the preceding class from this.
@return ETrue if a line break is legal here. */
virtual TBool IsLegalBreakAfterL(TInt aTextPosition, TInt aFollowingClass,
TBool aHasSpaces) = 0;
};
#endif