Commit a65c818c authored by Aric Stewart's avatar Aric Stewart Committed by Alexandre Julliard

usp10: Add Ethiopic script.

parent fe7652d0
......@@ -573,6 +573,14 @@ static const char* required_khmer_features[] =
static OPENTYPE_FEATURE_RECORD no_features[] =
{ };
static OPENTYPE_FEATURE_RECORD ethiopic_features[] =
{
{ MS_MAKE_TAG('c','c','m','p'), 1},
{ MS_MAKE_TAG('l','o','c','l'), 1},
{ MS_MAKE_TAG('c','a','l','t'), 1},
{ MS_MAKE_TAG('l','i','g','a'), 1},
};
typedef struct ScriptShapeDataTag {
TEXTRANGE_PROPERTIES defaultTextRange;
const char** requiredFeatures;
......@@ -645,6 +653,8 @@ static const ScriptShapeData ShapingData[] =
{{ 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},
};
static INT GSUB_is_glyph_covered(LPCVOID table , UINT glyph)
......
......@@ -158,6 +158,7 @@ static inline void _test_items_ok(LPCWSTR string, DWORD cchString,
#define kana_tag MS_MAKE_TAG('k','a','n','a')
#define hang_tag MS_MAKE_TAG('h','a','n','g')
#define yi_tag MS_MAKE_TAG('y','i',' ',' ')
#define ethi_tag MS_MAKE_TAG('e','t','h','i')
static void test_ScriptItemize( void )
{
......@@ -357,6 +358,11 @@ static void test_ScriptItemize( void )
static const itemTest t331[2] = {{{0,0,0,0,0},0,0,0,0,yi_tag,FALSE},{{0,0,0,0,0},4,0,0,0,-1,FALSE}};
static const itemTest t332[2] = {{{0,0,0,0,0},0,0,0,2,yi_tag,FALSE},{{0,0,0,0,0},4,0,0,0,-1,FALSE}};
/* Ethiopic */
static const WCHAR test34[] = {0x130d,0x12d5,0x12dd};
static const itemTest t341[2] = {{{0,0,0,0,0},0,0,0,0,ethi_tag,FALSE},{{0,0,0,0,0},3,0,0,0,-1,FALSE}};
static const itemTest t342[2] = {{{0,0,0,0,0},0,0,0,2,ethi_tag,FALSE},{{0,0,0,0,0},3,0,0,0,-1,FALSE}};
SCRIPT_ITEM items[15];
SCRIPT_CONTROL Control;
SCRIPT_STATE State;
......@@ -423,6 +429,7 @@ static void test_ScriptItemize( void )
test_items_ok(test31,8,NULL,NULL,1,t311,FALSE,2);
test_items_ok(test32,3,NULL,NULL,1,t321,FALSE,0);
test_items_ok(test33,4,NULL,NULL,1,t331,FALSE,0);
test_items_ok(test34,3,NULL,NULL,1,t341,FALSE,0);
State.uBidiLevel = 0;
test_items_ok(test1,4,&Control,&State,1,t11,FALSE,0);
......@@ -463,6 +470,7 @@ static void test_ScriptItemize( void )
test_items_ok(test31,8,&Control,&State,1,t311,FALSE,2);
test_items_ok(test32,3,&Control,&State,1,t321,FALSE,0);
test_items_ok(test33,4,&Control,&State,1,t331,FALSE,0);
test_items_ok(test34,3,&Control,&State,1,t341,FALSE,0);
State.uBidiLevel = 1;
test_items_ok(test1,4,&Control,&State,1,t12,FALSE,0);
......@@ -503,6 +511,7 @@ static void test_ScriptItemize( void )
test_items_ok(test31,8,&Control,&State,1,t312,FALSE,2);
test_items_ok(test32,3,&Control,&State,1,t322,FALSE,0);
test_items_ok(test33,4,&Control,&State,1,t332,FALSE,0);
test_items_ok(test34,3,&Control,&State,1,t342,FALSE,2);
State.uBidiLevel = 1;
Control.fMergeNeutralItems = TRUE;
......@@ -544,6 +553,7 @@ static void test_ScriptItemize( void )
test_items_ok(test31,8,&Control,&State,1,t312,FALSE,2);
test_items_ok(test32,3,&Control,&State,1,t322,FALSE,0);
test_items_ok(test33,4,&Control,&State,1,t332,FALSE,0);
test_items_ok(test34,3,&Control,&State,1,t342,FALSE,2);
}
static inline void _test_shape_ok(int valid, HDC hdc, LPCWSTR string,
......
......@@ -113,6 +113,9 @@ static const scriptRange scriptRanges[] = {
{ Script_Georgian, 0x10a0, 0x10ff, 0, 0},
/* Hangul Jamo: U+1100–U+11FF */
{ Script_Hangul, 0x1100, 0x11ff, 0, 0},
/* Ethiopic: U+1200–U+137F */
/* Ethiopic Extensions: U+1380–U+139F */
{ Script_Ethiopic, 0x1200, 0x139f, 0, 0},
/* Khmer: U+1780–U+17FF */
{ Script_Khmer, 0x1780, 0x17ff, Script_Khmer_Numeric, 0},
/* Tai Le: U+1950–U+197F */
......@@ -166,6 +169,8 @@ static const scriptRange scriptRanges[] = {
{ Script_Latin, 0x2c60, 0x2c7f, 0, 0},
/* Georgian: U+2D00–U+2D2F */
{ Script_Georgian, 0x2d00, 0x2d2f, 0, 0},
/* Ethiopic Extensions: U+2D80–U+2DDF */
{ Script_Ethiopic, 0x2d80, 0x2ddf, 0, 0},
/* Cyrillic Extended-A: U+2DE0–U+2DFF */
{ Script_Cyrillic, 0x2de0, 0x2dff, 0, 0},
/* CJK Radicals Supplement: U+2E80–U+2EFF */
......@@ -509,6 +514,14 @@ static const scriptData scriptInformation[] = {
{LANG_ENGLISH, 0, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
MS_MAKE_TAG('y','i',' ',' '),
{'M','i','c','r','o','s','o','f','t',' ','Y','i',' ','B','a','i','t','i'}},
{{Script_Ethiopic, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
{0x5e, 0, 1, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
MS_MAKE_TAG('e','t','h','i'),
{'N','y','a','l','a'}},
{{Script_Ethiopic_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
{0x5e, 1, 1, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
MS_MAKE_TAG('e','t','h','i'),
{'N','y','a','l','a'}},
};
static const SCRIPT_PROPERTIES *script_props[] =
......@@ -542,7 +555,8 @@ static const SCRIPT_PROPERTIES *script_props[] =
&scriptInformation[52].props, &scriptInformation[53].props,
&scriptInformation[54].props, &scriptInformation[55].props,
&scriptInformation[56].props, &scriptInformation[57].props,
&scriptInformation[58].props, &scriptInformation[59].props
&scriptInformation[58].props, &scriptInformation[59].props,
&scriptInformation[60].props, &scriptInformation[61].props
};
typedef struct {
......
......@@ -90,6 +90,9 @@
#define Script_Kana 57
#define Script_Hangul 58
#define Script_Yi 59
/* Unicode Chapter 13 */
#define Script_Ethiopic 60
#define Script_Ethiopic_Numeric 61
#define GLYPH_BLOCK_SHIFT 8
#define GLYPH_BLOCK_SIZE (1UL << GLYPH_BLOCK_SHIFT)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment