Index: source/common/ushape.cpp |
diff --git a/source/common/ushape.cpp b/source/common/ushape.cpp |
index 924a43a98f2cfeba48aed552f01f45d1649a991b..eeae57f3d4370ec9489776caed09363d75ac8666 100644 |
--- a/source/common/ushape.cpp |
+++ b/source/common/ushape.cpp |
@@ -1,7 +1,7 @@ |
/* |
****************************************************************************** |
* |
- * Copyright (C) 2000-2013, International Business Machines |
+ * Copyright (C) 2000-2014, International Business Machines |
* Corporation and others. All Rights Reserved. |
* |
****************************************************************************** |
@@ -26,8 +26,6 @@ |
#include "ubidi_props.h" |
#include "uassert.h" |
-#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) |
- |
/* |
* This implementation is designed for 16-bit Unicode strings. |
* The main assumption is that the Arabic characters and their |
@@ -212,10 +210,20 @@ static const UChar araLink[178]= |
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*/ |
@@ -223,15 +231,29 @@ static const UChar araLink[178]= |
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[] = { |
@@ -273,16 +295,16 @@ static const uint8_t presBLink[]= |
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 |
}; |
@@ -1536,8 +1558,8 @@ u_shapeArabic(const UChar *source, int32_t sourceLength, |
} |
/* Start of Arabic letter shaping part */ |
- if(outputSize<=LENGTHOF(buffer)) { |
- outputSize=LENGTHOF(buffer); |
+ if(outputSize<=UPRV_LENGTHOF(buffer)) { |
+ outputSize=UPRV_LENGTHOF(buffer); |
tempbuffer=buffer; |
} else { |
tempbuffer = (UChar *)uprv_malloc(outputSize*U_SIZEOF_UCHAR); |