diff --git a/dlls/usp10/shape.c b/dlls/usp10/shape.c index fcbf92caa06..b234b115cd7 100644 --- a/dlls/usp10/shape.c +++ b/dlls/usp10/shape.c @@ -712,6 +712,8 @@ static const ScriptShapeData ShapingData[] = {{ 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}, }; 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 96510006b80..69083b33a6a 100644 --- a/dlls/usp10/tests/usp10.c +++ b/dlls/usp10/tests/usp10.c @@ -169,6 +169,7 @@ static inline void _test_items_ok(LPCWSTR string, DWORD cchString, #define runr_tag MS_MAKE_TAG('r','u','n','r') #define brai_tag MS_MAKE_TAG('b','r','a','i') #define dsrt_tag MS_MAKE_TAG('d','s','r','t') +#define osma_tag MS_MAKE_TAG('o','s','m','a') static void test_ScriptItemize( void ) { @@ -440,6 +441,11 @@ static void test_ScriptItemize( void ) static const itemTest t451[2] = {{{0,0,0,0,0},0,0,0,0,dsrt_tag,TRUE,{-1,-1,-1,-1,0x0}},{{0,0,0,0,0},24,0,0,0,-1,FALSE}}; static const itemTest t452[2] = {{{0,0,0,0,0},0,0,0,2,dsrt_tag,TRUE,{-1,1,1,1,0x0}},{{0,0,0,0,0},24,0,0,0,-1,FALSE}}; + /* Osmanya */ + static const WCHAR test46[] = {0xd801,0xdc8b,0xd801,0xdc98,0xd801,0xdc88,0xd801,0xdc91,0xd801,0xdc9b,0xd801,0xdc92,0xd801,0xdc95,0xd801,0xdc80}; + static const itemTest t461[2] = {{{0,0,0,0,0},0,0,0,0,osma_tag,TRUE,{-1,-1,-1,-1,0x0}},{{0,0,0,0,0},16,0,0,0,-1,FALSE}}; + static const itemTest t462[2] = {{{0,0,0,0,0},0,0,0,2,osma_tag,TRUE,{-1,1,1,1,0x0}},{{0,0,0,0,0},16,0,0,0,-1,FALSE}}; + SCRIPT_ITEM items[15]; SCRIPT_CONTROL Control; SCRIPT_STATE State; @@ -518,6 +524,7 @@ static void test_ScriptItemize( void ) test_items_ok(test43,7,NULL,NULL,1,t431,FALSE,0); test_items_ok(test44,4,NULL,NULL,2,t441,FALSE,0); test_items_ok(test45,24,NULL,NULL,1,t451,FALSE,0); + test_items_ok(test46,16,NULL,NULL,1,t461,FALSE,0); State.uBidiLevel = 0; test_items_ok(test1,4,&Control,&State,1,t11,FALSE,0); @@ -570,6 +577,7 @@ static void test_ScriptItemize( void ) test_items_ok(test43,7,&Control,&State,1,t431,FALSE,0); test_items_ok(test44,4,&Control,&State,2,t441,FALSE,0); test_items_ok(test45,24,&Control,&State,1,t451,FALSE,0); + test_items_ok(test46,16,&Control,&State,1,t461,FALSE,0); State.uBidiLevel = 1; test_items_ok(test1,4,&Control,&State,1,t12,FALSE,0); @@ -622,6 +630,7 @@ static void test_ScriptItemize( void ) test_items_ok(test43,7,&Control,&State,1,t432,FALSE,0); test_items_ok(test44,4,&Control,&State,2,t442,FALSE,0); test_items_ok(test45,24,&Control,&State,1,t452,FALSE,0); + test_items_ok(test46,16,&Control,&State,1,t462,FALSE,0); State.uBidiLevel = 1; Control.fMergeNeutralItems = TRUE; @@ -675,6 +684,7 @@ static void test_ScriptItemize( void ) test_items_ok(test43,7,&Control,&State,1,t432,FALSE,0); test_items_ok(test44,4,&Control,&State,2,t442,FALSE,0); test_items_ok(test45,24,&Control,&State,1,t452,FALSE,0); + test_items_ok(test46,16,&Control,&State,1,t462,FALSE,0); } 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 a05f7b6860a..2a5cb1c8984 100644 --- a/dlls/usp10/usp10.c +++ b/dlls/usp10/usp10.c @@ -290,6 +290,8 @@ static const scriptRange scriptRanges[] = { /* Plane - 1 */ /* Deseret: U+10400–U+1044F */ { Script_Deseret, 0x10400, 0x1044F, 0, 0}, + /* Osmanya: U+10480–U+104AF */ + { Script_Osmanya, 0x10480, 0x104AF, Script_Osmanya_Numeric, 0}, /* END */ { SCRIPT_UNDEFINED, 0, 0, 0} }; @@ -608,6 +610,14 @@ static const scriptData scriptInformation[] = { {0, 0, 1, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0}, MS_MAKE_TAG('d','s','r','t'), {'S','e','g','o','e',' ','U','I',' ','S','y','m','b','o','l'}}, + {{Script_Osmanya, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}}, + {0, 0, 1, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + MS_MAKE_TAG('o','s','m','a'), + {'E','b','r','i','m','a'}}, + {{Script_Osmanya_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}}, + {0, 1, 1, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + MS_MAKE_TAG('o','s','m','a'), + {'E','b','r','i','m','a'}}, }; static const SCRIPT_PROPERTIES *script_props[] = @@ -649,7 +659,8 @@ static const SCRIPT_PROPERTIES *script_props[] = &scriptInformation[68].props, &scriptInformation[69].props, &scriptInformation[70].props, &scriptInformation[71].props, &scriptInformation[72].props, &scriptInformation[73].props, - &scriptInformation[74].props, &scriptInformation[75].props + &scriptInformation[74].props, &scriptInformation[75].props, + &scriptInformation[76].props, &scriptInformation[77].props }; typedef struct { diff --git a/dlls/usp10/usp10_internal.h b/dlls/usp10/usp10_internal.h index 1d88ee15d1b..6c93ba6d22a 100644 --- a/dlls/usp10/usp10_internal.h +++ b/dlls/usp10/usp10_internal.h @@ -111,6 +111,8 @@ #define Script_Private 74 /* Unicode Chapter 13 : Plane 1 */ #define Script_Deseret 75 +#define Script_Osmanya 76 +#define Script_Osmanya_Numeric 77 #define GLYPH_BLOCK_SHIFT 8 #define GLYPH_BLOCK_SIZE (1UL << GLYPH_BLOCK_SHIFT)