[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