File indexing completed on 2025-01-18 09:57:27
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027 #ifndef _FRIBIDI_JOINING_TYPES_H
0028 #define _FRIBIDI_JOINING_TYPES_H
0029
0030 #include "fribidi-common.h"
0031
0032 #include "fribidi-types.h"
0033
0034 #include "fribidi-begindecls.h"
0035
0036
0037
0038
0039
0040
0041 #define FRIBIDI_MASK_JOINS_RIGHT 0x01
0042 #define FRIBIDI_MASK_JOINS_LEFT 0x02
0043 #define FRIBIDI_MASK_ARAB_SHAPES 0x04
0044 #define FRIBIDI_MASK_TRANSPARENT 0x08
0045 #define FRIBIDI_MASK_IGNORED 0x10
0046 #define FRIBIDI_MASK_LIGATURED 0x20
0047
0048
0049
0050
0051
0052
0053 #define FRIBIDI_JOINING_TYPE_U_VAL ( 0 )
0054
0055
0056 #define FRIBIDI_JOINING_TYPE_R_VAL \
0057 ( FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_ARAB_SHAPES )
0058
0059
0060 #define FRIBIDI_JOINING_TYPE_D_VAL \
0061 ( FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_JOINS_LEFT \
0062 | FRIBIDI_MASK_ARAB_SHAPES )
0063
0064
0065 #define FRIBIDI_JOINING_TYPE_C_VAL \
0066 ( FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_JOINS_LEFT )
0067
0068
0069 #define FRIBIDI_JOINING_TYPE_L_VAL \
0070 ( FRIBIDI_MASK_JOINS_LEFT | FRIBIDI_MASK_ARAB_SHAPES )
0071
0072
0073 #define FRIBIDI_JOINING_TYPE_T_VAL \
0074 ( FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_ARAB_SHAPES )
0075
0076
0077 #define FRIBIDI_JOINING_TYPE_G_VAL ( FRIBIDI_MASK_IGNORED )
0078
0079
0080 enum _FriBidiJoiningTypeEnum
0081 {
0082 # define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL) \
0083 FRIBIDI_JOINING_TYPE_##TYPE = FRIBIDI_JOINING_TYPE_##TYPE##_VAL,
0084 # include "fribidi-joining-types-list.h"
0085 # undef _FRIBIDI_ADD_TYPE
0086 _FRIBIDI_JOINING_TYPE_JUNK
0087 };
0088
0089 #ifdef __FRIBIDI_DOC
0090 typedef enum _FriBidiJoiningTypeEnum FriBidiJoiningType;
0091 #else
0092 typedef uint8_t FriBidiJoiningType;
0093 #endif
0094
0095
0096
0097 typedef uint8_t FriBidiArabicProp;
0098
0099
0100
0101
0102
0103
0104
0105
0106 #define FRIBIDI_IS_JOINING_TYPE_U(p) \
0107 ( 0 == ( (p) & \
0108 ( FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_IGNORED \
0109 | FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_JOINS_LEFT ) ) )
0110
0111
0112 #define FRIBIDI_IS_JOINING_TYPE_R(p) \
0113 ( FRIBIDI_MASK_JOINS_RIGHT == ( (p) & \
0114 ( FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_IGNORED \
0115 | FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_JOINS_LEFT ) ) )
0116
0117
0118 #define FRIBIDI_IS_JOINING_TYPE_D(p) \
0119 ( ( FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_JOINS_LEFT \
0120 | FRIBIDI_MASK_ARAB_SHAPES ) == ( (p) & \
0121 ( FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_IGNORED \
0122 | FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_JOINS_LEFT \
0123 | FRIBIDI_MASK_ARAB_SHAPES ) ) )
0124
0125
0126 #define FRIBIDI_IS_JOINING_TYPE_C(p) \
0127 ( ( FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_JOINS_LEFT ) == ( (p) & \
0128 ( FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_IGNORED \
0129 | FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_JOINS_LEFT \
0130 | FRIBIDI_MASK_ARAB_SHAPES ) ) )
0131
0132
0133 #define FRIBIDI_IS_JOINING_TYPE_L(p) \
0134 ( FRIBIDI_MASK_JOINS_LEFT == ( (p) & \
0135 ( FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_IGNORED \
0136 | FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_JOINS_LEFT ) ) )
0137
0138
0139 #define FRIBIDI_IS_JOINING_TYPE_T(p) \
0140 ( FRIBIDI_MASK_TRANSPARENT == ( (p) & \
0141 ( FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_IGNORED ) ) )
0142
0143
0144 #define FRIBIDI_IS_JOINING_TYPE_G(p) \
0145 ( FRIBIDI_MASK_IGNORED == ( (p) & \
0146 ( FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_IGNORED ) ) )
0147
0148
0149
0150
0151 #define FRIBIDI_IS_JOINING_TYPE_RC(p) \
0152 ( FRIBIDI_MASK_JOINS_RIGHT == ( (p) & \
0153 ( FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_IGNORED \
0154 | FRIBIDI_MASK_JOINS_RIGHT ) ) )
0155
0156
0157 #define FRIBIDI_IS_JOINING_TYPE_LC(p) \
0158 ( FRIBIDI_MASK_JOINS_LEFT == ( (p) & \
0159 ( FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_IGNORED \
0160 | FRIBIDI_MASK_JOINS_LEFT ) ) )
0161
0162
0163
0164
0165
0166
0167
0168
0169 #define FRIBIDI_JOINS_RIGHT(p) ((p) & FRIBIDI_MASK_JOINS_RIGHT)
0170
0171
0172 #define FRIBIDI_JOINS_LEFT(p) ((p) & FRIBIDI_MASK_JOINS_LEFT)
0173
0174
0175 #define FRIBIDI_ARAB_SHAPES(p) ((p) & FRIBIDI_MASK_ARAB_SHAPES)
0176
0177
0178 #define FRIBIDI_IS_JOIN_SKIPPED(p) \
0179 ((p) & (FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_IGNORED))
0180
0181
0182 #define FRIBIDI_IS_JOIN_BASE_SHAPES(p) \
0183 ( FRIBIDI_MASK_ARAB_SHAPES == ( (p) & \
0184 ( FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_IGNORED \
0185 | FRIBIDI_MASK_ARAB_SHAPES ) ) )
0186
0187 #define FRIBIDI_JOINS_PRECEDING_MASK(level) \
0188 (FRIBIDI_LEVEL_IS_RTL (level) ? FRIBIDI_MASK_JOINS_RIGHT \
0189 : FRIBIDI_MASK_JOINS_LEFT)
0190
0191 #define FRIBIDI_JOINS_FOLLOWING_MASK(level) \
0192 (FRIBIDI_LEVEL_IS_RTL (level) ? FRIBIDI_MASK_JOINS_LEFT \
0193 : FRIBIDI_MASK_JOINS_RIGHT)
0194
0195 #define FRIBIDI_JOIN_SHAPE(p) \
0196 ((p) & ( FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_JOINS_LEFT ))
0197
0198
0199
0200
0201
0202
0203
0204
0205
0206
0207
0208
0209
0210
0211
0212
0213
0214 FRIBIDI_ENTRY FriBidiJoiningType
0215 fribidi_get_joining_type (
0216 FriBidiChar ch
0217 ) FRIBIDI_GNUC_CONST;
0218
0219
0220
0221
0222
0223
0224
0225 FRIBIDI_ENTRY void fribidi_get_joining_types (
0226 const FriBidiChar *str,
0227 const FriBidiStrIndex len,
0228 FriBidiJoiningType *jtypes
0229 );
0230
0231
0232
0233
0234
0235
0236
0237
0238
0239
0240 FRIBIDI_ENTRY const char *fribidi_get_joining_type_name (
0241 FriBidiJoiningType j
0242 ) FRIBIDI_GNUC_CONST;
0243
0244 #include "fribidi-enddecls.h"
0245
0246 #endif
0247
0248
0249