< prev index next >

src/java.desktop/share/classes/sun/font/TrueTypeFont.java

Print this page

        

*** 97,106 **** --- 97,110 ---- public static final int v1ttTag = 0x00010000; // 'v1tt' - Version 1 TT font public static final int trueTag = 0x74727565; // 'true' - Version 2 TT font public static final int ottoTag = 0x4f54544f; // 'otto' - OpenType font /* -- ID's used in the 'name' table */ + public static final int MAC_PLATFORM_ID = 1; + public static final int MACROMAN_SPECIFIC_ID = 0; + public static final int MACROMAN_ENGLISH_LANG = 0; + public static final int MS_PLATFORM_ID = 3; /* MS locale id for US English is the "default" */ public static final short ENGLISH_LOCALE_ID = 0x0409; // 1033 decimal public static final int FAMILY_NAME_ID = 1; // public static final int STYLE_WEIGHT_ID = 2; // currently unused.
*** 1106,1116 **** metrics[offset+2] = ulPos * pointSize; metrics[offset+3] = ulSize * pointSize; } ! private String makeString(byte[] bytes, int len, short encoding) { /* Check for fonts using encodings 2->6 is just for * some old DBCS fonts, apparently mostly on Solaris. * Some of these fonts encode ascii names as double-byte characters. * ie with a leading zero byte for what properly should be a --- 1110,1125 ---- metrics[offset+2] = ulPos * pointSize; metrics[offset+3] = ulSize * pointSize; } ! private String makeString(byte[] bytes, int len, ! short platformID, short encoding) { ! ! if (platformID == MAC_PLATFORM_ID) { ! encoding = -1; // hack so we can re-use the code below. ! } /* Check for fonts using encodings 2->6 is just for * some old DBCS fonts, apparently mostly on Solaris. * Some of these fonts encode ascii names as double-byte characters. * ie with a leading zero byte for what properly should be a
*** 1128,1137 **** --- 1137,1147 ---- } } String charset; switch (encoding) { + case -1: charset = "US-ASCII";break; case 1: charset = "UTF-16"; break; // most common case first. case 0: charset = "UTF-16"; break; // symbol uses this case 2: charset = "SJIS"; break; case 3: charset = "GBK"; break; case 4: charset = "MS950"; break;
*** 1173,1192 **** languageCompatibleLCIDs = getLanguageCompatibleLCIDsFromLocale(nameLocale); for (int i=0; i<numRecords; i++) { short platformID = sbuffer.get(); ! if (platformID != MS_PLATFORM_ID) { sbuffer.position(sbuffer.position()+5); continue; // skip over this record. } short encodingID = sbuffer.get(); short langID = sbuffer.get(); short nameID = sbuffer.get(); int nameLen = ((int) sbuffer.get()) & 0xffff; int namePtr = (((int) sbuffer.get()) & 0xffff) + stringPtr; String tmpName = null; switch (nameID) { case FAMILY_NAME_ID: boolean compatible = false; if (familyName == null || langID == ENGLISH_LOCALE_ID || --- 1183,1211 ---- languageCompatibleLCIDs = getLanguageCompatibleLCIDsFromLocale(nameLocale); for (int i=0; i<numRecords; i++) { short platformID = sbuffer.get(); ! if (platformID != MS_PLATFORM_ID && ! platformID != MAC_PLATFORM_ID) { sbuffer.position(sbuffer.position()+5); continue; // skip over this record. } short encodingID = sbuffer.get(); short langID = sbuffer.get(); short nameID = sbuffer.get(); int nameLen = ((int) sbuffer.get()) & 0xffff; int namePtr = (((int) sbuffer.get()) & 0xffff) + stringPtr; String tmpName = null; + + // only want MacRoman encoding and English name on Mac. + if ((platformID == MAC_PLATFORM_ID) && + (encodingID != MACROMAN_SPECIFIC_ID || + langID != MACROMAN_ENGLISH_LANG)) { + continue; + } + switch (nameID) { case FAMILY_NAME_ID: boolean compatible = false; if (familyName == null || langID == ENGLISH_LOCALE_ID ||
*** 1194,1204 **** (localeFamilyName == null && (compatible = isLanguageCompatible(langID)))) { buffer.position(namePtr); buffer.get(name, 0, nameLen); ! tmpName = makeString(name, nameLen, encodingID); if (familyName == null || langID == ENGLISH_LOCALE_ID){ familyName = tmpName; } if (langID == nameLocaleID || (localeFamilyName == null && compatible)) --- 1213,1223 ---- (localeFamilyName == null && (compatible = isLanguageCompatible(langID)))) { buffer.position(namePtr); buffer.get(name, 0, nameLen); ! tmpName = makeString(name, nameLen, platformID, encodingID); if (familyName == null || langID == ENGLISH_LOCALE_ID){ familyName = tmpName; } if (langID == nameLocaleID || (localeFamilyName == null && compatible))
*** 1227,1237 **** (localeFullName == null && (compatible = isLanguageCompatible(langID)))) { buffer.position(namePtr); buffer.get(name, 0, nameLen); ! tmpName = makeString(name, nameLen, encodingID); if (fullName == null || langID == ENGLISH_LOCALE_ID) { fullName = tmpName; } if (langID == nameLocaleID || --- 1246,1256 ---- (localeFullName == null && (compatible = isLanguageCompatible(langID)))) { buffer.position(namePtr); buffer.get(name, 0, nameLen); ! tmpName = makeString(name, nameLen, platformID, encodingID); if (fullName == null || langID == ENGLISH_LOCALE_ID) { fullName = tmpName; } if (langID == nameLocaleID ||
*** 1288,1298 **** if (nameID == findNameID && ((foundName == null && langID == ENGLISH_LOCALE_ID) || langID == findLocaleID)) { buffer.position(namePtr); buffer.get(name, 0, nameLen); ! foundName = makeString(name, nameLen, encodingID); if (langID == findLocaleID) { return foundName; } } } --- 1307,1317 ---- if (nameID == findNameID && ((foundName == null && langID == ENGLISH_LOCALE_ID) || langID == findLocaleID)) { buffer.position(namePtr); buffer.get(name, 0, nameLen); ! foundName = makeString(name, nameLen, platformID, encodingID); if (langID == findLocaleID) { return foundName; } } }
*** 1625,1635 **** int namePtr = (((int) sbuffer.get()) & 0xffff) + stringPtr; if (nameID == requestedID) { buffer.position(namePtr); buffer.get(name, 0, nameLen); ! names.add(makeString(name, nameLen, encodingID)); } } } } --- 1644,1654 ---- int namePtr = (((int) sbuffer.get()) & 0xffff) + stringPtr; if (nameID == requestedID) { buffer.position(namePtr); buffer.get(name, 0, nameLen); ! names.add(makeString(name, nameLen, platformID, encodingID)); } } } }
< prev index next >