1 /******************************************************************** 2 * COPYRIGHT: 3 * Copyright (c) 1997-2007, International Business Machines Corporation and 4 * others. All Rights Reserved. 5 ********************************************************************/ 6 /* file name: cbididat.c 7 * encoding: US-ASCII 8 * tab size: 8 (not used) 9 * indentation:4 10 * 11 * created on: 1999sep22 12 * created by: Markus W. Scherer 13 */ 14 15 #include "unicode/utypes.h" 16 #include "unicode/uchar.h" 17 #include "unicode/ubidi.h" 18 #include "cbiditst.h" 19 20 const char * const 21 dirPropNames[U_CHAR_DIRECTION_COUNT]={ 22 "L", "R", "EN", "ES", "ET", "AN", "CS", "B", "S", "WS", "ON", 23 "LRE", "LRO", "AL", "RLE", "RLO", "PDF", "NSM", "BN" 24 }; 25 26 UChar 27 charFromDirProp[U_CHAR_DIRECTION_COUNT]={ 28 /* L R EN ES ET AN CS B S WS ON */ 29 0x61, 0x5d0, 0x30, 0x2f, 0x25, 0x660, 0x2c, 0xa, 0x9, 0x20, 0x26, 30 /* LRE LRO AL RLE RLO PDF NSM BN */ 31 0x202a, 0x202d, 0x627, 0x202b, 0x202e, 0x202c, 0x308, 0x200c 32 }; 33 34 static const uint8_t 35 testText1[]={ 36 L, L, WS, L, WS, EN, L, B 37 }; 38 39 static const UBiDiLevel 40 testLevels1[]={ 41 0, 0, 0, 0, 0, 0, 0, 0 42 }; 43 44 static const uint8_t 45 testVisualMap1[]={ 46 0, 1, 2, 3, 4, 5, 6, 7 47 }; 48 49 static const uint8_t 50 testText2[]={ 51 R, AL, WS, R, AL, WS, R 52 }; 53 54 static const UBiDiLevel 55 testLevels2[]={ 56 1, 1, 1, 1, 1, 1, 1 57 }; 58 59 static const uint8_t 60 testVisualMap2[]={ 61 6, 5, 4, 3, 2, 1, 0 62 }; 63 64 static const uint8_t 65 testText3[]={ 66 L, L, WS, EN, CS, WS, EN, CS, EN, WS, L, L 67 }; 68 69 static const UBiDiLevel 70 testLevels3[]={ 71 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 72 }; 73 74 static const uint8_t 75 testVisualMap3[]={ 76 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 77 }; 78 79 static const uint8_t 80 testText4[]={ 81 L, AL, AL, AL, L, AL, AL, L, WS, EN, CS, WS, EN, CS, EN, WS, L, L 82 }; 83 84 static const UBiDiLevel 85 testLevels4[]={ 86 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 87 }; 88 89 static const uint8_t 90 testVisualMap4[]={ 91 0, 3, 2, 1, 4, 6, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 92 }; 93 94 static const uint8_t 95 testText5[]={ 96 AL, R, AL, WS, EN, CS, WS, EN, CS, EN, WS, R, R, WS, L, L 97 }; 98 99 static const UBiDiLevel 100 testLevels5[]={ 101 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2 102 }; 103 104 static const uint8_t 105 testVisualMap5[]={ 106 15, 14, 13, 12, 11, 10, 9, 6, 7, 8, 5, 4, 3, 2, 0, 1 107 }; 108 109 static const uint8_t 110 testText6[]={ 111 R, EN, NSM, ET 112 }; 113 114 static const UBiDiLevel 115 testLevels6[]={ 116 1, 2, 2, 2 117 }; 118 119 static const uint8_t 120 testVisualMap6[]={ 121 3, 0, 1, 2 122 }; 123 124 #if 0 125 static const uint8_t 126 testText7[]={ 127 /* empty */ 128 }; 129 130 static const UBiDiLevel 131 testLevels7[]={ 132 }; 133 134 static const uint8_t 135 testVisualMap7[]={ 136 }; 137 138 #endif 139 140 static const uint8_t 141 testText8[]={ 142 RLE, WS, R, R, R, WS, PDF, WS, B 143 }; 144 145 static const UBiDiLevel 146 testLevels8[]={ 147 1, 1, 1, 1, 1, 1, 1, 1, 1 148 }; 149 150 static const uint8_t 151 testVisualMap8[]={ 152 8, 7, 6, 5, 4, 3, 2, 1, 0 153 }; 154 155 static const uint8_t 156 testText9[]={ 157 LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, 158 LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, 159 AN, RLO, NSM, LRE, PDF, RLE, ES, EN, ON 160 }; 161 162 static const UBiDiLevel 163 testLevels9[]={ 164 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 61, 61, 61, 61, 61, 61, 61, 61 165 }; 166 167 static const uint8_t 168 testVisualMap9[]={ 169 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 7, 6, 5, 4, 3, 2, 1, 0 170 }; 171 172 static const uint8_t 173 testText10[]={ 174 LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, 175 LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, 176 LRE, BN, CS, RLO, S, PDF, EN, LRO, AN, ES 177 }; 178 179 static const UBiDiLevel 180 testLevels10[]={ 181 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 0, 0, 62, 62, 62, 62, 60 182 }; 183 184 static const uint8_t 185 testVisualMap10[]={ 186 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39 187 }; 188 189 static const uint8_t 190 testText11[]={ 191 S, WS, NSM, RLE, WS, L, L, L, WS, LRO, WS, R, R, R, WS, RLO, WS, L, L, 192 L, WS, LRE, WS, R, R, R, WS, PDF, WS, L, L, L, WS, PDF, WS, 193 AL, AL, AL, WS, PDF, WS, L, L, L, WS, PDF, WS, L, L, L, WS, PDF, 194 ON, PDF, BN, BN, ON, PDF 195 }; 196 197 static const UBiDiLevel 198 testLevels11[]={ 199 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5, 5, 4, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 200 }; 201 202 static const uint8_t 203 testVisualMap11[]={ 204 0, 1, 2, 44, 43, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 31, 30, 29, 28, 27, 26, 20, 21, 24, 23, 22, 25, 19, 18, 17, 16, 15, 14, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 3, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 205 }; 206 207 static const uint8_t 208 testText12[]={ 209 NSM, WS, L, L, L, L, L, L, L, WS, L, L, L, L, WS, 210 R, R, R, R, R, WS, L, L, L, L, L, L, L, WS, WS, AL, 211 AL, AL, AL, WS, EN, EN, ES, EN, EN, CS, S, EN, EN, CS, WS, 212 EN, EN, WS, AL, AL, AL, AL, AL, B, L, L, L, L, L, L, 213 L, L, WS, AN, AN, CS, AN, AN, WS 214 }; 215 216 static const UBiDiLevel 217 testLevels12[]={ 218 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 0, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0 219 }; 220 221 static const uint8_t 222 testVisualMap12[]={ 223 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 18, 17, 16, 15, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 40, 39, 38, 37, 36, 34, 35, 33, 31, 32, 30, 41, 52, 53, 51, 50, 48, 49, 47, 46, 45, 44, 43, 42, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69 224 }; 225 226 static const UBiDiLevel 227 testLevels13[]={ 228 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 0, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0 229 }; 230 231 static const uint8_t 232 testVisualMap13[]={ 233 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 18, 17, 16, 15, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 40, 39, 38, 37, 36, 34, 35, 33, 31, 32, 30, 41, 52, 53, 51, 50, 48, 49, 47, 46, 45, 44, 43, 42, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69 234 }; 235 236 static const UBiDiLevel 237 testLevels14[]={ 238 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 3, 4, 4, 3, 2, 4, 4, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 2 239 }; 240 241 static const uint8_t 242 testVisualMap14[]={ 243 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 18, 17, 16, 15, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 40, 39, 38, 37, 36, 34, 35, 33, 31, 32, 30, 41, 52, 53, 51, 50, 48, 49, 47, 46, 45, 44, 43, 42, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69 244 }; 245 246 static const UBiDiLevel 247 testLevels15[]={ 248 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 6, 6, 5, 6, 6, 5, 5, 6, 6, 5, 5, 6, 6, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6, 5 249 }; 250 251 static const uint8_t 252 testVisualMap15[]={ 253 69, 68, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 55, 54, 53, 52, 51, 50, 49, 42, 43, 44, 45, 46, 47, 48, 41, 40, 39, 38, 37, 36, 35, 33, 34, 32, 30, 31, 29, 28, 26, 27, 25, 24, 22, 23, 21, 20, 19, 18, 17, 16, 15, 7, 8, 9, 10, 11, 12, 13, 14, 6, 1, 2, 3, 4, 5, 0 254 }; 255 256 static const UBiDiLevel 257 testLevels16[]={ 258 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 0, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0 259 }; 260 261 static const uint8_t 262 testVisualMap16[]={ 263 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 18, 17, 16, 15, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 40, 39, 38, 37, 36, 34, 35, 33, 31, 32, 30, 41, 52, 53, 51, 50, 48, 49, 47, 46, 45, 44, 43, 42, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69 264 }; 265 266 static const uint8_t 267 testText13[]={ 268 ON, L, RLO, CS, R, WS, AN, AN, PDF, LRE, R, L, LRO, WS, BN, ON, S, LRE, LRO, B 269 }; 270 271 static const UBiDiLevel 272 testLevels17[]={ 273 0, 0, 1, 1, 1, 1, 1, 1, 3, 3, 3, 2, 4, 4, 4, 4, 0, 0, 0, 0 274 }; 275 276 static const uint8_t 277 testVisualMap17[]={ 278 0, 1, 15, 14, 13, 12, 11, 10, 4, 3, 2, 5, 6, 7, 8, 9, 16, 17, 18, 19 279 }; 280 281 static const UBiDiLevel 282 testLevels18[]={ 283 0, 0, 1, 1, 1, 0 284 }; 285 286 static const uint8_t 287 testVisualMap18[]={ 288 0, 1, 4, 3, 2, 5 289 }; 290 291 static const uint8_t 292 testText14[]={ 293 RLO, RLO, AL, AL, WS, EN, ES, ON, WS, S, S, PDF, LRO, WS, AL, ET, RLE, ON, EN, B 294 }; 295 296 static const UBiDiLevel 297 testLevels19[]={ 298 1 299 }; 300 301 static const uint8_t 302 testVisualMap19[]={ 303 0 304 }; 305 306 static const uint8_t 307 testText15[]={ 308 R, L, CS, L 309 }; 310 311 static const UBiDiLevel 312 testLevels20[]={ 313 2 314 }; 315 316 static const uint8_t 317 testText16[]={ 318 L, L, L, WS, L, L, L, WS, L, L, L 319 }; 320 321 static const UBiDiLevel 322 testLevels21[]={ 323 2, 2, 2, 2, 2, 2, 2, 1 324 }; 325 326 static const uint8_t 327 testVisualMap20[]={ 328 1, 2, 3, 4, 5, 6, 7, 0 329 }; 330 331 static const uint8_t 332 testText17[]={ 333 R, R, R, WS, R, R, R, WS, R, R, R 334 }; 335 336 static const UBiDiLevel 337 testLevels22[]={ 338 1, 1, 1, 1, 1, 1, 1, 0 339 }; 340 341 static const uint8_t 342 testVisualMap21[]={ 343 6, 5, 4, 3, 2, 1, 0, 7 344 }; 345 346 static const uint8_t 347 testTextXX[]={ 348 L 349 }; 350 351 static const UBiDiLevel 352 testLevelsXX[]={ 353 2 354 }; 355 356 static const uint8_t 357 testVisualMapXX[]={ 358 0 359 }; 360 361 const BiDiTestData 362 tests[]={ 363 {testText1, ARRAY_LENGTH(testText1), UBIDI_DEFAULT_LTR, -1, -1, 364 UBIDI_LTR, 0, 365 testLevels1, testVisualMap1}, 366 {testText2, ARRAY_LENGTH(testText2), UBIDI_DEFAULT_LTR, -1, -1, 367 UBIDI_RTL, 1, 368 testLevels2, testVisualMap2}, 369 {testText3, ARRAY_LENGTH(testText3), UBIDI_DEFAULT_LTR, -1, -1, 370 UBIDI_LTR, 0, 371 testLevels3, testVisualMap3}, 372 {testText4, ARRAY_LENGTH(testText4), UBIDI_DEFAULT_LTR, -1, -1, 373 UBIDI_MIXED, 0, 374 testLevels4, testVisualMap4}, 375 {testText5, ARRAY_LENGTH(testText5), UBIDI_DEFAULT_LTR, -1, -1, 376 UBIDI_MIXED, 1, 377 testLevels5, testVisualMap5}, 378 {testText6, ARRAY_LENGTH(testText6), UBIDI_DEFAULT_LTR, -1, -1, 379 UBIDI_MIXED, 1, 380 testLevels6, testVisualMap6}, 381 {NULL, 0, UBIDI_DEFAULT_LTR, -1, -1, 382 UBIDI_LTR, 0, 383 NULL, NULL}, 384 {testText8, ARRAY_LENGTH(testText8), UBIDI_DEFAULT_LTR, -1, -1, 385 UBIDI_RTL, 1, 386 testLevels8, testVisualMap8}, 387 {testText9, ARRAY_LENGTH(testText9), UBIDI_DEFAULT_LTR, -1, -1, 388 UBIDI_MIXED, 0, 389 testLevels9, testVisualMap9}, 390 {testText10, ARRAY_LENGTH(testText10), UBIDI_DEFAULT_LTR, -1, -1, 391 UBIDI_MIXED, 0, 392 testLevels10, testVisualMap10}, 393 {testText11, ARRAY_LENGTH(testText11), UBIDI_DEFAULT_LTR, -1, -1, 394 UBIDI_MIXED, 0, 395 testLevels11, testVisualMap11}, 396 {testText12, ARRAY_LENGTH(testText12), UBIDI_DEFAULT_LTR, -1, -1, 397 UBIDI_MIXED, 0, 398 testLevels12, testVisualMap12}, 399 {testText12, ARRAY_LENGTH(testText12), UBIDI_DEFAULT_RTL, -1, -1, 400 UBIDI_MIXED, 0, 401 testLevels13, testVisualMap13}, 402 {testText12, ARRAY_LENGTH(testText12), 2, -1, -1, 403 UBIDI_MIXED, 2, 404 testLevels14, testVisualMap14}, 405 {testText12, ARRAY_LENGTH(testText12), 5, -1, -1, 406 UBIDI_MIXED, 5, 407 testLevels15, testVisualMap15}, 408 {testText12, ARRAY_LENGTH(testText12), UBIDI_DEFAULT_LTR, -1, -1, 409 UBIDI_MIXED, 0, 410 testLevels16, testVisualMap16}, 411 {testText13, ARRAY_LENGTH(testText13), UBIDI_DEFAULT_LTR, -1, -1, 412 UBIDI_MIXED, 0, 413 testLevels17, testVisualMap17}, 414 {testText13, ARRAY_LENGTH(testText13), UBIDI_DEFAULT_LTR, 0, 6, 415 UBIDI_MIXED, 0, 416 testLevels18, testVisualMap18}, 417 {testText14, ARRAY_LENGTH(testText14), UBIDI_DEFAULT_LTR, 13, 14, 418 UBIDI_RTL, 1, 419 testLevels19, testVisualMap19}, 420 {testText15, ARRAY_LENGTH(testText15), UBIDI_DEFAULT_LTR, 2, 3, 421 UBIDI_LTR, 2, 422 testLevels20, testVisualMap19}, 423 {testText16, ARRAY_LENGTH(testText16), UBIDI_RTL, 0, 8, 424 UBIDI_MIXED, 1, 425 testLevels21, testVisualMap20}, 426 {testText17, ARRAY_LENGTH(testText17), UBIDI_LTR, 0, 8, 427 UBIDI_MIXED, 0, 428 testLevels22, testVisualMap21}, 429 {testTextXX, ARRAY_LENGTH(testTextXX), UBIDI_RTL, -1, -1, 430 UBIDI_MIXED, 1, testLevelsXX, testVisualMapXX} 431 }; 432 433 const int 434 bidiTestCount=ARRAY_LENGTH(tests); 435