mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-28 05:10:49 +00:00
Bug 705594. Update Unicode range and pref font lists to avoid system fallback. r=roc
This commit is contained in:
parent
d34772eb8d
commit
b331b0f905
@ -3552,10 +3552,6 @@ gfxFontGroup::WhichPrefFontSupportsChar(PRUint32 aCh)
|
||||
{
|
||||
gfxFont *font;
|
||||
|
||||
// FindCharUnicodeRange only supports BMP character points and there are no non-BMP fonts in prefs
|
||||
if (aCh > 0xFFFF)
|
||||
return nsnull;
|
||||
|
||||
// get the pref font list if it hasn't been set up already
|
||||
PRUint32 unicodeRange = FindCharUnicodeRange(aCh);
|
||||
eFontPrefLang charLang = gfxPlatform::GetPlatform()->GetFontPrefLangFor(unicodeRange);
|
||||
|
@ -213,7 +213,7 @@ static nsIAtom **gUnicodeRangeToLangGroupAtomTable[] =
|
||||
|
||||
|
||||
|
||||
#define NUM_OF_SUBTABLES 9
|
||||
#define NUM_OF_SUBTABLES 10
|
||||
#define SUBTABLE_SIZE 16
|
||||
|
||||
static const PRUint8 gUnicodeSubrangeTable[NUM_OF_SUBTABLES][SUBTABLE_SIZE] =
|
||||
@ -252,7 +252,7 @@ static const PRUint8 gUnicodeSubrangeTable[NUM_OF_SUBTABLES][SUBTABLE_SIZE] =
|
||||
kRangeTertiaryTable, //u0cxx
|
||||
kRangeTertiaryTable, //u0dxx
|
||||
kRangeTertiaryTable, //u0exx
|
||||
kRangeTibetan, //u0fxx
|
||||
kRangeTibetan //u0fxx
|
||||
},
|
||||
{ //table for 1x--
|
||||
kRangeTertiaryTable, //u10xx
|
||||
@ -270,7 +270,7 @@ static const PRUint8 gUnicodeSubrangeTable[NUM_OF_SUBTABLES][SUBTABLE_SIZE] =
|
||||
kRangeUnassigned, //u1cxx
|
||||
kRangeUnassigned, //u1dxx
|
||||
kRangeSetLatin, //u1exx
|
||||
kRangeGreek, //u1fxx
|
||||
kRangeGreek //u1fxx
|
||||
},
|
||||
{ //table for 2x--
|
||||
kRangeSetLatin, //u20xx
|
||||
@ -288,7 +288,7 @@ static const PRUint8 gUnicodeSubrangeTable[NUM_OF_SUBTABLES][SUBTABLE_SIZE] =
|
||||
kRangeUnassigned, //u2cxx
|
||||
kRangeUnassigned, //u2dxx
|
||||
kRangeSetCJK, //u2exx
|
||||
kRangeSetCJK, //u2fxx
|
||||
kRangeSetCJK //u2fxx
|
||||
},
|
||||
{ //table for ax--
|
||||
kRangeYi, //ua0xx
|
||||
@ -306,7 +306,7 @@ static const PRUint8 gUnicodeSubrangeTable[NUM_OF_SUBTABLES][SUBTABLE_SIZE] =
|
||||
kRangeKorean, //uacxx
|
||||
kRangeKorean, //uadxx
|
||||
kRangeKorean, //uaexx
|
||||
kRangeKorean, //uafxx
|
||||
kRangeKorean //uafxx
|
||||
},
|
||||
{ //table for dx--
|
||||
kRangeKorean, //ud0xx
|
||||
@ -324,7 +324,7 @@ static const PRUint8 gUnicodeSubrangeTable[NUM_OF_SUBTABLES][SUBTABLE_SIZE] =
|
||||
kRangeSurrogate, //udcxx
|
||||
kRangeSurrogate, //uddxx
|
||||
kRangeSurrogate, //udexx
|
||||
kRangeSurrogate, //udfxx
|
||||
kRangeSurrogate //udfxx
|
||||
},
|
||||
{ // table for fx--
|
||||
kRangePrivate, //uf0xx
|
||||
@ -341,11 +341,8 @@ static const PRUint8 gUnicodeSubrangeTable[NUM_OF_SUBTABLES][SUBTABLE_SIZE] =
|
||||
kRangeArabic, //ufbxx, includes alphabic presentation form
|
||||
kRangeArabic, //ufcxx
|
||||
kRangeArabic, //ufdxx
|
||||
kRangeArabic, //ufexx, includes Combining half marks,
|
||||
// CJK compatibility forms,
|
||||
// CJK compatibility forms,
|
||||
// small form variants
|
||||
kRangeTableBase+8, //uffxx, halfwidth and fullwidth forms, includes Specials
|
||||
kRangeTableBase+8, //ufexx
|
||||
kRangeTableBase+9 //uffxx, halfwidth and fullwidth forms, includes Specials
|
||||
},
|
||||
{ //table for 0x0500 - 0x05ff
|
||||
kRangeCyrillic, //u050x
|
||||
@ -363,7 +360,25 @@ static const PRUint8 gUnicodeSubrangeTable[NUM_OF_SUBTABLES][SUBTABLE_SIZE] =
|
||||
kRangeHebrew, //u05cx
|
||||
kRangeHebrew, //u05dx
|
||||
kRangeHebrew, //u05ex
|
||||
kRangeHebrew, //u05fx
|
||||
kRangeHebrew //u05fx
|
||||
},
|
||||
{ //table for 0xfe00 - 0xfeff
|
||||
kRangeSetCJK, //ufe0x
|
||||
kRangeSetCJK, //ufe1x
|
||||
kRangeSetCJK, //ufe2x
|
||||
kRangeSetCJK, //ufe3x
|
||||
kRangeSetCJK, //ufe4x
|
||||
kRangeSetCJK, //ufe5x
|
||||
kRangeSetCJK, //ufe6x
|
||||
kRangeArabic, //ufe7x
|
||||
kRangeArabic, //ufe8x
|
||||
kRangeArabic, //ufe9x
|
||||
kRangeArabic, //ufeax
|
||||
kRangeArabic, //ufebx
|
||||
kRangeArabic, //ufecx
|
||||
kRangeArabic, //ufedx
|
||||
kRangeArabic, //ufeex
|
||||
kRangeArabic //ufefx
|
||||
},
|
||||
{ //table for 0xff00 - 0xffff
|
||||
kRangeSetCJK, //uff0x, fullwidth latin
|
||||
@ -425,7 +440,7 @@ static const PRUint8 gUnicodeTertiaryRangeTable[TERTIARY_TABLE_SIZE] =
|
||||
kRangeCanadian, //u150x place holder(resolved in the 2ndary tab.)
|
||||
kRangeCanadian, //u158x place holder(resolved in the 2ndary tab.)
|
||||
kRangeCanadian, //u160x
|
||||
kRangeOghamRunic, //u168x this contains two scripts, Ogham & Runic
|
||||
kRangeOghamRunic //u168x this contains two scripts, Ogham & Runic
|
||||
};
|
||||
|
||||
// A two level index is almost enough for locating a range, with the
|
||||
@ -436,18 +451,31 @@ static const PRUint8 gUnicodeTertiaryRangeTable[TERTIARY_TABLE_SIZE] =
|
||||
// there is such a need.
|
||||
// For Indic, Southeast Asian scripts and some other scripts between
|
||||
// U+0700 and U+16FF, it's extended to the third level.
|
||||
PRUint32 FindCharUnicodeRange(PRUnichar ch)
|
||||
PRUint32 FindCharUnicodeRange(PRUint32 ch)
|
||||
{
|
||||
PRUint32 range;
|
||||
|
||||
// aggregate ranges for non-BMP codepoints
|
||||
if (ch > 0xFFFF) {
|
||||
PRUint32 p = (ch >> 16);
|
||||
if (p == 1) {
|
||||
return kRangeSMP;
|
||||
} else if (p == 2) {
|
||||
return kRangeSetCJK;
|
||||
}
|
||||
return kRangeHigherPlanes;
|
||||
}
|
||||
|
||||
//search the first table
|
||||
// lookup explicit range for BMP codepoints
|
||||
// first general range
|
||||
range = gUnicodeSubrangeTable[0][ch >> 12];
|
||||
|
||||
// if general range is good enough, return that
|
||||
if (range < kRangeTableBase)
|
||||
// we try to get a specific range
|
||||
return range;
|
||||
|
||||
// otherwise, we have one more table to look at
|
||||
// otherwise, use subrange tables
|
||||
range = gUnicodeSubrangeTable[range - kRangeTableBase][(ch & 0x0f00) >> 8];
|
||||
if (range < kRangeTableBase)
|
||||
return range;
|
||||
|
@ -108,6 +108,10 @@ const PRUint8 kRangeYi = 50;
|
||||
const PRUint8 kRangeCombiningDiacriticalMarks = 51;
|
||||
const PRUint8 kRangeSpecials = 52;
|
||||
|
||||
// aggregate ranges for non-BMP codepoints (u+2xxxx are all CJK)
|
||||
const PRUint8 kRangeSMP = 53; // u+1xxxx
|
||||
const PRUint8 kRangeHigherPlanes = 54; // u+3xxxx and above
|
||||
|
||||
const PRUint8 kRangeTableBase = 128; //values over 127 are reserved for internal use only
|
||||
const PRUint8 kRangeTertiaryTable = 145; // leave room for 16 subtable
|
||||
// indices (kRangeTableBase + 1 ..
|
||||
@ -115,5 +119,5 @@ const PRUint8 kRangeTertiaryTable = 145; // leave room for 16 subtable
|
||||
|
||||
|
||||
|
||||
PRUint32 FindCharUnicodeRange(PRUnichar ch);
|
||||
PRUint32 FindCharUnicodeRange(PRUint32 ch);
|
||||
nsIAtom* LangGroupFromUnicodeRange(PRUint8 unicodeRange);
|
||||
|
@ -1627,9 +1627,9 @@ pref("font.name-list.cursive.he", "Guttman Yad, Ktav, Arial");
|
||||
pref("font.name.serif.ja", "MS PMincho");
|
||||
pref("font.name.sans-serif.ja", "MS PGothic");
|
||||
pref("font.name.monospace.ja", "MS Gothic");
|
||||
pref("font.name-list.serif.ja", "MS PMincho, MS Mincho, MS PGothic, MS Gothic");
|
||||
pref("font.name-list.sans-serif.ja", "MS PGothic, MS Gothic, MS PMincho, MS Mincho");
|
||||
pref("font.name-list.monospace.ja", "MS Gothic, MS Mincho, MS PGothic, MS PMincho");
|
||||
pref("font.name-list.serif.ja", "MS PMincho, MS Mincho, MS PGothic, MS Gothic,Meiryo");
|
||||
pref("font.name-list.sans-serif.ja", "MS PGothic, MS Gothic, MS PMincho, MS Mincho,Meiryo");
|
||||
pref("font.name-list.monospace.ja", "MS Gothic, MS Mincho, MS PGothic, MS PMincho,Meiryo");
|
||||
|
||||
pref("font.name.serif.ko", "Batang");
|
||||
pref("font.name.sans-serif.ko", "Gulim");
|
||||
@ -1679,27 +1679,27 @@ pref("font.name.cursive.x-western", "Comic Sans MS");
|
||||
pref("font.name.serif.zh-CN", "SimSun");
|
||||
pref("font.name.sans-serif.zh-CN", "SimSun");
|
||||
pref("font.name.monospace.zh-CN", "SimSun");
|
||||
pref("font.name-list.serif.zh-CN", "MS Song, SimSun");
|
||||
pref("font.name-list.sans-serif.zh-CN", "MS Song, SimSun");
|
||||
pref("font.name-list.monospace.zh-CN", "MS Song, SimSun");
|
||||
pref("font.name-list.serif.zh-CN", "MS Song, SimSun, SimSun-ExtB");
|
||||
pref("font.name-list.sans-serif.zh-CN", "MS Song, SimSun, SimSun-ExtB");
|
||||
pref("font.name-list.monospace.zh-CN", "MS Song, SimSun, SimSun-ExtB");
|
||||
|
||||
// Per Taiwanese users' demand. They don't want to use TC fonts for
|
||||
// rendering Latin letters. (bug 88579)
|
||||
pref("font.name.serif.zh-TW", "Times New Roman");
|
||||
pref("font.name.sans-serif.zh-TW", "Arial");
|
||||
pref("font.name.monospace.zh-TW", "MingLiU");
|
||||
pref("font.name-list.serif.zh-TW", "PMingLiu, MingLiU");
|
||||
pref("font.name-list.sans-serif.zh-TW", "PMingLiU, MingLiU");
|
||||
pref("font.name-list.monospace.zh-TW", "MingLiU");
|
||||
pref("font.name-list.serif.zh-TW", "PMingLiu, MingLiU, MingLiU-ExtB");
|
||||
pref("font.name-list.sans-serif.zh-TW", "PMingLiU, MingLiU, MingLiU-ExtB");
|
||||
pref("font.name-list.monospace.zh-TW", "MingLiU, MingLiU-ExtB");
|
||||
|
||||
// hkscsm3u.ttf (HKSCS-2001) : http://www.microsoft.com/hk/hkscs
|
||||
// Hong Kong users have the same demand about glyphs for Latin letters (bug 88579)
|
||||
pref("font.name.serif.zh-HK", "Times New Roman");
|
||||
pref("font.name.sans-serif.zh-HK", "Arial");
|
||||
pref("font.name.monospace.zh-HK", "MingLiu_HKSCS");
|
||||
pref("font.name-list.serif.zh-HK", "MingLiu_HKSCS, Ming(for ISO10646), MingLiU");
|
||||
pref("font.name-list.sans-serif.zh-HK", "MingLiU_HKSCS, Ming(for ISO10646), MingLiU");
|
||||
pref("font.name-list.monospace.zh-HK", "MingLiU_HKSCS, Ming(for ISO10646), MingLiU");
|
||||
pref("font.name-list.serif.zh-HK", "MingLiu_HKSCS, Ming(for ISO10646), MingLiU, MingLiU_HKSCS-ExtB");
|
||||
pref("font.name-list.sans-serif.zh-HK", "MingLiU_HKSCS, Ming(for ISO10646), MingLiU, MingLiU_HKSCS-ExtB");
|
||||
pref("font.name-list.monospace.zh-HK", "MingLiU_HKSCS, Ming(for ISO10646), MingLiU, MingLiU_HKSCS-ExtB");
|
||||
|
||||
pref("font.name.serif.x-devanagari", "Mangal");
|
||||
pref("font.name.sans-serif.x-devanagari", "Raghindi");
|
||||
@ -2095,16 +2095,16 @@ pref("font.name-list.monospace.ar", "Geeza Pro");
|
||||
pref("font.name-list.cursive.ar", "DecoType Naskh");
|
||||
pref("font.name-list.fantasy.ar", "KufiStandardGK");
|
||||
|
||||
pref("font.name.serif.el", "Lucida Grande");
|
||||
pref("font.name.sans-serif.el", "Lucida Grande");
|
||||
pref("font.name.monospace.el", "Lucida Grande");
|
||||
pref("font.name.serif.el", "Times");
|
||||
pref("font.name.sans-serif.el", "Helvetica");
|
||||
pref("font.name.monospace.el", "Courier New");
|
||||
pref("font.name.cursive.el", "Lucida Grande");
|
||||
pref("font.name.fantasy.el", "Lucida Grande");
|
||||
pref("font.name-list.serif.el", "Lucida Grande");
|
||||
pref("font.name-list.sans-serif.el", "Lucida Grande");
|
||||
pref("font.name-list.monospace.el", "Lucida Grande");
|
||||
pref("font.name-list.cursive.el", "Lucida Grande");
|
||||
pref("font.name-list.fantasy.el", "Lucida Grande");
|
||||
pref("font.name-list.serif.el", "Times,Times New Roman");
|
||||
pref("font.name-list.sans-serif.el", "Helvetica,Lucida Grande");
|
||||
pref("font.name-list.monospace.el", "Courier New,Lucida Grande");
|
||||
pref("font.name-list.cursive.el", "Times,Lucida Grande");
|
||||
pref("font.name-list.fantasy.el", "Times,Lucida Grande");
|
||||
|
||||
pref("font.name.serif.he", "Times New Roman");
|
||||
pref("font.name.sans-serif.he", "Arial");
|
||||
@ -2117,11 +2117,11 @@ pref("font.name-list.monospace.he", "Courier New");
|
||||
pref("font.name-list.cursive.he", "Times New Roman");
|
||||
pref("font.name-list.fantasy.he", "Times New Roman");
|
||||
|
||||
pref("font.name.serif.ja", "Hiragino Mincho Pro");
|
||||
pref("font.name.sans-serif.ja", "Hiragino Kaku Gothic Pro");
|
||||
pref("font.name.serif.ja", "Hiragino Mincho ProN");
|
||||
pref("font.name.sans-serif.ja", "Hiragino Kaku Gothic ProN");
|
||||
pref("font.name.monospace.ja", "Osaka-Mono");
|
||||
pref("font.name-list.serif.ja", "Hiragino Mincho Pro");
|
||||
pref("font.name-list.sans-serif.ja", "Hiragino Kaku Gothic Pro");
|
||||
pref("font.name-list.serif.ja", "Hiragino Mincho ProN,Hiragino Mincho Pro");
|
||||
pref("font.name-list.sans-serif.ja", "Hiragino Kaku Gothic ProN,Hiragino Kaku Gothic Pro");
|
||||
pref("font.name-list.monospace.ja", "Osaka-Mono");
|
||||
|
||||
pref("font.name.serif.ko", "AppleMyungjo");
|
||||
@ -2200,9 +2200,9 @@ pref("font.name.sans-serif.x-cyrillic", "Helvetica");
|
||||
pref("font.name.monospace.x-cyrillic", "Monaco");
|
||||
pref("font.name.cursive.x-cyrillic", "Geneva");
|
||||
pref("font.name.fantasy.x-cyrillic", "Charcoal CY");
|
||||
pref("font.name-list.serif.x-cyrillic", "Times");
|
||||
pref("font.name-list.sans-serif.x-cyrillic", "Helvetica");
|
||||
pref("font.name-list.monospace.x-cyrillic", "Monaco");
|
||||
pref("font.name-list.serif.x-cyrillic", "Times,Times New Roman");
|
||||
pref("font.name-list.sans-serif.x-cyrillic", "Helvetica,Arial");
|
||||
pref("font.name-list.monospace.x-cyrillic", "Monaco,Courier New");
|
||||
pref("font.name-list.cursive.x-cyrillic", "Geneva");
|
||||
pref("font.name-list.fantasy.x-cyrillic", "Charcoal CY");
|
||||
|
||||
@ -2311,32 +2311,32 @@ pref("font.name.sans-serif.x-western", "Helvetica");
|
||||
pref("font.name.monospace.x-western", "Courier");
|
||||
pref("font.name.cursive.x-western", "Apple Chancery");
|
||||
pref("font.name.fantasy.x-western", "Papyrus");
|
||||
pref("font.name-list.serif.x-western", "Times");
|
||||
pref("font.name-list.sans-serif.x-western", "Helvetica");
|
||||
pref("font.name-list.monospace.x-western", "Courier");
|
||||
pref("font.name-list.serif.x-western", "Times,Times New Roman");
|
||||
pref("font.name-list.sans-serif.x-western", "Helvetica,Arial");
|
||||
pref("font.name-list.monospace.x-western", "Courier,Courier New");
|
||||
pref("font.name-list.cursive.x-western", "Apple Chancery");
|
||||
pref("font.name-list.fantasy.x-western", "Papyrus");
|
||||
|
||||
pref("font.name.serif.zh-CN", "STSong");
|
||||
pref("font.name.sans-serif.zh-CN", "STHeiti");
|
||||
pref("font.name.monospace.zh-CN", "STHeiti");
|
||||
pref("font.name-list.serif.zh-CN", "STSong");
|
||||
pref("font.name-list.sans-serif.zh-CN", "STHeiti");
|
||||
pref("font.name-list.monospace.zh-CN", "STHeiti");
|
||||
pref("font.name-list.serif.zh-CN", "STSong,Heiti SC");
|
||||
pref("font.name-list.sans-serif.zh-CN", "STHeiti,Heiti SC");
|
||||
pref("font.name-list.monospace.zh-CN", "STHeiti,Heiti SC");
|
||||
|
||||
pref("font.name.serif.zh-TW", "Apple LiSung");
|
||||
pref("font.name.sans-serif.zh-TW", "Apple LiGothic");
|
||||
pref("font.name.monospace.zh-TW", "Apple LiGothic");
|
||||
pref("font.name-list.serif.zh-TW", "Apple LiSung");
|
||||
pref("font.name-list.sans-serif.zh-TW", "Apple LiGothic");
|
||||
pref("font.name-list.monospace.zh-TW", "Apple LiGothic");
|
||||
pref("font.name-list.serif.zh-TW", "Apple LiSung,Heiti TC");
|
||||
pref("font.name-list.sans-serif.zh-TW", "Apple LiGothic,Heiti TC");
|
||||
pref("font.name-list.monospace.zh-TW", "Apple LiGothic,Heiti TC");
|
||||
|
||||
pref("font.name.serif.zh-HK", "LiSong Pro");
|
||||
pref("font.name.sans-serif.zh-HK", "LiHei Pro");
|
||||
pref("font.name.monospace.zh-HK", "LiHei Pro");
|
||||
pref("font.name-list.serif.zh-HK", "LiSong Pro");
|
||||
pref("font.name-list.sans-serif.zh-HK", "LiHei Pro");
|
||||
pref("font.name-list.monospace.zh-HK", "LiHei Pro");
|
||||
pref("font.name-list.serif.zh-HK", "LiSong Pro,Heiti TC");
|
||||
pref("font.name-list.sans-serif.zh-HK", "LiHei Pro,Heiti TC");
|
||||
pref("font.name-list.monospace.zh-HK", "LiHei Pro,Heiti TC");
|
||||
|
||||
pref("font.default.ar", "sans-serif");
|
||||
pref("font.size.variable.ar", 16);
|
||||
|
Loading…
x
Reference in New Issue
Block a user