graphicstools/bitmapfonttools/inc/FNTREADR.H
author William Roberts <williamr@symbian.org>
Thu, 03 Jun 2010 17:39:46 +0100
branchNewGraphicsArchitecture
changeset 87 0709f76d91e5
parent 0 5d03bc08d59c
permissions -rw-r--r--
Add MMP files to build libOpenVG_sw.lib which uses LINKAS to redirect to libOpenVG.dll (and the same for libEGL_sw.lib and libOpenVGU_sw.lib). Only the libEGL_sw.lib redirection isn't activated - this can't happen until there is a merged libEGL.dll which supports the OpenWF synchronisation and also implements the graphical support functions. The overall aim is to eliminate the *_sw.dll implementations, at least as a compile-time way of choosing a software-only implementation.The correct way to choose is to put the right set of libraries into a ROM with suitable renaming, and in the emulator to use the "switching DLL" technique to pick the right set. As the Symbian Foundation doesn't have any alternative implementations, we don't need the switching DLLs and we can build directly to the correct name.

/*
* 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