From 90e4ee91fe7cb5dabef64dfcbe4e860e1b3d62bb Mon Sep 17 00:00:00 2001 From: Vincent Wei Date: Thu, 7 Mar 2019 12:40:37 +0800 Subject: [PATCH] Tune BIDIType to Uint16 instead of unsigned int --- include/gdi.h | 77 ++++++++++++++++++---------------- src/font/charset-arabic.c | 4 +- src/font/charset.c | 8 ++-- src/font/unicode-bidi-tables.h | 2 +- src/include/devfont.h | 2 +- 5 files changed, 49 insertions(+), 44 deletions(-) diff --git a/include/gdi.h b/include/gdi.h index 134f4aa4..930a032c 100644 --- a/include/gdi.h +++ b/include/gdi.h @@ -7468,7 +7468,7 @@ MG_EXPORT UCharGeneralCategory GUIAPI UCharGetCategory(Uchar32 uc); MG_EXPORT UCharBreakType GUIAPI UCharGetBreakType(Uchar32 uc); /** The function determines the BIDI type of a UNICODE character. */ -MG_EXPORT unsigned int GUIAPI UCharGetBIDIType(Uchar32 uc); +MG_EXPORT Uint16 GUIAPI UCharGetBIDIType(Uchar32 uc); /** The function returns the mirror character of a UNICODE character. */ MG_EXPORT BOOL GUIAPI UCharGetMirror(Uchar32 uc, Uchar32* mirrored); @@ -9571,8 +9571,8 @@ MG_EXPORT void GUIAPI DestroyBMPFont (DEVFONT* dev_font); * @{ */ -typedef unsigned int Achar32; -typedef unsigned long Glyph32; +typedef Uint32 Achar32; +typedef Uint32 Glyph32; /** * \def INV_ACHAR_VALUE @@ -9661,39 +9661,43 @@ MG_EXPORT Uint32 GUIAPI GetACharType (LOGFONT* logfont, Achar32 chv); * only one bit on. */ -#define BIDI_TYPE_INVALID 0x00000000L +#define BIDI_TYPE_INVALID 0x0000 -#define BIDI_MASK_RTL 0x00000001L /* Is right to left */ -#define BIDI_MASK_ARABIC 0x00000002L /* Is arabic */ +#define BIDI_MASK_RTL 0x0001 /* Is right to left */ +#define BIDI_MASK_ARABIC 0x0002 /* Is arabic */ + +#define BIDI_MASK_NSM 0x0004 +#define BIDI_MASK_BN 0x0008 /* Each char can be only one of the three following. */ -#define BIDI_MASK_STRONG 0x00000010L /* Is strong */ -#define BIDI_MASK_WEAK 0x00000020L /* Is weak */ -#define BIDI_MASK_NEUTRAL 0x00000040L /* Is neutral */ -#define BIDI_MASK_SENTINEL 0x00000080L /* Is sentinel: SOT, EOT */ +#define BIDI_SWN_MASK 0x0030 +#define BIDI_MASK_STRONG 0x0010 /* Is strong */ +#define BIDI_MASK_WEAK 0x0020 /* Is weak */ +#define BIDI_MASK_NEUTRAL 0x0030 /* Is neutral */ + +#define BIDI_MASK_WS 0x0040 +#define BIDI_MASK_SENTINEL 0x0080 /* Is sentinel: SOT, EOT */ /* Each char can be only one of the five following. */ -#define BIDI_MASK_LETTER 0x00000100L /* Is letter: L, R, AL */ -#define BIDI_MASK_NUMBER 0x00000200L /* Is number: EN, AN */ -#define BIDI_MASK_NUMSEPTER 0x00000400L /* Is number separator or terminator: ES, ET, CS */ -#define BIDI_MASK_SPACE 0x00000800L /* Is space: BN, BS, SS, WS */ -#define BIDI_MASK_EXPLICIT 0x00001000L /* Is expilict mark: LRE, RLE, LRO, RLO, PDF */ +#define BIDI_TYPE_MASK 0x0F00 +#define BIDI_MASK_LETTER 0x0100 /* Is letter: L, R, AL */ +#define BIDI_MASK_NUMBER 0x0200 /* Is number: EN, AN */ +#define BIDI_MASK_NUMSEPTER 0x0300 /* Is number separator or terminator: ES, ET, CS */ +#define BIDI_MASK_SPACE 0x0400 /* Is space: BN, BS, SS, WS */ +#define BIDI_MASK_EXPLICIT 0x0500 /* Is expilict mark: LRE, RLE, LRO, RLO, PDF */ /* Can be on only if BIDI_MASK_SPACE is also on. */ -#define BIDI_MASK_SEPARATOR 0x00002000L /* Is test separator: BS, SS */ +#define BIDI_MASK_SEPARATOR 0x0800 /* Is test separator: BS, SS */ + /* Can be on only if BIDI_MASK_EXPLICIT is also on. */ -#define BIDI_MASK_OVERRIDE 0x00004000L /* Is explicit override: LRO, RLO */ +#define BIDI_MASK_OVERRIDE 0x8000 /* Is explicit override: LRO, RLO */ -#define BIDI_MASK_ES 0x00010000L -#define BIDI_MASK_ET 0x00020000L -#define BIDI_MASK_CS 0x00040000L - -#define BIDI_MASK_NSM 0x00080000L -#define BIDI_MASK_BN 0x00100000L - -#define BIDI_MASK_BS 0x00200000L -#define BIDI_MASK_SS 0x00400000L -#define BIDI_MASK_WS 0x00800000L +#define BIDI_MISC_MASK 0x7000 +#define BIDI_MASK_ES 0x1000 +#define BIDI_MASK_CS 0x2000 +#define BIDI_MASK_ET 0x3000 +#define BIDI_MASK_BS 0x4000 +#define BIDI_MASK_SS 0x5000 /** * \defgroup glyph_bidi_types Glyph BIDI types @@ -9867,26 +9871,26 @@ MG_EXPORT Uint32 GUIAPI GetACharType (LOGFONT* logfont, Achar32 chv); #define BIDI_IS_ARABIC(p) ((p) & BIDI_MASK_ARABIC) /* Is strong? */ -#define BIDI_IS_STRONG(p) ((p) & BIDI_MASK_STRONG) +#define BIDI_IS_STRONG(p) (((p) & BIDI_SWN_MASK) == BIDI_MASK_STRONG) /* Is weak? */ -#define BIDI_IS_WEAK(p) ((p) & BIDI_MASK_WEAK) +#define BIDI_IS_WEAK(p) (((p) & BIDI_SWN_MASK) == BIDI_MASK_WEAK) /* Is neutral? */ -#define BIDI_IS_NEUTRAL(p) ((p) & BIDI_MASK_NEUTRAL) +#define BIDI_IS_NEUTRAL(p) (((p) & BIDI_SWN_MASK) == BIDI_MASK_NEUTRAL) /* Is sentinel? */ #define BIDI_IS_SENTINEL(p) ((p) & BIDI_MASK_SENTINEL) /* Is letter: L, R, AL? */ -#define BIDI_IS_LETTER(p) ((p) & BIDI_MASK_LETTER) +#define BIDI_IS_LETTER(p) (((p) & BIDI_TYPE_MASK) == BIDI_MASK_LETTER) /* Is number: EN, AN? */ -#define BIDI_IS_NUMBER(p) ((p) & BIDI_MASK_NUMBER) +#define BIDI_IS_NUMBER(p) (((p) & BIDI_TYPE_MASK) == BIDI_MASK_NUMBER) /* Is number separator or terminator: ES, ET, CS? */ #define BIDI_IS_NUMBER_SEPARATOR_OR_TERMINATOR(p) \ - ((p) & BIDI_MASK_NUMSEPTER) + (((p) & BIDI_TYPE_MASK) == BIDI_MASK_NUMSEPTER) /* Is space: BN, BS, SS, WS? */ -#define BIDI_IS_SPACE(p) ((p) & BIDI_MASK_SPACE) +#define BIDI_IS_SPACE(p) (((p) & BIDI_TYPE_MASK) == BIDI_MASK_SPACE) /* Is explicit mark: LRE, RLE, LRO, RLO, PDF? */ -#define BIDI_IS_EXPLICIT(p) ((p) & BIDI_MASK_EXPLICIT) +#define BIDI_IS_EXPLICIT(p) (((p) & BIDI_TYPE_MASK) == BIDI_MASK_EXPLICIT) /* Is test separator: BS, SS? */ #define BIDI_IS_SEPARATOR(p) ((p) & BIDI_MASK_SEPARATOR) @@ -9907,7 +9911,8 @@ MG_EXPORT Uint32 GUIAPI GetACharType (LOGFONT* logfont, Achar32 chv); /* Is ES or CS: ES, CS? */ #define BIDI_IS_ES_OR_CS(p) \ - ((p) & (BIDI_MASK_ES | BIDI_MASK_CS)) + (((p) & BIDI_MISC_MASK) == BIDI_MASK_ES || \ + ((p) & BIDI_MISC_MASK) == BIDI_MASK_CS) /* Change numbers: EN, AN to RTL. */ #define BIDI_NUMBER_TO_RTL(p) \ diff --git a/src/font/charset-arabic.c b/src/font/charset-arabic.c index 2c6a1735..e4700cf4 100644 --- a/src/font/charset-arabic.c +++ b/src/font/charset-arabic.c @@ -470,7 +470,7 @@ static unsigned int iso8859_6_char_type (Achar32 chv) return ch_type; } -static Uint32 __mg_iso8859_68x_type[] = { +static Uint16 __mg_iso8859_68x_type[] = { /*0x00~0x0f*/ BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, @@ -588,7 +588,7 @@ static Uint32 __mg_iso8859_68x_type[] = { BIDI_TYPE_AL, BIDI_TYPE_AL, BIDI_TYPE_AL, BIDI_TYPE_AL, }; -static unsigned int iso8859_6_bidi_char_type (Achar32 chv) +static Uint16 iso8859_6_bidi_char_type (Achar32 chv) { return __mg_iso8859_68x_type[REAL_ACHAR(chv)]; } diff --git a/src/font/charset.c b/src/font/charset.c index c9bfbcc5..803694d8 100644 --- a/src/font/charset.c +++ b/src/font/charset.c @@ -948,7 +948,7 @@ static const unsigned char* iso8859_8_get_next_word (const unsigned char* mstr, //return sb_get_next_word(mstr, mstrlen, word_info); } -static Uint32 __mg_iso8859_8_type[] = { +static Uint16 __mg_iso8859_8_type[] = { /*0x00~0x0f*/ BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, @@ -1046,7 +1046,7 @@ static Uint32 __mg_iso8859_8_type[] = { BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, }; -static unsigned int iso8859_8_bidi_char_type (Achar32 chv) +static Uint16 iso8859_8_bidi_char_type (Achar32 chv) { return __mg_iso8859_8_type [REAL_ACHAR(chv)]; } @@ -3568,7 +3568,7 @@ static unsigned int unicode_char_type (Achar32 chv) #include "unicode-bidi-tables.h" -static unsigned int unicode_bidi_char_type (Achar32 chv) +static Uint16 unicode_bidi_char_type (Achar32 chv) { Achar32 chv_first = 0; Achar32 chv_last = (Achar32)TABLESIZE (__mg_unicode_bidi_char_type_map); @@ -4401,7 +4401,7 @@ UCharBreakType GUIAPI UCharGetBreakType(Uchar32 uc) } /** The function determines the BIDI type of a UNICODE character. */ -unsigned int GUIAPI UCharGetBIDIType(Uchar32 uc) +Uint16 GUIAPI UCharGetBIDIType(Uchar32 uc) { return unicode_bidi_char_type(uc); } diff --git a/src/font/unicode-bidi-tables.h b/src/font/unicode-bidi-tables.h index 4ad6bb68..0d0f7498 100644 --- a/src/font/unicode-bidi-tables.h +++ b/src/font/unicode-bidi-tables.h @@ -42,7 +42,7 @@ typedef struct _bidichar_type_map { - Uint32 type; // Type of Unicode characters + Uint16 type; // Type of Unicode characters Uchar32 chv; // Starting index of Unicode character Uint8 count; // Total number of Unicode characters of same type starting from glyphn } BIDICHAR_TYPE_MAP; diff --git a/src/include/devfont.h b/src/include/devfont.h index 076baf56..69f810c1 100644 --- a/src/include/devfont.h +++ b/src/include/devfont.h @@ -227,7 +227,7 @@ struct _CHARSETOPS int (*pos_first_char) (const unsigned char* mstr, int mstrlen); /** The method to get the BIDI type of one character. */ - unsigned int (*bidi_char_type) (Achar32 chv); + Uint16 (*bidi_char_type) (Achar32 chv); /** Get mirrored character */ BOOL (*bidi_mirror_char) (Achar32 chv, Achar32* mirrored);