blob: fc4a869c021dcb2e7f4c2bd60e0a8b29e9af24e2 [file] [log] [blame]
* %W% %E%
* (C) Copyright IBM Corp. 1998 - All Rights Reserved
* Portions Copyright 1998 by Sun Microsystems, Inc.,
* 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
* All rights reserved.
* This software is the confidential and proprietary information
* of Sun Microsystems, Inc. ("Confidential Information"). You
* shall not disclose such Confidential Information and shall use
* it only in accordance with the terms of the license agreement
* you entered into with Sun.
* The original version of this source code and documentation is
* copyrighted and owned by IBM. These materials are provided
* under terms of a License Agreement between IBM and Sun.
* This technology is protected by multiple US and International
* patents. This notice and attribution to IBM may not be removed.
#ifndef __FONTOBJECT_H
#define __FONTOBJECT_H
#include <stdio.h>
#include "LETypes.h"
#ifndef ANY_NUMBER
#define ANY_NUMBER 1
struct DirectoryEntry
le_uint32 tag;
le_uint32 checksum;
le_uint32 offset;
le_uint32 length;
struct SFNTDirectory
le_uint32 scalerType;
le_uint16 numTables;
le_uint16 searchRange;
le_uint16 entrySelector;
le_uint16 rangeShift;
DirectoryEntry tableDirectory[ANY_NUMBER];
struct CMAPEncodingSubtableHeader
le_uint16 platformID;
le_uint16 platformSpecificID;
le_uint32 encodingOffset;
struct CMAPTable
le_uint16 version;
le_uint16 numberSubtables;
CMAPEncodingSubtableHeader encodingSubtableHeaders[ANY_NUMBER];
struct CMAPEncodingSubtable
le_uint16 format;
le_uint16 length;
le_uint16 language;
struct CMAPFormat0Encoding : CMAPEncodingSubtable
le_uint8 glyphIndexArray[256];
struct CMAPFormat2Subheader
le_uint16 firstCode;
le_uint16 entryCount;
le_int16 idDelta;
le_uint16 idRangeOffset;
struct CMAPFormat2Encoding : CMAPEncodingSubtable
le_uint16 subHeadKeys[256];
CMAPFormat2Subheader subheaders[ANY_NUMBER];
struct CMAPFormat4Encoding : CMAPEncodingSubtable
le_uint16 segCountX2;
le_uint16 searchRange;
le_uint16 entrySelector;
le_uint16 rangeShift;
le_uint16 endCodes[ANY_NUMBER];
// le_uint16 reservedPad;
// le_uint16 startCodes[ANY_NUMBER];
// le_uint16 idDelta[ANY_NUMBER];
// le_uint16 idRangeOffset[ANY_NUMBER];
// le_uint16 glyphIndexArray[ANY_NUMBER];
struct CMAPFormat6Encoding : CMAPEncodingSubtable
le_uint16 firstCode;
le_uint16 entryCount;
le_uint16 glyphIndexArray[ANY_NUMBER];
typedef le_int32 fixed;
struct BigDate
le_uint32 bc;
le_uint32 ad;
struct HEADTable
fixed version;
fixed fontRevision;
le_uint32 checksumAdjustment;
le_uint32 magicNumber;
le_uint16 flags;
le_uint16 unitsPerEm;
BigDate created;
BigDate modified;
le_int16 xMin;
le_int16 yMin;
le_int16 xMax;
le_int16 yMax;
le_int16 lowestRecPPEM;
le_int16 fontDirectionHint;
le_int16 indexToLocFormat;
le_int16 glyphDataFormat;
struct MAXPTable
fixed version;
le_uint16 numGlyphs;
le_uint16 maxPoints;
le_uint16 maxContours;
le_uint16 maxComponentPoints;
le_uint16 maxComponentContours;
le_uint16 maxZones;
le_uint16 maxTwilightPoints;
le_uint16 maxStorage;
le_uint16 maxFunctionDefs;
le_uint16 maxInstructionDefs;
le_uint16 maxStackElements;
le_uint16 maxSizeOfInstructions;
le_uint16 maxComponentElements;
le_uint16 maxComponentDepth;
struct HHEATable
fixed version;
le_int16 ascent;
le_int16 descent;
le_int16 lineGap;
le_uint16 advanceWidthMax;
le_int16 minLeftSideBearing;
le_int16 minRightSideBearing;
le_int16 xMaxExtent;
le_int16 caretSlopeRise;
le_int16 caretSlopeRun;
le_int16 caretOffset;
le_int16 reserved1;
le_int16 reserved2;
le_int16 reserved3;
le_int16 reserved4;
le_int16 metricDataFormat;
le_uint16 numOfLongHorMetrics;
struct LongHorMetric
le_uint16 advanceWidth;
le_int16 leftSideBearing;
struct HMTXTable
LongHorMetric hMetrics[ANY_NUMBER]; // ANY_NUMBER = numOfLongHorMetrics from hhea table
// le_int16 leftSideBearing[ANY_NUMBER]; // ANY_NUMBER = numGlyphs - numOfLongHorMetrics
class FontObject
FontObject(char *fontName);
void *readTable(LETag tag, le_uint32 *length);
void deleteTable(void *table);
LEGlyphID unicodeToGlyph(LEUnicode32 unicode);
#if 0
le_uint32 unicodesToGlyphs(LEUnicode *chars, le_uint32 nChars, LEGlyphID *glyphs,
le_uint32 *charIndices, le_bool rightToLeft);
le_uint16 getUnitsPerEM();
le_uint16 getGlyphAdvance(LEGlyphID glyph);
DirectoryEntry *findTable(LETag tag);
CMAPEncodingSubtable *findCMAP(le_uint16 platformID, le_uint16 platformSpecificID);
void initUnicodeCMAP();
SFNTDirectory *directory;
le_uint16 numTables;
le_uint16 searchRange;
le_uint16 entrySelector;
le_uint16 rangeShift;
CMAPTable *cmapTable;
le_uint16 cmSegCount;
le_uint16 cmSearchRange;
le_uint16 cmEntrySelector;
le_uint16 cmRangeShift;
le_uint16 *cmEndCodes;
le_uint16 *cmStartCodes;
le_uint16 *cmIdDelta;
le_uint16 *cmIdRangeOffset;
HEADTable *headTable;
HMTXTable *hmtxTable;
le_uint16 numGlyphs;
le_uint16 numOfLongHorMetrics;
FILE *file;