usp10: Remove redundant information by making scriptData accessible and removing otTag.

This commit is contained in:
Aric Stewart 2011-12-29 14:50:23 -06:00 committed by Alexandre Julliard
parent 419d3d7100
commit ef98d143d7
3 changed files with 98 additions and 100 deletions

View File

@ -628,7 +628,6 @@ static OPENTYPE_FEATURE_RECORD mongolian_features[] =
typedef struct ScriptShapeDataTag {
TEXTRANGE_PROPERTIES defaultTextRange;
const char** requiredFeatures;
CHAR otTag[5];
CHAR newOtTag[5];
ContextualShapingProc contextProc;
ShapeCharGlyphPropProc charGlyphPropProc;
@ -637,90 +636,92 @@ typedef struct ScriptShapeDataTag {
/* in order of scripts */
static const ScriptShapeData ShapingData[] =
{
{{ standard_features, 2}, NULL, "", "", NULL, NULL},
{{ latin_features, 2}, NULL, "latn", "", NULL, NULL},
{{ latin_features, 2}, NULL, "latn", "", NULL, NULL},
{{ latin_features, 2}, NULL, "latn", "", NULL, NULL},
{{ standard_features, 2}, NULL, "" , "", NULL, NULL},
{{ latin_features, 2}, NULL, "latn", "", NULL, NULL},
{{ arabic_features, 6}, required_arabic_features, "arab", "", ContextualShape_Arabic, ShapeCharGlyphProp_Arabic},
{{ arabic_features, 6}, required_arabic_features, "arab", "", ContextualShape_Arabic, ShapeCharGlyphProp_Arabic},
{{ hebrew_features, 1}, NULL, "hebr", "", NULL, NULL},
{{ syriac_features, 4}, required_syriac_features, "syrc", "", ContextualShape_Syriac, ShapeCharGlyphProp_None},
{{ arabic_features, 6}, required_arabic_features, "arab", "", ContextualShape_Arabic, ShapeCharGlyphProp_Arabic},
{{ NULL, 0}, NULL, "thaa", "", NULL, ShapeCharGlyphProp_None},
{{ standard_features, 2}, NULL, "grek", "", NULL, NULL},
{{ standard_features, 2}, NULL, "cyrl", "", NULL, NULL},
{{ standard_features, 2}, NULL, "armn", "", NULL, NULL},
{{ standard_features, 2}, NULL, "geor", "", NULL, NULL},
{{ sinhala_features, 3}, NULL, "sinh", "", ContextualShape_Sinhala, ShapeCharGlyphProp_Sinhala},
{{ tibetan_features, 2}, NULL, "tibt", "", NULL, ShapeCharGlyphProp_Tibet},
{{ tibetan_features, 2}, NULL, "tibt", "", NULL, ShapeCharGlyphProp_Tibet},
{{ phags_features, 3}, NULL, "phag", "", ContextualShape_Phags_pa, ShapeCharGlyphProp_Thai},
{{ thai_features, 1}, NULL, "thai", "", NULL, ShapeCharGlyphProp_Thai},
{{ thai_features, 1}, NULL, "thai", "", NULL, ShapeCharGlyphProp_Thai},
{{ thai_features, 1}, required_lao_features, "lao", "", NULL, ShapeCharGlyphProp_Thai},
{{ thai_features, 1}, required_lao_features, "lao", "", NULL, ShapeCharGlyphProp_Thai},
{{ devanagari_features, 6}, required_devanagari_features, "deva", "dev2", ContextualShape_Devanagari, ShapeCharGlyphProp_Devanagari},
{{ devanagari_features, 6}, required_devanagari_features, "deva", "dev2", ContextualShape_Devanagari, ShapeCharGlyphProp_Devanagari},
{{ devanagari_features, 6}, required_bengali_features, "beng", "bng2", ContextualShape_Bengali, ShapeCharGlyphProp_Bengali},
{{ devanagari_features, 6}, required_bengali_features, "beng", "bng2", ContextualShape_Bengali, ShapeCharGlyphProp_Bengali},
{{ devanagari_features, 6}, required_bengali_features, "beng", "bng2", ContextualShape_Bengali, ShapeCharGlyphProp_Bengali},
{{ devanagari_features, 6}, required_gurmukhi_features, "guru", "gur2", ContextualShape_Gurmukhi, ShapeCharGlyphProp_Gurmukhi},
{{ devanagari_features, 6}, required_gurmukhi_features, "guru", "gur2", ContextualShape_Gurmukhi, ShapeCharGlyphProp_Gurmukhi},
{{ devanagari_features, 6}, required_devanagari_features, "gujr", "gjr2", ContextualShape_Gujarati, ShapeCharGlyphProp_Gujarati},
{{ devanagari_features, 6}, required_devanagari_features, "gujr", "gjr2", ContextualShape_Gujarati, ShapeCharGlyphProp_Gujarati},
{{ devanagari_features, 6}, required_devanagari_features, "gujr", "gjr2", ContextualShape_Gujarati, ShapeCharGlyphProp_Gujarati},
{{ devanagari_features, 6}, required_oriya_features, "orya", "ory2", ContextualShape_Oriya, ShapeCharGlyphProp_Oriya},
{{ devanagari_features, 6}, required_oriya_features, "orya", "ory2", ContextualShape_Oriya, ShapeCharGlyphProp_Oriya},
{{ devanagari_features, 6}, required_tamil_features, "taml", "tam2", ContextualShape_Tamil, ShapeCharGlyphProp_Tamil},
{{ devanagari_features, 6}, required_tamil_features, "taml", "tam2", ContextualShape_Tamil, ShapeCharGlyphProp_Tamil},
{{ devanagari_features, 6}, required_telugu_features, "telu", "tel2", ContextualShape_Telugu, ShapeCharGlyphProp_Telugu},
{{ devanagari_features, 6}, required_telugu_features, "telu", "tel2", ContextualShape_Telugu, ShapeCharGlyphProp_Telugu},
{{ devanagari_features, 6}, required_telugu_features, "knda", "knd2", ContextualShape_Kannada, ShapeCharGlyphProp_Kannada},
{{ devanagari_features, 6}, required_telugu_features, "knda", "knd2", ContextualShape_Kannada, ShapeCharGlyphProp_Kannada},
{{ devanagari_features, 6}, required_telugu_features, "mlym", "mlm2", ContextualShape_Malayalam, ShapeCharGlyphProp_Malayalam},
{{ devanagari_features, 6}, required_telugu_features, "mlym", "mlm2", ContextualShape_Malayalam, ShapeCharGlyphProp_Malayalam},
{{ standard_features, 2}, NULL, "" , "", NULL, NULL},
{{ latin_features, 2}, NULL, "latn" , "", NULL, NULL},
{{ standard_features, 2}, NULL, "" , "", NULL, NULL},
{{ myanmar_features, 2}, NULL, "mymr", "", NULL, NULL},
{{ myanmar_features, 2}, NULL, "mymr", "", NULL, NULL},
{{ standard_features, 2}, NULL, "tale", "", NULL, NULL},
{{ standard_features, 2}, NULL, "talu", "", NULL, NULL},
{{ standard_features, 2}, NULL, "talu", "", NULL, NULL},
{{ khmer_features, 5}, required_khmer_features, "khmr", "", ContextualShape_Khmer, ShapeCharGlyphProp_Khmer},
{{ khmer_features, 5}, required_khmer_features, "khmr", "", ContextualShape_Khmer, ShapeCharGlyphProp_Khmer},
{{ no_features, 0}, NULL, "hani", "", NULL, NULL},
{{ no_features, 0}, NULL, "hani", "", NULL, NULL},
{{ no_features, 0}, NULL, "bopo", "", NULL, NULL},
{{ no_features, 0}, NULL, "kana", "", NULL, NULL},
{{ no_features, 0}, NULL, "hang", "", NULL, NULL},
{{ no_features, 0}, NULL, "yi ", "", NULL, NULL},
{{ ethiopic_features, 4}, NULL, "ethi", "", NULL, NULL},
{{ ethiopic_features, 4}, NULL, "ethi", "", NULL, NULL},
{{ mongolian_features, 4}, NULL, "mong", "", ContextualShape_Mongolian, NULL},
{{ mongolian_features, 4}, NULL, "mong", "", ContextualShape_Mongolian, NULL},
{{ no_features, 0}, NULL, "tfng", "", NULL, NULL},
{{ no_features, 0}, NULL, "nko ", "", NULL, NULL},
{{ no_features, 0}, NULL, "vai ", "", NULL, NULL},
{{ no_features, 0}, NULL, "vai ", "", NULL, NULL},
{{ no_features, 0}, NULL, "cher", "", NULL, NULL},
{{ no_features, 0}, NULL, "cans", "", NULL, NULL},
{{ no_features, 0}, NULL, "ogam", "", NULL, NULL},
{{ no_features, 0}, NULL, "runr", "", NULL, NULL},
{{ no_features, 0}, NULL, "brai", "", NULL, NULL},
{{ no_features, 0}, NULL, "", "", NULL, NULL},
{{ no_features, 0}, NULL, "", "", NULL, NULL},
{{ no_features, 0}, NULL, "dsrt", "", NULL, NULL},
{{ no_features, 0}, NULL, "osma", "", NULL, NULL},
{{ no_features, 0}, NULL, "osma", "", NULL, NULL},
{{ no_features, 0}, NULL, "math", "", NULL, NULL},
{{ hebrew_features, 1}, NULL, "hebr", "", NULL, NULL},
{{ latin_features, 2}, NULL, "latn" , "", NULL, NULL},
{{ thai_features, 1}, NULL, "thai", "", NULL, ShapeCharGlyphProp_Thai},
{{ standard_features, 2}, NULL, "", NULL, NULL},
{{ latin_features, 2}, NULL, "", NULL, NULL},
{{ latin_features, 2}, NULL, "", NULL, NULL},
{{ latin_features, 2}, NULL, "", NULL, NULL},
{{ standard_features, 2}, NULL, "", NULL, NULL},
{{ latin_features, 2}, NULL, "", NULL, NULL},
{{ arabic_features, 6}, required_arabic_features, "", ContextualShape_Arabic, ShapeCharGlyphProp_Arabic},
{{ arabic_features, 6}, required_arabic_features, "", ContextualShape_Arabic, ShapeCharGlyphProp_Arabic},
{{ hebrew_features, 1}, NULL, "", NULL, NULL},
{{ syriac_features, 4}, required_syriac_features, "", ContextualShape_Syriac, ShapeCharGlyphProp_None},
{{ arabic_features, 6}, required_arabic_features, "", ContextualShape_Arabic, ShapeCharGlyphProp_Arabic},
{{ NULL, 0}, NULL, "", NULL, ShapeCharGlyphProp_None},
{{ standard_features, 2}, NULL, "", NULL, NULL},
{{ standard_features, 2}, NULL, "", NULL, NULL},
{{ standard_features, 2}, NULL, "", NULL, NULL},
{{ standard_features, 2}, NULL, "", NULL, NULL},
{{ sinhala_features, 3}, NULL, "", ContextualShape_Sinhala, ShapeCharGlyphProp_Sinhala},
{{ tibetan_features, 2}, NULL, "", NULL, ShapeCharGlyphProp_Tibet},
{{ tibetan_features, 2}, NULL, "", NULL, ShapeCharGlyphProp_Tibet},
{{ phags_features, 3}, NULL, "", ContextualShape_Phags_pa, ShapeCharGlyphProp_Thai},
{{ thai_features, 1}, NULL, "", NULL, ShapeCharGlyphProp_Thai},
{{ thai_features, 1}, NULL, "", NULL, ShapeCharGlyphProp_Thai},
{{ thai_features, 1}, required_lao_features, "", NULL, ShapeCharGlyphProp_Thai},
{{ thai_features, 1}, required_lao_features, "", NULL, ShapeCharGlyphProp_Thai},
{{ devanagari_features, 6}, required_devanagari_features, "dev2", ContextualShape_Devanagari, ShapeCharGlyphProp_Devanagari},
{{ devanagari_features, 6}, required_devanagari_features, "dev2", ContextualShape_Devanagari, ShapeCharGlyphProp_Devanagari},
{{ devanagari_features, 6}, required_bengali_features, "bng2", ContextualShape_Bengali, ShapeCharGlyphProp_Bengali},
{{ devanagari_features, 6}, required_bengali_features, "bng2", ContextualShape_Bengali, ShapeCharGlyphProp_Bengali},
{{ devanagari_features, 6}, required_bengali_features, "bng2", ContextualShape_Bengali, ShapeCharGlyphProp_Bengali},
{{ devanagari_features, 6}, required_gurmukhi_features, "gur2", ContextualShape_Gurmukhi, ShapeCharGlyphProp_Gurmukhi},
{{ devanagari_features, 6}, required_gurmukhi_features, "gur2", ContextualShape_Gurmukhi, ShapeCharGlyphProp_Gurmukhi},
{{ devanagari_features, 6}, required_devanagari_features, "gjr2", ContextualShape_Gujarati, ShapeCharGlyphProp_Gujarati},
{{ devanagari_features, 6}, required_devanagari_features, "gjr2", ContextualShape_Gujarati, ShapeCharGlyphProp_Gujarati},
{{ devanagari_features, 6}, required_devanagari_features, "gjr2", ContextualShape_Gujarati, ShapeCharGlyphProp_Gujarati},
{{ devanagari_features, 6}, required_oriya_features, "ory2", ContextualShape_Oriya, ShapeCharGlyphProp_Oriya},
{{ devanagari_features, 6}, required_oriya_features, "ory2", ContextualShape_Oriya, ShapeCharGlyphProp_Oriya},
{{ devanagari_features, 6}, required_tamil_features, "tam2", ContextualShape_Tamil, ShapeCharGlyphProp_Tamil},
{{ devanagari_features, 6}, required_tamil_features, "tam2", ContextualShape_Tamil, ShapeCharGlyphProp_Tamil},
{{ devanagari_features, 6}, required_telugu_features, "tel2", ContextualShape_Telugu, ShapeCharGlyphProp_Telugu},
{{ devanagari_features, 6}, required_telugu_features, "tel2", ContextualShape_Telugu, ShapeCharGlyphProp_Telugu},
{{ devanagari_features, 6}, required_telugu_features, "knd2", ContextualShape_Kannada, ShapeCharGlyphProp_Kannada},
{{ devanagari_features, 6}, required_telugu_features, "knd2", ContextualShape_Kannada, ShapeCharGlyphProp_Kannada},
{{ devanagari_features, 6}, required_telugu_features, "mlm2", ContextualShape_Malayalam, ShapeCharGlyphProp_Malayalam},
{{ devanagari_features, 6}, required_telugu_features, "mlm2", ContextualShape_Malayalam, ShapeCharGlyphProp_Malayalam},
{{ standard_features, 2}, NULL, "", NULL, NULL},
{{ latin_features, 2}, NULL, "", NULL, NULL},
{{ standard_features, 2}, NULL, "", NULL, NULL},
{{ myanmar_features, 2}, NULL, "", NULL, NULL},
{{ myanmar_features, 2}, NULL, "", NULL, NULL},
{{ standard_features, 2}, NULL, "", NULL, NULL},
{{ standard_features, 2}, NULL, "", NULL, NULL},
{{ standard_features, 2}, NULL, "", NULL, NULL},
{{ khmer_features, 5}, required_khmer_features, "", ContextualShape_Khmer, ShapeCharGlyphProp_Khmer},
{{ khmer_features, 5}, required_khmer_features, "", ContextualShape_Khmer, ShapeCharGlyphProp_Khmer},
{{ no_features, 0}, NULL, "", NULL, NULL},
{{ no_features, 0}, NULL, "", NULL, NULL},
{{ no_features, 0}, NULL, "", NULL, NULL},
{{ no_features, 0}, NULL, "", NULL, NULL},
{{ no_features, 0}, NULL, "", NULL, NULL},
{{ no_features, 0}, NULL, "", NULL, NULL},
{{ ethiopic_features, 4}, NULL, "", NULL, NULL},
{{ ethiopic_features, 4}, NULL, "", NULL, NULL},
{{ mongolian_features, 4}, NULL, "", ContextualShape_Mongolian, NULL},
{{ mongolian_features, 4}, NULL, "", ContextualShape_Mongolian, NULL},
{{ no_features, 0}, NULL, "", NULL, NULL},
{{ no_features, 0}, NULL, "", NULL, NULL},
{{ no_features, 0}, NULL, "", NULL, NULL},
{{ no_features, 0}, NULL, "", NULL, NULL},
{{ no_features, 0}, NULL, "", NULL, NULL},
{{ no_features, 0}, NULL, "", NULL, NULL},
{{ no_features, 0}, NULL, "", NULL, NULL},
{{ no_features, 0}, NULL, "", NULL, NULL},
{{ no_features, 0}, NULL, "", NULL, NULL},
{{ no_features, 0}, NULL, "", NULL, NULL},
{{ no_features, 0}, NULL, "", NULL, NULL},
{{ no_features, 0}, NULL, "", NULL, NULL},
{{ no_features, 0}, NULL, "", NULL, NULL},
{{ no_features, 0}, NULL, "", NULL, NULL},
{{ no_features, 0}, NULL, "", NULL, NULL},
{{ hebrew_features, 1}, NULL, "", NULL, NULL},
{{ latin_features, 2}, NULL, "", NULL, NULL},
{{ thai_features, 1}, NULL, "", NULL, ShapeCharGlyphProp_Thai},
};
extern scriptData scriptInformation[];
static INT GSUB_is_glyph_covered(LPCVOID table , UINT glyph)
{
const GSUB_CoverageFormat1* cf1;
@ -1164,7 +1165,7 @@ static OPENTYPE_TAG get_opentype_script(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCac
if (psc->userScript != 0)
{
if (tryNew && ShapingData[psa->eScript].newOtTag[0] != 0 && strncmp((char*)&psc->userScript,ShapingData[psa->eScript].otTag,4)==0)
if (tryNew && ShapingData[psa->eScript].newOtTag[0] != 0 && psc->userScript == scriptInformation[psa->eScript].scriptTag)
return MS_MAKE_TAG(ShapingData[psa->eScript].newOtTag[0], ShapingData[psa->eScript].newOtTag[1], ShapingData[psa->eScript].newOtTag[2], ShapingData[psa->eScript].newOtTag[3]);
else
return psc->userScript;
@ -1173,8 +1174,8 @@ static OPENTYPE_TAG get_opentype_script(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCac
if (tryNew && ShapingData[psa->eScript].newOtTag[0] != 0)
return MS_MAKE_TAG(ShapingData[psa->eScript].newOtTag[0], ShapingData[psa->eScript].newOtTag[1], ShapingData[psa->eScript].newOtTag[2], ShapingData[psa->eScript].newOtTag[3]);
if (ShapingData[psa->eScript].otTag[0] != 0)
return MS_MAKE_TAG(ShapingData[psa->eScript].otTag[0], ShapingData[psa->eScript].otTag[1], ShapingData[psa->eScript].otTag[2], ShapingData[psa->eScript].otTag[3]);
if (scriptInformation[psa->eScript].scriptTag)
return scriptInformation[psa->eScript].scriptTag;
/*
* fall back to the font charset
@ -3831,11 +3832,8 @@ HRESULT SHAPE_GetFontScriptTags( HDC hdc, ScriptCache *psc,
if (!psc->GSUB_Table)
psc->GSUB_Table = load_gsub_table(hdc);
if (psa)
{
if (ShapingData[psa->eScript].otTag[0] != 0)
searching = MS_MAKE_TAG(ShapingData[psa->eScript].otTag[0], ShapingData[psa->eScript].otTag[1], ShapingData[psa->eScript].otTag[2], ShapingData[psa->eScript].otTag[3]);
}
if (psa && scriptInformation[psa->eScript].scriptTag)
searching = scriptInformation[psa->eScript].scriptTag;
hr = GSUB_GetFontScriptTags(psc, searching, cMaxTags, pScriptTags, pcTags, NULL);
if (FAILED(hr))

View File

@ -298,16 +298,8 @@ static const scriptRange scriptRanges[] = {
{ SCRIPT_UNDEFINED, 0, 0, 0}
};
typedef struct _scriptData
{
SCRIPT_ANALYSIS a;
SCRIPT_PROPERTIES props;
OPENTYPE_TAG scriptTag;
WCHAR fallbackFont[LF_FACESIZE];
} scriptData;
/* the must be in order so that the index matches the Script value */
static const scriptData scriptInformation[] = {
const scriptData scriptInformation[] = {
{{SCRIPT_UNDEFINED, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
{LANG_NEUTRAL, 0, 0, 0, 0, ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
0x00000000,

View File

@ -155,6 +155,14 @@ typedef struct {
OPENTYPE_TAG userLang;
} ScriptCache;
typedef struct _scriptData
{
SCRIPT_ANALYSIS a;
SCRIPT_PROPERTIES props;
OPENTYPE_TAG scriptTag;
WCHAR fallbackFont[LF_FACESIZE];
} scriptData;
typedef struct {
INT start;
INT base;