fontservices/fontstore/inc/OPENFONT.H
changeset 32 8b9155204a54
child 49 4d76f1414957
child 51 a7c938434754
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fontservices/fontstore/inc/OPENFONT.H	Fri Jun 04 10:37:54 2010 +0100
@@ -0,0 +1,2489 @@
+/*
+* Copyright (c) 1998-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: 
+* A header for the open font system, which allows SymbianOS
+* to use fonts of arbitrary types, including TrueType/OpenType
+* and other outline font formats.
+*
+*/
+
+
+#ifndef __OPENFONT_H__
+#define __OPENFONT_H__
+
+#include <e32base.h>
+#include <gdi.h>
+#include <ecom/ecom.h>
+
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <linkedfonts.h>
+#include <graphics/openfontconstants.h>
+#include <graphics/openfontrasterizer.h>
+#include <openfontlinkedtypefaceelementspec.h>
+#include <graphics/openfontlinkedtypefacespecification.h>
+#include <graphics/openfontlinkedtypefaceextension.h>
+#endif
+
+class CFont;
+class COpenFontFile;
+class COpenFontGlyph;
+class COpenFontGlyphCache;
+class COpenFontGlyphTreeEntry;
+class COpenFontPositioner;
+class COpenFontSessionCache;
+class COpenFontSessionCacheList;
+class RFs;
+class TCharacterMetrics;
+class TFontSpec;
+class TOpenFontFaceAttrib;
+class CFontStore;
+class TOpenFontFileData;
+class TShapeHeader;
+class CBitmapFont;
+class CShaperFactory;
+class CShaper;
+class TShapeHeader;
+class TFontShapeFunctionParameters;
+class TFontShapeDeleteFunctionParameters;
+class RShapeInfo;
+class TShapeMessageParameters;
+class CRasterizerLinkedTypefaceSpecification;
+class TLinkedTypefaceSpecificationArgs;
+
+/**
+Supplied to COpenFont::ExtendedInterface() to access the extended
+API interface MOpenFontShapingExtension.
+
+@see	COpenFont::ExtendedInterface()
+@see	MOpenFontShapingExtension
+@publishedAll
+@released
+*/
+const TUid KUidOpenFontShapingExtension = {0x10274DB9};
+
+/**
+Supplied to COpenFont::ExtendedInterface() to access the extended
+API interface MOpenFontTrueTypeExtension.
+
+@see	COpenFont::ExtendedInterface()
+@see	MOpenFontTrueTypeExtension
+@publishedAll
+@released
+*/
+const TUid KUidOpenFontTrueTypeExtension = {0x1027553E};
+const TUid KUidOpenFontGlyphOutlineExtension = {0x102872CE};
+
+/**
+Supplied to CShaper::ExtendedInterface() to get the language and script
+code with which the current shaper is instatsiated.
+@see	CShaper::ExtendedInterface()
+@publishedAll
+@released
+*/
+const TUid KUidShaperGetScript = {0x20009966};
+const TUid KUidShaperGetLang = {0x20009967};
+
+/**
+Font metrics.
+
+@see	CFbsFont::GetFontMetrics()
+@publishedAll
+@released
+*/
+class TOpenFontMetrics
+	{
+public:
+	inline TOpenFontMetrics();
+	IMPORT_C TOpenFontMetrics(const CFont* aFont);
+	inline TInt Size() const;
+	inline TInt Ascent() const;
+	inline TInt Descent() const;
+	inline TInt MaxHeight() const;
+	inline TInt MaxDepth() const;
+	inline TInt MaxWidth() const;
+	inline void SetSize(TInt aSize);
+	inline void SetAscent(TInt aAscent);
+	inline void SetDescent(TInt aDescent);
+	inline void SetMaxHeight(TInt aMaxHeight);
+	inline void SetMaxDepth(TInt aMaxDepth);
+	inline void SetMaxWidth(TInt aMaxWidth);
+	/** WARNING: Function for internal and partner use ONLY. Compatibility is not guaranteed in future releases.*/
+	IMPORT_C void SetBaselineCorrection(TInt aBaselineCorrection);
+	IMPORT_C TInt BaselineCorrection();
+private:
+	TInt16 iDesignHeight;	// size of the font ('pointsize' in pixels)
+	TInt16 iAscent;			// typographic ascent
+	TInt16 iDescent;		// typographic descent
+	TInt16 iMaxHeight;		// maximum height of a character; may be greater than iAscent
+	TInt16 iMaxDepth;		// maximum depth of a character; may be greater than iDescent
+	TInt16 iMaxWidth;		// maximum width of a character
+	TInt16 iBaselineCorrection;
+	TInt16 iReserved;
+	};
+
+
+/**
+Character metrics  includes more information than TCharacterMetrics.
+
+Character metrics allow characters to be placed horizontally or vertically. 
+The character metrics encapsulated by this class are: Height, Width, Horizontal 
+Bearing X, Horizontal Bearing Y, Horizontal Advance, Vertical Bearing X, 
+Vertical Bearing Y, and Vertical Advance. Their meanings are described in the 
+associated setter and getter functions.
+
+Note : 
+
+Vertical drawing (in the sense of characters drawn with horizontal baselines, 
+but in a vertical line) is not yet supported by Symbian OS.
+
+@see	CFont::GetCharacterData()
+@see	CFbsFont::GetCharacterData() 
+@publishedAll
+@released
+*/
+class TOpenFontCharMetrics
+	{
+public:
+	enum TUninitialized { EUninitialized };
+public:
+	/** Default constructor initializes all members to 0. */
+	inline TOpenFontCharMetrics();
+
+	/** Constructor that does not initialize any members. */
+	TOpenFontCharMetrics(TUninitialized) {}
+	IMPORT_C TOpenFontCharMetrics(const TCharacterMetrics& aMetrics);
+	IMPORT_C TBool GetTCharacterMetrics(TCharacterMetrics& aMetrics) const;
+	inline TInt Width() const;
+	inline TInt Height() const;
+	inline TInt HorizBearingX() const;
+	inline TInt HorizBearingY() const;
+	inline TInt HorizAdvance() const;
+	inline TInt VertBearingX() const;
+	inline TInt VertBearingY() const;
+	inline TInt VertAdvance() const;
+	inline void GetHorizBounds(TRect& aBounds) const;
+	inline void GetVertBounds(TRect& aBounds) const;
+	inline void SetWidth(TInt aWidth);
+	inline void SetHeight(TInt aHeight);
+	inline void SetHorizBearingX(TInt aHorizBearingX);
+	inline void SetHorizBearingY(TInt aHorizBearingY);
+	inline void SetHorizAdvance(TInt aHorizAdvance);
+	inline void SetVertBearingX(TInt aVertBearingX);
+	inline void SetVertBearingY(TInt aVertBearingY);
+	inline void SetVertAdvance(TInt aVertAdvance);
+	IMPORT_C void  SetGlyphType(TGlyphBitmapType);
+	IMPORT_C TGlyphBitmapType GlyphType() const;
+private:
+	TInt16 iWidth;			// width of the glyph
+	TInt16 iHeight;			// height of the glyph
+	TInt16 iHorizBearingX;	// x component of horizontal bearing
+	TInt16 iHorizBearingY;	// y component of horizontal bearing
+	TInt16 iHorizAdvance;	// horizontal advance
+	TInt16 iVertBearingX;	// x component of vertical bearing
+	TInt16 iVertBearingY;	// y component of vertical bearing
+	TInt16 iVertAdvance;	// vertical advance
+	TUint16  iGlyphBitmapType;// Glyph bitmap type; TGlyphBitmapType
+	TInt16 iReserved;
+	};
+
+
+/**
+Font glyph data.
+
+Objects of this type are used by rasterizers to supply glyph data to font 
+and bitmap server clients. Unless you are writing a rasterizer you will not 
+need to use an object of this type.
+
+The object cannot be constructed and destroyed by normal means. It resides 
+on a specified heap. It is created by New() and deleted by RHeap::Free().
+
+@see	COpenFont::RasterizeL()
+@publishedAll
+@released
+*/
+class TOpenFontGlyphData
+	{
+public:
+	IMPORT_C static TOpenFontGlyphData* New(RHeap* aHeap,TInt aBufferSize);
+	inline TBool Overflow() const;
+	inline TInt BytesNeeded() const;
+	inline TPtrC8 Bitmap() const;
+	inline const TUint8* BitmapPointer() const;
+	inline const TOpenFontCharMetrics* Metrics() const;
+	inline TInt GlyphIndex() const;
+	inline TUint8* BufferStart();
+	inline TUint8* BufferEnd();
+	inline void SetBytesNeeded(TInt aBytes);
+	inline void SetBitmapPointer(const TUint8* aBitmap);
+	inline void SetMetricsPointer(const TOpenFontCharMetrics* aMetrics);
+	inline void SetPointersToInternalBuffers();
+	inline void SetMetrics(TOpenFontCharMetrics& aMetrics);
+	inline void SetGlyphIndex(TInt aGlyphIndex);
+private:
+	/*
+	Prevent construction and destruction by normal means; the object resides 
+	on a specified heap and is created by New and deleted by RHeap::Free.
+	*/
+	TOpenFontGlyphData();
+	~TOpenFontGlyphData();
+private:
+	TInt iBitmapBufferSize;					// size of the buffer in bytes
+	TInt iBytesNeeded;						// bytes needed for the bitmap
+	TOpenFontCharMetrics iMetricsBuffer;	// the metrics
+	const TUint8* iBitmap;					// pointer to the bitmap; points either to iBitmapBuffer or to
+											// the cache if the character was already rasterized
+	const TOpenFontCharMetrics* iMetrics;	// pointer to the metrics; points either to iMetricsBuffer or to
+											// the cache if the character was already rasterized
+	TInt iGlyphIndex;						// the glyph index
+	TAny* iReserved;						// unused; for future expansion
+	TUint8 iBitmapBuffer[1];				// buffer used to write the bitmap when it is first rasterized; this
+											// is actually of size iBitmapBufferSize.
+	};
+
+class COpenFontGlyph;
+/**
+Open Font System font abstract base class.
+
+Derive a class from this class to represent an instance of a typeface at a 
+particular size, provide bitmaps of the glyphs, and determine whether 
+characters exist in the typeface.
+
+Writing derived classes construction: 
+
+You must call the constructor of this class when creating your derived object, 
+passing the arguments aHeap and aSessionCacheList supplied to 
+COpenFontFile::GetNearestFontInPixelsL(), and the address of the COpenFontFile 
+object that creates the object as aFile.
+
+The derived object must be created on the shared heap aHeap because it is 
+shared by several processes: the font and bitmap server and its clients. 
+To do this, use aHeap->AllocL() to obtain memory, then construct in place 
+using a placement argument to new.
+
+Derived classes must implement the pure virtual function RasterizeL(). 
+Information about this function is provided in the function definition below. 
+
+Information about deriving from this class is also provided in the API guide.
+
+@see	COpenFontFile::GetNearestFontInPixelsL()
+@publishedAll
+@released
+*/
+class COpenFont: public CBase
+	{
+public:
+	/** Creates a bitmap for the specified Unicode character.
+
+	Implementations of this function should put the bitmap in 
+	aGlyphData->iBitmapBuffer, and the character metrics are placed in 
+	aGlyphData->iMetricsBuffer. The other parts of aGlyphData should be left 
+	alone. 
+
+	There are a number of strategies for achieving this, e.g. pass the 
+	rasterization task all the way up to the rasterizer engine. These are 
+	discussed in the API guide.
+
+	At present you must write the bitmap in the Symbian platform's 
+	run-length-encoded format. This is a packed binary format starting on a 
+	byte boundary and made up of a number of sections. Each section starts 
+	with a five-bit header. If the first bit of the header is 0 the next four 
+	bits are a repeat count, starting with the least significant bit, and a 
+	single row of bits (the number of bits in a row is specified by 
+	aGlyphData->iMetricsBuffer.Width()) follows. If the first bit of the header 
+	is 1 the next four bits are a count of non-repeating rows, again starting 
+	with the least significant bit, and that many rows of bits follow.
+
+	@param aCode The character code of the Unicode character for which the 
+	bitmap is required.
+	@param aGlyphData On return, contains a pointer to a TOpenFontGlyphData 
+	containing the character's bitmap and metrics. */
+	virtual void RasterizeL(TInt aCode,TOpenFontGlyphData* aGlyphData) = 0;
+	IMPORT_C virtual void ExtendedInterface(TUid aUid, TAny*& aParam);
+	IMPORT_C COpenFont(RHeap* aHeap,COpenFontSessionCacheList* aSessionCacheList,COpenFontFile* aFile);
+	IMPORT_C COpenFont(RHeap* aHeap,COpenFontSessionCacheList* aSessionCacheList,COpenFontFile* aFile,TInt aFaceIndex);
+	IMPORT_C ~COpenFont();
+	IMPORT_C void operator delete(TAny*);
+	inline const TOpenFontMetrics& Metrics() const;
+	inline const TOpenFontFaceAttrib* FaceAttrib() const;
+	inline COpenFontFile* File() const;
+	inline TInt FaceIndex() const;
+	inline TBool CharacterNeedsToBeRasterized(TInt aSessionHandle,TInt aCode) const;
+	void SetShaper(CShaper* aShaper);
+	CShaper* GetShaper();
+	TBool HasShaper() const;
+	TShapeHeader* GetShapedData(TInt aSessionHandle,TFontShapeFunctionParameters* aParams);
+	TShapeHeader* InsertShapedDataIntoCache(TInt aSessionHandle,TFontShapeFunctionParameters* aParams, TShapeHeader* aShapeHeader);
+	TInt FreeShaperCacheMemory(TInt aBytesNeeded);
+	TInt DecrementCachedRefCount(TInt aSessionHandle,TShapeHeader* aShapeHeader,TBool aResetAll=EFalse);
+	TBool Rasterize(TInt aSessionHandle,TInt aCode,TOpenFontGlyphData* aGlyphData);
+	TBool HasCharacterL(TInt aCode) const;
+	TBool GetCharacterData(TInt aSessionHandle,TInt aCode,const TOpenFontCharMetrics*& aMetrics,const TUint8*& aBitmap) const;
+	void OnFileDeleted();
+	COpenFontGlyphCache* GetGlyphCache();
+	inline TInt FontCapitalAscent() const;
+	inline TInt FontMaxAscent() const;
+	inline TInt FontStandardDescent() const;
+	inline TInt FontMaxDescent() const;
+	inline TInt FontLineGap() const;
+	inline TInt FontMaxHeight() const;
+	void DeleteShaper() const;
+	TInt GetFontTable(TUint32 aTag, TAny*& aTableContent, TInt& aLength);
+	TInt GetGlyphOutline(TUint aCode, TBool aHinted, TAny*& aOutline, TInt& aLength);
+	
+protected:	
+	/** WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.
+	*/
+	TInt PointerToThisOffset(const TAny* aAny);
+	/** WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.
+	*/
+	TAny* ThisOffsetToPointer(const TInt aOffset);
+		
+protected:
+	RHeap* iHeap;
+	TOpenFontMetrics iMetrics;
+private:
+	/** The shaper for performing complex character positioning and
+	substitution, if available. Null otherwise.
+	
+	WARNING: Member variable for internal use ONLY. Compatibility is not guaranteed in future releases. Please access using the provided get/set APIs only. 
+    */
+	CShaper* iShaper;
+
+protected:
+	/** The positive distance in pixels from the baseline to
+		the top of an ANSI capital (whether or not there are
+		ANSI capitals in the font) */
+	TInt iFontCapitalAscent;
+	/** The positive distance in pixels from the baseline to
+		the top of the highest pre-composed glyph in the font */
+	TInt iFontMaxAscent;
+	/** The positive distance in pixels from the baseline to
+		the bottom of the lowest ANSI descender (whether or
+		not there are ANSI chars in the font)*/
+	TInt iFontStandardDescent;
+	/** The positive distance in pixels from the baseline to
+		the bottom of the lowest pre-composed glyph in the font */
+	TInt iFontMaxDescent;
+	/** The recommended baseline to baseline gap for successive
+		lines of text in the font */
+	TInt iFontLineGap;
+private:
+	const COpenFontGlyph* Glyph(TInt aSessionHandle,TInt aCode) const;
+protected:
+
+	/** WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.
+	*/
+	const COpenFontGlyph* FontCacheGlyph(TInt aCode,TInt*& aNode);
+	const COpenFontGlyph* FontCacheGlyph(TInt aCode);
+	
+	void SetGlyphCache(COpenFontGlyphCache* aGlyphCache);
+	
+private:
+	const COpenFontGlyph* SessionCacheGlyph(RHeap* aHeap,TInt aSessionHandle,TInt aCode,
+											COpenFontSessionCache*& aCache,TInt& aIndex,TBool aCreate) const;
+	void RasterizeHelperL(TInt aCode,TOpenFontGlyphData* aGlyphData,TOpenFontGlyphData*& aTempGlyphData);
+
+	COpenFontSessionCacheList* SessionCacheList()const;
+	
+    void SetSessionCacheList(COpenFontSessionCacheList* aSessionCacheList);
+    
+    void SetFile(COpenFontFile* aFile);
+private:
+    
+    // Offset from the address of the file used by this font.
+    // If the file has been deleted or cannot be used, the offest will be zero.
+    TInt iFileOffset;
+    
+	TInt iFaceIndex;										// index of the face in the font file
+protected:
+    /**
+    WARNING: Compatibility is not guaranteed in future releases. Please use the provided APIs only.
+    Offset from the address of this font of the per-font glyph cache which is owned by the font
+    @internalTechnology
+    */  
+    TInt iGlyphCacheOffset;
+private:
+    // Offset from the address of this font of the list of per-session glyph
+    // caches which are owned by CFontStore
+    TInt iSessionCacheListOffset;
+
+	TAny* iReserved; // unused; for future expansion
+	};
+
+/** Open Font System Extension Interface abstract base class.
+
+COpenFont derivers should also derive from this interface to enable complex
+font "shaping".
+
+This interface should be returned by the overridden
+COpenFont::ExtendedInterface function when KUidOpenFontShapingExtension is
+supplied as the UID.
+
+@see	COpenFont
+@see	KUidOpenFontShapingExtension 
+@publishedAll
+@released
+*/
+class MOpenFontShapingExtension
+	{
+public:
+	/** Various font metrics. */
+	class TExtensionFontMetrics
+		{
+	public:
+		/** The number of font design units per em. */
+		TInt iUnitsPerEm;
+		/** The width of the font's em square in pixels. */
+		TReal iXPixelsPerEm;
+		/** The height of the font's em square in pixels. */
+		TReal iYPixelsPerEm;
+		/** The horizontal scaling factor from the font's transform;
+		the number of horizontal pixels per font unit. */
+		TReal iXScaleFactor;
+		/** The vertical scaling factor from the font's transform;
+		the number of vertical pixels per font unit. */
+		TReal iYScaleFactor;
+	private:
+		/** Reserved for future expansion. */
+		TInt iReserved[4];
+		};
+
+	/** Creates a bitmap for the specified Glyph code.
+
+	Implementations of this function should put the bitmap in
+	aGlyphData->iBitmapBuffer, and the character metrics are placed in
+	aGlyphData->iMetricsBuffer. The other parts of aGlyphData should be left
+	alone.
+
+	This function provides the same functionality as the
+	COpenFont::RasterizeL() except that the glyph code is supplied rather than
+	the unicode.
+
+	For more information:
+	@see	COpenFont::RasterizeL()
+
+	@param	aCode		The glyph code of the character for which the bitmap is required.
+	@param	aGlyphData	The function puts its output here.
+	*/
+	virtual void RasterizeGlyphL(TInt aCode,TOpenFontGlyphData* aGlyphData) = 0;
+
+	/** Maps a character to a glyph index.
+	@param aUnicodeCharacter Unicode character code to be mapped.
+	@return Glyph code corresponding to aUnicodeCharacter. */
+	virtual TInt GlyphIndex(TInt aUnicodeCharacter) const = 0;
+
+	/** Returns the hinted pixel coordinates of a particular point in the
+	outline of the given glyph.
+	@param aGlyphPoint The glyph index.
+	@param aPointNumber The number of the point.
+	@param aX Returns the point's X pixel value.
+	@param aY Returns the point's Y pixel value.
+	@return True on success, false otherwise. */
+	virtual TBool GlyphPointInHintedPixels(TInt aGlyphIndex, TInt aPointNumber,
+		TReal& aX, TReal& aY) const = 0;
+
+	/** Returns the coordinates of a particular (unhinted) point in the outline
+	of the given glyph in font units.
+	@param aGlyphPoint The glyph index.
+	@param aPointNumber The number of the point.
+	@param aX Returns the point's X co-ordinate in font units.
+	@param aY Returns the point's Y co-ordinate in font units.
+	@return True on success, false otherwise. */
+	virtual TBool GlyphPointInFontUnits(TInt aGlyphIndex, TInt aPointNumber,
+		TInt& aX, TInt& aY) const = 0;
+
+	/** Returns font metrics.
+	@param aOut Font metrics returned. */
+	virtual void GetExtensionFontMetrics(TExtensionFontMetrics& aOut) = 0;
+	};
+
+/** TrueType extension for Open Fonts.
+
+If an open font is able to load TrueType or OpenType tables it should derive
+from this class.
+
+This class will be used by 
+
+This interface should be returned by the overridden
+COpenFont::ExtendedInterface function when KUidOpenFontTrueTypeExtension is
+supplied as the UID.
+@see	KUidOpenFontTrueTypeExtension
+@publishedAll
+@released
+*/
+class MOpenFontTrueTypeExtension
+	{
+public:
+	/** Returns the specified table. The table need not be released by the
+	caller, so the deriver is responsible for ensuring that any memory
+	allocated is ultimately cleaned up. The caller must not delete or modify
+	the data returned.
+	@param aError
+		Returns KErrNone if successful or one of the system-wide error codes if
+		unsuccessful. Returns KErrNotSupported if the table does not exist in
+		the font file.
+	@param aTag
+		The tag of the table, with the first character in the most significant
+		byte. For example, the "vhea" table is obtained by passing in 'v'<<24 |
+		'h'<<16 | 'e'<<8 | 'a'.
+	@param aLength
+		The length of the table in bytes that has been returned or 0 if
+		unsuccessful.
+	@return The table, if successful.
+	@see ReleaseTrueTypeTable */
+	virtual TAny* GetTrueTypeTable(TInt& aError, TUint32 aTag, TInt* aLength) = 0;
+	/** Releases a table obtained by GetTrueTypeTable. The caller must not
+	use the table after this call.
+	@param aTable The table to be released.
+	@see GetTrueTypeTable */
+	virtual TInt ReleaseTrueTypeTable(TAny* aTable) = 0;
+	/** Determines if the font file has a particular table.
+	@param aTag The tag of the table as for GetTrueTypeTable.
+	@return True if the table exists in the font file, false otherwise.
+	@see GetTrueTypeTable */
+	virtual TBool HasTrueTypeTable(TUint32 aTag) = 0;
+	};
+
+class MOpenFontGlyphOutlineExtension 
+    {
+public:
+    virtual TInt GetGlyphOutline(TUint aCode, TBool aIsGlyphId, 
+            TBool aHinted, TAny*& aOutline, TInt& aLength) = 0;
+    };
+/** 
+Font attribute base class. 
+
+This class is not intended for user derivation.
+
+@see	TOpenFontFaceAttrib
+@see	TOpenFontSpec
+@publishedAll
+@released
+*/
+class TOpenFontFaceAttribBase
+	{
+public:
+	inline TOpenFontFaceAttribBase();
+	inline TBool HasLatin() const;
+	inline TBool HasGreek() const;
+	inline TBool HasCyrillic() const;
+	inline TBool HasKana() const;
+	inline TBool HasHangul() const;
+	inline TBool HasCJK() const;
+	inline TBool IsSymbol() const;
+	inline TBool IsBold() const;
+	inline TBool IsItalic() const;
+	inline TBool IsSerif() const;
+	inline TBool IsMonoWidth() const;
+	inline TPtrC Name() const;
+	inline const TUint* Coverage() const;
+	inline void SetName(const TDesC& aName);
+	inline void SetCoverage(TUint aCoverage0,TUint aCoverage1 = 0,TUint aCoverage2 = 0,TUint aCoverage3 = 0);
+	inline void SetBold(TBool aBold);
+	inline void SetItalic(TBool aItalic);
+	inline void SetSerif(TBool aSerif);
+	inline void SetMonoWidth(TBool aMonoWidth);
+	inline TBool operator==(const TOpenFontFaceAttribBase& aAttrib) const;
+
+	// Unicode ranges for iCoverage[0] (see the TrueType documentation for other values which are not included)
+	enum
+		{
+		ELatinSet = 0x1,			// 0000-007F
+		EGreekSet = 0x80,			// 0370-03FF
+		ECyrillicSet = 0x200,		// 0400-04FF
+		EArmenianSet = 0x400,		// 0530-058F
+		EHebrewSet = 0x800,			// 0590-05FF
+		EArabicSet = 0x2000,		// 0600-06FF
+		EDevanagariSet = 0x8000,	// 0900-097F
+		EBengaliSet = 0x10000,		// 0980-09FF
+		EGurmukhiSet = 0x20000,		// 0A00-0A7F
+		EGujuratiSet = 0x40000,		// 0A80-0AFF
+		EOriyaSet = 0x80000,		// 0B00-0B7F
+		ETamilSet = 0x100000,		// 0B80-0BFF
+		ETeluguSet = 0x200000,		// 0C00-0C7F
+		EKannadaSet = 0x400000,		// 0C80-0CFF
+		EMalayalamSet = 0x800000,	// 0D00-0D7F
+		EThaiSet = 0x1000000,		// 0E00-0E7F
+		ELaoSet = 0x2000000,		// 0E80-0EFF
+		EGeorgianSet = 0x8000000,	// 10A0-10FF
+		EHangulJamoSet = 0x10000000,// 1100-11FF
+		};
+
+	// Unicode ranges for iCoverage[1]
+	enum
+		{
+		ESymbolSets = 0xFFFE,
+		EKanaSets = 0x60000,
+		EHangulSet = 0x100000,
+		ECJKSet = 0x8000000
+		};
+
+	// Attribute flags
+	enum
+		{
+		EBold = 0x1,			// weight > 500 in Windows terms
+		EItalic = 0x2,			// italic or oblique - any forward slant counts
+		ESerif = 0x4,			// characters have serifs
+		EMonoWidth = 0x8		// all characters are the same width
+		};
+
+	// Other constants
+	enum
+		{
+		ENameLength = 32		// we allow 32 but names that are compatible with old-style fonts are limited to 24
+		};
+protected:
+	TBufC<ENameLength> iName;				// the name of the typeface; whether this is the full name or family name
+											// or is in English or another language depends on the context
+	TUint iCoverage[4];						// bitmap of the character sets supported by the typeface;
+											// these are the same as the fields ulUnicodeRange1 .. ulUnicodeRange4
+											// in the OS/2 table in TrueType fonts
+	TInt iStyle;							// bold, italic serif, and mono-width
+	TInt32 iReserved;
+	};
+
+
+/** 
+Typeface attributes.
+
+These attributes include the name, family name, and supported scripts.
+
+@see	CFbsFont::GetFaceAttrib()
+@publishedAll
+@released
+*/
+class TOpenFontFaceAttrib: public TOpenFontFaceAttribBase
+	{
+public:
+	inline TOpenFontFaceAttrib();
+	inline TBool operator==(const TOpenFontFaceAttrib& aAttrib) const;
+	inline TPtrC FullName() const;
+	inline TPtrC FamilyName() const;
+	inline TPtrC LocalFullName() const;
+	inline TPtrC LocalFamilyName() const;
+	inline TPtrC ShortFullName() const;
+	inline TPtrC ShortFamilyName() const;
+	inline TPtrC ShortLocalFullName() const;
+	inline TPtrC ShortLocalFamilyName() const;
+	inline void SetFullName(const TDesC& aName);
+	inline void SetFamilyName(const TDesC& aName);
+	inline void SetLocalFullName(const TDesC& aName);
+	inline void SetLocalFamilyName(const TDesC& aName);
+	inline TInt MinSizeInPixels() const;
+	inline void SetMinSizeInPixels(TInt aSize);
+private:
+	TBufC<ENameLength> iFamilyName;			// the name without any style suffixes; usually a truncation of iFullName
+	TBufC<ENameLength> iLocalFullName;		// the full name in the language of the current locale
+	TBufC<ENameLength> iLocalFamilyName;	// the family name in the language of the current locale
+	TInt iMinSizeInPixels;					// minimum supported size, (or readable size if scalable) in pixels
+	TInt32 iReserved2;
+	};
+
+
+/**
+Font specification allowing more attributes to be specified than TFontSpec.
+
+In addition to the attributes specified by TFontSpec, this font specification 
+allows stretching and slanting in the x dimension, and other algorithmic effects. 
+This is used to correct for non-square pixels, and to allow algorithmic slanting 
+and bold. The width factor and slant factor transform any point (x,y) to (x 
+* iWidthFactor + y * iSlantFactor,y). The width and slant factors are 16.16 
+fixed-point numbers.
+
+The font specification also provides access to information about the scripts 
+which are supported by the font. This information is not always reliable, 
+because it may be incorrectly specified, or not specified at all, by some 
+font manufacturers. 
+@publishedAll
+@released
+*/
+class TOpenFontSpec : public TOpenFontFaceAttribBase
+	{
+public:
+	IMPORT_C TOpenFontSpec();
+	IMPORT_C TOpenFontSpec(const TFontSpec& aFontSpec);
+	IMPORT_C void operator=(const TFontSpec& aFontSpec);
+	inline TBool operator==(const TOpenFontSpec& aFontSpec) const;
+	TBool operator!=(const TOpenFontSpec& aOpenFontSpec) const;
+	IMPORT_C void SetAttrib(const TOpenFontFaceAttribBase& aAttrib);
+	IMPORT_C void GetTFontSpec(TFontSpec& aFontSpec) const;
+	IMPORT_C void CompensateForAspectRatio(TInt aPixelWidth,TInt aPixelHeight);
+	IMPORT_C void CompensateForAspectRatio(const MGraphicsDeviceMap& aMap);
+	inline TInt Height() const;
+	inline TInt32 WidthFactor() const;
+	inline TInt32 SlantFactor() const;
+	inline TGlyphBitmapType BitmapType() const;
+	inline TUint32 Effects() const;
+	inline TFontPrintPosition PrintPosition() const;
+	inline void SetHeight(TInt aHeight);
+	inline void SetWidthFactor(TInt32 aWidthFactor);
+	inline void SetSlantFactor(TInt32 aSlantFactor);
+	inline void SetBitmapType(TGlyphBitmapType aBitmapType);
+	inline void SetEffects(TUint32 aEffects);
+	IMPORT_C void SetEffects(FontEffect::TEffect aEffect, TBool aOn);
+	IMPORT_C TBool IsEffectOn(FontEffect::TEffect aEffect) const;
+	IMPORT_C void SetScriptTypeForMetrics(TLanguage aLanguage);
+	IMPORT_C TInt ScriptTypeForMetrics() const;
+	static TBool IsCompensationForAspectRatioNeeded(TInt aPixelWidth, TInt aPixelHeight);
+	static TInt ApplyRatio(TInt& aValue,TInt aNumerator,TInt aDenominator);
+	static TInt ApplyRatio(TInt32& aValue,TInt aNumerator,TInt aDenominator);
+public:
+	/** Algorithmic effects flags.
+
+	These can be combined using an OR operation.
+
+	WARNING: Enum for internal and partner use ONLY.  Compatibility is not guaranteed in future releases.
+ 
+	@deprecated Use FontEffect::TEffect instead.
+	*/
+	enum
+		{
+		/** Font is algorithmic bold. */
+		EAlgorithmicBold = 1,
+		/** Font has a drop shadow. */
+		EDropShadow = 2,
+		/** Font is an outline font. */
+		EOutline = 4
+		};
+private:
+	void SetScriptTypeForMetrics(TInt aScript);
+	void SetSymbol(TBool aSymbol);
+	TBool Symbol() const;
+	IMPORT_C TBool OperatorEquality(const TOpenFontSpec& aOpenFontSpec) const;
+	IMPORT_C TUint32 DoEffects() const;
+	IMPORT_C void DoSetEffects(TUint32 aEffects);
+private:
+	TInt iHeight;						// em height
+	TInt32 iWidthFactor;				// algorithmic width factor as a 16.16 fixed-point number
+	TInt32 iSlantFactor;				// algorithmic slant factor as a 16.16 fixed-point number
+	TInt iBitmapType;					// non-anti-aliased, standard anti-aliased, etc.; zero means 'default'
+	TUint32 iEffects;					// bit flags for font effects
+	TInt iSymbol;						// a symbol font as understood by TFontSpec (bit 1), script type (bits 2-5)
+	// The following data member exists only to allow round-trip conversion between TFontSpec and TOpenFontSpec
+	TFontPrintPosition iPrintPosition;	// normal, superscript or subscript
+
+	TInt iReserved2;
+	};
+
+/**
+Font file abstract base class.
+
+Write a class derived from COpenFontFile to manage a file with the font format 
+supported by your DLL. The derived class must implement the virtual 
+GetNearestFontInPixelsL() function. This function takes a font description 
+and creates a COpenFont derived object if the description matches a typeface 
+contained in the font file.
+
+Derived classes must also load typeface attributes from the file into the 
+protected typeface attribute array during construction. This array is what 
+is searched when getting font attribute information see AddFaceL(), 
+GetNearestFontHelper().
+
+Writing derived classes  construction:
+
+Call the COpenFontFile constructor in the constructor for your derived object, 
+passing it aUid and aFileName arguments. These values are the arguments passed 
+when the constructor is called by COpenFontRasterizer::NewFontFileL().
+
+A file may contain one or more typefaces. During construction the derived 
+object should extract the information for each typeface and add it to this 
+object's protected typeface attribute array see AddFaceL(). This process 
+will probably leave under some conditions. It should therefore be implemented 
+in a second phase constructor.
+
+Writing derived classes  implement the pure virtual functions:
+
+Derived classes must also implement the two pure virtual functions 
+GetNearestFontInPixelsL() and HasUnicodeCharacterL(). Information about 
+these functions is provided in the definitions below. Information about 
+deriving from this class is also provided in the API guide. 
+
+@see	COpenFontRasterizer::NewFontFileL()
+@see	CWsScreenDevice::AddFile()
+@publishedAll
+@released
+*/
+class COpenFontFile : public CBase
+	{
+public:
+	/**
+	Gets the font which is the nearest to the given font specification.
+
+	Implementations of this pure virtual function should create the COpenFont 
+	derived object that most closely matches aDesiredFontSpec, while fitting within
+	aMaxHeight, and place a pointer to it in aFont. If this cannot be done,
+	e.g. if the font name doesn't match, aFont should be set to NULL.
+
+	The other two arguments, aHeap and aSessionCacheList, should be passed to 
+	the COpenFont constructor.
+
+	Implementations may use the utility function GetNearestFontHelper()
+	to get the attributes of the closest matching font.
+
+	@param	aHeap				Shared heap. This value should be passed to the 
+								COpenFont derived classes' constructor.
+	@param	aSessionCacheList	The session cache list. This value should be passed 
+								to the COpenFont derived classes' constructor.
+	@param	aDesiredFontSpec	The desired font specification.
+	@param	aPixelWidth			The width of a pixel. Used with aPixelHeight for calculating 
+								the algorithmic slant of the typeface.
+	@param	aPixelHeight		The height of a pixel. Used with aPixelWidth for calculating 
+								the algorithmic slant of the typeface.
+	@param	aFont				On return, contains a pointer to the newly created COpenFont 
+								derived object, or NULL if no font matching aDesiredFontSpec exists.
+	@param	aActualFontSpec		The actual font specification of the font retrieved into aFont.
+	@see	GetNearestFontHelper()
+	*/
+	virtual void GetNearestFontInPixelsL(
+		RHeap* aHeap, COpenFontSessionCacheList* aSessionCacheList,
+		const TOpenFontSpec& aDesiredFontSpec, TInt aPixelWidth, TInt aPixelHeight,
+		COpenFont*& aFont, TOpenFontSpec& aActualFontSpec) = 0;
+
+	/**
+	Gets the font which is the nearest to the given font specification.
+
+	Implementations of this pure virtual function should create the COpenFont 
+	derived object that most closely matches aDesiredFontSpec, while fitting within
+	aMaxHeight, and place a pointer to it in aFont. If this cannot be done,
+	e.g. if the font name doesn't match, aFont should be set to NULL.
+
+	The other two arguments, aHeap and aSessionCacheList, should be passed to 
+	the COpenFont constructor.
+
+	Implementations may use the utility function GetNearestFontHelper()
+	to get the attributes of the closest matching font.
+
+	@param	aHeap				Shared heap. This value should be passed to the COpenFont 
+								derived classes' constructor.
+	@param	aSessionCacheList	The session cache list. This value should be passed 
+								to the COpenFont derived classes' constructor.
+	@param	aDesiredFontSpec	The desired font specification.
+	@param	aPixelWidth			The width of a pixel. Used with aPixelHeight for calculating 
+								the algorithmic slant of the typeface.
+	@param	aPixelHeight		The height of a pixel. Used with aPixelWidth for calculating 
+								the algorithmic slant of the typeface.
+	@param	aFont				On return, contains a pointer to the newly created COpenFont 
+								derived object, or NULL if no font matching aDesiredFontSpec exists.
+	@param	aActualFontSpec		The actual font specification of the font retrieved into aFont.
+	@see	GetNearestFontHelper()
+	*/
+	virtual void GetNearestFontToDesignHeightInPixelsL(
+		RHeap* /*aHeap*/, COpenFontSessionCacheList* /*aSessionCacheList*/,
+		const TOpenFontSpec& /*aDesiredFontSpec*/, TInt /*aPixelWidth*/, TInt /*aPixelHeight*/,
+		COpenFont*& /*aFont*/, TOpenFontSpec& /*aActualFontSpec*/) {}
+	/**
+	Gets the font which is the nearest to the given font specification.
+
+	Implementations of this pure virtual function should create the COpenFont 
+	derived object that most closely matches aDesiredFontSpec, while fitting within
+	aMaxHeight, and place a pointer to it in aFont. If this cannot be done,
+	e.g. if the font name doesn't match, aFont should be set to NULL.
+
+	The other two arguments, aHeap and aSessionCacheList, should be passed to 
+	the COpenFont constructor.
+
+	Implementations may use the utility function GetNearestFontHelper()
+	to get the attributes of the closest matching font.
+
+	@param	aHeap				Shared heap. This value should be passed to the COpenFont 
+								derived classes' constructor.
+	@param	aSessionCacheList	The session cache list. This value should be passed 
+								to the COpenFont derived classes' constructor.
+	@param	aDesiredFontSpec	The desired font specification.
+	@param	aPixelWidth			The width of a pixel. Used with aPixelHeight for calculating 
+								the algorithmic slant of the typeface.
+	@param	aPixelHeight		The height of a pixel. Used with aPixelWidth for calculating 
+								the algorithmic slant of the typeface.
+	@param	aFont				On return, contains a pointer to the newly created COpenFont 
+								derived object, or NULL if no font matching aDesiredFontSpec exists.
+	@param	aActualFontSpec		The actual font specification of the font retrieved into aFont.
+	@param	aMaxHeight			The maximum height (vertical extent) within which the font must fit.
+	@see	GetNearestFontHelper()
+	*/
+	virtual void GetNearestFontToMaxHeightInPixelsL(
+		RHeap* /*aHeap*/, COpenFontSessionCacheList* /*aSessionCacheList*/,
+		const TOpenFontSpec& /*aDesiredFontSpec*/, TInt /*aPixelWidth*/, TInt /*aPixelHeight*/,
+		COpenFont*& /*aFont*/, TOpenFontSpec& /*aActualFontSpec*/, TInt /*aMaxHeight*/) {}
+
+	/** Tests whether a specified typeface contains a particular character.
+
+	@param	aFaceIndex	The index of the typeface to be tested.
+	@param	aCode		The Unicode character code for the character to be tested. 
+	@return	ETrue if the typeface contains aCode, otherwise EFalse. */
+	virtual TBool HasUnicodeCharacterL(TInt aFaceIndex,TInt aCode) const = 0; 
+	IMPORT_C virtual void ExtendedInterface(TUid aUid, TAny*& aParam);
+	IMPORT_C COpenFontFile(TInt aUid,const TDesC& aFileName);
+	IMPORT_C ~COpenFontFile();
+	IMPORT_C TBool GetNearestFontHelper(const TOpenFontSpec& aDesiredFontSpec,TInt aPixelWidth,TInt aPixelHeight,
+										TInt& aFaceIndex,TOpenFontSpec& aActualFontSpec) const;
+	IMPORT_C void AddFaceL(const TOpenFontFaceAttrib& aAttrib);
+	inline TUid Uid() const;
+	inline const TDesC& FileName() const;
+	inline const TOpenFontFaceAttrib& FaceAttrib(TInt aFaceIndex) const;
+	inline TInt FaceCount() const;
+	inline void IncRefCount();
+	inline TBool DecRefCount();
+	TInt GetNearestFontInPixels(
+		RHeap* aHeap, COpenFontSessionCacheList* aSessionCacheList,
+		const TOpenFontSpec& aDesiredFontSpec, TInt aPixelWidth, TInt aPixelHeight,
+		COpenFont*& aFont, TOpenFontSpec& aActualFontSpec);
+	TInt GetNearestFontToDesignHeightInPixels(
+		RHeap* aHeap, COpenFontSessionCacheList* aSessionCacheList,
+		const TOpenFontSpec& aDesiredFontSpec, TInt aPixelWidth, TInt aPixelHeight,
+		COpenFont*& aFont, TOpenFontSpec& aActualFontSpec);
+	TInt GetNearestFontToMaxHeightInPixels(
+		RHeap* aHeap, COpenFontSessionCacheList* aSessionCacheList,
+		const TOpenFontSpec& aDesiredFontSpec, TInt aPixelWidth, TInt aPixelHeight,
+		COpenFont*& aFont, TOpenFontSpec& aActualFontSpec, TInt aMaxHeight);
+	void RemoveFontFromList(const COpenFont* aFont);
+	void SetFontStoreL(CFontStore* aFontStore);
+	CFontStore* GetFontStore();
+	CArrayPtrFlat<COpenFont>* GetOpenFontList();
+protected:
+	IMPORT_C TBool GetNearestFontHelperOld(const TOpenFontSpec& aDesiredFontSpec,TInt aPixelWidth,TInt aPixelHeight,
+										TInt& aFaceIndex,TOpenFontSpec& aActualFontSpec) const;
+private:
+	// A class to contain the public font attributes and private positioning information (for kerning, ligatures, etc.)
+	class TAttrib: public TOpenFontFaceAttrib
+		{
+	public:
+		COpenFontPositioner* iPositioner;	// if non-null, positioning information for the typeface
+		};
+	static TInt ScoreByName(const TOpenFontSpec& aDesiredFontSpec, const TAttrib& aAttrib);
+	static TInt ScoreByStyle(const TOpenFontSpec& aDesiredFontSpec, const TAttrib& aAttrib);
+	void GetNearestFontToDesignHeightInPixelsAndAddToListL(
+		RHeap* aHeap, COpenFontSessionCacheList* aSessionCacheList,
+		const TOpenFontSpec& aDesiredFontSpec, TInt aPixelWidth, TInt aPixelHeight,
+		COpenFont*& aFont, TOpenFontSpec& aActualFontSpec);
+	void GetNearestFontToMaxHeightInPixelsAndAddToListL(
+		RHeap* aHeap, COpenFontSessionCacheList* aSessionCacheList,
+		const TOpenFontSpec& aDesiredFontSpec, TInt aPixelWidth, TInt aPixelHeight,
+		COpenFont*& aFont, TOpenFontSpec& aActualFontSpec, TInt aMaxHeight);
+
+private:
+	CArrayFixFlat<TAttrib> iFaceAttrib;
+	TUid iUid;
+	TBuf<KMaxFileName> iFileName;
+	TInt iRefCount;
+	CArrayPtrFlat<COpenFont> iFontList;
+	TOpenFontFileData* iData;
+	};
+
+/**
+Convenience class from which rasterizer contexts may be derived.
+
+A rasterizer context object may (optionally) be created to provide the link 
+between the rasterizer DLL code supported by the Open Font System, and the 
+rasterizer engine code. A rasterizer context object class should get the 
+requested bitmap from the associated rasterizer engine. It should then convert 
+this into Symbian run-length-encoded format. This class contains convenience 
+functions to make the conversion easier.
+
+Deriving from this class is described in greater detail in the API guide.
+@publishedAll
+@released
+*/
+class COpenFontRasterizerContext: public CBase
+	{
+public:
+	inline COpenFontRasterizerContext();
+	inline void StartGlyph(TOpenFontGlyphData* aGlyphData);
+	inline void WriteGlyphBit(TInt aBit);
+	inline void WriteGlyphByte(TInt aByte);
+	inline void EndGlyph();
+private:
+	TOpenFontGlyphData* iGlyphData;
+	TUint8* iGlyphDataStart;
+	TUint8* iGlyphDataPtr;
+	TUint8* iGlyphDataEnd;
+	TInt iGlyphBit;
+	TInt iBytesNeeded;
+	TBool iOverflow;
+	TAny* iReserved; // unused; for future expansion
+	};
+
+
+/**
+Shaper abstract class.  All shaper implementations derive from this
+@publishedAll 
+@released
+*/
+class CShaper : public CBase
+	{
+public:
+	class TInput
+		{
+	public:
+		/** The text to be shaped possibly including context. */
+		const TDesC* iText;
+		/** The index of the first character in iText to be shaped. */
+		TInt iStart;
+		/** (One past) the end of the text in iText to be shaped. */
+		TInt iEnd;
+		/** Script code, for example 'd'<<24 | 'e'<<16 | 'v'<<8 | 'a'
+		for Devanagari. */
+		TInt iScript;
+		/** Language code. 0 implies "default" */
+		TUint32 iLanguage;
+		/** Maximum advance in pixels. Shaping beyond this
+		advance is not required (but is not harmful). */
+		TInt iMaximumAdvance;
+		/** Flags. Currently none is defined. */
+		TInt iFlags;
+		/** Session handle. To be used if rasterization is needed. */
+		TInt iSessionHandle;
+		/** Reserved for future expansion. Must be set to 0. */
+		TInt iReserved1;
+		};
+	/** Constructor */
+	IMPORT_C CShaper();
+
+	/** Destructor */
+	IMPORT_C virtual ~CShaper();
+
+	/** construct a shaper object
+	@param	aBitmapFont	The font to be shaped.
+	@param	aHeap		The heap to be used by the shaper.
+	@return	KErrNone if this font can be shaper or system wide error code*/
+	virtual TInt ConstructL(CBitmapFont*  aBitmapFont, TInt aScript, TInt aLanguage, RHeap* iHeap) = 0;
+
+	/** If possible, shape the text described by aInput, placing the output on aHeapForOutput.
+	@param	aOutput			The output, as a newly allocate object on aHeapForOutput.
+	@param	aInput			The input text and other parameters.
+	@param	aHeapForOutput	On success, aOutput should be allocated from this and nothing else. 
+							On failure, nothing should be allocated from it.
+	@return	Error value from one of the system-wide error codes on failure, KErrNone on success.
+	@see	TShapeHeader */
+	virtual TInt ShapeText(TShapeHeader*& aOutput, const TInput& aInput, RHeap* aHeapForOutput) = 0;
+
+	/** For future expansion. Any overriders must base-call
+	if aInterface is unrecognized.
+	
+	WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.
+	
+	@param	aInterfaceId	The ID of the interface to return.
+	@return	A pointer to the extension interface.
+	*/
+	IMPORT_C virtual void* ExtendedInterface(TUid aInterfaceId);
+	};
+
+/** ECOM plug-in base class for shaper factories.
+@publishedAll
+@released
+*/
+class CShaperFactory : public CBase
+	{
+public:
+	/** Create a shaper if possible, for typeface aFaceIndex
+	within file aFileName.
+	@param	aFont	The font to be shaped.
+	@param	iHeap	The heap to use for constructing the shaper.
+	@return	0 If the font is not understood or inappropriate for any shaper that might be constructed 
+			by this class, otherwise returns the newly-constructed shaper on iHeap. */
+	virtual CShaper* NewShaperL(CBitmapFont* aFont, TInt aScript, TInt aLanguage, RHeap* iHeap) = 0;
+
+	inline static CShaperFactory* NewL(TUid aInterfaceImplUid);
+	inline virtual ~CShaperFactory();
+
+	/** For future expansion. Any overriders must base-call if aInterface is unrecognized.
+
+	WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.
+
+	@param	aInterfaceId	The ID of the interface to return.
+	@return	A pointer to the extension interface.	
+	*/
+	virtual void* ExtendedInterface(TUid aInterfaceId);
+
+private:
+	TUid iDtor_ID_Key;//ECOM identifier used during destruction
+	};
+
+// Inline functions start here.
+/** Default C++ constructor.
+
+This creates then zero fills the object. */
+inline TOpenFontMetrics::TOpenFontMetrics()
+	{
+	Mem::FillZ(this,sizeof(*this));
+	}
+
+/** Gets the font's size.
+
+@return	The font's size. 
+@see	SetSize() */
+inline TInt TOpenFontMetrics::Size() const
+	{
+	return iDesignHeight;
+	}
+
+/** Gets the font's ascent.
+
+This is the ascent for the Latin character which is highest above the baseline.
+
+@return The font's ascent, in pixels.
+@see SetAscent() */
+inline TInt TOpenFontMetrics::Ascent() const
+	{
+	return iAscent;
+	}
+
+/** Gets the font's descent.
+
+This is the descent for the Latin character in the font which falls furthest below the baseline.
+
+@return The font's descent, in pixels. 
+@see SetDescent() */
+inline TInt TOpenFontMetrics::Descent() const
+	{
+	return iDescent;
+	}
+
+/** Sets the font's maximum height.
+
+Note that if this object was initialised from the CFont this will be the same 
+as the ascent.
+
+This is the ascent for the character which is highest above the baseline. 
+In many fonts this will be the height of an accented character like Â, 
+including the accent.
+
+@return The maximum height of the font, in pixels.
+@see SetMaxDepth() */
+inline TInt TOpenFontMetrics::MaxHeight() const
+	{
+	return iMaxHeight;
+	}
+
+/** Gets the font's maximum depth.
+
+Note: If this object was initialised from the CFont this will be the same as the 
+descent.
+
+This is the descent for the character in the font which falls furthest below 
+the baseline.
+
+@return The font's maximum depth.
+@see SetMaxDepth() */
+inline TInt TOpenFontMetrics::MaxDepth() const
+	{
+	return iMaxDepth;
+	}
+
+/** Gets the maximum character width, in pixels.
+
+@return The maximum character width, in pixels.
+@see SetMaxWidth() */
+inline TInt TOpenFontMetrics::MaxWidth() const
+	{
+	return iMaxWidth;
+	}
+
+/** Sets the font's size.
+
+@param aSize The font's size.
+@see Size() */
+inline void TOpenFontMetrics::SetSize(TInt aSize)
+	{
+	iDesignHeight = static_cast<TInt16>(aSize);
+	}
+
+/** Sets the ascent.
+
+@param aAscent The ascent, in pixels.
+@see Ascent() */
+inline void TOpenFontMetrics::SetAscent(TInt aAscent)
+	{
+	iAscent = static_cast<TInt16>(aAscent);
+	}
+
+/** Sets the descent.
+
+@param aDescent The descent, in pixels.
+@see Descent() */
+inline void TOpenFontMetrics::SetDescent(TInt aDescent)
+	{
+	iDescent = static_cast<TInt16>(aDescent);
+	}
+
+/** Sets the font's maximum height.
+
+@param aMaxHeight The font's maximum height, in pixels. 
+@see MaxHeight() */
+inline void TOpenFontMetrics::SetMaxHeight(TInt aMaxHeight)
+	{
+	iMaxHeight = static_cast<TInt16>(aMaxHeight);
+	}
+
+/** Sets the font's maximum depth.
+
+@param aMaxDepth The font's maximum depth, in pixels.
+@see MaxDepth() */
+inline void TOpenFontMetrics::SetMaxDepth(TInt aMaxDepth)
+	{
+	iMaxDepth = static_cast<TInt16>(aMaxDepth);
+	}
+
+/** Sets the maximum character width, in pixels.
+
+@param aMaxWidth The maximum character width, in pixels.
+@see MaxWidth() */
+inline void TOpenFontMetrics::SetMaxWidth(TInt aMaxWidth)
+	{
+	iMaxWidth = static_cast<TInt16>(aMaxWidth);
+	}
+
+/** Default C++ constructor. 
+
+The constructor initialises all data members to zero. As for other T classes, 
+there is no need to explicitly cleanup TOpenFontCharMetrics objects. */
+inline TOpenFontCharMetrics::TOpenFontCharMetrics()
+	{
+	Mem::FillZ(this,sizeof(*this));
+	}
+
+/** Gets the width of the character's bitmap.
+
+@return The width of the bitmap in pixels. */
+inline TInt TOpenFontCharMetrics::Width() const
+	{
+	return iWidth;
+	}
+
+/** Gets the height of the character's bitmap.
+
+@return The character's height in pixels. */
+inline TInt TOpenFontCharMetrics::Height() const
+	{
+	return iHeight;
+	}
+
+/** Gets the horizontal bearing X. 
+
+This is the distance in pixels from the pen point before the character is 
+drawn (the origin) to the left edge of the bitmap, when drawing horizontally. 
+A positive value means that the left edge of the bitmap is right of the origin.
+
+@return The horizontal bearing X in pixels */
+inline TInt TOpenFontCharMetrics::HorizBearingX() const
+	{
+	return iHorizBearingX;
+	}
+
+/** Gets horizontal bearing Y.
+
+This is the vertical distance in pixels from the pen point before the character 
+is drawn (the origin) to the top edge of the bitmap, when drawing horizontally. 
+A positive value means that the top edge of the bitmap is above the origin
+
+@return The horizontal bearing Y in pixels. */
+inline TInt TOpenFontCharMetrics::HorizBearingY() const
+	{
+	return iHorizBearingY;
+	}
+
+/** Gets the horizontal advance.
+
+This is the amount added to the x co-ordinate of the origin after the character 
+is drawn   what most people understand by the width or escapement of a character. 
+The origin here is the pen point before the character is drawn. 
+
+@return The horizontal advance in pixels */
+inline TInt TOpenFontCharMetrics::HorizAdvance() const
+	{
+	return iHorizAdvance;
+	}
+
+/** Gets the vertical bearing X.
+
+This is the distance in pixels from the pen point before the character is 
+drawn (the origin) to the left edge of the bitmap, when drawing vertically. 
+A positive value means that the left edge of the bitmap is right of the origin.
+
+@return The vertical bearing X in pixels. */
+inline TInt TOpenFontCharMetrics::VertBearingX() const
+	{
+	return iVertBearingX;
+	}
+
+/** Gets the vertical bearing Y.
+
+This is the distance in pixels from the pen point before the character is 
+drawn (the origin) to the top edge of the bitmap, when drawing vertically. 
+A positive value means that the top edge of the bitmap is above the origin.
+
+@return The vertical bearing Y in pixels. */
+inline TInt TOpenFontCharMetrics::VertBearingY() const
+	{
+	return iVertBearingY;
+	}
+
+/** Gets the vertical advance.
+
+When drawing vertically, this is the amount added to the y co-ordinate of 
+the origin after the character is drawn what most people understand by 
+the height of a character. The origin here is the pen point before the character 
+is drawn.
+
+Note: Vertical drawing is not supported in v5.
+
+@return The vertical advance in pixels. */
+inline TInt TOpenFontCharMetrics::VertAdvance() const
+	{
+	return iVertAdvance;
+	}
+
+/** Gets the bounds of the character relative to its origin when setting text 
+horizontally.
+
+The origin here is the pen point before the character is drawn. 
+
+@param aBounds The character's bounds. */
+inline void TOpenFontCharMetrics::GetHorizBounds(TRect& aBounds) const
+	{
+	aBounds.iTl.iX = iHorizBearingX;
+	aBounds.iTl.iY = -iHorizBearingY;
+	aBounds.iBr.iX = aBounds.iTl.iX + iWidth;
+	aBounds.iBr.iY = aBounds.iTl.iY + iHeight;
+	}
+
+/** Gets the bounds of the character relative to its origin when setting text 
+vertically. 
+
+The origin here is the pen point before the character is drawn.
+
+@param aBounds The character's bounds. */
+inline void TOpenFontCharMetrics::GetVertBounds(TRect& aBounds) const
+	{
+	aBounds.iTl.iX = -iVertBearingX;
+	aBounds.iTl.iY = iVertBearingY;
+	aBounds.iBr.iX = aBounds.iTl.iX + iWidth;
+	aBounds.iBr.iY = aBounds.iTl.iY + iHeight;
+	}
+
+/** Sets the width of the character's bitmap.
+
+@param aWidth The width of the bitmap in pixels. */
+inline void TOpenFontCharMetrics::SetWidth(TInt aWidth)
+	{
+	iWidth = (TInt16)aWidth;
+	}
+
+/** Sets the height of the character's bitmap.
+
+@param aHeight The character height (in pixels). */
+inline void TOpenFontCharMetrics::SetHeight(TInt aHeight)
+	{
+	iHeight = (TInt16)aHeight;
+	}
+
+/** Sets the horizontal bearing X.
+
+This is the distance in pixels from the pen point before the character is 
+drawn (the origin) to the left edge of the bitmap, when drawing horizontally. 
+A positive value means that the left edge of the bitmap is right of the origin.
+
+@param aHorizBearingX The horizontal bearing X (in pixels). */
+inline void TOpenFontCharMetrics::SetHorizBearingX(TInt aHorizBearingX)
+	{
+	iHorizBearingX = (TInt16)aHorizBearingX;
+	}
+
+/** Sets the horizontal bearing Y.
+
+This is the distance in pixels from the pen point before the character is 
+drawn (the origin) to the top edge of the bitmap, when drawing horizontally. 
+A positive value means that the top edge of the bitmap is above the origin.
+
+@param aHorizBearingY The horizontal bearing Y (in pixels). */
+inline void TOpenFontCharMetrics::SetHorizBearingY(TInt aHorizBearingY)
+	{
+	iHorizBearingY = (TInt16)aHorizBearingY;
+	}
+
+/** Sets the horizontal advance.
+
+This is the amount added to the x co-ordinate of the origin after the character 
+is drawn, what most people understand by the width or escapement of a character. 
+The origin here is the pen point before the character is drawn.
+
+@param aHorizAdvance The horizontal advance (in pixels). */
+inline void TOpenFontCharMetrics::SetHorizAdvance(TInt aHorizAdvance)
+	{
+	iHorizAdvance = (TInt16)aHorizAdvance;
+	}
+
+/** Set vertical bearing X.
+
+This is the distance in pixels from the pen point before the character is 
+drawn (the origin) to the left edge of the bitmap, when drawing vertically. 
+A positive value means that the left edge of the bitmap is right of the origin.
+
+@param aVertBearingX The vertical bearing X (in pixels). */
+inline void TOpenFontCharMetrics::SetVertBearingX(TInt aVertBearingX)
+	{
+	iVertBearingX = (TInt16)aVertBearingX;
+	}
+
+/** Sets the vertical bearing Y.
+
+This is the distance in pixels from the pen point before the character is 
+drawn (the origin) to the top edge of the bitmap, when drawing vertically. 
+A positive value means that the top edge of the bitmap is above the origin.
+
+@param aVertBearingY The vertical bearing Y (in pixels). */
+inline void TOpenFontCharMetrics::SetVertBearingY(TInt aVertBearingY)
+	{
+	iVertBearingY = (TInt16)aVertBearingY;
+	}
+
+/** Sets the vertical advance.
+
+When drawing vertically, this is the amount added to the y co-ordinate of 
+the origin after the character is drawn  what most people understand by 
+the height of a character. The origin here is the pen point before the character 
+is drawn.
+
+Note: Vertical drawing is not supported in v5.
+
+@param aVertAdvance The vertical advance (in pixels). */
+inline void TOpenFontCharMetrics::SetVertAdvance(TInt aVertAdvance)
+	{
+	iVertAdvance = (TInt16)aVertAdvance;
+	}
+
+/** Gets the character metrics for this font.
+
+@return The character metrics for this font. */
+inline const TOpenFontMetrics& COpenFont::Metrics() const
+	{
+	return iMetrics;
+	}
+
+/** Gets the glyph index.
+
+This is the index of a particular glyph within the font file.
+
+Note: This makes it possible to gain access to glyphs which are not referenced 
+by the Unicode character set. However, this feature is not yet supported by 
+Symbian OS.
+
+@return The glyph index.
+@see SetGlyphIndex() */
+inline TInt TOpenFontGlyphData::GlyphIndex() const
+	{
+	return iGlyphIndex;
+	}
+
+/** Gets the typeface attributes.
+
+These are the attributes of the font represented by this object.
+
+@return The typeface attributes. */
+inline const TOpenFontFaceAttrib* COpenFont::FaceAttrib() const
+	{
+    return iFileOffset == 0 ? NULL : &File()->FaceAttrib(iFaceIndex);
+	}
+
+/** Gets a pointer to the COpenFontFile which created this object.
+
+This is the COpenFontFile which owns the file that contains the definition 
+of the typeface. It can be used to get information about the typeface, or 
+to access the rasterizer context (engine).
+
+@return The COpenFontFile which created this object. */
+inline COpenFontFile* COpenFont::File() const
+	{
+    return iFileOffset == 0 ? NULL : reinterpret_cast<COpenFontFile*>(const_cast<COpenFont*>(PtrAdd(this, iFileOffset)));
+	}
+
+/** Gets the index of this typeface within the font file.
+
+@return The index of this typeface within the font file. */
+inline TInt COpenFont::FaceIndex() const
+	{
+	return iFaceIndex;
+	}
+
+/** Tests whether or not a character needs to be rasterized.
+
+Characters that have been rasterized are cached  there is no need to regenerate 
+the character bitmap. This function should only be called by the Font and 
+Bitmap server.
+
+@param aSessionHandle A handle to the font and bitmap server session.
+@param aCode The code for the Unicode character.
+@return ETrue if the character needs to be rasterized, otherwise EFalse. */
+inline TBool COpenFont::CharacterNeedsToBeRasterized(TInt aSessionHandle,TInt aCode) const
+	{
+	return Glyph(aSessionHandle,aCode) == NULL;
+	}
+
+/** Gets the ascent of an ANSI capital letter in the font whether or not
+there are any ANSI capitals in the font.
+@return The positive distance from the font baseline to the top of a
+standard ANSI capital letter
+@publishedAll
+@released
+@see AscentInPixels()
+*/
+inline TInt COpenFont::FontCapitalAscent() const
+	{
+	return iFontCapitalAscent;
+	}
+
+/** Gets the max ascent of any pre-composed glyph in the font. This will
+include accents or diacritics that form part of pre-composed glyphs. It is
+not guaranteed to cover the max ascent of composite glyphs that have to be
+created by a layout engine. This is also the recommended distance between
+the top of a text box and the baseline of the first line of text. 
+
+The value may be affected by the TLanguage value set by SetScriptTypeForMetrics().
+
+@return The positive distance from the font baseline to the top of the
+highest pre-composed glyph (including accents) above the baseline.
+@publishedAll
+@released
+@see AscentInPixels()
+@see SetScriptTypeForMetrics()
+*/
+inline TInt COpenFont::FontMaxAscent() const
+	{
+	return iFontMaxAscent;
+	}
+
+/** Gets the descent of an ANSI descending character in the font.
+Whether or not there are any ANSI descenders in the font.
+
+The value may be affected by the TLanguage value set by SetScriptTypeForMetrics().
+
+@return The positive distance from the font baseline to the bottom of the
+lowest ANSI descender.
+@publishedAll
+@released
+@see DescentInPixels()
+@see SetScriptTypeForMetrics()
+*/
+inline TInt COpenFont::FontStandardDescent() const
+	{
+	return iFontStandardDescent;
+	}
+
+/** Gets the max descent of any pre-composed glyph in the font. This will
+include accents or diacritics that form part of pre-composed glyphs. It is
+not guaranteed to cover the max descent of composite glyphs that have to be
+created by a layout engine.
+
+The value may be affected by the TLanguage value set by SetScriptTypeForMetrics().
+
+@return The positive distance from the font baseline to the bottom of the
+lowest pre-composed glyph (including accents) below the baseline
+@publishedAll
+@released
+@see DescentInPixels()
+@see SetScriptTypeForMetrics()
+*/
+inline TInt COpenFont::FontMaxDescent() const
+	{
+	return iFontMaxDescent;
+	}
+
+/** Gets the suggested line gap for the font. This is the recommended
+baseline to baseline distance between successive lines of text in the font.
+@return The positive recommended gap between successive lines
+@publishedAll
+@released
+*/
+inline TInt COpenFont::FontLineGap() const
+	{
+	return iFontLineGap;
+	}
+
+/** Gets the maximum height for the font. This is the sum of the max ascent 
+of the font and the max descent of the font.
+
+The value may be affected by the TLanguage value set by SetScriptTypeForMetrics().
+
+@return The positive maximum height of the font
+@publishedAll
+@released
+@see HeightInPixels()
+@see SetScriptTypeForMetrics()
+*/
+inline TInt COpenFont::FontMaxHeight() const
+	{
+	return iFontMaxAscent + iFontMaxDescent;
+	}
+
+/** Default C++ constructor.
+
+This sets all attribute fields to zero. As for other T classes, there is no 
+need to explicitly clean-up objects derived from this class. */
+inline TOpenFontFaceAttribBase::TOpenFontFaceAttribBase()
+	{
+	Mem::FillZ(this,sizeof(*this));
+	}
+
+/** Default C++ constructor.
+
+The function initialises the minimum typeface size to zero, the names to NULL, 
+and the coverage and style flags to zero. */
+inline TOpenFontFaceAttrib::TOpenFontFaceAttrib():
+	iMinSizeInPixels(0),
+	iReserved2(0)
+	{
+	}
+
+/** Tests for support of Latin characters.
+
+Note: A return value of ETrue implies that the font has a usable set of 
+characters. It does not imply exhaustive coverage.
+
+@return ETrue if Latin characters are supported */
+inline TBool TOpenFontFaceAttribBase::HasLatin() const
+	{
+	return iCoverage[0] & ELatinSet;
+	}
+
+/** Tests for support of Greek characters.
+
+Note: A return value of ETrue implies that the font has a usable set of 
+characters. It does not imply exhaustive coverage.
+
+@return ETrue if Greek characters are supported. */
+inline TBool TOpenFontFaceAttribBase::HasGreek() const
+	{
+	return iCoverage[0] & EGreekSet;
+	}
+
+/** Tests for support of Cyrillic characters.
+
+Note: A return value of ETrue implies that the font has a usable set of 
+characters. It does not imply exhaustive coverage.
+
+@return ETrue if Cyrillic characters are supported. */
+inline TBool TOpenFontFaceAttribBase::HasCyrillic() const
+	{
+	return iCoverage[0] & ECyrillicSet;
+	}
+
+/** Tests for support of Japanese syllabic characters.
+
+This function tests for the presence of Hiragana and Katakana syllabic 
+characters in the font, collectively called kana. These characters are not 
+sufficient for the Japanese language, which also makes use of Chinese characters.
+
+Note: A return value of ETrue implies that the font has a usable set of 
+characters. It does not imply exhaustive coverage.
+
+@return ETrue if Japanese characters are supported 
+@see HasCJK() */
+inline TBool TOpenFontFaceAttribBase::HasKana() const
+	{
+	return iCoverage[1] & EKanaSets;
+	}
+
+/** Tests for support of Korean Hangul characters.
+
+Korean may also make use of Chinese characters.
+
+Note: A return value of ETrue implies that the font has a usable set of 
+characters. It does not imply exhaustive coverage.
+
+@return ETrue if Korean characters are supported 
+@see HasCJK() */
+inline TBool TOpenFontFaceAttribBase::HasHangul() const
+	{
+	return iCoverage[1] & EHangulSet;
+	}
+
+/** Tests for support of Chinese ideographic characters.
+
+These are used in Chinese, Japanese and Korean.
+
+Note: A return value of ETrue implies that the font has a usable set of 
+characters. It does not imply exhaustive coverage.
+
+@return ETrue if Chinese ideographs are supported. */
+inline TBool TOpenFontFaceAttribBase::HasCJK() const
+	{
+	return iCoverage[1] & ECJKSet;
+	}
+
+/** Tests if the typeface contains symbols only.
+
+@return ETrue if the typeface contains symbols only. */
+inline TBool TOpenFontFaceAttribBase::IsSymbol() const
+	{
+	return iCoverage[0] == 0 && iCoverage[2] == 0 && iCoverage[3] == 0 &&
+		   iCoverage[1] & ESymbolSets && !(iCoverage[1] & ~ESymbolSets);
+	}
+
+/** Tests if the typeface is inherently bold.
+
+@return ETrue if the typeface is inherently bold. */
+inline TBool TOpenFontFaceAttribBase::IsBold() const
+	{
+	return iStyle & EBold;
+	}
+
+/** Tests if the typeface is inherently italic.
+
+@return ETrue if the typeface is inherently italic. */
+inline TBool TOpenFontFaceAttribBase::IsItalic() const
+	{
+	return iStyle & EItalic;
+	}
+
+/** Tests if the typeface has serifs.
+
+@return ETrue if the typeface has serifs. */
+inline TBool TOpenFontFaceAttribBase::IsSerif() const
+	{
+	return iStyle & ESerif;
+	}
+
+/** Tests if all the characters have the same width.
+
+@return ETrue if all the characters have the same width. */
+inline TBool TOpenFontFaceAttribBase::IsMonoWidth() const
+	{
+	return iStyle & EMonoWidth;
+	}
+
+/** Gets the typeface's name.
+
+@return Descriptor containing typeface name. */
+inline TPtrC TOpenFontFaceAttribBase::Name() const
+	{
+	return iName;
+	}
+
+/** Gets the full name.
+
+The full name of the typeface includes style attributes like Italic, Bold, 
+and Cursive.
+
+@return The full name of the typeface.
+@see FamilyName() */
+inline TPtrC TOpenFontFaceAttrib::FullName() const
+	{
+	return Name();
+	}
+
+/** Gets the family name.
+
+Note: The family name of the typeface does not include style attributes like 
+"Italic".
+
+@return The family name of the typeface. 
+@see FullName() */
+inline TPtrC TOpenFontFaceAttrib::FamilyName() const
+	{
+	return iFamilyName;
+	}
+
+/** Gets the local full name.
+
+The local full name of the typeface includes style attributes like Italic, 
+Bold, and Cursive.
+
+The local name of the typeface is the name in the language of the current 
+locale, where this is provided by the font file. If the local name is not 
+available then the local name will be the same as the ordinary name.
+
+@return The local full name of the typeface. */
+inline TPtrC TOpenFontFaceAttrib::LocalFullName() const
+	{
+	return iLocalFullName;
+	}
+
+/** Gets the local family name.
+
+The local name of the typeface is the name in the language of the current 
+locale, where this is provided by the font file. If the local name is not 
+available then the local name will be the same as the ordinary name.
+
+Note: The family name of the typeface does not include style attributes like 
+'Italic'.
+
+@return The local family name of the typeface. */
+inline TPtrC TOpenFontFaceAttrib::LocalFamilyName() const
+	{
+	return iLocalFamilyName;
+	}
+
+/** Gets the short full name.
+
+This is the full name of the typeface, truncated to KMaxTypefaceNameLength, 
+if necessary.
+
+Note: Short names are names truncated to KMaxTypefaceNameLength (24) characters 
+where necessary so that they can be used in the TTypeFace class. The Open 
+Font Framework allows 32 characters as a maximum name length.
+
+@return The short full name of the typeface.
+@see FullName() */
+inline TPtrC TOpenFontFaceAttrib::ShortFullName() const
+	{
+	// Can't use TDesC::Left for this because it panics if the desired length is > the existing length!
+	return TPtrC(iName.Ptr(),Min(iName.Length(),KMaxTypefaceNameLength));
+	}
+
+/** Gets the short family name.
+
+This is the family name, truncated to KMaxTypefaceNameLength, if necessary.
+
+Note: Short names are names truncated to KMaxTypefaceNameLength (24) characters 
+where necessary so that they can be used in the TTypeFace class. The Open 
+Font Framework allows 32 characters as a maximum name length.
+
+@return The short family name of the typeface. 
+@see FamilyName() */
+inline TPtrC TOpenFontFaceAttrib::ShortFamilyName() const
+	{
+	return TPtrC(iFamilyName.Ptr(),Min(iFamilyName.Length(),KMaxTypefaceNameLength));
+	}
+
+/** Gets the short local full name.
+
+This is the local full name of the typeface, truncated to KMaxTypefaceNameLength, 
+if necessary.
+
+Note: Short names are names truncated to KMaxTypefaceNameLength (24) characters 
+where necessary so that they can be used in the TTypeFace class. The Open 
+Font Framework allows 32 characters as a maximum name length.
+
+@return The short local full name of the typeface. 
+@see LocalFullName() */
+inline TPtrC TOpenFontFaceAttrib::ShortLocalFullName() const
+	{
+	return TPtrC(iLocalFullName.Ptr(),Min(iLocalFullName.Length(),KMaxTypefaceNameLength));
+	}
+
+/** Gets the short local family name.
+
+This is the local family name of the typeface, truncated to KMaxTypefaceNameLength, 
+if necessary.
+
+Note: Short names are names truncated to KMaxTypefaceNameLength (24) characters 
+where necessary so that they can be used in the TTypeFace class. The Open 
+Font Framework allows 32 characters as a maximum name length.
+
+@return The short local family name of the typeface.
+@see LocalFamilyName() */
+inline TPtrC TOpenFontFaceAttrib::ShortLocalFamilyName() const
+	{
+	return TPtrC(iLocalFamilyName.Ptr(),Min(iLocalFamilyName.Length(),KMaxTypefaceNameLength));
+	}
+
+/** Gets a pointer to the sets of flags that indicate the font's Unicode coverage.
+
+Each flag that is set represents a supported Unicode range. The mapping is 
+defined in the TrueType documentation under the OS/2 table. 
+
+Note: Some useful subsets are defined as anonymous enumerated constants at the end 
+of this class, see ELatinSet etc.
+
+@return A pointer to the flags that indicate the font's Unicode coverage. 
+The flags are stored in an array of four 32-bit integers. When no information 
+is available, all four integers are zero.
+@see SetCoverage() */
+inline const TUint* TOpenFontFaceAttribBase::Coverage() const
+	{
+	return iCoverage;
+	}
+
+/** Gets the minimum typeface size.
+
+This is the smallest size that can be drawn legibly.
+
+@return The minimum typeface size (in pixels). */
+inline TInt TOpenFontFaceAttrib::MinSizeInPixels() const
+	{
+	return iMinSizeInPixels;
+	}
+
+/** Sets the name attribute.
+
+@param aName Descriptor containing typeface name. */
+inline void TOpenFontFaceAttribBase::SetName(const TDesC& aName)
+	{
+	iName = TPtrC(aName.Ptr(),Min(aName.Length(),(TInt)ENameLength));
+	}
+
+/** Sets the full name.
+
+@param aName The full name of the typeface.
+@see FullName() */
+inline void TOpenFontFaceAttrib::SetFullName(const TDesC& aName)
+	{
+	SetName(aName);
+	}
+
+/** Sets the family name.
+
+@param aName The family name of the typeface. 
+@see FamilyName() */
+inline void TOpenFontFaceAttrib::SetFamilyName(const TDesC& aName)
+	{
+	iFamilyName = TPtrC(aName.Ptr(),Min(aName.Length(),(TInt)ENameLength));
+	}
+
+/** Sets the local full name.
+
+@param aName The local full name of the typeface. 
+@see LocalFullName() */
+inline void TOpenFontFaceAttrib::SetLocalFullName(const TDesC& aName)
+	{
+	iLocalFullName = TPtrC(aName.Ptr(),Min(aName.Length(),(TInt)ENameLength));
+	}
+
+/** Sets the local family name.
+
+@param aName The local family name of the typeface. 
+@see LocalFamilyName() */
+inline void TOpenFontFaceAttrib::SetLocalFamilyName(const TDesC& aName)
+	{
+	iLocalFamilyName = TPtrC(aName.Ptr(),Min(aName.Length(),(TInt)ENameLength));
+	}
+
+/** Sets the coverage flags.
+
+The flags are held in four 32 bit integers. Each flag that is set represents 
+a range of Unicode characters that is supported by the typeface: Latin, 
+Greek, Cyrillic etc. The mapping is defined in the TrueType documentation 
+under the OS/2 table.
+
+Note: Some useful subsets are defined as anonymous enumerated constants at 
+the end of this class, see ELatinSet etc.
+
+@param aCoverage0 The first set of coverage flags (bits 0-31).
+@param aCoverage1 The second set of coverage flags (bits 32-63).
+@param aCoverage2 The third set of coverage flags (bits 64-95). 
+@param aCoverage3 The fourth set of coverage flags (bits 96-127). */
+inline void TOpenFontFaceAttribBase::SetCoverage(TUint aCoverage0,TUint aCoverage1,TUint aCoverage2,TUint aCoverage3)
+	{
+	iCoverage[0] = aCoverage0;
+	iCoverage[1] = aCoverage1;
+	iCoverage[2] = aCoverage2;
+	iCoverage[3] = aCoverage3;
+	}
+
+/** Set the minimum typeface size.
+
+This is the smallest size that can be drawn legibly.
+
+@param aSize Sets the minimum typeface size (in pixels). 
+@see MinSizeInPixels() */
+inline void TOpenFontFaceAttrib::SetMinSizeInPixels(TInt aSize)
+	{
+	iMinSizeInPixels = aSize;
+	}
+
+/** Equality operator.
+
+Compares this and another set of font attributes, including the coverage, 
+the family name, the local full name, the local family name, and the minimum 
+size in pixels.
+
+@param aAttrib Contains the font attributes and names to compare.
+@return ETrue if all values are equal, EFalse if not. */
+inline TBool TOpenFontFaceAttrib::operator==(const TOpenFontFaceAttrib& aAttrib) const
+	{
+	return TOpenFontFaceAttribBase::operator==(aAttrib) &&
+		   iFamilyName == aAttrib.iFamilyName &&
+		   iLocalFullName == aAttrib.iLocalFullName &&
+		   iLocalFamilyName == aAttrib.iLocalFamilyName &&
+		   iMinSizeInPixels == aAttrib.iMinSizeInPixels;
+	}
+
+/** Sets the bold attribute.
+
+@param aBold The bold attribute takes this value: ETrue or EFalse. */
+inline void TOpenFontFaceAttribBase::SetBold(TBool aBold)
+	{
+	if (aBold)
+		iStyle |= EBold;
+	else
+		iStyle &= ~EBold;
+	}
+
+/** Sets the italic attribute.
+
+@param aItalic The italic attribute takes this value   ETrue or EFalse. */
+inline void TOpenFontFaceAttribBase::SetItalic(TBool aItalic)
+	{
+	if (aItalic)
+		iStyle |= EItalic;
+	else
+		iStyle &= ~EItalic;
+	}
+
+/** Sets the serif attribute.
+
+@param aSerif The serif attribute takes this value  ETrue or EFalse. */
+inline void TOpenFontFaceAttribBase::SetSerif(TBool aSerif)
+	{
+	if (aSerif)
+		iStyle |= ESerif;
+	else
+		iStyle &= ~ESerif;
+	}
+
+/** Sets the mono-width attribute.
+
+@param aMonoWidth The mono-width attribute takes this value: ETrue or EFalse. */
+inline void TOpenFontFaceAttribBase::SetMonoWidth(TBool aMonoWidth)
+	{
+	if (aMonoWidth)
+		iStyle |= EMonoWidth;
+	else
+		iStyle &= ~EMonoWidth;
+	}
+
+/** Equality operator. 
+
+Compares this and a specified set of font attributes, including the coverage 
+and the typeface name.
+
+In version 6.1, and earlier, the return value was TInt.
+
+@param aAttrib The font attributes to compare. This is an object of TOpenFontFaceAttribBase 
+or of a derived class. 
+@return ETrue if the values are equal. */
+inline TBool TOpenFontFaceAttribBase::operator==(const TOpenFontFaceAttribBase& aAttrib) const
+	{
+	return iStyle == aAttrib.iStyle &&
+		   iCoverage[0] == aAttrib.iCoverage[0] &&
+		   iCoverage[1] == aAttrib.iCoverage[1] &&
+		   iCoverage[2] == aAttrib.iCoverage[2] &&
+		   iCoverage[3] == aAttrib.iCoverage[3] &&
+		   iName.CompareF(aAttrib.iName) == 0;
+	}
+
+/** Compares this and another open font specification. Compares all the properties 
+of the two fonts.
+@publishedAll
+@released
+@param aFontSpec The open font specification to compare with this one.
+@return ETrue if all values are equal, EFalse if not.
+*/
+inline TBool TOpenFontSpec::operator==(const TOpenFontSpec& aOpenFontSpec) const
+	{
+	return
+		iHeight			== aOpenFontSpec.iHeight &&
+		iWidthFactor	== aOpenFontSpec.iWidthFactor &&
+		iSlantFactor	== aOpenFontSpec.iSlantFactor &&
+		iBitmapType		== aOpenFontSpec.iBitmapType &&
+		iEffects		== aOpenFontSpec.iEffects &&
+		iSymbol			== aOpenFontSpec.iSymbol &&
+		iPrintPosition	== aOpenFontSpec.iPrintPosition &&
+		TOpenFontFaceAttribBase::operator==(aOpenFontSpec);
+	}
+
+/** Gets the height of the font.
+
+@return The height of the font, in pixels or twips. 
+@see SetHeight() */
+inline TInt TOpenFontSpec::Height() const
+	{
+	return iHeight;
+	}
+
+/** Gets the algorithmic width factor.
+
+@return The algorithmic width factor as a 16.16 fixed-point number.
+@see SetWidthFactor() */
+inline TInt32 TOpenFontSpec::WidthFactor() const
+	{
+	return iWidthFactor;
+	}
+
+/** Gets the algorithmic slant factor.
+
+@return The algorithmic slant factor as a 16.16 fixed-point number.
+@see SetSlantFactor() */
+inline TInt32 TOpenFontSpec::SlantFactor() const
+	{
+	return iSlantFactor;
+	}
+
+/** Gets the anti-aliasing setting for the font, as set by SetBitmapType().
+
+@return Indicates whether or not the font should be drawn using anti-aliasing. */
+inline TGlyphBitmapType TOpenFontSpec::BitmapType() const
+	{
+	return (TGlyphBitmapType)iBitmapType;
+	}
+
+/** Gets the font effects flags.
+Because the flags encoded in the Effects are anonymous, the return value should only
+ be tested for the specific bits that are of interest, and never tested as a whole.
+@publishedAll
+@released
+@return The font effects flags.
+@see TOpenFontSpec::SetEffects()
+*/
+inline TUint32 TOpenFontSpec::Effects() const
+	{
+	return iEffects;
+	}
+
+/** Gets the print position.
+
+@return The print position. */
+inline TFontPrintPosition TOpenFontSpec::PrintPosition() const
+	{
+	return iPrintPosition;
+	}
+
+/** Sets the font's height.
+
+@param aHeight The font's height, in pixels or twips.
+@see Height() */
+inline void TOpenFontSpec::SetHeight(TInt aHeight)
+	{
+	iHeight = aHeight;
+	}
+
+/** Sets the algorithmic width factor.
+
+The width factor is multiplied by the pixel's x position to get the new position, 
+causing characters to become wider or narrower. A width factor of 1 (65536 
+in 16.16 fixed-point number format) should be used if the character width 
+is not to be changed.
+
+@param aWidthFactor The algorithmic width factor as a 16.16 fixed-point number.
+@see WidthFactor() */
+inline void TOpenFontSpec::SetWidthFactor(TInt32 aWidthFactor)
+	{
+	iWidthFactor = aWidthFactor;
+	}
+
+/** Sets the algorithmic slant factor.
+
+Note: The slant factor is used to create an italic effect for characters which 
+do not have an italic glyph in the typeface. When slanting is active, pixel x 
+co-ordinates are shifted by a factor relative to the y co-ordinate (i.e. x 
+= x + y x slant factor).
+
+The slant factor is a 32 bit, 16.16 fixed-point number. This means that the 
+first 16 bits are treated as a whole number, and the second 16 as the fractional 
+part. e.g. if aSlantFactor=0, there is no slant. If aSlantFactor=65536 this 
+is equivalent to an integer slant value of 1, which causes a 45 degree slant 
+on the character.
+
+@param aSlantFactor The slant factor as a 16.16 fixed-point number.
+@see SlantFactor() */
+inline void TOpenFontSpec::SetSlantFactor(TInt32 aSlantFactor)
+	{
+	iSlantFactor = aSlantFactor;
+	}
+
+/** Sets whether the font should be drawn using anti-aliasing. If set, this value 
+overrides the default setting (set by CFbsTypefaceStore::SetDefaultBitmapType()) 
+for this font.
+
+Anti-aliasing can only be used for scalable fonts. There is currently no anti-aliasing 
+support for bitmapped fonts.
+
+@param aBitmapType Indicates whether or not the font should be drawn using 
+anti-aliasing. */
+inline void TOpenFontSpec::SetBitmapType(TGlyphBitmapType aBitmapType)
+	{
+	iBitmapType = aBitmapType;
+	}
+
+/** Sets the font effects flags.
+Prior to calling this routine, the value from Effects() should be read,
+ and its flags modified as required, before passing them back in.
+@publishedAll
+@released
+@param aEffect The font effects flags to be set.
+@see TOpenFontSpec::Effects()
+*/
+inline void TOpenFontSpec::SetEffects(TUint32 aEffects)
+	{
+	iEffects = aEffects;
+	}
+
+/** Gets the font file's UID.
+
+@return The uid of the file. */
+inline TUid COpenFontFile::Uid() const
+	{
+	return iUid;
+	}
+
+/** Gets the full path and filename of the font file
+
+This is the filename that was passed to the constructor when the object is 
+created.
+
+@return The filename of the font file. */
+inline const TDesC& COpenFontFile::FileName() const
+	{
+	return iFileName;
+	}
+
+/** Gets the typeface at a specified index in the typeface attribute array.
+
+@param aFaceIndex The index of the typeface for which the attributes are required.
+@return The attributes of the typeface with the specified index.
+@see AddFaceL()
+@see FaceCount() */
+inline const TOpenFontFaceAttrib& COpenFontFile::FaceAttrib(TInt aFaceIndex) const
+	{
+	return iFaceAttrib[aFaceIndex];
+	}
+
+/** Gets the number of typefaces in the typeface attributes array.
+
+This is the number of typefaces in the font file: the attributes for each 
+typeface should be loaded into the array when the derived object is constructed.
+
+@return The number of typefaces in the font file.
+@see AddFaceL()
+@see FaceAttrib() */
+inline TInt COpenFontFile::FaceCount() const
+	{
+	return iFaceAttrib.Count();
+	}
+
+/** Increments a reference count by one.
+
+@see DecRefCount() */
+inline void COpenFontFile::IncRefCount()
+	{
+	iRefCount++;
+	}
+
+/** Decrement a reference count by one.
+
+@return ETrue if the reference count has reached zero (i.e. is less than or 
+equal to zero); EFalse if the reference count has not yet reached zero (i.e. 
+is positive).
+@see IncRefCount() */
+inline TBool COpenFontFile::DecRefCount()
+	{
+	iRefCount--;
+	return iRefCount <= 0;
+	}
+
+/** Default C++ constructor. */
+inline COpenFontRasterizerContext::COpenFontRasterizerContext():
+	iGlyphData(NULL)
+	{
+	}
+
+/** Start writing the glyph data.
+
+Use this function to initialise the buffer to which the glyph bitmap is to 
+be written. Call WriteGlyphBit() to add bits to the buffer.
+
+@param aGlyphData A pointer to the glyph data. */
+inline void COpenFontRasterizerContext::StartGlyph(TOpenFontGlyphData* aGlyphData)
+	{
+	aGlyphData->SetPointersToInternalBuffers();
+	iGlyphData = aGlyphData;
+	iGlyphDataStart = iGlyphDataPtr = aGlyphData->BufferStart();
+	// Allow 4 extra bytes; BITGDI requires this.
+	iGlyphDataEnd = aGlyphData->BufferEnd() - 4;
+	iGlyphBit = 1;
+	*iGlyphDataPtr = 0;
+	iBytesNeeded = 1;
+	iOverflow = FALSE;
+	}
+
+/** Writes a bit to the glyph buffer.
+
+Before calling this function you should first call StartGlyph().
+
+@param aBit The bit to be added to the buffer. */
+inline void COpenFontRasterizerContext::WriteGlyphBit(TInt aBit)
+	{
+	if (aBit && !iOverflow)
+		*iGlyphDataPtr |= iGlyphBit;
+	iGlyphBit <<= 1;
+	if (iGlyphBit == 256)
+		{
+		iGlyphBit = 1;
+		iBytesNeeded++;
+		if (++iGlyphDataPtr < iGlyphDataEnd)
+			*iGlyphDataPtr = 0;
+		else
+			iOverflow = TRUE;
+		}
+	}
+
+/** Writes a byte to the glyph buffer.
+
+Before calling this function you should first call StartGlyph().
+
+@param aByte The byte to be added to the buffer. */	
+inline void COpenFontRasterizerContext::WriteGlyphByte(TInt aByte)
+ 	{
+	if (iGlyphDataPtr < iGlyphDataEnd)
+		*iGlyphDataPtr++ = (TUint8)aByte;
+	else
+		iOverflow = TRUE;
+	iBytesNeeded++;
+	}
+
+/** Completes writing glyph data.
+
+Use this function to complete writing the glyph bitmap to the buffer. Call 
+it after adding all necessary bits using WriteGlyphBit(). */
+inline void COpenFontRasterizerContext::EndGlyph()
+	{
+	// Add 4 bytes to the data size; some BITGDI functions require this.
+	iGlyphData->SetBytesNeeded(iBytesNeeded + 4);
+	iGlyphData = NULL;
+	}
+
+/** Tests whether the bitmap buffer is large enough to hold the bitmap.
+
+@return ETrue if the bitmap will overflow its buffer, otherwise EFalse. */
+inline TBool TOpenFontGlyphData::Overflow() const
+	{
+	return iBytesNeeded > iBitmapBufferSize;
+	}
+
+/** Gets the number of bytes needed to store the glyph bitmap.
+
+@return The number of bytes needed to store the glyph bitmap.
+@see SetBytesNeeded() */
+inline TInt TOpenFontGlyphData::BytesNeeded() const
+	{
+	return iBytesNeeded;
+	}
+
+/** Gets a constant pointer descriptor containing the bitmap this object 
+represents. 
+
+@return Pointer descriptor for the glyph. */
+inline TPtrC8 TOpenFontGlyphData::Bitmap() const
+	{
+	return TPtrC8(iBitmap,iBytesNeeded);
+	}
+
+/** Gets a pointer to the bitmap.
+
+This points either to the buffer used to write the bitmap when it is first 
+rasterized, or to the cache if the character was already rasterized.
+
+@return A pointer to the bitmap. */
+inline const TUint8* TOpenFontGlyphData::BitmapPointer() const
+	{
+	return iBitmap;
+	}
+
+/** Gets the character's metrics.
+
+@return The character's open font metrics. */
+inline const TOpenFontCharMetrics* TOpenFontGlyphData::Metrics() const
+	{
+	return iMetrics;
+	}
+
+/** Gets a pointer to the start of the bitmap buffer.
+
+@return A pointer to the start of the bitmap buffer. */
+inline TUint8* TOpenFontGlyphData::BufferStart()
+	{
+	return iBitmapBuffer;
+	}
+
+/** Gets a pointer to the end of the bitmap buffer.
+
+@return A pointer to the end of the bitmap buffer. */
+inline TUint8* TOpenFontGlyphData::BufferEnd()
+	{
+	return iBitmapBuffer + iBitmapBufferSize;
+	}
+
+/** Sets the number of bytes needed to store the glyph bitmap.
+
+@param aBytes The number of bytes needed to store the glyph bitmap.
+@see BytesNeeded() */
+inline void TOpenFontGlyphData::SetBytesNeeded(TInt aBytes)
+	{
+	iBytesNeeded = aBytes;
+	}
+
+/** Sets the pointer to the bitmap buffer.
+
+@param aBitmap The pointer to the bitmap buffer. */
+inline void TOpenFontGlyphData::SetBitmapPointer(const TUint8* aBitmap)
+	{
+	iBitmap = aBitmap;
+	}
+
+/** Sets the character's metrics, passing a pointer to a TOpenFontCharMetrics object.
+
+@param aMetrics A pointer to the character's open font character metrics. */
+inline void TOpenFontGlyphData::SetMetricsPointer(const TOpenFontCharMetrics* aMetrics)
+	{
+	iMetrics = aMetrics;
+	}
+
+/** Sets the bitmap and metrics pointers to point to the internal buffers.
+
+The alternative is that the pointers point to the cache of metrics and bitmaps 
+that have already been rasterized. */
+inline void TOpenFontGlyphData::SetPointersToInternalBuffers()
+	{
+	iBitmap = iBitmapBuffer;
+	iMetrics = &iMetricsBuffer;
+	}
+
+/** Sets the character's metrics, passing a reference to a TOpenFontCharMetrics 
+object.
+
+@param	aMetrics	The character's open font character metrics. */
+inline void TOpenFontGlyphData::SetMetrics(TOpenFontCharMetrics& aMetrics)
+	{
+	iMetricsBuffer = aMetrics;
+	iMetrics = &iMetricsBuffer;
+	}
+
+/** Sets the glyph index.
+
+@param	aGlyphIndex	The glyph index. */
+inline void TOpenFontGlyphData::SetGlyphIndex(TInt aGlyphIndex)
+	{
+	iGlyphIndex = aGlyphIndex;
+	}
+
+/** Uses ECOM plug-in framework to instantiate the shaper factory interface 
+implementation given its implementation UID. 
+
+@param	aInterfaceImplUid	The UID of the interface implementation required
+
+@return	CShaperFactory*	A pointer to a CShaperFactory object. */
+inline CShaperFactory* CShaperFactory::NewL(TUid aInterfaceImplUid)
+	{
+	return reinterpret_cast <CShaperFactory*> (
+		REComSession::CreateImplementationL( 
+			aInterfaceImplUid,
+			_FOFF(CShaperFactory, iDtor_ID_Key))); 
+	}
+
+/** Default destructor */
+inline CShaperFactory::~CShaperFactory()
+{
+	REComSession::DestroyedImplementation(iDtor_ID_Key);
+}
+
+#endif	// __OPENFONT_H__