1 2 /* 3 ******************************************************************************* 4 * 5 * Copyright (C) 1999-2013, International Business Machines 6 * Corporation and others. All Rights Reserved. 7 * 8 ******************************************************************************* 9 * file name: PortableFontInstance.h 10 * 11 * created on: 11/12/1999 12 * created by: Eric R. Mader 13 */ 14 15 #ifndef __PORTABLEFONTINSTANCE_H 16 #define __PORTABLEFONTINSTANCE_H 17 18 #include <stdio.h> 19 20 #include "layout/LETypes.h" 21 #include "layout/LEFontInstance.h" 22 23 #include "FontTableCache.h" 24 25 #include "sfnt.h" 26 #include "cmaps.h" 27 28 class PortableFontInstance : public LEFontInstance, protected FontTableCache 29 { 30 private: 31 FILE *fFile; 32 33 float fPointSize; 34 le_int32 fUnitsPerEM; 35 le_uint32 fFontChecksum; 36 le_int32 fAscent; 37 le_int32 fDescent; 38 le_int32 fLeading; 39 40 const SFNTDirectory *fDirectory; 41 le_uint16 fDirPower; 42 le_uint16 fDirExtra; 43 44 float fDeviceScaleX; 45 float fDeviceScaleY; 46 47 const NAMETable *fNAMETable; 48 le_uint16 fNameCount; 49 le_uint16 fNameStringOffset; 50 51 CMAPMapper *fCMAPMapper; 52 53 const HMTXTable *fHMTXTable; 54 le_uint16 fNumGlyphs; 55 le_uint16 fNumLongHorMetrics; 56 57 static le_int8 highBit(le_int32 value); 58 59 const DirectoryEntry *findTable(LETag tag) const; 60 const void *readTable(LETag tag, le_uint32 *length) const; 61 void getMetrics(); 62 63 CMAPMapper *findUnicodeMapper(); 64 65 protected: readFontTable(LETag tableTag)66 const void *readFontTable(LETag tableTag) const { size_t ignored; return readFontTable(tableTag, ignored); } 67 const void *readFontTable(LETag tableTag, size_t &length) const; 68 69 public: 70 PortableFontInstance(const char *fileName, float pointSize, LEErrorCode &status); 71 72 virtual ~PortableFontInstance(); 73 74 virtual const void *getFontTable(LETag tableTag) const; 75 virtual const void *getFontTable(LETag tableTag, size_t &length) const; 76 77 virtual const char *getNameString(le_uint16 nameID, le_uint16 platform, le_uint16 encoding, le_uint16 language) const; 78 79 virtual const LEUnicode16 *getUnicodeNameString(le_uint16 nameID, le_uint16 platform, le_uint16 encoding, le_uint16 language) const; 80 81 virtual void deleteNameString(const char *name) const; 82 83 virtual void deleteNameString(const LEUnicode16 *name) const; 84 85 virtual le_int32 getUnitsPerEM() const; 86 87 virtual le_uint32 getFontChecksum() const; 88 89 virtual le_uint32 getRawChecksum() const; 90 91 virtual le_int32 getAscent() const; 92 93 virtual le_int32 getDescent() const; 94 95 virtual le_int32 getLeading() const; 96 97 // We really want to inherit this method from the superclass, but some compilers 98 // issue a warning if we don't implement it... 99 virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper, le_bool filterZeroWidth) const; 100 101 // We really want to inherit this method from the superclass, but some compilers 102 // issue a warning if we don't implement it... 103 virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const; 104 105 virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch) const; 106 107 virtual void getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const; 108 109 virtual le_bool getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const; 110 111 float getXPixelsPerEm() const; 112 113 float getYPixelsPerEm() const; 114 115 float getScaleFactorX() const; 116 117 float getScaleFactorY() const; 118 119 }; 120 121 #endif 122