/*
******************************************************************************
*
- * Copyright (C) 2000-2013, International Business Machines
+ * Copyright (C) 2000-2014, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************
0, /*0x0674*/
1 + 32, /*0x0675*/
1, 1, /*0x0676-0x0677*/
- 1+2, 1+2, 1+2, 1+2, 1+2, 1+2, /*0x0678-0x067D*/
+ 1 + 2, /*0x0678*/
+ 1 + 2 + 8 + 256 * 0x16,/*0x0679*/
+ 1 + 2 + 8 + 256 * 0x0E,/*0x067A*/
+ 1 + 2 + 8 + 256 * 0x02,/*0x067B*/
+ 1+2, 1+2, /*0x67C-0x067D*/
1+2+8+256 * 0x06, 1+2, 1+2, 1+2, 1+2, 1+2, /*0x067E-0x0683*/
1+2, 1+2, 1+2+8+256 * 0x2A, 1+2, /*0x0684-0x0687*/
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*0x0688-0x0691*/
+ 1 + 8 + 256 * 0x38,/*0x0688*/
+ 1, 1, 1, /*0x0689-0x068B*/
+ 1 + 8 + 256 * 0x34,/*0x068C*/
+ 1 + 8 + 256 * 0x32,/*0x068D*/
+ 1 + 8 + 256 * 0x36,/*0x068E*/
+ 1, 1, /*0x068F-0x0690*/
+ 1 + 8 + 256 * 0x3C,/*0x0691*/
1, 1, 1, 1, 1, 1, 1+8+256 * 0x3A, 1, /*0x0692-0x0699*/
1+2, 1+2, 1+2, 1+2, 1+2, 1+2, /*0x069A-0x06A3*/
1+2, 1+2, 1+2, 1+2, /*0x069A-0x06A3*/
1+2, 1+2, 1+2, 1+2, /*0x06A4-0x06AD*/
1+2, 1+2+8+256 * 0x42, 1+2, 1+2, 1+2, 1+2, /*0x06AE-0x06B7*/
1+2, 1+2, 1+2, 1+2, /*0x06AE-0x06B7*/
- 1+2, 1+2, 1+2, 1+2, 1+2, 1+2, /*0x06B8-0x06BF*/
- 1+2, 1+2, /*0x06B8-0x06BF*/
- 1, /*0x06C0*/
- 1+2, /*0x06C1*/
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*0x06C2-0x06CB*/
- 1+2+8+256 * 0xAC, /*0x06CC*/
+ 1+2, 1+2, /*0x06B8-0x06B9*/
+ 1 + 8 + 256 * 0x4E,/*0x06BA*/
+ 1 + 2 + 8 + 256 * 0x50,/*0x06BB*/
+ 1+2, 1+2, /*0x06BC-0x06BD*/
+ 1 + 2 + 8 + 256 * 0x5A,/*0x06BE*/
+ 1+2, /*0x06BF*/
+ 1 + 8 + 256 * 0x54,/*0x06C0*/
+ 1 + 2 + 8 + 256 * 0x56,/*0x06C1*/
+ 1, 1, 1, /*0x06C2-0x06C4*/
+ 1 + 8 + 256 * 0x90,/*0x06C5*/
+ 1 + 8 + 256 * 0x89,/*0x06C6*/
+ 1 + 8 + 256 * 0x87,/*0x06C7*/
+ 1 + 8 + 256 * 0x8B,/*0x06C8*/
+ 1 + 8 + 256 * 0x92,/*0x06C9*/
+ 1, /*0x06CA*/
+ 1 + 8 + 256 * 0x8E,/*0x06CB*/
+ 1 + 2 + 8 + 256 * 0xAC,/*0x06CC*/
1, /*0x06CD*/
- 1+2, 1+2, 1+2, 1+2, /*0x06CE-0x06D1*/
- 1, 1 /*0x06D2-0x06D3*/
+ 1+2, 1+2, /*0x06CE-0x06CF*/
+ 1 + 2 + 8 + 256 * 0x94,/*0x06D0*/
+ 1+2, /*0x06D1*/
+ 1 + 8 + 256 * 0x5E,/*0x06D2*/
+ 1 + 8 + 256 * 0x60 /*0x06D3*/
};
static const uint8_t presALink[] = {
static const UChar convertFBto06[] =
{
/***********0******1******2******3******4******5******6******7******8******9******A******B******C******D******E******F***/
-/*FB5*/ 0x671, 0x671, 0, 0, 0, 0, 0x67E, 0x67E, 0x67E, 0x67E, 0, 0, 0, 0, 0, 0,
-/*FB6*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/*FB5*/ 0x671, 0x671, 0x67B, 0x67B, 0x67B, 0x67B, 0x67E, 0x67E, 0x67E, 0x67E, 0, 0, 0, 0, 0x67A, 0x67A,
+/*FB6*/ 0x67A, 0x67A, 0, 0, 0, 0, 0x679, 0x679, 0x679, 0x679, 0, 0, 0, 0, 0, 0,
/*FB7*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x686, 0x686, 0x686, 0x686, 0, 0,
-/*FB8*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x698, 0x698, 0, 0, 0x6A9, 0x6A9,
-/*FB9*/ 0x6A9, 0x6A9, 0x6AF, 0x6AF, 0x6AF, 0x6AF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-/*FBA*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-/*FBB*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/*FB8*/ 0, 0, 0x68D, 0x68D, 0x68C, 0x68C, 0x68E, 0x68E, 0x688, 0x688, 0x698, 0x698, 0x691, 0x691, 0x6A9, 0x6A9,
+/*FB9*/ 0x6A9, 0x6A9, 0x6AF, 0x6AF, 0x6AF, 0x6AF, 0, 0, 0, 0, 0, 0, 0, 0, 0x6BA, 0x6BA,
+/*FBA*/ 0x6BB, 0x6BB, 0x6BB, 0x6BB, 0x6C0, 0x6C0, 0x6C1, 0x6C1, 0x6C1, 0x6C1, 0x6BE, 0x6BE, 0x6BE, 0x6BE, 0x6d2, 0x6D2,
+/*FBB*/ 0x6D3, 0x6D3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*FBC*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-/*FBD*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-/*FBE*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/*FBD*/ 0, 0, 0, 0, 0, 0, 0, 0x6C7, 0x6C7, 0x6C6, 0x6C6, 0x6C8, 0x6C8, 0, 0x6CB, 0x6CB,
+/*FBE*/ 0x6C5, 0x6C5, 0x6C9, 0x6C9, 0x6D0, 0x6D0, 0x6D0, 0x6D0, 0, 0, 0, 0, 0, 0, 0, 0,
/*FBF*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x6CC, 0x6CC, 0x6CC, 0x6CC
};
/********************************************************************
* COPYRIGHT:
- * Copyright (c) 1997-2013, International Business Machines Corporation and
+ * Copyright (c) 1997-2014, International Business Machines Corporation and
* others. All Rights Reserved.
********************************************************************/
/* file name: cbiditst.c
static void doArabicShapingTestForBug9024(void);
+static void _testPresentationForms(const UChar *in);
+
+static void doArabicShapingTestForNewCharacters(void);
+
static void testReorder(void);
static void testReorderArabicMathSymbols(void);
addTest(root, doArabicShapingTestForBug8703, "complex/arabic-shaping/bug-8703");
addTest(root, testReorderArabicMathSymbols, "complex/bidi/bug-9024");
addTest(root, doArabicShapingTestForBug9024, "complex/arabic-shaping/bug-9024");
+ addTest(root, doArabicShapingTestForNewCharacters, "complex/arabic-shaping/shaping2");
}
static void
}
+static void _testPresentationForms(const UChar* in) {
+ enum Forms { GENERIC, ISOLATED, FINAL, INITIAL, MEDIAL };
+ /* This character is used to check whether the in-character is rewritten correctly
+ and whether the surrounding characters are shaped correctly as well. */
+ UChar otherChar[] = {0x0628, 0xfe8f, 0xfe90, 0xfe91, 0xfe92};
+ UChar src[3];
+ UChar dst[3];
+ UErrorCode errorCode;
+ int32_t length;
+
+ /* Testing isolated shaping */
+ src[0] = in[GENERIC];
+ errorCode=U_ZERO_ERROR;
+ length=u_shapeArabic(src, 1,
+ dst, 1,
+ U_SHAPE_LETTERS_SHAPE,
+ &errorCode);
+ if(U_FAILURE(errorCode) || length!=1 || dst[0] != in[ISOLATED]) {
+ log_err("failure in u_shapeArabic(_testAllForms: shaping isolated): %x\n", in[GENERIC]);
+ }
+ errorCode=U_ZERO_ERROR;
+ length=u_shapeArabic(dst, 1,
+ src, 1,
+ U_SHAPE_LETTERS_UNSHAPE,
+ &errorCode);
+ if(U_FAILURE(errorCode) || length!=1 || src[0] != in[GENERIC]) {
+ log_err("failure in u_shapeArabic(_testAllForms: unshaping isolated): %x\n", in[GENERIC]);
+ }
+
+ /* Testing final shaping */
+ src[0] = otherChar[GENERIC];
+ src[1] = in[GENERIC];
+ if (in[FINAL] != 0) {
+ errorCode=U_ZERO_ERROR;
+ length=u_shapeArabic(src, 2,
+ dst, 2,
+ U_SHAPE_LETTERS_SHAPE,
+ &errorCode);
+ if(U_FAILURE(errorCode) || length!=2 || dst[0] != otherChar[INITIAL] || dst[1] != in[FINAL]) {
+ log_err("failure in u_shapeArabic(_testAllForms: shaping final): %x\n", in[GENERIC]);
+ }
+ errorCode=U_ZERO_ERROR;
+ length=u_shapeArabic(dst, 2,
+ src, 2,
+ U_SHAPE_LETTERS_UNSHAPE,
+ &errorCode);
+ if(U_FAILURE(errorCode) || length!=2 || src[0] != otherChar[GENERIC] || src[1] != in[GENERIC]) {
+ log_err("failure in u_shapeArabic(_testAllForms: unshaping final): %x\n", in[GENERIC]);
+ }
+ } else {
+ errorCode=U_ZERO_ERROR;
+ length=u_shapeArabic(src, 2,
+ dst, 2,
+ U_SHAPE_LETTERS_SHAPE,
+ &errorCode);
+ if(U_FAILURE(errorCode) || length!=2 || dst[0] != otherChar[ISOLATED] || dst[1] != in[ISOLATED]) {
+ log_err("failure in u_shapeArabic(_testAllForms: shaping final): %x\n", in[GENERIC]);
+ }
+ errorCode=U_ZERO_ERROR;
+ length=u_shapeArabic(dst, 2,
+ src, 2,
+ U_SHAPE_LETTERS_UNSHAPE,
+ &errorCode);
+ if(U_FAILURE(errorCode) || length!=2 || src[0] != otherChar[GENERIC] || src[1] != in[GENERIC]) {
+ log_err("failure in u_shapeArabic(_testAllForms: unshaping final): %x\n", in[GENERIC]);
+ }
+ }
+
+ /* Testing initial shaping */
+ src[0] = in[GENERIC];
+ src[1] = otherChar[GENERIC];
+ if (in[INITIAL] != 0) {
+ /* Testing characters that have an initial form */
+ errorCode=U_ZERO_ERROR;
+ length=u_shapeArabic(src, 2,
+ dst, 2,
+ U_SHAPE_LETTERS_SHAPE,
+ &errorCode);
+ if(U_FAILURE(errorCode) || length!=2 || dst[0] != in[INITIAL] || dst[1] != otherChar[FINAL]) {
+ log_err("failure in u_shapeArabic(_testAllForms: shaping initial): %x\n", in[GENERIC]);
+ }
+ errorCode=U_ZERO_ERROR;
+ length=u_shapeArabic(dst, 2,
+ src, 2,
+ U_SHAPE_LETTERS_UNSHAPE,
+ &errorCode);
+ if(U_FAILURE(errorCode) || length!=2 || src[0] != in[GENERIC] || src[1] != otherChar[GENERIC]) {
+ log_err("failure in u_shapeArabic(_testAllForms: unshaping initial): %x\n", in[GENERIC]);
+ }
+ } else {
+ /* Testing characters that do not have an initial form */
+ errorCode=U_ZERO_ERROR;
+ length=u_shapeArabic(src, 2,
+ dst, 2,
+ U_SHAPE_LETTERS_SHAPE,
+ &errorCode);
+ if(U_FAILURE(errorCode) || length!=2 || dst[0] != in[ISOLATED] || dst[1] != otherChar[ISOLATED]) {
+ log_err("failure in u_shapeArabic(_testTwoForms: shaping initial): %x\n", in[GENERIC]);
+ }
+ errorCode=U_ZERO_ERROR;
+ length=u_shapeArabic(dst, 2,
+ src, 2,
+ U_SHAPE_LETTERS_UNSHAPE,
+ &errorCode);
+ if(U_FAILURE(errorCode) || length!=2 || src[0] != in[GENERIC] || src[1] != otherChar[GENERIC]) {
+ log_err("failure in u_shapeArabic(_testTwoForms: unshaping initial): %x\n", in[GENERIC]);
+ }
+ }
+
+ /* Testing medial shaping */
+ src[0] = otherChar[0];
+ src[1] = in[GENERIC];
+ src[2] = otherChar[0];
+ errorCode=U_ZERO_ERROR;
+ if (in[MEDIAL] != 0) {
+ /* Testing characters that have an medial form */
+ length=u_shapeArabic(src, 3,
+ dst, 3,
+ U_SHAPE_LETTERS_SHAPE,
+ &errorCode);
+ if(U_FAILURE(errorCode) || length!=3 || dst[0] != otherChar[INITIAL] || dst[1] != in[MEDIAL] || dst[2] != otherChar[FINAL]) {
+ log_err("failure in u_shapeArabic(_testAllForms: shaping medial): %x\n", in[GENERIC]);
+ }
+ errorCode=U_ZERO_ERROR;
+ length=u_shapeArabic(dst, 3,
+ src, 3,
+ U_SHAPE_LETTERS_UNSHAPE,
+ &errorCode);
+ if(U_FAILURE(errorCode) || length!=3 || src[0] != otherChar[GENERIC] || src[1] != in[GENERIC] || src[2] != otherChar[GENERIC]) {
+ log_err("failure in u_shapeArabic(_testAllForms: unshaping medial): %x\n", in[GENERIC]);
+ }
+ } else {
+ /* Testing characters that do not have an medial form */
+ errorCode=U_ZERO_ERROR;
+ length=u_shapeArabic(src, 3,
+ dst, 3,
+ U_SHAPE_LETTERS_SHAPE,
+ &errorCode);
+ if(U_FAILURE(errorCode) || length!=3 || dst[0] != otherChar[INITIAL] || dst[1] != in[FINAL] || dst[2] != otherChar[ISOLATED]) {
+ log_err("failure in u_shapeArabic(_testTwoForms: shaping medial): %x\n", in[GENERIC]);
+ }
+ errorCode=U_ZERO_ERROR;
+ length=u_shapeArabic(dst, 3,
+ src, 3,
+ U_SHAPE_LETTERS_UNSHAPE,
+ &errorCode);
+ if(U_FAILURE(errorCode) || length!=3 || src[0] != otherChar[GENERIC] || src[1] != in[GENERIC] || src[2] != otherChar[GENERIC]) {
+ log_err("failure in u_shapeArabic(_testTwoForms: unshaping medial): %x\n", in[GENERIC]);
+ }
+ }
+}
+
+static void
+doArabicShapingTestForNewCharacters(void) {
+ static const UChar letterForms[][5]={
+ { 0x0679, 0xFB66, 0xFB67, 0xFB68, 0xFB69 }, /* TTEH */
+ { 0x067A, 0xFB5E, 0xFB5F, 0xFB60, 0xFB61 }, /* TTEHEH */
+ { 0x067B, 0xFB52, 0xFB53, 0xFB54, 0xFB55 }, /* BEEH */
+ { 0x0688, 0xFB88, 0xFB89, 0, 0 }, /* DDAL */
+ { 0x068C, 0xFB84, 0xFB85, 0, 0 }, /* DAHAL */
+ { 0x068D, 0xFB82, 0xFB83, 0, 0 }, /* DDAHAL */
+ { 0x068E, 0xFB86, 0xFB87, 0, 0 }, /* DUL */
+ { 0x0691, 0xFB8C, 0xFB8D, 0, 0 }, /* RREH */
+ { 0x06BA, 0xFB9E, 0xFB9F, 0, 0 }, /* NOON GHUNNA */
+ { 0x06BB, 0xFBA0, 0xFBA1, 0xFBA2, 0xFBA3 }, /* RNOON */
+ { 0x06BE, 0xFBAA, 0xFBAB, 0xFBAC, 0xFBAD }, /* HEH DOACHASHMEE */
+ { 0x06C0, 0xFBA4, 0xFBA5, 0, 0 }, /* HEH WITH YEH ABOVE */
+ { 0x06C1, 0xFBA6, 0xFBA7, 0xFBA8, 0xFBA9 }, /* HEH GOAL */
+ { 0x06C5, 0xFBE0, 0xFBE1, 0, 0 }, /* KIRGIHIZ OE */
+ { 0x06C6, 0xFBD9, 0xFBDA, 0, 0 }, /* OE */
+ { 0x06C7, 0xFBD7, 0xFBD8, 0, 0 }, /* U */
+ { 0x06C8, 0xFBDB, 0xFBDC, 0, 0 }, /* YU */
+ { 0x06C9, 0xFBE2, 0xFBE3, 0, 0 }, /* KIRGIZ YU */
+ { 0x06CB, 0xFBDE, 0xFBDF, 0, 0}, /* VE */
+ { 0x06D0, 0xFBE4, 0xFBE5, 0xFBE6, 0xFBE7 }, /* E */
+ { 0x06D2, 0xFBAE, 0xFBAF, 0, 0 }, /* YEH BARREE */
+ { 0x06D3, 0xFBB0, 0xFBB1, 0, 0 }, /* YEH BARREE WITH HAMZA ABOVE */
+ { 0x0622, 0xFE81, 0xFE82, 0, 0, }, /* ALEF WITH MADDA ABOVE */
+ { 0x0623, 0xFE83, 0xFE84, 0, 0, }, /* ALEF WITH HAMZA ABOVE */
+ { 0x0624, 0xFE85, 0xFE86, 0, 0, }, /* WAW WITH HAMZA ABOVE */
+ { 0x0625, 0xFE87, 0xFE88, 0, 0, }, /* ALEF WITH HAMZA BELOW */
+ { 0x0626, 0xFE89, 0xFE8A, 0xFE8B, 0xFE8C, }, /* YEH WITH HAMZA ABOVE */
+ { 0x0627, 0xFE8D, 0xFE8E, 0, 0, }, /* ALEF */
+ { 0x0628, 0xFE8F, 0xFE90, 0xFE91, 0xFE92, }, /* BEH */
+ { 0x0629, 0xFE93, 0xFE94, 0, 0, }, /* TEH MARBUTA */
+ { 0x062A, 0xFE95, 0xFE96, 0xFE97, 0xFE98, }, /* TEH */
+ { 0x062B, 0xFE99, 0xFE9A, 0xFE9B, 0xFE9C, }, /* THEH */
+ { 0x062C, 0xFE9D, 0xFE9E, 0xFE9F, 0xFEA0, }, /* JEEM */
+ { 0x062D, 0xFEA1, 0xFEA2, 0xFEA3, 0xFEA4, }, /* HAH */
+ { 0x062E, 0xFEA5, 0xFEA6, 0xFEA7, 0xFEA8, }, /* KHAH */
+ { 0x062F, 0xFEA9, 0xFEAA, 0, 0, }, /* DAL */
+ { 0x0630, 0xFEAB, 0xFEAC, 0, 0, }, /* THAL */
+ { 0x0631, 0xFEAD, 0xFEAE, 0, 0, }, /* REH */
+ { 0x0632, 0xFEAF, 0xFEB0, 0, 0, }, /* ZAIN */
+ { 0x0633, 0xFEB1, 0xFEB2, 0xFEB3, 0xFEB4, }, /* SEEN */
+ { 0x0634, 0xFEB5, 0xFEB6, 0xFEB7, 0xFEB8, }, /* SHEEN */
+ { 0x0635, 0xFEB9, 0xFEBA, 0xFEBB, 0xFEBC, }, /* SAD */
+ { 0x0636, 0xFEBD, 0xFEBE, 0xFEBF, 0xFEC0, }, /* DAD */
+ { 0x0637, 0xFEC1, 0xFEC2, 0xFEC3, 0xFEC4, }, /* TAH */
+ { 0x0638, 0xFEC5, 0xFEC6, 0xFEC7, 0xFEC8, }, /* ZAH */
+ { 0x0639, 0xFEC9, 0xFECA, 0xFECB, 0xFECC, }, /* AIN */
+ { 0x063A, 0xFECD, 0xFECE, 0xFECF, 0xFED0, }, /* GHAIN */
+ { 0x0641, 0xFED1, 0xFED2, 0xFED3, 0xFED4, }, /* FEH */
+ { 0x0642, 0xFED5, 0xFED6, 0xFED7, 0xFED8, }, /* QAF */
+ { 0x0643, 0xFED9, 0xFEDA, 0xFEDB, 0xFEDC, }, /* KAF */
+ { 0x0644, 0xFEDD, 0xFEDE, 0xFEDF, 0xFEE0, }, /* LAM */
+ { 0x0645, 0xFEE1, 0xFEE2, 0xFEE3, 0xFEE4, }, /* MEEM */
+ { 0x0646, 0xFEE5, 0xFEE6, 0xFEE7, 0xFEE8, }, /* NOON */
+ { 0x0647, 0xFEE9, 0xFEEA, 0xFEEB, 0xFEEC, }, /* HEH */
+ { 0x0648, 0xFEED, 0xFEEE, 0, 0, }, /* WAW */
+ { 0x0649, 0xFEEF, 0xFEF0, 0, 0, }, /* ALEF MAKSURA */
+ { 0x064A, 0xFEF1, 0xFEF2, 0xFEF3, 0xFEF4, }, /* YEH */
+ { 0x064E, 0xFE76, 0, 0, 0xFE77, }, /* FATHA */
+ { 0x064F, 0xFE78, 0, 0, 0xFE79, }, /* DAMMA */
+ { 0x0650, 0xFE7A, 0, 0, 0xFE7B, }, /* KASRA */
+ { 0x0651, 0xFE7C, 0, 0, 0xFE7D, }, /* SHADDA */
+ { 0x0652, 0xFE7E, 0, 0, 0xFE7F, }, /* SUKUN */
+ { 0x0679, 0xFB66, 0xFB67, 0xFB68, 0xFB69, }, /* TTEH */
+ { 0x067E, 0xFB56, 0xFB57, 0xFB58, 0xFB59, }, /* PEH */
+ { 0x0686, 0xFB7A, 0xFB7B, 0xFB7C, 0xFB7D, }, /* TCHEH */
+ { 0x0688, 0xFB88, 0xFB89, 0, 0, }, /* DDAL */
+ { 0x0691, 0xFB8C, 0xFB8D, 0, 0, }, /* RREH */
+ { 0x0698, 0xFB8A, 0xFB8B, 0, 0, }, /* JEH */
+ { 0x06A9, 0xFB8E, 0xFB8F, 0xFB90, 0xFB91, }, /* KEHEH */
+ { 0x06AF, 0xFB92, 0xFB93, 0xFB94, 0xFB95, }, /* GAF */
+ { 0x06BA, 0xFB9E, 0xFB9F, 0, 0, }, /* NOON GHUNNA */
+ { 0x06BE, 0xFBAA, 0xFBAB, 0xFBAC, 0xFBAD, }, /* HEH DOACHASHMEE */
+ { 0x06C0, 0xFBA4, 0xFBA5, 0, 0, }, /* HEH WITH YEH ABOVE */
+ { 0x06C1, 0xFBA6, 0xFBA7, 0xFBA8, 0xFBA9, }, /* HEH GOAL */
+ { 0x06CC, 0xFBFC, 0xFBFD, 0xFBFE, 0xFBFF, }, /* FARSI YEH */
+ { 0x06D2, 0xFBAE, 0xFBAF, 0, 0, }, /* YEH BARREE */
+ { 0x06D3, 0xFBB0, 0xFBB1, 0, 0, }}; /* YEH BARREE WITH HAMZA ABOVE */
+
+ for (int i = 0; i < LENGTHOF(letterForms); ++i) {
+ _testPresentationForms(letterForms[i]);
+ }
+}
+
/* helpers ------------------------------------------------------------------ */
static void initCharFromDirProps(void) {