Bug 705594. Update Unicode range and pref font lists to avoid system fallback. r=roc

This commit is contained in:
John Daggett 2012-03-09 11:05:05 +09:00
Родитель d34772eb8d
Коммит b331b0f905
4 изменённых файлов: 88 добавлений и 60 удалений

Просмотреть файл

@ -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);