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_BIDI_TYPES_H
0028 #define _FRIBIDI_BIDI_TYPES_H
0029
0030 #include "fribidi-common.h"
0031
0032 #include "fribidi-types.h"
0033
0034 #include "fribidi-begindecls.h"
0035
0036 typedef signed char FriBidiLevel;
0037
0038
0039
0040
0041
0042
0043
0044 #define FRIBIDI_MASK_RTL 0x00000001L
0045 #define FRIBIDI_MASK_ARABIC 0x00000002L
0046
0047
0048 #define FRIBIDI_MASK_STRONG 0x00000010L
0049 #define FRIBIDI_MASK_WEAK 0x00000020L
0050 #define FRIBIDI_MASK_NEUTRAL 0x00000040L
0051 #define FRIBIDI_MASK_SENTINEL 0x00000080L
0052
0053
0054
0055 #define FRIBIDI_MASK_LETTER 0x00000100L
0056 #define FRIBIDI_MASK_NUMBER 0x00000200L
0057 #define FRIBIDI_MASK_NUMSEPTER 0x00000400L
0058 #define FRIBIDI_MASK_SPACE 0x00000800L
0059 #define FRIBIDI_MASK_EXPLICIT 0x00001000L
0060 #define FRIBIDI_MASK_ISOLATE 0x00008000L
0061
0062
0063 #define FRIBIDI_MASK_SEPARATOR 0x00002000L
0064
0065 #define FRIBIDI_MASK_OVERRIDE 0x00004000L
0066 #define FRIBIDI_MASK_FIRST 0x02000000L
0067
0068
0069
0070
0071
0072 #define FRIBIDI_MASK_ES 0x00010000L
0073 #define FRIBIDI_MASK_ET 0x00020000L
0074 #define FRIBIDI_MASK_CS 0x00040000L
0075
0076 #define FRIBIDI_MASK_NSM 0x00080000L
0077 #define FRIBIDI_MASK_BN 0x00100000L
0078
0079 #define FRIBIDI_MASK_BS 0x00200000L
0080 #define FRIBIDI_MASK_SS 0x00400000L
0081 #define FRIBIDI_MASK_WS 0x00800000L
0082
0083
0084 #define FRIBIDI_MASK_PRIVATE 0x01000000L
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094 #define FRIBIDI_TYPE_LTR_VAL ( FRIBIDI_MASK_STRONG | FRIBIDI_MASK_LETTER )
0095
0096 #define FRIBIDI_TYPE_RTL_VAL ( FRIBIDI_MASK_STRONG | FRIBIDI_MASK_LETTER \
0097 | FRIBIDI_MASK_RTL)
0098
0099 #define FRIBIDI_TYPE_AL_VAL ( FRIBIDI_MASK_STRONG | FRIBIDI_MASK_LETTER \
0100 | FRIBIDI_MASK_RTL | FRIBIDI_MASK_ARABIC )
0101
0102 #define FRIBIDI_TYPE_LRE_VAL ( FRIBIDI_MASK_STRONG | FRIBIDI_MASK_EXPLICIT)
0103
0104 #define FRIBIDI_TYPE_RLE_VAL ( FRIBIDI_MASK_STRONG | FRIBIDI_MASK_EXPLICIT \
0105 | FRIBIDI_MASK_RTL )
0106
0107 #define FRIBIDI_TYPE_LRO_VAL ( FRIBIDI_MASK_STRONG | FRIBIDI_MASK_EXPLICIT \
0108 | FRIBIDI_MASK_OVERRIDE )
0109
0110 #define FRIBIDI_TYPE_RLO_VAL ( FRIBIDI_MASK_STRONG | FRIBIDI_MASK_EXPLICIT \
0111 | FRIBIDI_MASK_RTL | FRIBIDI_MASK_OVERRIDE )
0112
0113
0114
0115
0116 #define FRIBIDI_TYPE_PDF_VAL ( FRIBIDI_MASK_WEAK | FRIBIDI_MASK_EXPLICIT )
0117
0118 #define FRIBIDI_TYPE_EN_VAL ( FRIBIDI_MASK_WEAK | FRIBIDI_MASK_NUMBER )
0119
0120 #define FRIBIDI_TYPE_AN_VAL ( FRIBIDI_MASK_WEAK | FRIBIDI_MASK_NUMBER \
0121 | FRIBIDI_MASK_ARABIC )
0122
0123 #define FRIBIDI_TYPE_ES_VAL ( FRIBIDI_MASK_WEAK | FRIBIDI_MASK_NUMSEPTER \
0124 | FRIBIDI_MASK_ES )
0125
0126 #define FRIBIDI_TYPE_ET_VAL ( FRIBIDI_MASK_WEAK | FRIBIDI_MASK_NUMSEPTER \
0127 | FRIBIDI_MASK_ET )
0128
0129 #define FRIBIDI_TYPE_CS_VAL ( FRIBIDI_MASK_WEAK | FRIBIDI_MASK_NUMSEPTER \
0130 | FRIBIDI_MASK_CS )
0131
0132 #define FRIBIDI_TYPE_NSM_VAL ( FRIBIDI_MASK_WEAK | FRIBIDI_MASK_NSM )
0133
0134 #define FRIBIDI_TYPE_BN_VAL ( FRIBIDI_MASK_WEAK | FRIBIDI_MASK_SPACE \
0135 | FRIBIDI_MASK_BN )
0136
0137
0138
0139
0140 #define FRIBIDI_TYPE_BS_VAL ( FRIBIDI_MASK_NEUTRAL | FRIBIDI_MASK_SPACE \
0141 | FRIBIDI_MASK_SEPARATOR | FRIBIDI_MASK_BS )
0142
0143 #define FRIBIDI_TYPE_SS_VAL ( FRIBIDI_MASK_NEUTRAL | FRIBIDI_MASK_SPACE \
0144 | FRIBIDI_MASK_SEPARATOR | FRIBIDI_MASK_SS )
0145
0146 #define FRIBIDI_TYPE_WS_VAL ( FRIBIDI_MASK_NEUTRAL | FRIBIDI_MASK_SPACE \
0147 | FRIBIDI_MASK_WS )
0148
0149 #define FRIBIDI_TYPE_ON_VAL ( FRIBIDI_MASK_NEUTRAL )
0150
0151
0152
0153
0154
0155 #define FRIBIDI_TYPE_WLTR_VAL ( FRIBIDI_MASK_WEAK )
0156
0157 #define FRIBIDI_TYPE_WRTL_VAL ( FRIBIDI_MASK_WEAK | FRIBIDI_MASK_RTL )
0158
0159
0160 #define FRIBIDI_TYPE_SENTINEL ( FRIBIDI_MASK_SENTINEL )
0161
0162
0163
0164 #define FRIBIDI_TYPE_PRIVATE ( FRIBIDI_MASK_PRIVATE )
0165
0166
0167
0168
0169
0170 #define FRIBIDI_TYPE_LRI_VAL ( FRIBIDI_MASK_NEUTRAL | FRIBIDI_MASK_ISOLATE )
0171
0172 #define FRIBIDI_TYPE_RLI_VAL ( FRIBIDI_MASK_NEUTRAL | FRIBIDI_MASK_ISOLATE | FRIBIDI_MASK_RTL )
0173
0174 #define FRIBIDI_TYPE_FSI_VAL ( FRIBIDI_MASK_NEUTRAL | FRIBIDI_MASK_ISOLATE | FRIBIDI_MASK_FIRST )
0175
0176
0177 #define FRIBIDI_TYPE_PDI_VAL ( FRIBIDI_MASK_NEUTRAL | FRIBIDI_MASK_WEAK | FRIBIDI_MASK_ISOLATE )
0178
0179
0180
0181
0182 #if defined(__FRIBIDI_DOC) || (FRIBIDI_SIZEOF_INT+0 == 4 && !defined(__cplusplus))
0183
0184 typedef enum
0185 {
0186 # define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL) \
0187 FRIBIDI_TYPE_##TYPE = FRIBIDI_TYPE_##TYPE##_VAL,
0188 # include "fribidi-bidi-types-list.h"
0189 # undef _FRIBIDI_ADD_TYPE
0190 _FRIBIDI_TYPE_SENTINEL = FRIBIDI_TYPE_SENTINEL
0191 } FriBidiCharType;
0192
0193 typedef enum
0194 {
0195 # define _FRIBIDI_PAR_TYPES
0196 # define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL) \
0197 FRIBIDI_PAR_##TYPE = FRIBIDI_TYPE_##TYPE##_VAL,
0198 # include "fribidi-bidi-types-list.h"
0199 # undef _FRIBIDI_ADD_TYPE
0200 # undef _FRIBIDI_PAR_TYPES
0201 _FRIBIDI_PAR_SENTINEL = FRIBIDI_TYPE_SENTINEL
0202 } FriBidiParType;
0203
0204 #else
0205
0206 typedef uint32_t FriBidiCharType;
0207 # define FRIBIDI_TYPE_LTR FRIBIDI_TYPE_LTR_VAL
0208 # define FRIBIDI_TYPE_RTL FRIBIDI_TYPE_RTL_VAL
0209 # define FRIBIDI_TYPE_AL FRIBIDI_TYPE_AL_VAL
0210 # define FRIBIDI_TYPE_EN FRIBIDI_TYPE_EN_VAL
0211 # define FRIBIDI_TYPE_AN FRIBIDI_TYPE_AN_VAL
0212 # define FRIBIDI_TYPE_ES FRIBIDI_TYPE_ES_VAL
0213 # define FRIBIDI_TYPE_ET FRIBIDI_TYPE_ET_VAL
0214 # define FRIBIDI_TYPE_CS FRIBIDI_TYPE_CS_VAL
0215 # define FRIBIDI_TYPE_NSM FRIBIDI_TYPE_NSM_VAL
0216 # define FRIBIDI_TYPE_BN FRIBIDI_TYPE_BN_VAL
0217 # define FRIBIDI_TYPE_BS FRIBIDI_TYPE_BS_VAL
0218 # define FRIBIDI_TYPE_SS FRIBIDI_TYPE_SS_VAL
0219 # define FRIBIDI_TYPE_WS FRIBIDI_TYPE_WS_VAL
0220 # define FRIBIDI_TYPE_ON FRIBIDI_TYPE_ON_VAL
0221 # define FRIBIDI_TYPE_LRE FRIBIDI_TYPE_LRE_VAL
0222 # define FRIBIDI_TYPE_RLE FRIBIDI_TYPE_RLE_VAL
0223 # define FRIBIDI_TYPE_LRO FRIBIDI_TYPE_LRO_VAL
0224 # define FRIBIDI_TYPE_RLO FRIBIDI_TYPE_RLO_VAL
0225 # define FRIBIDI_TYPE_PDF FRIBIDI_TYPE_PDF_VAL
0226 # define FRIBIDI_TYPE_LRI FRIBIDI_TYPE_LRI_VAL
0227 # define FRIBIDI_TYPE_RLI FRIBIDI_TYPE_RLI_VAL
0228 # define FRIBIDI_TYPE_FSI FRIBIDI_TYPE_FSI_VAL
0229 # define FRIBIDI_TYPE_PDI FRIBIDI_TYPE_PDI_VAL
0230
0231 typedef uint32_t FriBidiParType;
0232 # define FRIBIDI_PAR_LTR FRIBIDI_TYPE_LTR_VAL
0233 # define FRIBIDI_PAR_RTL FRIBIDI_TYPE_RTL_VAL
0234 # define FRIBIDI_PAR_ON FRIBIDI_TYPE_ON_VAL
0235 # define FRIBIDI_PAR_WLTR FRIBIDI_TYPE_WLTR_VAL
0236 # define FRIBIDI_PAR_WRTL FRIBIDI_TYPE_WRTL_VAL
0237
0238 #endif
0239
0240
0241 #define FRIBIDI_TYPE_WLTR FRIBIDI_PAR_WLTR
0242 #define FRIBIDI_TYPE_WRTL FRIBIDI_PAR_WRTL
0243
0244
0245
0246
0247
0248
0249
0250
0251
0252 #define FRIBIDI_LEVEL_IS_RTL(lev) ((lev) & 1)
0253
0254
0255
0256 #define FRIBIDI_LEVEL_TO_DIR(lev) \
0257 (FRIBIDI_LEVEL_IS_RTL (lev) ? FRIBIDI_TYPE_RTL : FRIBIDI_TYPE_LTR)
0258
0259
0260
0261 #define FRIBIDI_DIR_TO_LEVEL(dir) \
0262 ((FriBidiLevel) (FRIBIDI_IS_RTL (dir) ? 1 : 0))
0263
0264
0265 #define FRIBIDI_IS_RTL(p) ((p) & FRIBIDI_MASK_RTL)
0266
0267 #define FRIBIDI_IS_ARABIC(p) ((p) & FRIBIDI_MASK_ARABIC)
0268
0269
0270 #define FRIBIDI_IS_STRONG(p) ((p) & FRIBIDI_MASK_STRONG)
0271
0272 #define FRIBIDI_IS_WEAK(p) ((p) & FRIBIDI_MASK_WEAK)
0273
0274 #define FRIBIDI_IS_NEUTRAL(p) ((p) & FRIBIDI_MASK_NEUTRAL)
0275
0276 #define FRIBIDI_IS_SENTINEL(p) ((p) & FRIBIDI_MASK_SENTINEL)
0277
0278
0279 #define FRIBIDI_IS_LETTER(p) ((p) & FRIBIDI_MASK_LETTER)
0280
0281 #define FRIBIDI_IS_NUMBER(p) ((p) & FRIBIDI_MASK_NUMBER)
0282
0283 #define FRIBIDI_IS_NUMBER_SEPARATOR_OR_TERMINATOR(p) \
0284 ((p) & FRIBIDI_MASK_NUMSEPTER)
0285
0286 #define FRIBIDI_IS_SPACE(p) ((p) & FRIBIDI_MASK_SPACE)
0287
0288 #define FRIBIDI_IS_EXPLICIT(p) ((p) & FRIBIDI_MASK_EXPLICIT)
0289
0290 #define FRIBIDI_IS_ISOLATE(p) ((p) & FRIBIDI_MASK_ISOLATE)
0291
0292
0293 #define FRIBIDI_IS_SEPARATOR(p) ((p) & FRIBIDI_MASK_SEPARATOR)
0294
0295
0296 #define FRIBIDI_IS_OVERRIDE(p) ((p) & FRIBIDI_MASK_OVERRIDE)
0297
0298
0299
0300
0301 #define FRIBIDI_IS_LTR_LETTER(p) \
0302 ((p) & (FRIBIDI_MASK_LETTER | FRIBIDI_MASK_RTL) == FRIBIDI_MASK_LETTER)
0303
0304
0305 #define FRIBIDI_IS_RTL_LETTER(p) \
0306 ((p) & (FRIBIDI_MASK_LETTER | FRIBIDI_MASK_RTL) \
0307 == (FRIBIDI_MASK_LETTER | FRIBIDI_MASK_RTL))
0308
0309
0310 #define FRIBIDI_IS_ES_OR_CS(p) \
0311 ((p) & (FRIBIDI_MASK_ES | FRIBIDI_MASK_CS))
0312
0313
0314 #define FRIBIDI_IS_EXPLICIT_OR_BN(p) \
0315 ((p) & (FRIBIDI_MASK_EXPLICIT | FRIBIDI_MASK_BN))
0316
0317
0318 #define FRIBIDI_IS_EXPLICIT_OR_BN_OR_NSM(p) \
0319 ((p) & (FRIBIDI_MASK_EXPLICIT | FRIBIDI_MASK_BN | FRIBIDI_MASK_NSM))
0320
0321
0322 #define FRIBIDI_IS_EXPLICIT_OR_ISOLATE_OR_BN_OR_NSM(p) \
0323 ((p) & (FRIBIDI_MASK_EXPLICIT | FRIBIDI_MASK_ISOLATE | FRIBIDI_MASK_BN | FRIBIDI_MASK_NSM))
0324
0325
0326 #define FRIBIDI_IS_EXPLICIT_OR_BN_OR_WS(p) \
0327 ((p) & (FRIBIDI_MASK_EXPLICIT | FRIBIDI_MASK_BN | FRIBIDI_MASK_WS))
0328
0329
0330 #define FRIBIDI_IS_EXPLICIT_OR_SEPARATOR_OR_BN_OR_WS(p) \
0331 ((p) & (FRIBIDI_MASK_EXPLICIT | FRIBIDI_MASK_SEPARATOR \
0332 | FRIBIDI_MASK_BN | FRIBIDI_MASK_WS))
0333
0334
0335 #define FRIBIDI_IS_PRIVATE(p) ((p) & FRIBIDI_MASK_PRIVATE)
0336
0337
0338
0339
0340 #define FRIBIDI_CHANGE_NUMBER_TO_RTL(p) \
0341 (FRIBIDI_IS_NUMBER(p) ? FRIBIDI_TYPE_RTL : (p))
0342
0343
0344
0345 #define FRIBIDI_EXPLICIT_TO_OVERRIDE_DIR(p) \
0346 (FRIBIDI_IS_OVERRIDE(p) ? FRIBIDI_LEVEL_TO_DIR(FRIBIDI_DIR_TO_LEVEL(p)) \
0347 : FRIBIDI_TYPE_ON)
0348
0349
0350
0351 #define FRIBIDI_WEAK_PARAGRAPH(p) (FRIBIDI_PAR_WLTR | ((p) & FRIBIDI_MASK_RTL))
0352
0353
0354
0355
0356
0357
0358
0359
0360
0361
0362
0363
0364
0365
0366
0367
0368
0369 FRIBIDI_ENTRY FriBidiCharType
0370 fribidi_get_bidi_type (
0371 FriBidiChar ch
0372 ) FRIBIDI_GNUC_CONST;
0373
0374
0375
0376
0377
0378
0379
0380 FRIBIDI_ENTRY void fribidi_get_bidi_types (
0381 const FriBidiChar *str,
0382 const FriBidiStrIndex len,
0383 FriBidiCharType *btypes
0384 );
0385
0386
0387
0388
0389
0390
0391
0392
0393
0394
0395
0396 FRIBIDI_ENTRY const char *fribidi_get_bidi_type_name (
0397 FriBidiCharType t
0398 ) FRIBIDI_GNUC_CONST;
0399
0400 #include "fribidi-enddecls.h"
0401
0402 #endif
0403
0404
0405