Aric Stewart : usp10: Add Ethiopic script.

Alexandre Julliard julliard at winehq.org
Wed Dec 14 13:23:34 CST 2011


Module: wine
Branch: master
Commit: a65c818ca02a024170a55775480e0e1e0179f3da
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=a65c818ca02a024170a55775480e0e1e0179f3da

Author: Aric Stewart <aric at 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)




More information about the wine-cvs mailing list