Skip to content

Commit f695922

Browse files
committed
Bug 1423742 - Stop using Encoding::ForName in gfxFontUtils. r=jfkthame
MozReview-Commit-ID: EBHo01D6we8 --HG-- extra : rebase_source : 2af3a42ba246204464248448d36e7c679e3c4a59
1 parent 71dd57b commit f695922

File tree

2 files changed

+59
-60
lines changed

2 files changed

+59
-60
lines changed

gfx/thebes/gfxFontUtils.cpp

Lines changed: 49 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1304,58 +1304,58 @@ gfxFontUtils::ReadCanonicalName(const char *aNameData, uint32_t aDataLen,
13041304
// encoding=roman, lang=english, in order that common entries will be found
13051305
// on the first search.
13061306

1307-
#define ANY 0xffff
1307+
const uint16_t ANY = 0xffff;
13081308
const gfxFontUtils::MacFontNameCharsetMapping gfxFontUtils::gMacFontNameCharsets[] =
13091309
{
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 }
13371337
};
13381338

1339-
const char* gfxFontUtils::gISOFontNameCharsets[] =
1339+
const Encoding* gfxFontUtils::gISOFontNameCharsets[] =
13401340
{
1341-
/* 0 */ "windows-1252", /* US-ASCII */
1341+
/* 0 */ WINDOWS_1252_ENCODING, /* US-ASCII */
13421342
/* 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 */
13441344
};
13451345

1346-
const char* gfxFontUtils::gMSFontNameCharsets[] =
1346+
const Encoding* gfxFontUtils::gMSFontNameCharsets[] =
13471347
{
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,
13511351
/* [3] ENCODING_ID_MICROSOFT_PRC */ nullptr ,
1352-
/* [4] ENCODING_ID_MICROSOFT_BIG5 */ "Big5" ,
1352+
/* [4] ENCODING_ID_MICROSOFT_BIG5 */ BIG5_ENCODING,
13531353
/* [5] ENCODING_ID_MICROSOFT_WANSUNG */ nullptr ,
13541354
/* [6] ENCODING_ID_MICROSOFT_JOHAB */ nullptr ,
13551355
/* [7] reserved */ nullptr ,
13561356
/* [8] reserved */ nullptr ,
13571357
/* [9] reserved */ nullptr ,
1358-
/*[10] ENCODING_ID_MICROSOFT_UNICODEFULL */ ""
1358+
/*[10] ENCODING_ID_MICROSOFT_UNICODEFULL */ UTF_16BE_ENCODING
13591359
};
13601360

13611361
struct MacCharsetMappingComparator
@@ -1375,18 +1375,19 @@ struct MacCharsetMappingComparator
13751375
}
13761376
};
13771377

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
13791379
// given the name table attributes.
13801380
// 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*
13841385
gfxFontUtils::GetCharsetForFontName(uint16_t aPlatform, uint16_t aScript, uint16_t aLanguage)
13851386
{
13861387
switch (aPlatform)
13871388
{
13881389
case PLATFORM_ID_UNICODE:
1389-
return "";
1390+
return UTF_16BE_ENCODING;
13901391

13911392
case PLATFORM_ID_MAC:
13921393
{
@@ -1395,7 +1396,7 @@ gfxFontUtils::GetCharsetForFontName(uint16_t aPlatform, uint16_t aScript, uint16
13951396
size_t idx;
13961397
if (BinarySearchIf(gMacFontNameCharsets, 0, ArrayLength(gMacFontNameCharsets),
13971398
MacCharsetMappingComparator(searchValue), &idx)) {
1398-
return gMacFontNameCharsets[idx].mCharsetName;
1399+
return gMacFontNameCharsets[idx].mEncoding;
13991400
}
14001401

14011402
// no match, so try again finding one in any language
@@ -1443,9 +1444,9 @@ gfxFontUtils::DecodeFontName(const char *aNameData, int32_t aByteLen,
14431444
return true;
14441445
}
14451446

1446-
const char *csName = GetCharsetForFontName(aPlatformCode, aScriptCode, aLangCode);
1447+
auto encoding = GetCharsetForFontName(aPlatformCode, aScriptCode, aLangCode);
14471448

1448-
if (!csName) {
1449+
if (!encoding) {
14491450
// nullptr -> unknown charset
14501451
#ifdef DEBUG
14511452
char warnBuf[128];
@@ -1458,8 +1459,8 @@ gfxFontUtils::DecodeFontName(const char *aNameData, int32_t aByteLen,
14581459
return false;
14591460
}
14601461

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
14631464
uint32_t strLen = aByteLen / 2;
14641465
aName.SetLength(strLen);
14651466
#ifdef IS_LITTLE_ENDIAN
@@ -1471,9 +1472,7 @@ gfxFontUtils::DecodeFontName(const char *aNameData, int32_t aByteLen,
14711472
return true;
14721473
}
14731474

1474-
nsDependentCString encodingName(csName);
1475-
if (StartsWith(encodingName, "x-mac-") &&
1476-
!encodingName.EqualsLiteral("x-mac-cyrillic")) {
1475+
if (encoding == X_USER_DEFINED_ENCODING) {
14771476
#ifdef XP_MACOSX
14781477
// Special case for macOS only: support legacy Mac encodings
14791478
// that aren't part of the Encoding Standard.
@@ -1496,7 +1495,6 @@ gfxFontUtils::DecodeFontName(const char *aNameData, int32_t aByteLen,
14961495
return false;
14971496
}
14981497

1499-
auto encoding = Encoding::ForName(encodingName);
15001498
auto rv = encoding->DecodeWithoutBOMHandling(
15011499
AsBytes(MakeSpan(aNameData, aByteLen)), aName);
15021500
return NS_SUCCEEDED(rv);

gfx/thebes/gfxFontUtils.h

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "nsComponentManagerUtils.h"
1111
#include "nsTArray.h"
1212
#include "mozilla/Likely.h"
13+
#include "mozilla/Encoding.h"
1314
#include "mozilla/EndianUtils.h"
1415
#include "mozilla/MemoryReporting.h"
1516
#include "mozilla/UniquePtr.h"
@@ -1006,24 +1007,24 @@ class gfxFontUtils {
10061007
ReadNames(const char *aNameData, uint32_t aDataLen, uint32_t aNameID,
10071008
int32_t aLangID, int32_t aPlatformID, nsTArray<nsString>& aNames);
10081009

1009-
// convert opentype name-table platform/encoding/language values to a charset name
1010-
// we can use to convert the name data to unicode, or "" if data is UTF16BE
1011-
static const char*
1010+
// convert opentype name-table platform/encoding/language values to an
1011+
// Encoding object we can use to convert the name data to unicode
1012+
static const mozilla::Encoding*
10121013
GetCharsetForFontName(uint16_t aPlatform, uint16_t aScript, uint16_t aLanguage);
10131014

10141015
struct MacFontNameCharsetMapping {
1015-
uint16_t mEncoding;
1016+
uint16_t mScript;
10161017
uint16_t mLanguage;
1017-
const char *mCharsetName;
1018+
const mozilla::Encoding* mEncoding;
10181019

10191020
bool operator<(const MacFontNameCharsetMapping& rhs) const {
1020-
return (mEncoding < rhs.mEncoding) ||
1021-
((mEncoding == rhs.mEncoding) && (mLanguage < rhs.mLanguage));
1021+
return (mScript < rhs.mScript) ||
1022+
((mScript == rhs.mScript) && (mLanguage < rhs.mLanguage));
10221023
}
10231024
};
10241025
static const MacFontNameCharsetMapping gMacFontNameCharsets[];
1025-
static const char* gISOFontNameCharsets[];
1026-
static const char* gMSFontNameCharsets[];
1026+
static const mozilla::Encoding* gISOFontNameCharsets[];
1027+
static const mozilla::Encoding* gMSFontNameCharsets[];
10271028
};
10281029

10291030
#endif /* GFX_FONT_UTILS_H */

0 commit comments

Comments
 (0)