|  | /* | 
|  | ******************************************************************************* | 
|  | *                                                                             * | 
|  | * COPYRIGHT:                                                                  * | 
|  | *   (C) Copyright International Business Machines Corporation, 1999           * | 
|  | *   Licensed Material - Program-Property of IBM - All Rights Reserved.        * | 
|  | *   US Government Users Restricted Rights - Use, duplication, or disclosure   * | 
|  | *   restricted by GSA ADP Schedule Contract with IBM Corp.                    * | 
|  | *                                                                             * | 
|  | ******************************************************************************* | 
|  | *   file name:  cbididat.c | 
|  | *   encoding:   US-ASCII | 
|  | *   tab size:   8 (not used) | 
|  | *   indentation:4 | 
|  | * | 
|  | *   created on: 1999sep22 | 
|  | *   created by: Markus W. Scherer | 
|  | */ | 
|  |  | 
|  | #include "utypes.h" | 
|  | #include "uchar.h" | 
|  | #include "ubidi.h" | 
|  | #include "cbiditst.h" | 
|  |  | 
|  | extern const char * | 
|  | dirPropNames[dirPropCount]={ | 
|  | "L", "R", "EN", "ES", "ET", "AN", "CS", "B", "S", "WS", "ON", | 
|  | "LRE", "LRO", "AL", "RLE", "RLO", "PDF", "NSM", "BN" | 
|  | }; | 
|  |  | 
|  | extern const UChar | 
|  | charFromDirProp[dirPropCount]={ | 
|  | /* L     R      EN    ES    ET    AN     CS    B    S    WS    ON */ | 
|  | 0x61, 0x5d0, 0x30, 0x2f, 0x25, 0x660, 0x2c, 0xa, 0x9, 0x20, 0x26, | 
|  | /* LRE     LRO     AL     RLE     RLO     PDF     NSM    BN */ | 
|  | 0x202a, 0x202d, 0x627, 0x202b, 0x202e, 0x202c, 0x308, 0x200c | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testText1[]={ | 
|  | L, L, WS, L, WS, EN, L, B | 
|  | }; | 
|  |  | 
|  | static const UBiDiLevel | 
|  | testLevels1[]={ | 
|  | 0, 0, 0, 0, 0, 0, 0, 0 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testVisualMap1[]={ | 
|  | 0, 1, 2, 3, 4, 5, 6, 7 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testText2[]={ | 
|  | R, AL, WS, R, AL, WS, R | 
|  | }; | 
|  |  | 
|  | static const UBiDiLevel | 
|  | testLevels2[]={ | 
|  | 1, 1, 1, 1, 1, 1, 1 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testVisualMap2[]={ | 
|  | 6, 5, 4, 3, 2, 1, 0 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testText3[]={ | 
|  | L, L, WS, EN, CS, WS, EN, CS, EN, WS, L, L | 
|  | }; | 
|  |  | 
|  | static const UBiDiLevel | 
|  | testLevels3[]={ | 
|  | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testVisualMap3[]={ | 
|  | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testText4[]={ | 
|  | L, AL, AL, AL, L, AL, AL, L, WS, EN, CS, WS, EN, CS, EN, WS, L, L | 
|  | }; | 
|  |  | 
|  | static const UBiDiLevel | 
|  | testLevels4[]={ | 
|  | 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testVisualMap4[]={ | 
|  | 0, 3, 2, 1, 4, 6, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testText5[]={ | 
|  | AL, R, AL, WS, EN, CS, WS, EN, CS, EN, WS, R, R, WS, L, L | 
|  | }; | 
|  |  | 
|  | static const UBiDiLevel | 
|  | testLevels5[]={ | 
|  | 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testVisualMap5[]={ | 
|  | 15, 14, 13, 12, 11, 10, 9, 6, 7, 8, 5, 4, 3, 2, 0, 1 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testText6[]={ | 
|  | R, EN, NSM, ET | 
|  | }; | 
|  |  | 
|  | static const UBiDiLevel | 
|  | testLevels6[]={ | 
|  | 1, 2, 2, 2 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testVisualMap6[]={ | 
|  | 3, 0, 1, 2 | 
|  | }; | 
|  |  | 
|  | #if 0 | 
|  | static const uint8_t | 
|  | testText7[]={ | 
|  | /* empty */ | 
|  | }; | 
|  |  | 
|  | static const UBiDiLevel | 
|  | testLevels7[]={ | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testVisualMap7[]={ | 
|  | }; | 
|  |  | 
|  | #endif | 
|  |  | 
|  | static const uint8_t | 
|  | testText8[]={ | 
|  | RLE, WS, R, R, R, WS, PDF, WS, B | 
|  | }; | 
|  |  | 
|  | static const UBiDiLevel | 
|  | testLevels8[]={ | 
|  | 1, 1, 1, 1, 1, 1, 1, 1, 1 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testVisualMap8[]={ | 
|  | 8, 7, 6, 5, 4, 3, 2, 1, 0 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testText9[]={ | 
|  | LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, | 
|  | LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, | 
|  | AN, RLO, NSM, LRE, PDF, RLE, ES, EN, ON | 
|  | }; | 
|  |  | 
|  | static const UBiDiLevel | 
|  | testLevels9[]={ | 
|  | 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 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testVisualMap9[]={ | 
|  | 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 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testText10[]={ | 
|  | LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, | 
|  | LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, | 
|  | LRE, BN, CS, RLO, S, PDF, EN, LRO, AN, ES | 
|  | }; | 
|  |  | 
|  | static const UBiDiLevel | 
|  | testLevels10[]={ | 
|  | 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 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testVisualMap10[]={ | 
|  | 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 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testText11[]={ | 
|  | S, WS, NSM, RLE, WS, L, L, L, WS, LRO, WS, R, R, R, WS, RLO, WS, L, L, | 
|  | L, WS, LRE, WS, R, R, R, WS, PDF, WS, L, L, L, WS, PDF, WS, | 
|  | AL, AL, AL, WS, PDF, WS, L, L, L, WS, PDF, WS, L, L, L, WS, PDF, | 
|  | ON, PDF, BN, BN, ON, PDF | 
|  | }; | 
|  |  | 
|  | static const UBiDiLevel | 
|  | testLevels11[]={ | 
|  | 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 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testVisualMap11[]={ | 
|  | 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 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testText12[]={ | 
|  | NSM, WS, L, L, L, L, L, L, L, WS, L, L, L, L, WS, | 
|  | R, R, R, R, R, WS, L, L, L, L, L, L, L, WS, WS, AL, | 
|  | AL, AL, AL, WS, EN, EN, ES, EN, EN, CS, S, EN, EN, CS, WS, | 
|  | EN, EN, WS, AL, AL, AL, AL, AL, B, L, L, L, L, L, L, | 
|  | L, L, WS, AN, AN, CS, AN, AN, WS | 
|  | }; | 
|  |  | 
|  | static const UBiDiLevel | 
|  | testLevels12[]={ | 
|  | 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 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testVisualMap12[]={ | 
|  | 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 | 
|  | }; | 
|  |  | 
|  | static const UBiDiLevel | 
|  | testLevels13[]={ | 
|  | 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 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testVisualMap13[]={ | 
|  | 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 | 
|  | }; | 
|  |  | 
|  | static const UBiDiLevel | 
|  | testLevels14[]={ | 
|  | 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 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testVisualMap14[]={ | 
|  | 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 | 
|  | }; | 
|  |  | 
|  | static const UBiDiLevel | 
|  | testLevels15[]={ | 
|  | 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 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testVisualMap15[]={ | 
|  | 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 | 
|  | }; | 
|  |  | 
|  | static const UBiDiLevel | 
|  | testLevels16[]={ | 
|  | 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 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testVisualMap16[]={ | 
|  | 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 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testText13[]={ | 
|  | ON, L, RLO, CS, R, WS, AN, AN, PDF, LRE, R, L, LRO, WS, BN, ON, S, LRE, LRO, B | 
|  | }; | 
|  |  | 
|  | static const UBiDiLevel | 
|  | testLevels17[]={ | 
|  | 0, 0, 1, 1, 1, 1, 1, 1, 3, 3, 3, 2, 4, 4, 4, 4, 0, 0, 0, 0 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testVisualMap17[]={ | 
|  | 0, 1, 15, 14, 13, 12, 11, 10, 4, 3, 2, 5, 6, 7, 8, 9, 16, 17, 18, 19 | 
|  | }; | 
|  |  | 
|  | static const UBiDiLevel | 
|  | testLevels18[]={ | 
|  | 0, 0, 1, 1, 1, 0 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testVisualMap18[]={ | 
|  | 0, 1, 4, 3, 2, 5 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testText14[]={ | 
|  | RLO, RLO, AL, AL, WS, EN, ES, ON, WS, S, S, PDF, LRO, WS, AL, ET, RLE, ON, EN, B | 
|  | }; | 
|  |  | 
|  | static const UBiDiLevel | 
|  | testLevels19[]={ | 
|  | 1 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testVisualMap19[]={ | 
|  | 0 | 
|  | }; | 
|  |  | 
|  | static const uint8_t | 
|  | testText15[]={ | 
|  | R, L, CS, L | 
|  | }; | 
|  |  | 
|  | static const UBiDiLevel | 
|  | testLevels20[]={ | 
|  | 2 | 
|  | }; | 
|  |  | 
|  | extern BiDiTestData | 
|  | tests[]={ | 
|  | testText1,  ARRAY_LENGTH(testText1),  UBIDI_DEFAULT_LTR, -1, -1, | 
|  | UBIDI_LTR, 0, | 
|  | testLevels1, testVisualMap1, | 
|  | testText2,  ARRAY_LENGTH(testText2),  UBIDI_DEFAULT_LTR, -1, -1, | 
|  | UBIDI_RTL, 1, | 
|  | testLevels2, testVisualMap2, | 
|  | testText3,  ARRAY_LENGTH(testText3),  UBIDI_DEFAULT_LTR, -1, -1, | 
|  | UBIDI_LTR, 0, | 
|  | testLevels3, testVisualMap3, | 
|  | testText4,  ARRAY_LENGTH(testText4),  UBIDI_DEFAULT_LTR, -1, -1, | 
|  | UBIDI_MIXED, 0, | 
|  | testLevels4, testVisualMap4, | 
|  | testText5,  ARRAY_LENGTH(testText5),  UBIDI_DEFAULT_LTR, -1, -1, | 
|  | UBIDI_MIXED, 1, | 
|  | testLevels5, testVisualMap5, | 
|  | testText6,  ARRAY_LENGTH(testText6),  UBIDI_DEFAULT_LTR, -1, -1, | 
|  | UBIDI_MIXED, 1, | 
|  | testLevels6, testVisualMap6, | 
|  | NULL,       0,                        UBIDI_DEFAULT_LTR, -1, -1, | 
|  | UBIDI_LTR, 0, | 
|  | NULL, NULL, | 
|  | testText8,  ARRAY_LENGTH(testText8),  UBIDI_DEFAULT_LTR, -1, -1, | 
|  | UBIDI_RTL, 1, | 
|  | testLevels8, testVisualMap8, | 
|  | testText9,  ARRAY_LENGTH(testText9),  UBIDI_DEFAULT_LTR, -1, -1, | 
|  | UBIDI_MIXED, 0, | 
|  | testLevels9, testVisualMap9, | 
|  | testText10, ARRAY_LENGTH(testText10), UBIDI_DEFAULT_LTR, -1, -1, | 
|  | UBIDI_MIXED, 0, | 
|  | testLevels10, testVisualMap10, | 
|  | testText11, ARRAY_LENGTH(testText11), UBIDI_DEFAULT_LTR, -1, -1, | 
|  | UBIDI_MIXED, 0, | 
|  | testLevels11, testVisualMap11, | 
|  | testText12, ARRAY_LENGTH(testText12), UBIDI_DEFAULT_LTR, -1, -1, | 
|  | UBIDI_MIXED, 0, | 
|  | testLevels12, testVisualMap12, | 
|  | testText12, ARRAY_LENGTH(testText12), UBIDI_DEFAULT_RTL, -1, -1, | 
|  | UBIDI_MIXED, 0, | 
|  | testLevels13, testVisualMap13, | 
|  | testText12, ARRAY_LENGTH(testText12), 2, -1, -1, | 
|  | UBIDI_MIXED, 2, | 
|  | testLevels14, testVisualMap14, | 
|  | testText12, ARRAY_LENGTH(testText12), 5, -1, -1, | 
|  | UBIDI_MIXED, 5, | 
|  | testLevels15, testVisualMap15, | 
|  | testText12, ARRAY_LENGTH(testText12), UBIDI_DEFAULT_LTR, -1, -1, | 
|  | UBIDI_MIXED, 0, | 
|  | testLevels16, testVisualMap16, | 
|  | testText13, ARRAY_LENGTH(testText13), UBIDI_DEFAULT_LTR, -1, -1, | 
|  | UBIDI_MIXED, 0, | 
|  | testLevels17, testVisualMap17, | 
|  | testText13, ARRAY_LENGTH(testText13), UBIDI_DEFAULT_LTR, 0, 6, | 
|  | UBIDI_MIXED, 0, | 
|  | testLevels18, testVisualMap18, | 
|  | testText14, ARRAY_LENGTH(testText14), UBIDI_DEFAULT_LTR, 13, 14, | 
|  | UBIDI_RTL, 1, | 
|  | testLevels19, testVisualMap19, | 
|  | testText15, ARRAY_LENGTH(testText15), UBIDI_DEFAULT_LTR, 2, 3, | 
|  | UBIDI_LTR, 2, | 
|  | testLevels20, testVisualMap19 | 
|  | }; | 
|  |  | 
|  | extern int | 
|  | bidiTestCount=ARRAY_LENGTH(tests); |