X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/efa1e6592fb03ce23b15276b2b91d885a3ee7da5..57a6839dcb3bba09e8228b822b290604668416fe:/icuSources/test/letest/PortableFontInstance.cpp?ds=sidebyside diff --git a/icuSources/test/letest/PortableFontInstance.cpp b/icuSources/test/letest/PortableFontInstance.cpp index 14e3f520..abbd8ee6 100644 --- a/icuSources/test/letest/PortableFontInstance.cpp +++ b/icuSources/test/letest/PortableFontInstance.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 1999-2008, International Business Machines + * Copyright (C) 1999-2013, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -19,10 +19,22 @@ #include "PortableFontInstance.h" -#include "letest.h" +//#include "letest.h" #include "sfnt.h" #include +#include + +#if 0 +static const char *letagToStr(LETag tag, char *str) { + str[0]= 0xFF & (tag>>24); + str[1]= 0xFF & (tag>>16); + str[2]= 0xFF & (tag>>8); + str[3]= 0xFF & (tag>>0); + str[4]= 0; + return str; +} +#endif // // Finds the high bit by binary searching @@ -74,8 +86,10 @@ PortableFontInstance::PortableFontInstance(const char *fileName, float pointSize // open the font file fFile = fopen(fileName, "rb"); + //printf("Open Font: %s\n", fileName); if (fFile == NULL) { + printf("%s:%d: %s: FNF\n", __FILE__, __LINE__, fileName); status = LE_FONT_FILE_NOT_FOUND_ERROR; return; } @@ -93,9 +107,10 @@ PortableFontInstance::PortableFontInstance(const char *fileName, float pointSize // const NAMETable *nameTable = NULL; le_uint16 numTables = 0; - fDirectory = (const SFNTDirectory *) NEW_ARRAY(char, dirSize); + fDirectory = (const SFNTDirectory *) LE_NEW_ARRAY(char, dirSize); if (fDirectory == NULL) { + printf("%s:%d: %s: malloc err\n", __FILE__, __LINE__, fileName); status = LE_MEMORY_ALLOCATION_ERROR; goto error_exit; } @@ -116,6 +131,7 @@ PortableFontInstance::PortableFontInstance(const char *fileName, float pointSize if (headTable == NULL) { status = LE_MISSING_FONT_TABLE_ERROR; + printf("%s:%d: %s: missing head table\n", __FILE__, __LINE__, fileName); goto error_exit; } @@ -142,6 +158,7 @@ PortableFontInstance::PortableFontInstance(const char *fileName, float pointSize hheaTable = (HHEATable *) readFontTable(hheaTag); if (hheaTable == NULL) { + printf("%s:%d: %s: missing hhea table\n", __FILE__, __LINE__, fileName); status = LE_MISSING_FONT_TABLE_ERROR; goto error_exit; } @@ -157,6 +174,7 @@ PortableFontInstance::PortableFontInstance(const char *fileName, float pointSize fCMAPMapper = findUnicodeMapper(); if (fCMAPMapper == NULL) { + printf("%s:%d: %s: can't load cmap\n", __FILE__, __LINE__, fileName); status = LE_MISSING_FONT_TABLE_ERROR; goto error_exit; } @@ -179,7 +197,7 @@ PortableFontInstance::~PortableFontInstance() delete fCMAPMapper; - DELETE_ARRAY(fDirectory); + LE_DELETE_ARRAY(fDirectory); } } @@ -220,7 +238,7 @@ const void *PortableFontInstance::readTable(LETag tag, le_uint32 *length) const *length = SWAPL(entry->length); - void *table = NEW_ARRAY(char, *length); + void *table = LE_NEW_ARRAY(char, *length); if (table != NULL) { fseek(fFile, SWAPL(entry->offset), SEEK_SET); @@ -232,14 +250,24 @@ const void *PortableFontInstance::readTable(LETag tag, le_uint32 *length) const const void *PortableFontInstance::getFontTable(LETag tableTag) const { - return FontTableCache::find(tableTag); + size_t ignored; + return getFontTable(tableTag, ignored); } -const void *PortableFontInstance::readFontTable(LETag tableTag) const +const void *PortableFontInstance::getFontTable(LETag tableTag, size_t &length) const +{ + return FontTableCache::find(tableTag, length); +} + +const void *PortableFontInstance::readFontTable(LETag tableTag, size_t &length) const { le_uint32 len; - return readTable(tableTag, &len); + const void *data= readTable(tableTag, &len); + length = len; + //char tag5[5]; + //printf("Read %s, result %p #%d\n", letagToStr(tableTag,tag5), data,len); + return data; } CMAPMapper *PortableFontInstance::findUnicodeMapper() @@ -275,9 +303,9 @@ const char *PortableFontInstance::getNameString(le_uint16 nameID, le_uint16 plat SWAPW(nameRecord->languageID) == languageID && SWAPW(nameRecord->nameID) == nameID) { char *name = ((char *) fNAMETable) + fNameStringOffset + SWAPW(nameRecord->offset); le_uint16 length = SWAPW(nameRecord->length); - char *result = NEW_ARRAY(char, length + 2); + char *result = LE_NEW_ARRAY(char, length + 2); - ARRAY_COPY(result, name, length); + LE_ARRAY_COPY(result, name, length); result[length] = result[length + 1] = 0; return result; @@ -308,7 +336,7 @@ const LEUnicode16 *PortableFontInstance::getUnicodeNameString(le_uint16 nameID, SWAPW(nameRecord->languageID) == languageID && SWAPW(nameRecord->nameID) == nameID) { LEUnicode16 *name = (LEUnicode16 *) (((char *) fNAMETable) + fNameStringOffset + SWAPW(nameRecord->offset)); le_uint16 length = SWAPW(nameRecord->length) / 2; - LEUnicode16 *result = NEW_ARRAY(LEUnicode16, length + 2); + LEUnicode16 *result = LE_NEW_ARRAY(LEUnicode16, length + 2); for (le_int32 c = 0; c < length; c += 1) { result[c] = SWAPW(name[c]); @@ -325,12 +353,12 @@ const LEUnicode16 *PortableFontInstance::getUnicodeNameString(le_uint16 nameID, void PortableFontInstance::deleteNameString(const char *name) const { - DELETE_ARRAY(name); + LE_DELETE_ARRAY(name); } void PortableFontInstance::deleteNameString(const LEUnicode16 *name) const { - DELETE_ARRAY(name); + LE_DELETE_ARRAY(name); } void PortableFontInstance::getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const @@ -381,6 +409,23 @@ le_uint32 PortableFontInstance::getFontChecksum() const return fFontChecksum; } +le_uint32 PortableFontInstance::getRawChecksum() const +{ + // how big is it? + // fseek(fFile, 0L, SEEK_END); + // long size = ftell(fFile); + le_int32 chksum = 0; + // now, calculate + fseek(fFile, 0L, SEEK_SET); + int r; + int count =0; + while((r = fgetc(fFile)) != EOF) { + chksum += r; + count ++; + } + return (le_uint32) chksum; // cast to signed +} + le_int32 PortableFontInstance::getAscent() const { return fAscent;