Module: wine Branch: master Commit: a65c818ca02a024170a55775480e0e1e0179f3da URL: http://source.winehq.org/git/wine.git/?a=commit;h=a65c818ca02a024170a5577548...
Author: Aric Stewart aric@codeweavers.com Date: Wed Dec 14 07:27:38 2011 -0600
usp10: Add Ethiopic script.
---
dlls/usp10/shape.c | 10 ++++++++++ dlls/usp10/tests/usp10.c | 10 ++++++++++ dlls/usp10/usp10.c | 16 +++++++++++++++- dlls/usp10/usp10_internal.h | 3 +++ 4 files changed, 38 insertions(+), 1 deletions(-)
diff --git a/dlls/usp10/shape.c b/dlls/usp10/shape.c index 4b399d7..578f7ce 100644 --- a/dlls/usp10/shape.c +++ b/dlls/usp10/shape.c @@ -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) diff --git a/dlls/usp10/tests/usp10.c b/dlls/usp10/tests/usp10.c index b2538f8..1af5695 100644 --- a/dlls/usp10/tests/usp10.c +++ b/dlls/usp10/tests/usp10.c @@ -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, diff --git a/dlls/usp10/usp10.c b/dlls/usp10/usp10.c index 71888db..3a1ff9f 100644 --- a/dlls/usp10/usp10.c +++ b/dlls/usp10/usp10.c @@ -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 { diff --git a/dlls/usp10/usp10_internal.h b/dlls/usp10/usp10_internal.h index 563323e..aa72f08 100644 --- a/dlls/usp10/usp10_internal.h +++ b/dlls/usp10/usp10_internal.h @@ -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)