@@ -1304,58 +1304,58 @@ gfxFontUtils::ReadCanonicalName(const char *aNameData, uint32_t aDataLen,
1304
1304
// encoding=roman, lang=english, in order that common entries will be found
1305
1305
// on the first search.
1306
1306
1307
- # define ANY 0xffff
1307
+ const uint16_t ANY = 0xffff ;
1308
1308
const gfxFontUtils::MacFontNameCharsetMapping gfxFontUtils::gMacFontNameCharsets [] =
1309
1309
{
1310
- { ENCODING_ID_MAC_ROMAN, LANG_ID_MAC_ENGLISH, " macintosh " },
1311
- { ENCODING_ID_MAC_ROMAN, LANG_ID_MAC_ICELANDIC, " x-mac-icelandic " },
1312
- { ENCODING_ID_MAC_ROMAN, LANG_ID_MAC_TURKISH, " x-mac-turkish " },
1313
- { ENCODING_ID_MAC_ROMAN, LANG_ID_MAC_POLISH, " x-mac-ce " },
1314
- { ENCODING_ID_MAC_ROMAN, LANG_ID_MAC_ROMANIAN, " x-mac-romanian " },
1315
- { ENCODING_ID_MAC_ROMAN, LANG_ID_MAC_CZECH, " x-mac-ce " },
1316
- { ENCODING_ID_MAC_ROMAN, LANG_ID_MAC_SLOVAK, " x-mac-ce " },
1317
- { ENCODING_ID_MAC_ROMAN, ANY, " macintosh " },
1318
- { ENCODING_ID_MAC_JAPANESE, LANG_ID_MAC_JAPANESE, " Shift_JIS " },
1319
- { ENCODING_ID_MAC_JAPANESE, ANY, " Shift_JIS " },
1320
- { ENCODING_ID_MAC_TRAD_CHINESE, LANG_ID_MAC_TRAD_CHINESE, " Big5 " },
1321
- { ENCODING_ID_MAC_TRAD_CHINESE, ANY, " Big5 " },
1322
- { ENCODING_ID_MAC_KOREAN, LANG_ID_MAC_KOREAN, " EUC-KR " },
1323
- { ENCODING_ID_MAC_KOREAN, ANY, " EUC-KR " },
1324
- { ENCODING_ID_MAC_ARABIC, LANG_ID_MAC_ARABIC, " x-mac-arabic " },
1325
- { ENCODING_ID_MAC_ARABIC, LANG_ID_MAC_URDU, " x-mac-farsi " },
1326
- { ENCODING_ID_MAC_ARABIC, LANG_ID_MAC_FARSI, " x-mac-farsi " },
1327
- { ENCODING_ID_MAC_ARABIC, ANY, " x-mac-arabic " },
1328
- { ENCODING_ID_MAC_HEBREW, LANG_ID_MAC_HEBREW, " x-mac-hebrew " },
1329
- { ENCODING_ID_MAC_HEBREW, ANY, " x-mac-hebrew " },
1330
- { ENCODING_ID_MAC_GREEK, ANY, " x-mac-greek " },
1331
- { ENCODING_ID_MAC_CYRILLIC, ANY, " x-mac-cyrillic " },
1332
- { ENCODING_ID_MAC_DEVANAGARI, ANY, " x-mac-devanagari " },
1333
- { ENCODING_ID_MAC_GURMUKHI, ANY, " x-mac-gurmukhi " },
1334
- { ENCODING_ID_MAC_GUJARATI, ANY, " x-mac-gujarati " },
1335
- { ENCODING_ID_MAC_SIMP_CHINESE, LANG_ID_MAC_SIMP_CHINESE, " gb18030 " },
1336
- { ENCODING_ID_MAC_SIMP_CHINESE, ANY, " gb18030 " }
1310
+ { ENCODING_ID_MAC_ROMAN, LANG_ID_MAC_ENGLISH, MACINTOSH_ENCODING },
1311
+ { ENCODING_ID_MAC_ROMAN, LANG_ID_MAC_ICELANDIC, X_USER_DEFINED_ENCODING },
1312
+ { ENCODING_ID_MAC_ROMAN, LANG_ID_MAC_TURKISH, X_USER_DEFINED_ENCODING },
1313
+ { ENCODING_ID_MAC_ROMAN, LANG_ID_MAC_POLISH, X_USER_DEFINED_ENCODING },
1314
+ { ENCODING_ID_MAC_ROMAN, LANG_ID_MAC_ROMANIAN, X_USER_DEFINED_ENCODING },
1315
+ { ENCODING_ID_MAC_ROMAN, LANG_ID_MAC_CZECH, X_USER_DEFINED_ENCODING },
1316
+ { ENCODING_ID_MAC_ROMAN, LANG_ID_MAC_SLOVAK, X_USER_DEFINED_ENCODING },
1317
+ { ENCODING_ID_MAC_ROMAN, ANY, MACINTOSH_ENCODING },
1318
+ { ENCODING_ID_MAC_JAPANESE, LANG_ID_MAC_JAPANESE, SHIFT_JIS_ENCODING },
1319
+ { ENCODING_ID_MAC_JAPANESE, ANY, SHIFT_JIS_ENCODING },
1320
+ { ENCODING_ID_MAC_TRAD_CHINESE, LANG_ID_MAC_TRAD_CHINESE, BIG5_ENCODING },
1321
+ { ENCODING_ID_MAC_TRAD_CHINESE, ANY, BIG5_ENCODING },
1322
+ { ENCODING_ID_MAC_KOREAN, LANG_ID_MAC_KOREAN, EUC_KR_ENCODING },
1323
+ { ENCODING_ID_MAC_KOREAN, ANY, EUC_KR_ENCODING },
1324
+ { ENCODING_ID_MAC_ARABIC, LANG_ID_MAC_ARABIC, X_USER_DEFINED_ENCODING },
1325
+ { ENCODING_ID_MAC_ARABIC, LANG_ID_MAC_URDU, X_USER_DEFINED_ENCODING },
1326
+ { ENCODING_ID_MAC_ARABIC, LANG_ID_MAC_FARSI, X_USER_DEFINED_ENCODING },
1327
+ { ENCODING_ID_MAC_ARABIC, ANY, X_USER_DEFINED_ENCODING },
1328
+ { ENCODING_ID_MAC_HEBREW, LANG_ID_MAC_HEBREW, X_USER_DEFINED_ENCODING },
1329
+ { ENCODING_ID_MAC_HEBREW, ANY, X_USER_DEFINED_ENCODING },
1330
+ { ENCODING_ID_MAC_GREEK, ANY, X_USER_DEFINED_ENCODING },
1331
+ { ENCODING_ID_MAC_CYRILLIC, ANY, X_MAC_CYRILLIC_ENCODING },
1332
+ { ENCODING_ID_MAC_DEVANAGARI, ANY, X_USER_DEFINED_ENCODING },
1333
+ { ENCODING_ID_MAC_GURMUKHI, ANY, X_USER_DEFINED_ENCODING },
1334
+ { ENCODING_ID_MAC_GUJARATI, ANY, X_USER_DEFINED_ENCODING },
1335
+ { ENCODING_ID_MAC_SIMP_CHINESE, LANG_ID_MAC_SIMP_CHINESE, GB18030_ENCODING },
1336
+ { ENCODING_ID_MAC_SIMP_CHINESE, ANY, GB18030_ENCODING }
1337
1337
};
1338
1338
1339
- const char * gfxFontUtils::gISOFontNameCharsets [] =
1339
+ const Encoding * gfxFontUtils::gISOFontNameCharsets [] =
1340
1340
{
1341
- /* 0 */ " windows-1252 " , /* US-ASCII */
1341
+ /* 0 */ WINDOWS_1252_ENCODING , /* US-ASCII */
1342
1342
/* 1 */ nullptr , /* spec says "ISO 10646" but does not specify encoding form! */
1343
- /* 2 */ " windows-1252 " /* ISO-8859-1 */
1343
+ /* 2 */ WINDOWS_1252_ENCODING /* ISO-8859-1 */
1344
1344
};
1345
1345
1346
- const char * gfxFontUtils::gMSFontNameCharsets [] =
1346
+ const Encoding * gfxFontUtils::gMSFontNameCharsets [] =
1347
1347
{
1348
- /* [0] ENCODING_ID_MICROSOFT_SYMBOL */ " " ,
1349
- /* [1] ENCODING_ID_MICROSOFT_UNICODEBMP */ " " ,
1350
- /* [2] ENCODING_ID_MICROSOFT_SHIFTJIS */ " Shift_JIS " ,
1348
+ /* [0] ENCODING_ID_MICROSOFT_SYMBOL */ UTF_16BE_ENCODING ,
1349
+ /* [1] ENCODING_ID_MICROSOFT_UNICODEBMP */ UTF_16BE_ENCODING ,
1350
+ /* [2] ENCODING_ID_MICROSOFT_SHIFTJIS */ SHIFT_JIS_ENCODING ,
1351
1351
/* [3] ENCODING_ID_MICROSOFT_PRC */ nullptr ,
1352
- /* [4] ENCODING_ID_MICROSOFT_BIG5 */ " Big5 " ,
1352
+ /* [4] ENCODING_ID_MICROSOFT_BIG5 */ BIG5_ENCODING ,
1353
1353
/* [5] ENCODING_ID_MICROSOFT_WANSUNG */ nullptr ,
1354
1354
/* [6] ENCODING_ID_MICROSOFT_JOHAB */ nullptr ,
1355
1355
/* [7] reserved */ nullptr ,
1356
1356
/* [8] reserved */ nullptr ,
1357
1357
/* [9] reserved */ nullptr ,
1358
- /* [10] ENCODING_ID_MICROSOFT_UNICODEFULL */ " "
1358
+ /* [10] ENCODING_ID_MICROSOFT_UNICODEFULL */ UTF_16BE_ENCODING
1359
1359
};
1360
1360
1361
1361
struct MacCharsetMappingComparator
@@ -1375,18 +1375,19 @@ struct MacCharsetMappingComparator
1375
1375
}
1376
1376
};
1377
1377
1378
- // Return the name of the charset we should use to decode a font name
1378
+ // Return the Encoding object we should use to decode a font name
1379
1379
// given the name table attributes.
1380
1380
// Special return values:
1381
- // "" charset is UTF16BE, no need for a converter
1382
- // nullptr unknown charset, do not attempt conversion
1383
- const char *
1381
+ // X_USER_DEFINED_ENCODING One of Mac legacy encodings that is not a part
1382
+ // of Encoding Standard
1383
+ // nullptr unknown charset, do not attempt conversion
1384
+ const Encoding*
1384
1385
gfxFontUtils::GetCharsetForFontName (uint16_t aPlatform, uint16_t aScript, uint16_t aLanguage)
1385
1386
{
1386
1387
switch (aPlatform)
1387
1388
{
1388
1389
case PLATFORM_ID_UNICODE:
1389
- return " " ;
1390
+ return UTF_16BE_ENCODING ;
1390
1391
1391
1392
case PLATFORM_ID_MAC:
1392
1393
{
@@ -1395,7 +1396,7 @@ gfxFontUtils::GetCharsetForFontName(uint16_t aPlatform, uint16_t aScript, uint16
1395
1396
size_t idx;
1396
1397
if (BinarySearchIf (gMacFontNameCharsets , 0 , ArrayLength (gMacFontNameCharsets ),
1397
1398
MacCharsetMappingComparator (searchValue), &idx)) {
1398
- return gMacFontNameCharsets [idx].mCharsetName ;
1399
+ return gMacFontNameCharsets [idx].mEncoding ;
1399
1400
}
1400
1401
1401
1402
// no match, so try again finding one in any language
@@ -1443,9 +1444,9 @@ gfxFontUtils::DecodeFontName(const char *aNameData, int32_t aByteLen,
1443
1444
return true ;
1444
1445
}
1445
1446
1446
- const char *csName = GetCharsetForFontName (aPlatformCode, aScriptCode, aLangCode);
1447
+ auto encoding = GetCharsetForFontName (aPlatformCode, aScriptCode, aLangCode);
1447
1448
1448
- if (!csName ) {
1449
+ if (!encoding ) {
1449
1450
// nullptr -> unknown charset
1450
1451
#ifdef DEBUG
1451
1452
char warnBuf[128 ];
@@ -1458,8 +1459,8 @@ gfxFontUtils::DecodeFontName(const char *aNameData, int32_t aByteLen,
1458
1459
return false ;
1459
1460
}
1460
1461
1461
- if (csName[ 0 ] == 0 ) {
1462
- // empty charset name: data is utf16be, no need to instantiate a converter
1462
+ if (encoding == UTF_16BE_ENCODING ) {
1463
+ // no need to instantiate a converter
1463
1464
uint32_t strLen = aByteLen / 2 ;
1464
1465
aName.SetLength (strLen);
1465
1466
#ifdef IS_LITTLE_ENDIAN
@@ -1471,9 +1472,7 @@ gfxFontUtils::DecodeFontName(const char *aNameData, int32_t aByteLen,
1471
1472
return true ;
1472
1473
}
1473
1474
1474
- nsDependentCString encodingName (csName);
1475
- if (StartsWith (encodingName, " x-mac-" ) &&
1476
- !encodingName.EqualsLiteral (" x-mac-cyrillic" )) {
1475
+ if (encoding == X_USER_DEFINED_ENCODING) {
1477
1476
#ifdef XP_MACOSX
1478
1477
// Special case for macOS only: support legacy Mac encodings
1479
1478
// that aren't part of the Encoding Standard.
@@ -1496,7 +1495,6 @@ gfxFontUtils::DecodeFontName(const char *aNameData, int32_t aByteLen,
1496
1495
return false ;
1497
1496
}
1498
1497
1499
- auto encoding = Encoding::ForName (encodingName);
1500
1498
auto rv = encoding->DecodeWithoutBOMHandling (
1501
1499
AsBytes (MakeSpan (aNameData, aByteLen)), aName);
1502
1500
return NS_SUCCEEDED(rv);
0 commit comments