mirror of
https://github.com/VincentWei/MiniGUI.git
synced 2026-09-24 17:44:19 +08:00
cleanup
This commit is contained in:
+158
-6
@@ -7885,6 +7885,146 @@ typedef Uint8 BidiArabicProp;
|
||||
#define BIDI_PGDIR_RTL BIDI_TYPE_RTL
|
||||
#define BIDI_PGDIR_ON BIDI_TYPE_ON
|
||||
|
||||
/*
|
||||
* Define bit masks that joining types are based on, each mask has
|
||||
* only one bit set.
|
||||
*/
|
||||
#define BIDI_MASK_JOINS_RIGHT 0x01 /* May join to right */
|
||||
#define BIDI_MASK_JOINS_LEFT 0x02 /* May join to right */
|
||||
#define BIDI_MASK_ARAB_SHAPES 0x04 /* May Arabic shape */
|
||||
#define BIDI_MASK_TRANSPARENT 0x08 /* Is transparent */
|
||||
#define BIDI_MASK_IGNORED 0x10 /* Is ignored */
|
||||
#define BIDI_MASK_LIGATURED 0x20 /* Is ligatured */
|
||||
|
||||
/*
|
||||
* Define values for BidiJoiningType
|
||||
*/
|
||||
|
||||
/* nUn-joining */
|
||||
#define BIDI_JOINING_TYPE_U_VAL ( 0 )
|
||||
|
||||
/* Right-joining */
|
||||
#define BIDI_JOINING_TYPE_R_VAL \
|
||||
( BIDI_MASK_JOINS_RIGHT | BIDI_MASK_ARAB_SHAPES )
|
||||
|
||||
/* Dual-joining */
|
||||
#define BIDI_JOINING_TYPE_D_VAL \
|
||||
( BIDI_MASK_JOINS_RIGHT | BIDI_MASK_JOINS_LEFT \
|
||||
| BIDI_MASK_ARAB_SHAPES )
|
||||
|
||||
/* join-Causing */
|
||||
#define BIDI_JOINING_TYPE_C_VAL \
|
||||
( BIDI_MASK_JOINS_RIGHT | BIDI_MASK_JOINS_LEFT )
|
||||
|
||||
/* Left-joining */
|
||||
#define BIDI_JOINING_TYPE_L_VAL \
|
||||
( BIDI_MASK_JOINS_LEFT | BIDI_MASK_ARAB_SHAPES )
|
||||
|
||||
/* Transparent */
|
||||
#define BIDI_JOINING_TYPE_T_VAL \
|
||||
( BIDI_MASK_TRANSPARENT | BIDI_MASK_ARAB_SHAPES )
|
||||
|
||||
/* iGnored */
|
||||
#define BIDI_JOINING_TYPE_G_VAL ( BIDI_MASK_IGNORED )
|
||||
|
||||
/*
|
||||
* The equivalent of JoiningType values for ArabicProp
|
||||
*/
|
||||
|
||||
/* Primary Arabic Joining Classes (Table 8-2) */
|
||||
|
||||
/* nUn-joining */
|
||||
#define BIDI_IS_JOINING_TYPE_U(p) \
|
||||
( 0 == ( (p) & \
|
||||
( BIDI_MASK_TRANSPARENT | BIDI_MASK_IGNORED \
|
||||
| BIDI_MASK_JOINS_RIGHT | BIDI_MASK_JOINS_LEFT ) ) )
|
||||
|
||||
/* Right-joining */
|
||||
#define BIDI_IS_JOINING_TYPE_R(p) \
|
||||
( BIDI_MASK_JOINS_RIGHT == ( (p) & \
|
||||
( BIDI_MASK_TRANSPARENT | BIDI_MASK_IGNORED \
|
||||
| BIDI_MASK_JOINS_RIGHT | BIDI_MASK_JOINS_LEFT ) ) )
|
||||
|
||||
/* Dual-joining */
|
||||
#define BIDI_IS_JOINING_TYPE_D(p) \
|
||||
( ( BIDI_MASK_JOINS_RIGHT | BIDI_MASK_JOINS_LEFT \
|
||||
| BIDI_MASK_ARAB_SHAPES ) == ( (p) & \
|
||||
( BIDI_MASK_TRANSPARENT | BIDI_MASK_IGNORED \
|
||||
| BIDI_MASK_JOINS_RIGHT | BIDI_MASK_JOINS_LEFT \
|
||||
| BIDI_MASK_ARAB_SHAPES ) ) )
|
||||
|
||||
/* join-Causing */
|
||||
#define BIDI_IS_JOINING_TYPE_C(p) \
|
||||
( ( BIDI_MASK_JOINS_RIGHT | BIDI_MASK_JOINS_LEFT ) == ( (p) & \
|
||||
( BIDI_MASK_TRANSPARENT | BIDI_MASK_IGNORED \
|
||||
| BIDI_MASK_JOINS_RIGHT | BIDI_MASK_JOINS_LEFT \
|
||||
| BIDI_MASK_ARAB_SHAPES ) ) )
|
||||
|
||||
/* Left-joining */
|
||||
#define BIDI_IS_JOINING_TYPE_L(p) \
|
||||
( BIDI_MASK_JOINS_LEFT == ( (p) & \
|
||||
( BIDI_MASK_TRANSPARENT | BIDI_MASK_IGNORED \
|
||||
| BIDI_MASK_JOINS_RIGHT | BIDI_MASK_JOINS_LEFT ) ) )
|
||||
|
||||
/* Transparent */
|
||||
#define BIDI_IS_JOINING_TYPE_T(p) \
|
||||
( BIDI_MASK_TRANSPARENT == ( (p) & \
|
||||
( BIDI_MASK_TRANSPARENT | BIDI_MASK_IGNORED ) ) )
|
||||
|
||||
/* iGnored */
|
||||
#define BIDI_IS_JOINING_TYPE_G(p) \
|
||||
( BIDI_MASK_IGNORED == ( (p) & \
|
||||
( BIDI_MASK_TRANSPARENT | BIDI_MASK_IGNORED ) ) )
|
||||
|
||||
/* and for Derived Arabic Joining Classes (Table 8-3) */
|
||||
|
||||
/* Right join-Causing */
|
||||
#define BIDI_IS_JOINING_TYPE_RC(p) \
|
||||
( BIDI_MASK_JOINS_RIGHT == ( (p) & \
|
||||
( BIDI_MASK_TRANSPARENT | BIDI_MASK_IGNORED \
|
||||
| BIDI_MASK_JOINS_RIGHT ) ) )
|
||||
|
||||
/* Left join-Causing */
|
||||
#define BIDI_IS_JOINING_TYPE_LC(p) \
|
||||
( BIDI_MASK_JOINS_LEFT == ( (p) & \
|
||||
( BIDI_MASK_TRANSPARENT | BIDI_MASK_IGNORED \
|
||||
| BIDI_MASK_JOINS_LEFT ) ) )
|
||||
|
||||
/*
|
||||
* Defining macros for needed queries, It is fully dependent on the
|
||||
* implementation of BidiJoiningType.
|
||||
*/
|
||||
|
||||
/* Joins to right: R, D, C? */
|
||||
#define BIDI_JOINS_RIGHT(p) ((p) & BIDI_MASK_JOINS_RIGHT)
|
||||
|
||||
/* Joins to left: L, D, C? */
|
||||
#define BIDI_JOINS_LEFT(p) ((p) & BIDI_MASK_JOINS_LEFT)
|
||||
|
||||
/* May shape: R, D, L, T? */
|
||||
#define BIDI_ARAB_SHAPES(p) ((p) & BIDI_MASK_ARAB_SHAPES)
|
||||
|
||||
/* Is skipped in joining: T, G? */
|
||||
#define BIDI_IS_JOIN_SKIPPED(p) \
|
||||
((p) & (BIDI_MASK_TRANSPARENT | BIDI_MASK_IGNORED))
|
||||
|
||||
/* Is base that will be shaped: R, D, L? */
|
||||
#define BIDI_IS_JOIN_BASE_SHAPES(p) \
|
||||
( BIDI_MASK_ARAB_SHAPES == ( (p) & \
|
||||
( BIDI_MASK_TRANSPARENT | BIDI_MASK_IGNORED \
|
||||
| BIDI_MASK_ARAB_SHAPES ) ) )
|
||||
|
||||
#define BIDI_JOINS_PRECEDING_MASK(level) \
|
||||
(BIDI_LEVEL_IS_RTL (level) ? BIDI_MASK_JOINS_RIGHT \
|
||||
: BIDI_MASK_JOINS_LEFT)
|
||||
|
||||
#define BIDI_JOINS_FOLLOWING_MASK(level) \
|
||||
(BIDI_LEVEL_IS_RTL (level) ? BIDI_MASK_JOINS_LEFT \
|
||||
: BIDI_MASK_JOINS_RIGHT)
|
||||
|
||||
#define BIDI_JOIN_SHAPE(p) \
|
||||
((p) & ( BIDI_MASK_JOINS_RIGHT | BIDI_MASK_JOINS_LEFT ))
|
||||
|
||||
/** @} end of bidi_types */
|
||||
|
||||
#ifdef _MGCHARSET_UNICODE
|
||||
@@ -12054,7 +12194,7 @@ typedef struct _SHAPEDGLYPH {
|
||||
* LanguageCode content_language, UCharScriptType writing_system,
|
||||
* const Uchar32* logical_ucs, int nr_ucs,
|
||||
* Uint16* break_oppos, SHAPEDGLYPH* visual_glyphs,
|
||||
* int* pos_l2v, int* nr_glyphs)
|
||||
* BidiType *paragraph_dir, int* pos_l2v, int* nr_glyphs)
|
||||
* \brief Analyse and generate a shaped glyph string of a Unicode string under
|
||||
* specific content language and script.
|
||||
*
|
||||
@@ -12069,7 +12209,7 @@ typedef struct _SHAPEDGLYPH {
|
||||
* The shaping process includes:
|
||||
*
|
||||
* - Shaping (substituting) glyphs.
|
||||
* - Assigning the breaking opportunities to glyphs.
|
||||
* - Tailoring and assigning the breaking opportunities to glyphs.
|
||||
* - Re-ordering glyphs.
|
||||
* - Positioning glyphs.
|
||||
*
|
||||
@@ -12094,6 +12234,7 @@ typedef struct _SHAPEDGLYPH {
|
||||
* writing systems.
|
||||
* \param visual_glyphs The pointer to the buffer to store the generated
|
||||
* shaped visual glyph array.
|
||||
* \param paragraph_dir The specified and resolved paragraph base direction.
|
||||
* \param pos_l2v The pointer to an int array which will store the map from
|
||||
* the positions in the logical Uchar32 string to the positions in
|
||||
* the visual shaped glyphs; can be NULL.
|
||||
@@ -12103,21 +12244,26 @@ typedef struct _SHAPEDGLYPH {
|
||||
*
|
||||
* \note Only available when support for UNICODE is enabled.
|
||||
*
|
||||
* \note This function assumes that you passed one line (one paragraph) of
|
||||
* the logical Unicode string. Therefore, you need to call this function
|
||||
* after calling GetUCharsAndBreaks.
|
||||
*
|
||||
* \sa GetUCharsAndBreaks, GetShapedGlyphsComplex, SHAPEDGLYPH,
|
||||
* UBidiReorderLine, bidi_types,
|
||||
* GetGlyphsExtentInfo, GetGlyphsPositionInfo, DrawShapedGlyphString
|
||||
*/
|
||||
MG_EXPORT int GUIAPI GetShapedGlyphsBasic(LOGFONT* logfont,
|
||||
LanguageCode content_language, UCharScriptType writing_system,
|
||||
const Uchar32* logical_ucs, int nr_ucs,
|
||||
Uint16* break_oppos, SHAPEDGLYPH* visual_glyphs,
|
||||
int* pos_l2v, int* nr_glyphs);
|
||||
BidiType *paragraph_dir, int* pos_l2v, int* nr_glyphs);
|
||||
|
||||
/**
|
||||
* \fn int GUIAPI GetShapedGlyphsComplex(LOGFONT* logfont,
|
||||
* LanguageCode content_language, UCharScriptType writing_system,
|
||||
* const Uchar32* logical_ucs, int nr_ucs,
|
||||
* Uint16* break_oppos, SHAPEDGLYPH* visual_glyphs,
|
||||
* int* pos_l2v, int* nr_glyphs);
|
||||
* BidiType *paragraph_dir, int* pos_l2v, int* nr_glyphs);
|
||||
* \brief Analyse and generate a shaped glyph string of a Unicode string under
|
||||
* specific content language and script.
|
||||
*
|
||||
@@ -12157,6 +12303,7 @@ MG_EXPORT int GUIAPI GetShapedGlyphsBasic(LOGFONT* logfont,
|
||||
* writing systems.
|
||||
* \param visual_glyphs The pointer to the buffer to store the generated
|
||||
* shaped visual glyph array.
|
||||
* \param paragraph_dir The specified and resolved paragraph base direction.
|
||||
* \param pos_l2v The pointer to an int array which will store the map from
|
||||
* the positions in the logical Uchar32 string to the positions in
|
||||
* the visual shaped glyphs; can be NULL.
|
||||
@@ -12166,14 +12313,19 @@ MG_EXPORT int GUIAPI GetShapedGlyphsBasic(LOGFONT* logfont,
|
||||
*
|
||||
* \note Only available when support for UNICODE is enabled.
|
||||
*
|
||||
* \sa GetUCharsAndBreaks, GetShapedGlyphsBasic, SHAPEDGLYPH
|
||||
* \note This function assumes that you passed one line (one paragraph) of
|
||||
* the logical Unicode string. Therefore, you need to call this function
|
||||
* after calling GetUCharsAndBreaks.
|
||||
*
|
||||
* \sa GetUCharsAndBreaks, GetShapedGlyphsBasic, SHAPEDGLYPH,
|
||||
* UBidiReorderLine, bidi_types,
|
||||
* GetGlyphsExtentInfo, GetGlyphsPositionInfo, DrawShapedGlyphString
|
||||
*/
|
||||
MG_EXPORT int GUIAPI GetShapedGlyphsComplex(LOGFONT* logfont,
|
||||
LanguageCode content_language, UCharScriptType writing_system,
|
||||
const Uchar32* logical_ucs, int nr_ucs,
|
||||
Uint16* break_oppos, SHAPEDGLYPH* visual_glyphs,
|
||||
int* pos_l2v, int* nr_glyphs);
|
||||
BidiType *paragraph_dir, int* pos_l2v, int* nr_glyphs);
|
||||
|
||||
#define GLYPH_ORIENTATION_UPRIGHT 0
|
||||
#define GLYPH_ORIENTATION_SIDEWAYS 1
|
||||
|
||||
+30
-22
@@ -44,12 +44,14 @@
|
||||
#include <assert.h>
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#ifdef _MGCHARSET_UNICODE
|
||||
|
||||
#include "minigui.h"
|
||||
#include "gdi.h"
|
||||
#include "devfont.h"
|
||||
#include "charset.h"
|
||||
|
||||
#ifdef _MGCHARSET_UNICODE
|
||||
#include "bidi.h"
|
||||
|
||||
/************************* UTF-8 Specific Operations ************************/
|
||||
static int utf8_len_first_char (const unsigned char* mstr, int len)
|
||||
@@ -205,7 +207,7 @@ static unsigned int unicode_char_type (Achar32 chv)
|
||||
return (break_type << 24) | (basic_type << 16) | mchar_type;
|
||||
}
|
||||
|
||||
#define _USE_UNIBIDI
|
||||
#undef _USE_UNIBIDI
|
||||
|
||||
#ifdef _USE_UNIBIDI
|
||||
|
||||
@@ -312,23 +314,23 @@ BOOL GUIAPI UCharGetMirror(Uchar32 ch, Uchar32* mirrored_ch)
|
||||
static BidiType unicode_bidi_char_type (Achar32 chv)
|
||||
{
|
||||
Achar32 chv_first = 0;
|
||||
Achar32 chv_last = (Achar32)TABLESIZE (__mg___mg_unicode_bidi_char_type_map);
|
||||
Achar32 chv_last = (Achar32)TABLESIZE (unicode_bidi_char_type_map);
|
||||
Achar32 chv_mid;
|
||||
|
||||
chv = REAL_ACHAR(chv);
|
||||
while (chv_last >= chv_first) {
|
||||
chv_mid = (chv_first + chv_last)/2;
|
||||
|
||||
if ((__mg___mg_unicode_bidi_char_type_map[chv_mid].chv <= chv)
|
||||
&& ((__mg___mg_unicode_bidi_char_type_map[chv_mid].chv + __mg___mg_unicode_bidi_char_type_map[chv_mid].count) > chv)) {
|
||||
return __mg___mg_unicode_bidi_char_type_map[chv_mid].type;
|
||||
if ((unicode_bidi_char_type_map[chv_mid].chv <= chv)
|
||||
&& ((unicode_bidi_char_type_map[chv_mid].chv + unicode_bidi_char_type_map[chv_mid].count) > chv)) {
|
||||
return unicode_bidi_char_type_map[chv_mid].type;
|
||||
}
|
||||
|
||||
if (chv >= (__mg___mg_unicode_bidi_char_type_map[chv_mid].chv + __mg___mg_unicode_bidi_char_type_map[chv_mid].count)) {
|
||||
if (chv >= (unicode_bidi_char_type_map[chv_mid].chv + unicode_bidi_char_type_map[chv_mid].count)) {
|
||||
chv_first = chv_mid + 1;
|
||||
}
|
||||
else {
|
||||
if (chv < __mg___mg_unicode_bidi_char_type_map[chv_mid].chv)
|
||||
if (chv < unicode_bidi_char_type_map[chv_mid].chv)
|
||||
chv_last = chv_mid - 1;
|
||||
else
|
||||
chv_last = chv_mid;
|
||||
@@ -338,10 +340,13 @@ static BidiType unicode_bidi_char_type (Achar32 chv)
|
||||
return BIDI_TYPE_LTR;
|
||||
}
|
||||
|
||||
BOOL __mg_get_mirror_char (const BIDICHAR_MIRROR_MAP* map, int n,
|
||||
Achar32 chv, Achar32* mirrored);
|
||||
|
||||
static BOOL unicode_bidi_mirror_char (Achar32 chv, Achar32* mirrored)
|
||||
{
|
||||
return get_mirror_char (__mg_unicode_mirror_table,
|
||||
TABLESIZE (__mg_unicode_mirror_table), chv, mirrored);
|
||||
return __mg_get_mirror_char (unicode_mirror_table,
|
||||
TABLESIZE (unicode_mirror_table), chv, mirrored);
|
||||
}
|
||||
|
||||
BidiType GUIAPI UCharGetBidiType(Uchar32 uc)
|
||||
@@ -353,17 +358,17 @@ BidiBracketType GUIAPI UCharGetBracketType(Uchar32 uc)
|
||||
{
|
||||
BidiBracketType bracket_type;
|
||||
unsigned int lower = 0;
|
||||
unsigned int upper = TABLESIZE (__mg_unicode_bracket_table) - 1;
|
||||
int mid = TABLESIZE (__mg_unicode_bracket_table) / 2;
|
||||
unsigned int upper = TABLESIZE (unicode_bracket_table) - 1;
|
||||
int mid = TABLESIZE (unicode_bracket_table) / 2;
|
||||
|
||||
if (uc < __mg_unicode_bracket_table[lower].chv ||
|
||||
uc > __mg_unicode_bracket_table[upper].chv)
|
||||
if (uc < unicode_bracket_table[lower].chv ||
|
||||
uc > unicode_bracket_table[upper].chv)
|
||||
return BIDI_BRACKET_NONE;
|
||||
|
||||
do {
|
||||
if (uc < __mg_unicode_bracket_table[mid].chv)
|
||||
if (uc < unicode_bracket_table[mid].chv)
|
||||
upper = mid - 1;
|
||||
else if (uc > __mg_unicode_bracket_table[mid].chv)
|
||||
else if (uc > unicode_bracket_table[mid].chv)
|
||||
lower = mid + 1;
|
||||
else
|
||||
goto found;
|
||||
@@ -375,11 +380,14 @@ BidiBracketType GUIAPI UCharGetBracketType(Uchar32 uc)
|
||||
return BIDI_BRACKET_NONE;
|
||||
|
||||
found:
|
||||
bracket_type = __mg_unicode_bracket_table[mid].chv +
|
||||
__mg_unicode_bracket_table[mid].bracket_off;
|
||||
bracket_type &= BIDI_BRACKET_CHAR_MASK;
|
||||
if (__mg_unicode_bracket_table[mid].type == UNIBIDI_BRACKET_OPEN)
|
||||
bracket_type |= BIDI_BRACKET_OPEN_MASK;
|
||||
if (unicode_bracket_table[mid].type == _BIDI_BRACKET_OPEN) {
|
||||
bracket_type = uc | BIDI_BRACKET_OPEN_MASK;
|
||||
}
|
||||
else {
|
||||
bracket_type = unicode_bracket_table[mid].chv +
|
||||
unicode_bracket_table[mid].bracket_off;
|
||||
bracket_type &= BIDI_BRACKET_CHAR_MASK;
|
||||
}
|
||||
|
||||
return bracket_type;
|
||||
}
|
||||
|
||||
+3
-1
@@ -741,7 +741,9 @@ static CHARSETOPS CharsetOps_iso8859_5 = {
|
||||
|
||||
#include "bidi.h"
|
||||
|
||||
static BOOL get_mirror_char (const BIDICHAR_MIRROR_MAP* map, int n,
|
||||
#define get_mirror_char __mg_get_mirror_char
|
||||
|
||||
BOOL __mg_get_mirror_char (const BIDICHAR_MIRROR_MAP* map, int n,
|
||||
Achar32 chv, Achar32* mirrored)
|
||||
{
|
||||
int pos, step;
|
||||
|
||||
+123
-123
@@ -18,7 +18,7 @@
|
||||
#ifndef _UNICODE_BIDI_TABLES_H
|
||||
#define _UNICODE_BIDI_TABLES_H
|
||||
|
||||
static const BIDICHAR_TYPE_MAP __mg_unicode_bidi_char_type_map[] =
|
||||
static const BIDICHAR_TYPE_MAP unicode_bidi_char_type_map[] =
|
||||
{
|
||||
{ 0x000000, 0x0009, BIDI_TYPE_BN },
|
||||
{ 0x000009, 0x0001, BIDI_TYPE_SS },
|
||||
@@ -1157,131 +1157,131 @@ static const BIDICHAR_TYPE_MAP __mg_unicode_bidi_char_type_map[] =
|
||||
{ 0x100000, 0xFFFE, BIDI_TYPE_LTR },
|
||||
};
|
||||
|
||||
static const BIDICHAR_BRACKET __mg_unicode_bracket_table[] =
|
||||
static const BIDICHAR_BRACKET unicode_bracket_table[] =
|
||||
{
|
||||
{ 0x000028, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x000029, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00005B, 2, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00005D, -2, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00007B, 2, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00007D, -2, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x000F3A, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x000F3B, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x000F3C, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x000F3D, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00169B, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00169C, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x002045, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x002046, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00207D, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00207E, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00208D, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00208E, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x002308, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x002309, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00230A, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00230B, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x002329, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00232A, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x002768, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x002769, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00276A, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00276B, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00276C, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00276D, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00276E, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00276F, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x002770, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x002771, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x002772, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x002773, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x002774, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x002775, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x0027C5, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x0027C6, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x0027E6, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x0027E7, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x0027E8, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x0027E9, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x0027EA, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x0027EB, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x0027EC, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x0027ED, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x0027EE, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x0027EF, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x002983, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x002984, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x002985, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x002986, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x002987, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x002988, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x002989, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00298A, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00298B, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00298C, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00298D, 3, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00298E, 1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00298F, -1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x002990, -3, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x002991, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x002992, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x002993, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x002994, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x002995, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x002996, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x002997, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x002998, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x0029D8, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x0029D9, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x0029DA, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x0029DB, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x0029FC, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x0029FD, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x002E22, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x002E23, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x002E24, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x002E25, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x002E26, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x002E27, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x002E28, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x002E29, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x003008, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x003009, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00300A, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00300B, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00300C, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00300D, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00300E, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00300F, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x003010, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x003011, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x003014, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x003015, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x003016, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x003017, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x003018, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x003019, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00301A, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00301B, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00FE59, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00FE5A, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00FE5B, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00FE5C, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00FE5D, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00FE5E, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00FF08, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00FF09, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00FF3B, 2, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00FF3D, -2, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00FF5B, 2, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00FF5D, -2, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00FF5F, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00FF60, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x00FF62, 1, UNIBIDI_BRACKET_OPEN },
|
||||
{ 0x00FF63, -1, UNIBIDI_BRACKET_CLOSE },
|
||||
{ 0x000028, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x000029, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00005B, 2, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00005D, -2, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00007B, 2, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00007D, -2, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x000F3A, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x000F3B, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x000F3C, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x000F3D, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00169B, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00169C, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x002045, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x002046, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00207D, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00207E, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00208D, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00208E, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x002308, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x002309, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00230A, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00230B, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x002329, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00232A, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x002768, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x002769, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00276A, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00276B, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00276C, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00276D, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00276E, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00276F, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x002770, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x002771, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x002772, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x002773, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x002774, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x002775, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x0027C5, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x0027C6, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x0027E6, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x0027E7, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x0027E8, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x0027E9, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x0027EA, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x0027EB, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x0027EC, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x0027ED, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x0027EE, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x0027EF, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x002983, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x002984, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x002985, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x002986, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x002987, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x002988, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x002989, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00298A, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00298B, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00298C, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00298D, 3, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00298E, 1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00298F, -1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x002990, -3, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x002991, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x002992, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x002993, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x002994, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x002995, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x002996, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x002997, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x002998, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x0029D8, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x0029D9, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x0029DA, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x0029DB, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x0029FC, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x0029FD, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x002E22, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x002E23, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x002E24, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x002E25, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x002E26, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x002E27, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x002E28, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x002E29, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x003008, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x003009, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00300A, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00300B, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00300C, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00300D, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00300E, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00300F, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x003010, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x003011, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x003014, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x003015, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x003016, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x003017, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x003018, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x003019, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00301A, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00301B, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00FE59, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00FE5A, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00FE5B, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00FE5C, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00FE5D, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00FE5E, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00FF08, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00FF09, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00FF3B, 2, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00FF3D, -2, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00FF5B, 2, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00FF5D, -2, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00FF5F, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00FF60, -1, _BIDI_BRACKET_CLOSE },
|
||||
{ 0x00FF62, 1, _BIDI_BRACKET_OPEN },
|
||||
{ 0x00FF63, -1, _BIDI_BRACKET_CLOSE },
|
||||
};
|
||||
|
||||
static const BIDICHAR_MIRROR_MAP __mg_unicode_mirror_table[] =
|
||||
static const BIDICHAR_MIRROR_MAP unicode_mirror_table[] =
|
||||
{
|
||||
{ 0x000028, 0x000029 },
|
||||
{ 0x000029, 0x000028 },
|
||||
|
||||
@@ -121,48 +121,6 @@
|
||||
|
||||
#define BIDI_SENTINEL -1
|
||||
|
||||
/*
|
||||
* Define bit masks that joining types are based on, each mask has
|
||||
* only one bit set.
|
||||
*/
|
||||
#define BIDI_MASK_JOINS_RIGHT 0x01 /* May join to right */
|
||||
#define BIDI_MASK_JOINS_LEFT 0x02 /* May join to right */
|
||||
#define BIDI_MASK_ARAB_SHAPES 0x04 /* May Arabic shape */
|
||||
#define BIDI_MASK_TRANSPARENT 0x08 /* Is transparent */
|
||||
#define BIDI_MASK_IGNORED 0x10 /* Is ignored */
|
||||
#define BIDI_MASK_LIGATURED 0x20 /* Is ligatured */
|
||||
|
||||
/*
|
||||
* Define values for FriBidiJoiningType
|
||||
*/
|
||||
|
||||
/* nUn-joining */
|
||||
#define BIDI_JOINING_TYPE_U_VAL ( 0 )
|
||||
|
||||
/* Right-joining */
|
||||
#define BIDI_JOINING_TYPE_R_VAL \
|
||||
( BIDI_MASK_JOINS_RIGHT | BIDI_MASK_ARAB_SHAPES )
|
||||
|
||||
/* Dual-joining */
|
||||
#define BIDI_JOINING_TYPE_D_VAL \
|
||||
( BIDI_MASK_JOINS_RIGHT | BIDI_MASK_JOINS_LEFT \
|
||||
| BIDI_MASK_ARAB_SHAPES )
|
||||
|
||||
/* join-Causing */
|
||||
#define BIDI_JOINING_TYPE_C_VAL \
|
||||
( BIDI_MASK_JOINS_RIGHT | BIDI_MASK_JOINS_LEFT )
|
||||
|
||||
/* Left-joining */
|
||||
#define BIDI_JOINING_TYPE_L_VAL \
|
||||
( BIDI_MASK_JOINS_LEFT | BIDI_MASK_ARAB_SHAPES )
|
||||
|
||||
/* Transparent */
|
||||
#define BIDI_JOINING_TYPE_T_VAL \
|
||||
( BIDI_MASK_TRANSPARENT | BIDI_MASK_ARAB_SHAPES )
|
||||
|
||||
/* iGnored */
|
||||
#define BIDI_JOINING_TYPE_G_VAL ( BIDI_MASK_IGNORED )
|
||||
|
||||
enum _BidiJoiningTypeEnum {
|
||||
# define _UNIBIDI_ADD_TYPE(TYPE,SYMBOL) \
|
||||
BIDI_JOINING_TYPE_##TYPE = BIDI_JOINING_TYPE_##TYPE##_VAL,
|
||||
@@ -171,104 +129,6 @@ enum _BidiJoiningTypeEnum {
|
||||
_UNIBIDI_JOINING_TYPE_JUNK /* Don't use this */
|
||||
};
|
||||
|
||||
/*
|
||||
* The equivalent of JoiningType values for ArabicProp
|
||||
*/
|
||||
|
||||
/* Primary Arabic Joining Classes (Table 8-2) */
|
||||
|
||||
/* nUn-joining */
|
||||
#define BIDI_IS_JOINING_TYPE_U(p) \
|
||||
( 0 == ( (p) & \
|
||||
( BIDI_MASK_TRANSPARENT | BIDI_MASK_IGNORED \
|
||||
| BIDI_MASK_JOINS_RIGHT | BIDI_MASK_JOINS_LEFT ) ) )
|
||||
|
||||
/* Right-joining */
|
||||
#define BIDI_IS_JOINING_TYPE_R(p) \
|
||||
( BIDI_MASK_JOINS_RIGHT == ( (p) & \
|
||||
( BIDI_MASK_TRANSPARENT | BIDI_MASK_IGNORED \
|
||||
| BIDI_MASK_JOINS_RIGHT | BIDI_MASK_JOINS_LEFT ) ) )
|
||||
|
||||
/* Dual-joining */
|
||||
#define BIDI_IS_JOINING_TYPE_D(p) \
|
||||
( ( BIDI_MASK_JOINS_RIGHT | BIDI_MASK_JOINS_LEFT \
|
||||
| BIDI_MASK_ARAB_SHAPES ) == ( (p) & \
|
||||
( BIDI_MASK_TRANSPARENT | BIDI_MASK_IGNORED \
|
||||
| BIDI_MASK_JOINS_RIGHT | BIDI_MASK_JOINS_LEFT \
|
||||
| BIDI_MASK_ARAB_SHAPES ) ) )
|
||||
|
||||
/* join-Causing */
|
||||
#define BIDI_IS_JOINING_TYPE_C(p) \
|
||||
( ( BIDI_MASK_JOINS_RIGHT | BIDI_MASK_JOINS_LEFT ) == ( (p) & \
|
||||
( BIDI_MASK_TRANSPARENT | BIDI_MASK_IGNORED \
|
||||
| BIDI_MASK_JOINS_RIGHT | BIDI_MASK_JOINS_LEFT \
|
||||
| BIDI_MASK_ARAB_SHAPES ) ) )
|
||||
|
||||
/* Left-joining */
|
||||
#define BIDI_IS_JOINING_TYPE_L(p) \
|
||||
( BIDI_MASK_JOINS_LEFT == ( (p) & \
|
||||
( BIDI_MASK_TRANSPARENT | BIDI_MASK_IGNORED \
|
||||
| BIDI_MASK_JOINS_RIGHT | BIDI_MASK_JOINS_LEFT ) ) )
|
||||
|
||||
/* Transparent */
|
||||
#define BIDI_IS_JOINING_TYPE_T(p) \
|
||||
( BIDI_MASK_TRANSPARENT == ( (p) & \
|
||||
( BIDI_MASK_TRANSPARENT | BIDI_MASK_IGNORED ) ) )
|
||||
|
||||
/* iGnored */
|
||||
#define BIDI_IS_JOINING_TYPE_G(p) \
|
||||
( BIDI_MASK_IGNORED == ( (p) & \
|
||||
( BIDI_MASK_TRANSPARENT | BIDI_MASK_IGNORED ) ) )
|
||||
|
||||
/* and for Derived Arabic Joining Classes (Table 8-3) */
|
||||
|
||||
/* Right join-Causing */
|
||||
#define BIDI_IS_JOINING_TYPE_RC(p) \
|
||||
( BIDI_MASK_JOINS_RIGHT == ( (p) & \
|
||||
( BIDI_MASK_TRANSPARENT | BIDI_MASK_IGNORED \
|
||||
| BIDI_MASK_JOINS_RIGHT ) ) )
|
||||
|
||||
/* Left join-Causing */
|
||||
#define BIDI_IS_JOINING_TYPE_LC(p) \
|
||||
( BIDI_MASK_JOINS_LEFT == ( (p) & \
|
||||
( BIDI_MASK_TRANSPARENT | BIDI_MASK_IGNORED \
|
||||
| BIDI_MASK_JOINS_LEFT ) ) )
|
||||
|
||||
/*
|
||||
* Defining macros for needed queries, It is fully dependent on the
|
||||
* implementation of FriBidiJoiningType.
|
||||
*/
|
||||
|
||||
/* Joins to right: R, D, C? */
|
||||
#define BIDI_JOINS_RIGHT(p) ((p) & BIDI_MASK_JOINS_RIGHT)
|
||||
|
||||
/* Joins to left: L, D, C? */
|
||||
#define BIDI_JOINS_LEFT(p) ((p) & BIDI_MASK_JOINS_LEFT)
|
||||
|
||||
/* May shape: R, D, L, T? */
|
||||
#define BIDI_ARAB_SHAPES(p) ((p) & BIDI_MASK_ARAB_SHAPES)
|
||||
|
||||
/* Is skipped in joining: T, G? */
|
||||
#define BIDI_IS_JOIN_SKIPPED(p) \
|
||||
((p) & (BIDI_MASK_TRANSPARENT | BIDI_MASK_IGNORED))
|
||||
|
||||
/* Is base that will be shaped: R, D, L? */
|
||||
#define BIDI_IS_JOIN_BASE_SHAPES(p) \
|
||||
( BIDI_MASK_ARAB_SHAPES == ( (p) & \
|
||||
( BIDI_MASK_TRANSPARENT | BIDI_MASK_IGNORED \
|
||||
| BIDI_MASK_ARAB_SHAPES ) ) )
|
||||
|
||||
#define BIDI_JOINS_PRECEDING_MASK(level) \
|
||||
(BIDI_LEVEL_IS_RTL (level) ? BIDI_MASK_JOINS_RIGHT \
|
||||
: BIDI_MASK_JOINS_LEFT)
|
||||
|
||||
#define BIDI_JOINS_FOLLOWING_MASK(level) \
|
||||
(BIDI_LEVEL_IS_RTL (level) ? BIDI_MASK_JOINS_LEFT \
|
||||
: BIDI_MASK_JOINS_RIGHT)
|
||||
|
||||
#define BIDI_JOIN_SHAPE(p) \
|
||||
((p) & ( BIDI_MASK_JOINS_RIGHT | BIDI_MASK_JOINS_LEFT ))
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
@@ -70,8 +70,7 @@ typedef struct _PairMap {
|
||||
#include "unicode-arabic-misc-table.inc"
|
||||
|
||||
static void unibidi_shape_arabic_joining (const Uchar32 table[][4],
|
||||
Uchar32 min, Uchar32 max,
|
||||
const int len,
|
||||
Uchar32 min, Uchar32 max, const int len,
|
||||
const BidiArabicProp *ar_props,
|
||||
Uchar32 *str)
|
||||
{
|
||||
@@ -114,8 +113,7 @@ static Uchar32 find_pair_match (const PairMap *table, int size,
|
||||
find_pair_match(table, len, first, second))
|
||||
|
||||
static void unibidi_shape_arabic_ligature(const PairMap *table,
|
||||
int size, const BidiLevel *embedding_levels,
|
||||
int len,
|
||||
int size, const BidiLevel *embedding_levels, int len,
|
||||
BidiArabicProp *ar_props, Uchar32 *str)
|
||||
{
|
||||
/* TODO: This doesn't form ligatures for even-level Arabic text.
|
||||
@@ -145,8 +143,6 @@ static void unibidi_shape_arabic_ligature(const PairMap *table,
|
||||
void UBidiShapeArabic(Uint32 flags, const BidiLevel *embedding_levels, int len,
|
||||
BidiArabicProp *ar_props, Uchar32 *str)
|
||||
{
|
||||
_DBG_PRINTF ("in UBidiShapeArabic");
|
||||
|
||||
if (len == 0 || !str) return;
|
||||
|
||||
if (BIDI_TEST_BITS (flags, BIDI_FLAG_SHAPE_ARAB_PRES)) {
|
||||
@@ -154,11 +150,13 @@ void UBidiShapeArabic(Uint32 flags, const BidiLevel *embedding_levels, int len,
|
||||
}
|
||||
|
||||
if (BIDI_TEST_BITS (flags, BIDI_FLAG_SHAPE_ARAB_LIGA)) {
|
||||
DO_LIGATURING (mandatory_liga_table, embedding_levels, len, ar_props, str);
|
||||
DO_LIGATURING (mandatory_liga_table, embedding_levels, len,
|
||||
ar_props, str);
|
||||
}
|
||||
|
||||
if (BIDI_TEST_BITS (flags, BIDI_FLAG_SHAPE_ARAB_CONSOLE)) {
|
||||
DO_LIGATURING (console_liga_table, embedding_levels, len, ar_props, str);
|
||||
DO_LIGATURING (console_liga_table, embedding_levels, len,
|
||||
ar_props, str);
|
||||
DO_SHAPING (UNIBIDI_GET_ARABIC_SHAPE_NSM, len, ar_props, str);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -210,7 +210,7 @@ print ()
|
||||
print ("#ifndef _UNICODE_BIDI_TABLES_H")
|
||||
print ("#define _UNICODE_BIDI_TABLES_H")
|
||||
print ("")
|
||||
print ("static const BIDICHAR_TYPE_MAP __mg_unicode_bidi_char_type_map[] =")
|
||||
print ("static const BIDICHAR_TYPE_MAP unicode_bidi_char_type_map[] =")
|
||||
print ("{")
|
||||
|
||||
cur_chv = 0
|
||||
@@ -229,7 +229,7 @@ for i in range(1, NR_UNICODE_CHARS):
|
||||
|
||||
print ("};")
|
||||
print ("")
|
||||
print ("static const BIDICHAR_BRACKET __mg_unicode_bracket_table[] =")
|
||||
print ("static const BIDICHAR_BRACKET unicode_bracket_table[] =")
|
||||
print ("{")
|
||||
|
||||
d = data[1]
|
||||
@@ -239,18 +239,18 @@ for u in uu:
|
||||
v1 = d[u][1]
|
||||
v1 = v1.strip()
|
||||
if cmp(v1, 'o') == 0:
|
||||
bracket_type = "MGBIDI_BRACKET_OPEN"
|
||||
bracket_type = "_BIDI_BRACKET_OPEN"
|
||||
elif cmp(v1, 'c') == 0:
|
||||
bracket_type = "MGBIDI_BRACKET_CLOSE"
|
||||
bracket_type = "_BIDI_BRACKET_CLOSE"
|
||||
else:
|
||||
bracket_type = "MGBIDI_BRACKET_NONE"
|
||||
bracket_type = "_BIDI_BRACKET_NONE"
|
||||
|
||||
print (" { 0x%06X, %d, %s }," % (u, v0 - u, bracket_type, ))
|
||||
|
||||
print ("};")
|
||||
print ("")
|
||||
|
||||
print ("static const BIDICHAR_MIRROR_MAP __mg_unicode_mirror_table[] =")
|
||||
print ("static const BIDICHAR_MIRROR_MAP unicode_mirror_table[] =")
|
||||
print ("{")
|
||||
|
||||
d = data[2]
|
||||
|
||||
+3
-3
@@ -73,9 +73,9 @@ typedef struct _BIDICHAR_TYPE_MAP {
|
||||
Uint16 type;
|
||||
} BIDICHAR_TYPE_MAP;
|
||||
|
||||
#define MGBIDI_BRACKET_NONE 0
|
||||
#define MGBIDI_BRACKET_CLOSE 1
|
||||
#define MGBIDI_BRACKET_OPEN 2
|
||||
#define _BIDI_BRACKET_NONE 0
|
||||
#define _BIDI_BRACKET_CLOSE 1
|
||||
#define _BIDI_BRACKET_OPEN 2
|
||||
|
||||
// NOTE: It is enough to use Uint16 for Unicode bracket table
|
||||
typedef struct _BIDICHAR_BRACKET {
|
||||
|
||||
+201
-2
@@ -55,12 +55,211 @@
|
||||
|
||||
#ifdef _MGCHARSET_UNICODE
|
||||
|
||||
#if 0
|
||||
static void bidi_reverse_shaped_glyphs (void* context, int len, int pos)
|
||||
{
|
||||
int i;
|
||||
SHAPEDGLYPH* vgs = (SHAPEDGLYPH*)context + pos;
|
||||
|
||||
for (i = 0; i < len / 2; i++) {
|
||||
SHAPEDGLYPH tmp = vgs[i];
|
||||
vgs[i] = vgs[len - 1 - i];
|
||||
vgs[len - 1 - i] = tmp;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Local array size, used for stack-based local arrays */
|
||||
#define LOCAL_ARRAY_SIZE 128
|
||||
|
||||
int GUIAPI GetShapedGlyphsBasic(LOGFONT* logfont,
|
||||
LanguageCode content_language, UCharScriptType writing_system,
|
||||
const Uchar32* logical_ucs, int nr_ucs,
|
||||
Uint16* break_oppos, SHAPEDGLYPH* visual_glyphs,
|
||||
int* pos_l2v, int* nr_glyphs)
|
||||
BidiType *paragraph_dir, int* pos_l2v, int* nr_glyphs)
|
||||
{
|
||||
int i, j;
|
||||
BidiLevel max_level = 0;
|
||||
|
||||
Uchar32 local_visual_ucs[LOCAL_ARRAY_SIZE];
|
||||
Uchar32* visual_ucs = NULL;
|
||||
|
||||
BidiArabicProp local_ar_props[LOCAL_ARRAY_SIZE];
|
||||
BidiArabicProp *ar_props = NULL;
|
||||
|
||||
BidiType local_bidi_ts[LOCAL_ARRAY_SIZE];
|
||||
BidiType *bidi_ts = NULL;
|
||||
|
||||
BidiBracketType local_brk_ts[LOCAL_ARRAY_SIZE];
|
||||
BidiBracketType *brk_ts = NULL;
|
||||
|
||||
BidiLevel local_els[LOCAL_ARRAY_SIZE];
|
||||
BidiLevel* els = NULL;
|
||||
|
||||
int local_pos_v2l[LOCAL_ARRAY_SIZE];
|
||||
int* pos_v2l = NULL;
|
||||
|
||||
if (nr_ucs == 0 || logical_ucs == NULL || break_oppos == NULL ||
|
||||
visual_glyphs == NULL || nr_glyphs == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* TODO: tailor break opportunties according to the content languages.
|
||||
*/
|
||||
|
||||
if (nr_ucs < LOCAL_ARRAY_SIZE)
|
||||
visual_ucs = local_visual_ucs;
|
||||
else
|
||||
visual_ucs = malloc (nr_ucs * sizeof(Uchar32));
|
||||
|
||||
if (!visual_ucs)
|
||||
goto out;
|
||||
|
||||
if (nr_ucs < LOCAL_ARRAY_SIZE)
|
||||
bidi_ts = local_bidi_ts;
|
||||
else
|
||||
bidi_ts = malloc (nr_ucs * sizeof(BidiType));
|
||||
|
||||
if (!bidi_ts)
|
||||
goto out;
|
||||
|
||||
UStrGetBidiTypes(logical_ucs, nr_ucs, bidi_ts);
|
||||
|
||||
if (nr_ucs < LOCAL_ARRAY_SIZE)
|
||||
brk_ts = local_brk_ts;
|
||||
else
|
||||
brk_ts = (BidiBracketType*)malloc (nr_ucs * sizeof(BidiBracketType));
|
||||
|
||||
if (!brk_ts)
|
||||
goto out;
|
||||
|
||||
UStrGetBracketTypes (logical_ucs, bidi_ts, nr_ucs, brk_ts);
|
||||
|
||||
if (nr_ucs < LOCAL_ARRAY_SIZE)
|
||||
els = local_els;
|
||||
else
|
||||
els = (BidiLevel*)malloc (nr_ucs * sizeof(BidiLevel));
|
||||
|
||||
if (!els)
|
||||
goto out;
|
||||
|
||||
max_level = UBidiGetParagraphEmbeddingLevels(bidi_ts, brk_ts, nr_ucs,
|
||||
paragraph_dir, els) - 1;
|
||||
if (max_level < 0)
|
||||
goto out;
|
||||
|
||||
/* If l2v is to be calculated we must have to
|
||||
make a private instance of it. */
|
||||
if (pos_l2v) {
|
||||
if (nr_ucs < LOCAL_ARRAY_SIZE)
|
||||
pos_v2l = local_pos_v2l;
|
||||
else
|
||||
pos_v2l = (int*)malloc(sizeof(int) * nr_ucs);
|
||||
|
||||
if (!pos_v2l)
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Set up the ordering array to identity order */
|
||||
if (pos_v2l) {
|
||||
for (i = 0; i < nr_ucs; i++)
|
||||
pos_v2l[i] = i;
|
||||
}
|
||||
|
||||
memcpy(visual_ucs, logical_ucs, sizeof(Uchar32) * nr_ucs);
|
||||
|
||||
if (content_language == LANGCODE_ar) {
|
||||
/* Arabic joining */
|
||||
if (nr_ucs < LOCAL_ARRAY_SIZE)
|
||||
ar_props = local_ar_props;
|
||||
else
|
||||
ar_props = malloc(sizeof(BidiArabicProp) * nr_ucs);
|
||||
|
||||
if (!ar_props)
|
||||
goto out;
|
||||
|
||||
UStrGetJoiningTypes(logical_ucs, nr_ucs, ar_props);
|
||||
UBidiJoinArabic(bidi_ts, els, nr_ucs, ar_props);
|
||||
UBidiShape(BIDI_FLAG_SHAPE_MIRRORING | BIDI_FLAG_SHAPE_ARAB_PRES |
|
||||
BIDI_FLAG_SHAPE_ARAB_LIGA,
|
||||
els, nr_ucs, ar_props, visual_ucs);
|
||||
}
|
||||
|
||||
if (UBidiReorderLine(BIDI_FLAGS_DEFAULT, bidi_ts, nr_ucs, 0,
|
||||
*paragraph_dir, els, visual_ucs, pos_v2l, NULL, NULL) == 0)
|
||||
goto out;
|
||||
|
||||
/* get shaped glyphs */
|
||||
j = 0;
|
||||
for (i = 0; i < nr_ucs; i++) {
|
||||
if (pos_v2l[i] >= 0) {
|
||||
visual_glyphs[j].gv = GetGlyphValue(logfont,
|
||||
UCHAR2ACHAR(visual_ucs[i]));
|
||||
visual_glyphs[j].bos = break_oppos[pos_v2l[i]];
|
||||
|
||||
if (ar_props) {
|
||||
BidiArabicProp ar_prop = ar_props[pos_v2l[i]];
|
||||
if (ar_prop & BIDI_MASK_LIGATURED) {
|
||||
visual_glyphs[j].gt = GLYPH_TYPE_STDLIGATURE;
|
||||
visual_glyphs[j].gp = GLYPH_POS_BASELINE;
|
||||
}
|
||||
else if (ar_prop & BIDI_MASK_ARAB_SHAPES) {
|
||||
visual_glyphs[j].gt = GLYPH_TYPE_STDBASE;
|
||||
visual_glyphs[j].gp = GLYPH_POS_BASELINE;
|
||||
}
|
||||
else if (ar_prop & BIDI_MASK_TRANSPARENT) {
|
||||
visual_glyphs[j].gt = GLYPH_TYPE_STDMARK;
|
||||
visual_glyphs[j].gp = GLYPH_POS_STDMARK_ABOVE;
|
||||
}
|
||||
else {
|
||||
visual_glyphs[j].gt = GLYPH_TYPE_STANDALONE;
|
||||
visual_glyphs[j].gp = GLYPH_POS_BASELINE;
|
||||
}
|
||||
}
|
||||
else {
|
||||
visual_glyphs[j].gt = GLYPH_TYPE_STANDALONE;
|
||||
visual_glyphs[j].gp = GLYPH_POS_BASELINE;
|
||||
}
|
||||
|
||||
j++;
|
||||
}
|
||||
else {
|
||||
_DBG_PRINTF("%s: A character skipped\n", __FUNCTION__);
|
||||
}
|
||||
}
|
||||
|
||||
*nr_glyphs = j;
|
||||
|
||||
/* Convert the v2l list to l2v */
|
||||
if (pos_l2v) {
|
||||
for (i = 0; i < nr_ucs; i++)
|
||||
pos_l2v[i] = -1;
|
||||
for (i = 0; i < nr_ucs; i++)
|
||||
pos_l2v[pos_v2l[i]] = i;
|
||||
}
|
||||
|
||||
return nr_ucs;
|
||||
|
||||
out:
|
||||
if (visual_ucs && visual_ucs != local_visual_ucs)
|
||||
free (visual_ucs);
|
||||
|
||||
if (pos_v2l && pos_v2l != local_pos_v2l)
|
||||
free (pos_v2l);
|
||||
|
||||
if (els && els != local_els)
|
||||
free (els);
|
||||
|
||||
if (ar_props && ar_props != local_ar_props)
|
||||
free (ar_props);
|
||||
|
||||
if (bidi_ts && bidi_ts != local_bidi_ts)
|
||||
free (bidi_ts);
|
||||
|
||||
if (brk_ts && brk_ts != local_brk_ts)
|
||||
free (brk_ts);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -68,7 +267,7 @@ int GUIAPI GetShapedGlyphsComplex(LOGFONT* logfont,
|
||||
LanguageCode content_language, UCharScriptType writing_system,
|
||||
const Uchar32* logical_ucs, int nr_ucs,
|
||||
Uint16* break_oppos, SHAPEDGLYPH* visual_glyphs,
|
||||
int* pos_l2v, int* nr_glyphs)
|
||||
BidiType *paragraph_dir, int* pos_l2v, int* nr_glyphs)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user