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 20const char * const 21dirPropNames[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 26UChar 27charFromDirProp[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 34static const uint8_t 35testText1[]={ 36 L, L, WS, L, WS, EN, L, B 37}; 38 39static const UBiDiLevel 40testLevels1[]={ 41 0, 0, 0, 0, 0, 0, 0, 0 42}; 43 44static const uint8_t 45testVisualMap1[]={ 46 0, 1, 2, 3, 4, 5, 6, 7 47}; 48 49static const uint8_t 50testText2[]={ 51 R, AL, WS, R, AL, WS, R 52}; 53 54static const UBiDiLevel 55testLevels2[]={ 56 1, 1, 1, 1, 1, 1, 1 57}; 58 59static const uint8_t 60testVisualMap2[]={ 61 6, 5, 4, 3, 2, 1, 0 62}; 63 64static const uint8_t 65testText3[]={ 66 L, L, WS, EN, CS, WS, EN, CS, EN, WS, L, L 67}; 68 69static const UBiDiLevel 70testLevels3[]={ 71 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 72}; 73 74static const uint8_t 75testVisualMap3[]={ 76 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 77}; 78 79static const uint8_t 80testText4[]={ 81 L, AL, AL, AL, L, AL, AL, L, WS, EN, CS, WS, EN, CS, EN, WS, L, L 82}; 83 84static const UBiDiLevel 85testLevels4[]={ 86 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 87}; 88 89static const uint8_t 90testVisualMap4[]={ 91 0, 3, 2, 1, 4, 6, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 92}; 93 94static const uint8_t 95testText5[]={ 96 AL, R, AL, WS, EN, CS, WS, EN, CS, EN, WS, R, R, WS, L, L 97}; 98 99static const UBiDiLevel 100testLevels5[]={ 101 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2 102}; 103 104static const uint8_t 105testVisualMap5[]={ 106 15, 14, 13, 12, 11, 10, 9, 6, 7, 8, 5, 4, 3, 2, 0, 1 107}; 108 109static const uint8_t 110testText6[]={ 111 R, EN, NSM, ET 112}; 113 114static const UBiDiLevel 115testLevels6[]={ 116 1, 2, 2, 2 117}; 118 119static const uint8_t 120testVisualMap6[]={ 121 3, 0, 1, 2 122}; 123 124#if 0 125static const uint8_t 126testText7[]={ 127 /* empty */ 128}; 129 130static const UBiDiLevel 131testLevels7[]={ 132}; 133 134static const uint8_t 135testVisualMap7[]={ 136}; 137 138#endif 139 140static const uint8_t 141testText8[]={ 142 RLE, WS, R, R, R, WS, PDF, WS, B 143}; 144 145static const UBiDiLevel 146testLevels8[]={ 147 1, 1, 1, 1, 1, 1, 1, 1, 1 148}; 149 150static const uint8_t 151testVisualMap8[]={ 152 8, 7, 6, 5, 4, 3, 2, 1, 0 153}; 154 155static const uint8_t 156testText9[]={ 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 162static const UBiDiLevel 163testLevels9[]={ 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 167static const uint8_t 168testVisualMap9[]={ 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 172static const uint8_t 173testText10[]={ 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 179static const UBiDiLevel 180testLevels10[]={ 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 184static const uint8_t 185testVisualMap10[]={ 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 189static const uint8_t 190testText11[]={ 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 197static const UBiDiLevel 198testLevels11[]={ 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 202static const uint8_t 203testVisualMap11[]={ 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 207static const uint8_t 208testText12[]={ 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 216static const UBiDiLevel 217testLevels12[]={ 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 221static const uint8_t 222testVisualMap12[]={ 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 226static const UBiDiLevel 227testLevels13[]={ 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 231static const uint8_t 232testVisualMap13[]={ 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 236static const UBiDiLevel 237testLevels14[]={ 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 241static const uint8_t 242testVisualMap14[]={ 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 246static const UBiDiLevel 247testLevels15[]={ 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 251static const uint8_t 252testVisualMap15[]={ 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 256static const UBiDiLevel 257testLevels16[]={ 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 261static const uint8_t 262testVisualMap16[]={ 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 266static const uint8_t 267testText13[]={ 268 ON, L, RLO, CS, R, WS, AN, AN, PDF, LRE, R, L, LRO, WS, BN, ON, S, LRE, LRO, B 269}; 270 271static const UBiDiLevel 272testLevels17[]={ 273 0, 0, 1, 1, 1, 1, 1, 1, 3, 3, 3, 2, 4, 4, 4, 4, 0, 0, 0, 0 274}; 275 276static const uint8_t 277testVisualMap17[]={ 278 0, 1, 15, 14, 13, 12, 11, 10, 4, 3, 2, 5, 6, 7, 8, 9, 16, 17, 18, 19 279}; 280 281static const UBiDiLevel 282testLevels18[]={ 283 0, 0, 1, 1, 1, 0 284}; 285 286static const uint8_t 287testVisualMap18[]={ 288 0, 1, 4, 3, 2, 5 289}; 290 291static const uint8_t 292testText14[]={ 293 RLO, RLO, AL, AL, WS, EN, ES, ON, WS, S, S, PDF, LRO, WS, AL, ET, RLE, ON, EN, B 294}; 295 296static const UBiDiLevel 297testLevels19[]={ 298 1 299}; 300 301static const uint8_t 302testVisualMap19[]={ 303 0 304}; 305 306static const uint8_t 307testText15[]={ 308 R, L, CS, L 309}; 310 311static const UBiDiLevel 312testLevels20[]={ 313 2 314}; 315 316static const uint8_t 317testText16[]={ 318 L, L, L, WS, L, L, L, WS, L, L, L 319}; 320 321static const UBiDiLevel 322testLevels21[]={ 323 2, 2, 2, 2, 2, 2, 2, 1 324}; 325 326static const uint8_t 327testVisualMap20[]={ 328 1, 2, 3, 4, 5, 6, 7, 0 329}; 330 331static const uint8_t 332testText17[]={ 333 R, R, R, WS, R, R, R, WS, R, R, R 334}; 335 336static const UBiDiLevel 337testLevels22[]={ 338 1, 1, 1, 1, 1, 1, 1, 0 339}; 340 341static const uint8_t 342testVisualMap21[]={ 343 6, 5, 4, 3, 2, 1, 0, 7 344}; 345 346static const uint8_t 347testTextXX[]={ 348 L 349}; 350 351static const UBiDiLevel 352testLevelsXX[]={ 353 2 354}; 355 356static const uint8_t 357testVisualMapXX[]={ 358 0 359}; 360 361const BiDiTestData 362tests[]={ 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 433const int 434bidiTestCount=ARRAY_LENGTH(tests); 435