author | Gareth Stockwell <gareth.stockwell@accenture.com> |
Fri, 22 Oct 2010 11:38:29 +0100 | |
branch | bug235_bringup_0 |
changeset 206 | c170e304623f |
parent 0 | 5d03bc08d59c |
permissions | -rw-r--r-- |
/* * Copyright (c) 1997-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: * Header FNTREADR.H * */ #ifndef __FNTREADR_H__ #define __FNTREADR_H__ #include "FNTRECRD.H" #include "LST.H" #include "READER.H" /** @internalComponent */ const uint16 KMaxSizeCodeSectionBitmap = 0x7FFF; const int KMaxBitmapWidth = 0x7f; const int KMaxBitmapHeight = 0x7f; const int KNumberOfBitsInByte = 8; /** @internalComponent */ const int KLowestPermittedCharacterEncoding = 0x0000; const int KHighestPermittedCharacterEncoding = 0xffff; /** @internalComponent */ const int KMaxNumberRepeatedLines = 15; // maximum number of repeated lines in font compiler /** KFillCharacterOffset is a significant offset that is set when a character within a code section is not in the font. This means that for these fill characters nothing is stored within the binary data part of the code section @internalComponent */ const uint16 KFillCharacterOffset = 0x7FFF; /** Resource identifiers @internalComponent */ const String IdentFontBitmap("FontBitmap"); const String IdentSTARTFONT("STARTFONT"); const String IdentTypeface("Typeface"); const String IdentFontStoreFile("FontStoreFile"); /** Char identifiers @internalComponent */ const String IdentAdjust("Adjust"); const String IdentEndChar("EndChar"); /** Codesection identifiers @internalComponent */ const String IdentEndCodeSection("EndCodeSection"); const String IdentChar("Char"); /** Fontbitmap identifiers @internalComponent */ const String IdentEndFontBitmap("EndFontBitmap"); const String IdentUid("Uid"); const String IdentBold("Bold"); const String IdentItalic("Italic"); const String IdentFontBitmapProportional("Proportional"); const String IdentCellHeight("CellHeight"); const String IdentAscent("Ascent"); const String IdentMaxNormalCharWidth("MaxNormalCharWidth"); const String IdentBitmapEncoding("BitmapEncoding"); const String IdentCodeSection("CodeSection"); const String IdentMaxConsecutiveFillChars("MaxConsecutiveFillChars"); /** BDF CHAR identifiers @internalComponent */ const String IdentBDFFileHeader("STARTFONT"); const String IdentBDFComment("COMMENT"); const String IdentBDFContentVersion("CONTENTVERSION"); const String IdentBDFFontBitmap("FONT"); const String IdentBDFPointSize("SIZE"); const String IdentBDFFontDesignBox("FONTBOUNDINGBOX"); const String IdentBDFWritingDirection("METRICSSET"); const String IdentBDFStartProperties("STARTPROPERTIES"); const String IdentBDFPropertyUid("UID"); const String IdentBDFPropertyBold("BOLD"); const String IdentBDFPropertyItalic("ITALIC"); const String IdentBDFPropertyFontAscent("FONTASCENT"); const String IdentBDFPropertyFontDescent("FONTDESCENT"); const String IdentBDFPropertyMaxNormalCharWidth("MAXNORMALCHARWIDTH"); const String IdentBDFPropertyMaxConsecutiveFillChars("MAXCONSECUTIVEFILLCHARS"); const String IdentBDFEndProperties("ENDPROPERTIES"); const String IdentBDFNumChars("CHARS"); // To be used as sanity check on BDF files const String IdentBDFCharLabel("STARTCHAR"); const String IdentBDFChar("ENCODING"); const String IdentBDFCursorMove("DWIDTH"); const String IdentBDFBitmapSizeAndDisplacement("BBX"); const String IdentBDFStartBitmap("BITMAP"); const String IdentBDFEndChar("ENDCHAR"); const String IdentBDFEndFontBitmap("ENDFONT"); /** Typeface identifiers @internalComponent */ const String IdentEndTypeface("EndTypeface"); const String IdentName("Name"); const String IdentTypefaceProportional("Proportional"); const String IdentSerif("Serif"); const String IdentSymbol("Symbol"); const String IdentFontBitmaps("FontBitmaps"); const String IdentWidthFactor("WidthFactor"); const String IdentHeightFactor("HeightFactor"); const String IdentEndFontBitmaps("EndFontBitmaps"); /** Fontstorefile identifiers @internalComponent */ const String IdentEndFontStoreFile("EndFontStoreFile"); const String IdentFilename("Filename"); const String IdentCollectionUid("CollectionUid"); const String IdentKPixelAspectRatio("KPixelAspectRatio"); const String IdentTypefaces("Typefaces"); const String IdentEndTypefaces("EndTypefaces"); const String IdentExtraFontBitmaps("FontBitmaps"); const String IdentEndExtraFontBitmaps("EndFontBitmaps"); const String IdentCopyrightInfo("CopyrightInfo"); const String IdentEndCopyrightInfo("EndCopyrightInfo"); class CroppedValues; class FontReader : public Reader /** @internalComponent */ { public: enum TReadFileFormat { ESymbianGDFFormat, EBDFFormat }; public: FontReader(); boolean Read(const String& aFilename); boolean ReadBDFCharacter(int aCode); boolean ParseMetricsFromBDF(int aNumberCharsInFile, int aMaxConsecutiveFillChars); boolean ReadMetricFromBDFCharacter(CharacterMetrics* aMetric, CroppedValues* aCropped); boolean ReadBDFFontBitmap(); boolean ReadTypeface(); boolean ReadFontStoreFile(); int Store(const String& aFilename); boolean CharLine(String& aCharLine); private: boolean ReadBDFChars(const int aNumberOfGlyphsInFile, const int aMaxConsecutiveFillChars); boolean DoMetricAnalysis(int& aHeight, int& aWidth, int& aLeftAdjust, int& aRightAdjust, int& aAscent); void ErrorIdentifierExpected(const String& aIdentifier); boolean CompareBitmapLines(int aLine1, int aLine2); boolean BitmapLineEmpty(int aLine); boolean BitmapColumnEmpty(int aColumn); void WriteFillCharacters(int aNumberConsecutive); void PrintoutCodeSection(const BitmapCodeSection* aCodeSection) const; private: FontStore iFontStore; FontStoreFile* iFontStoreFile; CharacterMetrics* iCharacterMetrics; BitmapCodeSection* iCodeSection; FontBitmap* iFontBitmap; FntTypeface* iTypeface; TReadFileFormat iReadFileFormat; int iBitArray[KMaxBitmapWidth][KMaxBitmapHeight]; int iBitmapWidth; int iBitmapHeight; int iDefaultXMoveInPixels; int iDefaultYMoveInPixels; String iFileName; }; #endif