mirror of
https://github.com/reactos/wine.git
synced 2024-11-26 13:10:28 +00:00
usp10: Group the GDEF table loading with the other opentype tables.
This commit is contained in:
parent
9f18a03b14
commit
287243a9b9
@ -76,8 +76,6 @@ typedef struct {
|
||||
} CMAP_SegmentedCoverage;
|
||||
|
||||
/* These are all structures needed for the GDEF table */
|
||||
#define GDEF_TAG MS_MAKE_TAG('G', 'D', 'E', 'F')
|
||||
|
||||
enum {BaseGlyph=1, LigatureGlyph, MarkGlyph, ComponentGlyph};
|
||||
|
||||
typedef struct {
|
||||
@ -609,27 +607,11 @@ static WORD OT_get_glyph_class(const void *table, WORD glyph)
|
||||
return class;
|
||||
}
|
||||
|
||||
static VOID *load_gdef_table(HDC hdc)
|
||||
{
|
||||
VOID* GDEF_Table = NULL;
|
||||
int length = GetFontData(hdc, GDEF_TAG , 0, NULL, 0);
|
||||
if (length != GDI_ERROR)
|
||||
{
|
||||
GDEF_Table = HeapAlloc(GetProcessHeap(),0,length);
|
||||
GetFontData(hdc, GDEF_TAG , 0, GDEF_Table, length);
|
||||
TRACE("Loaded GDEF table of %i bytes\n",length);
|
||||
}
|
||||
return GDEF_Table;
|
||||
}
|
||||
|
||||
void OpenType_GDEF_UpdateGlyphProps(HDC hdc, ScriptCache *psc, const WORD *pwGlyphs, const WORD cGlyphs, WORD* pwLogClust, const WORD cChars, SCRIPT_GLYPHPROP *pGlyphProp)
|
||||
void OpenType_GDEF_UpdateGlyphProps(ScriptCache *psc, const WORD *pwGlyphs, const WORD cGlyphs, WORD* pwLogClust, const WORD cChars, SCRIPT_GLYPHPROP *pGlyphProp)
|
||||
{
|
||||
int i;
|
||||
void *glyph_class_table = NULL;
|
||||
|
||||
if (!psc->GDEF_Table)
|
||||
psc->GDEF_Table = load_gdef_table(hdc);
|
||||
|
||||
if (psc->GDEF_Table)
|
||||
{
|
||||
const GDEF_Header *header = psc->GDEF_Table;
|
||||
|
@ -63,7 +63,7 @@ static void ContextualShape_Mongolian(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS
|
||||
|
||||
typedef VOID (*ShapeCharGlyphPropProc)( HDC , ScriptCache*, SCRIPT_ANALYSIS*, const WCHAR*, const INT, const WORD*, const INT, WORD*, SCRIPT_CHARPROP*, SCRIPT_GLYPHPROP*);
|
||||
|
||||
static void ShapeCharGlyphProp_Default( HDC hdc, ScriptCache* psc, SCRIPT_ANALYSIS* psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD* pwLogClust, SCRIPT_CHARPROP* pCharProp, SCRIPT_GLYPHPROP* pGlyphProp);
|
||||
static void ShapeCharGlyphProp_Default( ScriptCache* psc, SCRIPT_ANALYSIS* psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD* pwLogClust, SCRIPT_CHARPROP* pCharProp, SCRIPT_GLYPHPROP* pGlyphProp);
|
||||
static void ShapeCharGlyphProp_Arabic( HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD *pwLogClust, SCRIPT_CHARPROP* pCharProp, SCRIPT_GLYPHPROP *pGlyphProp );
|
||||
static void ShapeCharGlyphProp_Hebrew( HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD *pwLogClust, SCRIPT_CHARPROP* pCharProp, SCRIPT_GLYPHPROP *pGlyphProp );
|
||||
static void ShapeCharGlyphProp_Thai( HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD *pwLogClust, SCRIPT_CHARPROP *pCharProp, SCRIPT_GLYPHPROP *pGlyphProp );
|
||||
@ -675,12 +675,27 @@ static VOID *load_gpos_table(HDC hdc)
|
||||
return GPOS_Table;
|
||||
}
|
||||
|
||||
static VOID *load_gdef_table(HDC hdc)
|
||||
{
|
||||
VOID* GDEF_Table = NULL;
|
||||
int length = GetFontData(hdc, MS_MAKE_TAG('G', 'D', 'E', 'F'), 0, NULL, 0);
|
||||
if (length != GDI_ERROR)
|
||||
{
|
||||
GDEF_Table = HeapAlloc(GetProcessHeap(),0,length);
|
||||
GetFontData(hdc, MS_MAKE_TAG('G', 'D', 'E', 'F'), 0, GDEF_Table, length);
|
||||
TRACE("Loaded GDEF table of %i bytes\n",length);
|
||||
}
|
||||
return GDEF_Table;
|
||||
}
|
||||
|
||||
static VOID load_ot_tables(HDC hdc, ScriptCache *psc)
|
||||
{
|
||||
if (!psc->GSUB_Table)
|
||||
psc->GSUB_Table = load_gsub_table(hdc);
|
||||
if (!psc->GPOS_Table)
|
||||
psc->GPOS_Table = load_gpos_table(hdc);
|
||||
if (!psc->GDEF_Table)
|
||||
psc->GDEF_Table = load_gdef_table(hdc);
|
||||
}
|
||||
|
||||
INT SHAPE_does_GSUB_feature_apply_to_chars(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCache* psc, const WCHAR *chars, INT write_dir, INT count, const char* feature)
|
||||
@ -2741,8 +2756,6 @@ static void ContextualShape_Mongolian(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS
|
||||
else
|
||||
dirL = 1;
|
||||
|
||||
load_ot_tables(hdc, psc);
|
||||
|
||||
if (!psc->GSUB_Table)
|
||||
return;
|
||||
|
||||
@ -2785,7 +2798,7 @@ static void ContextualShape_Mongolian(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS
|
||||
HeapFree(GetProcessHeap(),0,context_shape);
|
||||
}
|
||||
|
||||
static void ShapeCharGlyphProp_Default( HDC hdc, ScriptCache* psc, SCRIPT_ANALYSIS* psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD* pwLogClust, SCRIPT_CHARPROP* pCharProp, SCRIPT_GLYPHPROP* pGlyphProp)
|
||||
static void ShapeCharGlyphProp_Default( ScriptCache* psc, SCRIPT_ANALYSIS* psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD* pwLogClust, SCRIPT_CHARPROP* pCharProp, SCRIPT_GLYPHPROP* pGlyphProp)
|
||||
{
|
||||
int i,k;
|
||||
|
||||
@ -2813,7 +2826,7 @@ static void ShapeCharGlyphProp_Default( HDC hdc, ScriptCache* psc, SCRIPT_ANALYS
|
||||
pGlyphProp[i].sva.uJustification = SCRIPT_JUSTIFY_CHARACTER;
|
||||
}
|
||||
|
||||
OpenType_GDEF_UpdateGlyphProps(hdc, psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp);
|
||||
OpenType_GDEF_UpdateGlyphProps(psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp);
|
||||
UpdateClustersFromGlyphProp(cGlyphs, cChars, pwLogClust, pGlyphProp);
|
||||
}
|
||||
|
||||
@ -2922,7 +2935,7 @@ static void ShapeCharGlyphProp_Arabic( HDC hdc, ScriptCache *psc, SCRIPT_ANALYSI
|
||||
pGlyphProp[i].sva.uJustification = SCRIPT_JUSTIFY_NONE;
|
||||
}
|
||||
|
||||
OpenType_GDEF_UpdateGlyphProps(hdc, psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp);
|
||||
OpenType_GDEF_UpdateGlyphProps(psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp);
|
||||
UpdateClustersFromGlyphProp(cGlyphs, cChars, pwLogClust, pGlyphProp);
|
||||
HeapFree(GetProcessHeap(),0,spaces);
|
||||
}
|
||||
@ -2953,7 +2966,7 @@ static void ShapeCharGlyphProp_Hebrew( HDC hdc, ScriptCache *psc, SCRIPT_ANALYSI
|
||||
}
|
||||
}
|
||||
|
||||
OpenType_GDEF_UpdateGlyphProps(hdc, psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp);
|
||||
OpenType_GDEF_UpdateGlyphProps(psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp);
|
||||
UpdateClustersFromGlyphProp(cGlyphs, cChars, pwLogClust, pGlyphProp);
|
||||
}
|
||||
|
||||
@ -2974,7 +2987,7 @@ static void ShapeCharGlyphProp_Thai( HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS
|
||||
dirL = 1;
|
||||
}
|
||||
|
||||
OpenType_GDEF_UpdateGlyphProps(hdc, psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp);
|
||||
OpenType_GDEF_UpdateGlyphProps(psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp);
|
||||
|
||||
for (i = 0; i < cGlyphs; i++)
|
||||
{
|
||||
@ -3042,7 +3055,7 @@ static void ShapeCharGlyphProp_None( HDC hdc, ScriptCache* psc, SCRIPT_ANALYSIS*
|
||||
else
|
||||
pGlyphProp[i].sva.uJustification = SCRIPT_JUSTIFY_NONE;
|
||||
}
|
||||
OpenType_GDEF_UpdateGlyphProps(hdc, psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp);
|
||||
OpenType_GDEF_UpdateGlyphProps(psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp);
|
||||
UpdateClustersFromGlyphProp(cGlyphs, cChars, pwLogClust, pGlyphProp);
|
||||
}
|
||||
|
||||
@ -3073,7 +3086,7 @@ static void ShapeCharGlyphProp_Tibet( HDC hdc, ScriptCache* psc, SCRIPT_ANALYSIS
|
||||
else
|
||||
pGlyphProp[i].sva.uJustification = SCRIPT_JUSTIFY_NONE;
|
||||
}
|
||||
OpenType_GDEF_UpdateGlyphProps(hdc, psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp);
|
||||
OpenType_GDEF_UpdateGlyphProps(psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp);
|
||||
UpdateClustersFromGlyphProp(cGlyphs, cChars, pwLogClust, pGlyphProp);
|
||||
|
||||
/* Tibeten script does not set sva.fDiacritic or sva.fZeroWidth */
|
||||
@ -3091,7 +3104,7 @@ static void ShapeCharGlyphProp_BaseIndic( HDC hdc, ScriptCache *psc, SCRIPT_ANAL
|
||||
{
|
||||
int i,k;
|
||||
|
||||
OpenType_GDEF_UpdateGlyphProps(hdc, psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp);
|
||||
OpenType_GDEF_UpdateGlyphProps(psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp);
|
||||
for (i = 0; i < cGlyphs; i++)
|
||||
{
|
||||
int char_index[20];
|
||||
@ -3235,10 +3248,12 @@ static void ShapeCharGlyphProp_Khmer( HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS
|
||||
|
||||
void SHAPE_CharGlyphProp(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD *pwLogClust, SCRIPT_CHARPROP *pCharProp, SCRIPT_GLYPHPROP *pGlyphProp)
|
||||
{
|
||||
load_ot_tables(hdc, psc);
|
||||
|
||||
if (ShapingData[psa->eScript].charGlyphPropProc)
|
||||
ShapingData[psa->eScript].charGlyphPropProc(hdc, psc, psa, pwcChars, cChars, pwGlyphs, cGlyphs, pwLogClust, pCharProp, pGlyphProp);
|
||||
else
|
||||
ShapeCharGlyphProp_Default(hdc, psc, psa, pwcChars, cChars, pwGlyphs, cGlyphs, pwLogClust, pCharProp, pGlyphProp);
|
||||
ShapeCharGlyphProp_Default(psc, psa, pwcChars, cChars, pwGlyphs, cGlyphs, pwLogClust, pCharProp, pGlyphProp);
|
||||
}
|
||||
|
||||
void SHAPE_ContextualShaping(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, WCHAR* pwcChars, INT cChars, WORD* pwOutGlyphs, INT* pcGlyphs, INT cMaxGlyphs, WORD *pwLogClust)
|
||||
|
@ -242,7 +242,7 @@ void Indic_ParseSyllables( HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCache* psc, LPCW
|
||||
void BREAK_line(const WCHAR *chars, int count, const SCRIPT_ANALYSIS *sa, SCRIPT_LOGATTR *la) DECLSPEC_HIDDEN;
|
||||
|
||||
DWORD OpenType_CMAP_GetGlyphIndex(HDC hdc, ScriptCache *psc, DWORD utf32c, LPWORD pgi, DWORD flags) DECLSPEC_HIDDEN;
|
||||
void OpenType_GDEF_UpdateGlyphProps(HDC hdc, ScriptCache *psc, const WORD *pwGlyphs, const WORD cGlyphs, WORD* pwLogClust, const WORD cChars, SCRIPT_GLYPHPROP *pGlyphProp) DECLSPEC_HIDDEN;
|
||||
void OpenType_GDEF_UpdateGlyphProps(ScriptCache *psc, const WORD *pwGlyphs, const WORD cGlyphs, WORD* pwLogClust, const WORD cChars, SCRIPT_GLYPHPROP *pGlyphProp) DECLSPEC_HIDDEN;
|
||||
INT OpenType_apply_GSUB_lookup(LPCVOID table, INT lookup_index, WORD *glyphs, INT glyph_index, INT write_dir, INT *glyph_count) DECLSPEC_HIDDEN;
|
||||
INT OpenType_apply_GPOS_lookup(LPOUTLINETEXTMETRICW lpotm, LPLOGFONTW lplogfont, const SCRIPT_ANALYSIS *analysis, INT* piAdvance,
|
||||
LPCVOID table, INT lookup_index, const WORD *glyphs, INT glyph_index, INT glyph_count, GOFFSET *pGoffset) DECLSPEC_HIDDEN;
|
||||
|
Loading…
Reference in New Issue
Block a user