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

Aric Stewart aric at codeweavers.com
Wed Mar 8 07:43:54 CST 2017


Signed-off-by: Aric Stewart <aric at codeweavers.com>


On 3/7/17 1:57 AM, Henri Verbeet wrote:
> 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)
> 



More information about the wine-patches mailing list