[PATCH 4/5] usp10: Introduce an enumeration for script types.

Henri Verbeet hverbeet at codeweavers.com
Tue Mar 7 01:57:28 CST 2017


Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
 dlls/usp10/usp10.c          |  51 ++++++------
 dlls/usp10/usp10_internal.h | 192 ++++++++++++++++++++++----------------------
 2 files changed, 123 insertions(+), 120 deletions(-)

diff --git a/dlls/usp10/usp10.c b/dlls/usp10/usp10.c
index 9a558b4..6711347 100644
--- a/dlls/usp10/usp10.c
+++ b/dlls/usp10/usp10.c
@@ -43,16 +43,16 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(uniscribe);
 
-typedef struct _scriptRange
+static const struct
 {
-    WORD script;
+    enum usp10_script script;
     DWORD rangeFirst;
     DWORD rangeLast;
-    WORD numericScript;
-    WORD punctScript;
-} scriptRange;
-
-static const scriptRange scriptRanges[] = {
+    enum usp10_script numericScript;
+    enum usp10_script punctScript;
+}
+scriptRanges[] =
+{
     /* Basic Latin: U+0000–U+007A */
     { Script_Latin,      0x00,   0x07a ,  Script_Numeric, Script_Punctuation},
     /* Latin-1 Supplement: U+0080–U+00FF */
@@ -888,7 +888,8 @@ static inline DWORD decode_surrogate_pair(LPCWSTR str, INT index, INT end)
     return 0;
 }
 
-static WORD get_char_script( LPCWSTR str, INT index, INT end, INT *consumed)
+static enum usp10_script get_char_script(const WCHAR *str, unsigned int index,
+        unsigned int end, unsigned int *consumed)
 {
     static const WCHAR latin_punc[] = {'#','$','&','\'',',',';','<','>','?','@','\\','^','_','`','{','|','}','~', 0x00a0, 0};
     WORD type = 0, type2 = 0;
@@ -1220,12 +1221,12 @@ HRESULT WINAPI ScriptApplyDigitSubstitution(const SCRIPT_DIGITSUBSTITUTE *sds,
     }
 }
 
-static inline BOOL is_indic(WORD script)
+static inline BOOL is_indic(enum usp10_script script)
 {
     return (script >= Script_Devanagari && script <= Script_Malayalam_Numeric);
 }
 
-static inline WORD base_indic(WORD script)
+static inline enum usp10_script base_indic(enum usp10_script script)
 {
     switch (script)
     {
@@ -1250,11 +1251,11 @@ static inline WORD base_indic(WORD script)
         case Script_Malayalam:
         case Script_Malayalam_Numeric: return Script_Malayalam;
         default:
-            return -1;
+            return Script_Undefined;
     };
 }
 
-static BOOL script_is_numeric(WORD script)
+static BOOL script_is_numeric(enum usp10_script script)
 {
     return scriptInformation[script].props.fNumeric;
 }
@@ -1270,21 +1271,21 @@ static HRESULT _ItemizeInternal(const WCHAR *pwcInChars, int cInChars,
 #define ZWNJ 0x200C
 #define ZWJ  0x200D
 
+    enum usp10_script last_indic = Script_Undefined;
     int   cnt = 0, index = 0, str = 0;
-    int   New_Script = -1;
+    enum usp10_script New_Script = -1;
     int   i;
     WORD  *levels = NULL;
     WORD  *layout_levels = NULL;
     WORD  *overrides = NULL;
     WORD  *strength = NULL;
-    WORD  *scripts = NULL;
+    enum usp10_script *scripts;
     WORD  baselevel = 0;
     WORD  baselayout = 0;
     BOOL  new_run;
-    WORD  last_indic = -1;
     WORD layoutRTL = 0;
     BOOL forceLevels = FALSE;
-    INT consumed = 0;
+    unsigned int consumed = 0;
     HRESULT res = E_OUTOFMEMORY;
 
     TRACE("%s,%d,%d,%p,%p,%p,%p\n", debugstr_wn(pwcInChars, cInChars), cInChars, cMaxItems, 
@@ -1293,13 +1294,12 @@ static HRESULT _ItemizeInternal(const WCHAR *pwcInChars, int cInChars,
     if (!pwcInChars || !cInChars || !pItems || cMaxItems < 2)
         return E_INVALIDARG;
 
-    scripts = heap_alloc(cInChars * sizeof(WORD));
-    if (!scripts)
+    if (!(scripts = heap_alloc(cInChars * sizeof(*scripts))))
         return E_OUTOFMEMORY;
 
     for (i = 0; i < cInChars; i++)
     {
-        if (consumed <= 0)
+        if (!consumed)
         {
             scripts[i] = get_char_script(pwcInChars,i,cInChars,&consumed);
             consumed --;
@@ -1311,7 +1311,7 @@ static HRESULT _ItemizeInternal(const WCHAR *pwcInChars, int cInChars,
         }
         /* Devanagari danda (U+0964) and double danda (U+0965) are used for
            all Indic scripts */
-        if ((pwcInChars[i] == 0x964 || pwcInChars[i] ==0x965) && last_indic > 0)
+        if ((pwcInChars[i] == 0x964 || pwcInChars[i] ==0x965) && last_indic != Script_Undefined)
             scripts[i] = last_indic;
         else if (is_indic(scripts[i]))
             last_indic = base_indic(scripts[i]);
@@ -1338,10 +1338,10 @@ static HRESULT _ItemizeInternal(const WCHAR *pwcInChars, int cInChars,
                 {
                     int j;
                     BOOL asian = FALSE;
-                    WORD first_script = scripts[i-1];
+                    enum usp10_script first_script = scripts[i-1];
                     for (j = i-1; j >= 0 &&  scripts[j] == first_script && pwcInChars[j] != Numeric_space; j--)
                     {
-                        WORD original = scripts[j];
+                        enum usp10_script original = scripts[j];
                         if (original == Script_Ideograph || original == Script_Kana || original == Script_Yi || original == Script_CJK_Han || original == Script_Bopomofo)
                         {
                             asian = TRUE;
@@ -1877,7 +1877,7 @@ static BOOL requires_fallback(HDC hdc, SCRIPT_CACHE *psc, SCRIPT_ANALYSIS *psa,
     return FALSE;
 }
 
-static void find_fallback_font(DWORD scriptid, LPWSTR FaceName)
+static void find_fallback_font(enum usp10_script scriptid, WCHAR *FaceName)
 {
     HKEY hkey;
 
@@ -2995,14 +2995,13 @@ HRESULT WINAPI ScriptBreak(const WCHAR *chars, int count, const SCRIPT_ANALYSIS
  */
 HRESULT WINAPI ScriptIsComplex(const WCHAR *chars, int len, DWORD flag)
 {
-    int i;
-    INT consumed = 0;
+    enum usp10_script script;
+    unsigned int i, consumed;
 
     TRACE("(%s,%d,0x%x)\n", debugstr_wn(chars, len), len, flag);
 
     for (i = 0; i < len; i+=consumed)
     {
-        int script;
         if (i >= len)
             break;
 
diff --git a/dlls/usp10/usp10_internal.h b/dlls/usp10/usp10_internal.h
index ccc0f8d..dd1b9fa 100644
--- a/dlls/usp10/usp10_internal.h
+++ b/dlls/usp10/usp10_internal.h
@@ -25,100 +25,104 @@
               (ULONG)_x1         )
 
 
-#define Script_Latin   1
-#define Script_CR      2
-#define Script_Numeric 3
-#define Script_Control 4
-#define Script_Punctuation 5
-#define Script_Arabic  6
-#define Script_Arabic_Numeric  7
-#define Script_Hebrew  8
-#define Script_Syriac  9
-#define Script_Persian 10
-#define Script_Thaana  11
-#define Script_Greek   12
-#define Script_Cyrillic   13
-#define Script_Armenian 14
-#define Script_Georgian 15
-/* Unicode Chapter 10 */
-#define Script_Sinhala 16
-#define Script_Tibetan 17
-#define Script_Tibetan_Numeric 18
-#define Script_Phags_pa 19
-/* Unicode Chapter 11 */
-#define Script_Thai 20
-#define Script_Thai_Numeric 21
-#define Script_Lao 22
-#define Script_Lao_Numeric 23
-/* Unicode Chapter 9 */
-#define Script_Devanagari 24
-#define Script_Devanagari_Numeric 25
-#define Script_Bengali 26
-#define Script_Bengali_Numeric 27
-#define Script_Bengali_Currency 28
-#define Script_Gurmukhi 29
-#define Script_Gurmukhi_Numeric 30
-#define Script_Gujarati 31
-#define Script_Gujarati_Numeric 32
-#define Script_Gujarati_Currency 33
-#define Script_Oriya 34
-#define Script_Oriya_Numeric 35
-#define Script_Tamil 36
-#define Script_Tamil_Numeric 37
-#define Script_Telugu 38
-#define Script_Telugu_Numeric 39
-#define Script_Kannada 40
-#define Script_Kannada_Numeric 41
-#define Script_Malayalam 42
-#define Script_Malayalam_Numeric 43
-/* More supplemental */
-#define Script_Diacritical 44
-#define Script_Punctuation2 45
-#define Script_Numeric2 46
-/* Unicode Chapter 11 continued */
-#define Script_Myanmar 47
-#define Script_Myanmar_Numeric 48
-#define Script_Tai_Le 49
-#define Script_New_Tai_Lue 50
-#define Script_New_Tai_Lue_Numeric 51
-#define Script_Khmer 52
-#define Script_Khmer_Numeric 53
-/* Unicode Chapter 12 */
-#define Script_CJK_Han  54
-#define Script_Ideograph  55
-#define Script_Bopomofo 56
-#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 Script_Mongolian 62
-#define Script_Mongolian_Numeric 63
-#define Script_Tifinagh 64
-#define Script_NKo 65
-#define Script_Vai 66
-#define Script_Vai_Numeric 67
-#define Script_Cherokee 68
-#define Script_Canadian 69
-/* Unicode Chapter 14 */
-#define Script_Ogham 70
-#define Script_Runic 71
-/* Unicode Chapter 15 */
-#define Script_Braille 72
-/* Unicode Chapter 16 */
-#define Script_Surrogates 73
-#define Script_Private 74
-/* Unicode Chapter 13 : Plane 1 */
-#define Script_Deseret 75
-#define Script_Osmanya 76
-#define Script_Osmanya_Numeric 77
-/* Unicode Chapter 15 : Plane 1 */
-#define Script_MathAlpha 78
-/* Additional Currency Scripts */
-#define Script_Hebrew_Currency 79
-#define Script_Vietnamese_Currency 80
-#define Script_Thai_Currency 81
+enum usp10_script
+{
+    Script_Undefined = 0x00,
+    Script_Latin = 0x01,
+    Script_CR = 0x02,
+    Script_Numeric = 0x03,
+    Script_Control = 0x04,
+    Script_Punctuation = 0x05,
+    Script_Arabic = 0x06,
+    Script_Arabic_Numeric = 0x07,
+    Script_Hebrew = 0x08,
+    Script_Syriac = 0x09,
+    Script_Persian = 0x0a,
+    Script_Thaana = 0x0b,
+    Script_Greek = 0x0c,
+    Script_Cyrillic = 0x0d,
+    Script_Armenian = 0x0e,
+    Script_Georgian = 0x0f,
+    /* Unicode Chapter 10 */
+    Script_Sinhala = 0x10,
+    Script_Tibetan = 0x11,
+    Script_Tibetan_Numeric = 0x12,
+    Script_Phags_pa = 0x13,
+    /* Unicode Chapter 11 */
+    Script_Thai = 0x14,
+    Script_Thai_Numeric = 0x15,
+    Script_Lao = 0x16,
+    Script_Lao_Numeric = 0x17,
+    /* Unicode Chapter 9 */
+    Script_Devanagari = 0x18,
+    Script_Devanagari_Numeric = 0x19,
+    Script_Bengali = 0x1a,
+    Script_Bengali_Numeric = 0x1b,
+    Script_Bengali_Currency = 0x1c,
+    Script_Gurmukhi = 0x1d,
+    Script_Gurmukhi_Numeric = 0x1e,
+    Script_Gujarati = 0x1f,
+    Script_Gujarati_Numeric = 0x20,
+    Script_Gujarati_Currency = 0x21,
+    Script_Oriya = 0x22,
+    Script_Oriya_Numeric = 0x23,
+    Script_Tamil = 0x24,
+    Script_Tamil_Numeric = 0x25,
+    Script_Telugu = 0x26,
+    Script_Telugu_Numeric = 0x27,
+    Script_Kannada = 0x28,
+    Script_Kannada_Numeric = 0x29,
+    Script_Malayalam = 0x2a,
+    Script_Malayalam_Numeric = 0x2b,
+    /* More supplemental */
+    Script_Diacritical = 0x2c,
+    Script_Punctuation2 = 0x2d,
+    Script_Numeric2 = 0x2e,
+    /* Unicode Chapter 11 continued */
+    Script_Myanmar = 0x2f,
+    Script_Myanmar_Numeric = 0x30,
+    Script_Tai_Le = 0x31,
+    Script_New_Tai_Lue = 0x32,
+    Script_New_Tai_Lue_Numeric = 0x33,
+    Script_Khmer = 0x34,
+    Script_Khmer_Numeric = 0x35,
+    /* Unicode Chapter 12 */
+    Script_CJK_Han = 0x36,
+    Script_Ideograph = 0x37,
+    Script_Bopomofo = 0x38,
+    Script_Kana = 0x39,
+    Script_Hangul = 0x3a,
+    Script_Yi = 0x3b,
+    /* Unicode Chapter 13 */
+    Script_Ethiopic = 0x3c,
+    Script_Ethiopic_Numeric = 0x3d,
+    Script_Mongolian = 0x3e,
+    Script_Mongolian_Numeric = 0x3f,
+    Script_Tifinagh = 0x40,
+    Script_NKo = 0x41,
+    Script_Vai = 0x42,
+    Script_Vai_Numeric = 0x43,
+    Script_Cherokee = 0x44,
+    Script_Canadian = 0x45,
+    /* Unicode Chapter 14 */
+    Script_Ogham = 0x46,
+    Script_Runic = 0x47,
+    /* Unicode Chapter 15 */
+    Script_Braille = 0x48,
+    /* Unicode Chapter 16 */
+    Script_Surrogates = 0x49,
+    Script_Private = 0x4a,
+    /* Unicode Chapter 13 : Plane 1 */
+    Script_Deseret = 0x4b,
+    Script_Osmanya = 0x4c,
+    Script_Osmanya_Numeric = 0x4d,
+    /* Unicode Chapter 15 : Plane 1 */
+    Script_MathAlpha = 0x4e,
+    /* Additional Currency Scripts */
+    Script_Hebrew_Currency = 0x4f,
+    Script_Vietnamese_Currency = 0x50,
+    Script_Thai_Currency = 0x51,
+};
 
 #define GLYPH_BLOCK_SHIFT 8
 #define GLYPH_BLOCK_SIZE  (1UL << GLYPH_BLOCK_SHIFT)
-- 
2.1.4




More information about the wine-patches mailing list