OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #ifndef CORE_FXCRT_FX_ARABIC_H_ | 7 #ifndef CORE_FXCRT_INCLUDE_FX_ARABIC_H_ |
8 #define CORE_FXCRT_FX_ARABIC_H_ | 8 #define CORE_FXCRT_INCLUDE_FX_ARABIC_H_ |
9 | 9 |
10 #include "core/fxcrt/include/fx_arb.h" | 10 #include "core/fxcrt/include/fx_arb.h" |
11 | 11 |
12 class CFX_ArabicChar : public IFX_ArabicChar { | 12 #define FX_BIDIMAXLEVEL 61 |
| 13 #define FX_BidiDirection(a) (FX_IsOdd(a) ? FX_BIDICLASS_R : FX_BIDICLASS_L) |
| 14 #define FX_BidiGetDeferredType(a) (((a) >> 4) & 0x0F) |
| 15 #define FX_BidiGetResolvedType(a) ((a)&0x0F) |
| 16 |
| 17 class CFX_ArabicChar { |
13 public: | 18 public: |
14 virtual void Release() { delete this; } | 19 void Release() { delete this; } |
15 virtual FX_BOOL IsArabicChar(FX_WCHAR wch) const; | |
16 virtual FX_BOOL IsArabicFormChar(FX_WCHAR wch) const; | |
17 | 20 |
18 virtual FX_WCHAR GetFormChar(FX_WCHAR wch, | 21 FX_BOOL IsArabicChar(FX_WCHAR wch) const; |
19 FX_WCHAR prev = 0, | 22 FX_BOOL IsArabicFormChar(FX_WCHAR wch) const; |
20 FX_WCHAR next = 0) const; | 23 |
21 virtual FX_WCHAR GetFormChar(const CFX_Char* cur, | 24 FX_WCHAR GetFormChar(FX_WCHAR wch, |
22 const CFX_Char* prev, | 25 FX_WCHAR prev = 0, |
23 const CFX_Char* next) const; | 26 FX_WCHAR next = 0) const; |
| 27 FX_WCHAR GetFormChar(const CFX_Char* cur, |
| 28 const CFX_Char* prev, |
| 29 const CFX_Char* next) const; |
24 | 30 |
25 protected: | 31 protected: |
26 const FX_ARBFORMTABLE* ParseChar(const CFX_Char* pTC, | 32 const FX_ARBFORMTABLE* ParseChar(const CFX_Char* pTC, |
27 FX_WCHAR& wChar, | 33 FX_WCHAR& wChar, |
28 FX_CHARTYPE& eType) const; | 34 FX_CHARTYPE& eType) const; |
29 }; | 35 }; |
| 36 |
30 void FX_BidiReverseString(CFX_WideString& wsText, | 37 void FX_BidiReverseString(CFX_WideString& wsText, |
31 int32_t iStart, | 38 int32_t iStart, |
32 int32_t iCount); | 39 int32_t iCount); |
33 void FX_BidiSetDeferredRun(CFX_Int32Array& values, | 40 void FX_BidiSetDeferredRun(CFX_Int32Array& values, |
34 int32_t iStart, | 41 int32_t iStart, |
35 int32_t iCount, | 42 int32_t iCount, |
36 int32_t iValue); | 43 int32_t iValue); |
37 #define FX_BCON FX_BIDICLASS_ON | |
38 #define FX_BCL FX_BIDICLASS_L | |
39 #define FX_BCR FX_BIDICLASS_R | |
40 #define FX_BCAN FX_BIDICLASS_AN | |
41 #define FX_BCEN FX_BIDICLASS_EN | |
42 #define FX_BCAL FX_BIDICLASS_AL | |
43 #define FX_BCNSM FX_BIDICLASS_NSM | |
44 #define FX_BCCS FX_BIDICLASS_CS | |
45 #define FX_BCES FX_BIDICLASS_ES | |
46 #define FX_BCET FX_BIDICLASS_ET | |
47 #define FX_BCBN FX_BIDICLASS_BN | |
48 #define FX_BCS FX_BIDICLASS_S | |
49 #define FX_BCWS FX_BIDICLASS_WS | |
50 #define FX_BCB FX_BIDICLASS_B | |
51 #define FX_BCRLO FX_BIDICLASS_RLO | |
52 #define FX_BCRLE FX_BIDICLASS_RLE | |
53 #define FX_BCLRO FX_BIDICLASS_LRO | |
54 #define FX_BCLRE FX_BIDICLASS_LRE | |
55 #define FX_BCPDF FX_BIDICLASS_PDF | |
56 #define FX_BCN FX_BIDICLASS_N | |
57 void FX_BidiClassify(const CFX_WideString& wsText, | 44 void FX_BidiClassify(const CFX_WideString& wsText, |
58 CFX_Int32Array& classes, | 45 CFX_Int32Array& classes, |
59 FX_BOOL bWS = FALSE); | 46 FX_BOOL bWS = FALSE); |
60 #define FX_BIDIMAXLEVEL 61 | |
61 #define FX_BidiGreaterEven(a) (FX_IsOdd(a) ? ((a) + 1) : ((a) + 2)) | |
62 #define FX_BidiGreaterOdd(a) (FX_IsOdd(a) ? ((a) + 2) : ((a) + 1)) | |
63 int32_t FX_BidiResolveExplicit(int32_t iBaseLevel, | 47 int32_t FX_BidiResolveExplicit(int32_t iBaseLevel, |
64 int32_t iDirection, | 48 int32_t iDirection, |
65 CFX_Int32Array& classes, | 49 CFX_Int32Array& classes, |
66 CFX_Int32Array& levels, | 50 CFX_Int32Array& levels, |
67 int32_t iStart, | 51 int32_t iStart, |
68 int32_t iCount, | 52 int32_t iCount, |
69 int32_t iNest = 0); | 53 int32_t iNest = 0); |
70 #define FX_BidiDirection(a) (FX_IsOdd(a) ? FX_BIDICLASS_R : FX_BIDICLASS_L) | 54 |
71 enum FX_BIDIWEAKSTATE { | 55 enum FX_BIDIWEAKSTATE { |
72 FX_BIDIWEAKSTATE_xa = 0, | 56 FX_BIDIWEAKSTATE_xa = 0, |
73 FX_BIDIWEAKSTATE_xr, | 57 FX_BIDIWEAKSTATE_xr, |
74 FX_BIDIWEAKSTATE_xl, | 58 FX_BIDIWEAKSTATE_xl, |
75 FX_BIDIWEAKSTATE_ao, | 59 FX_BIDIWEAKSTATE_ao, |
76 FX_BIDIWEAKSTATE_ro, | 60 FX_BIDIWEAKSTATE_ro, |
77 FX_BIDIWEAKSTATE_lo, | 61 FX_BIDIWEAKSTATE_lo, |
78 FX_BIDIWEAKSTATE_rt, | 62 FX_BIDIWEAKSTATE_rt, |
79 FX_BIDIWEAKSTATE_lt, | 63 FX_BIDIWEAKSTATE_lt, |
80 FX_BIDIWEAKSTATE_cn, | 64 FX_BIDIWEAKSTATE_cn, |
(...skipping 22 matching lines...) Expand all Loading... |
103 #define FX_BWSre FX_BIDIWEAKSTATE_re | 87 #define FX_BWSre FX_BIDIWEAKSTATE_re |
104 #define FX_BWSla FX_BIDIWEAKSTATE_la | 88 #define FX_BWSla FX_BIDIWEAKSTATE_la |
105 #define FX_BWSle FX_BIDIWEAKSTATE_le | 89 #define FX_BWSle FX_BIDIWEAKSTATE_le |
106 #define FX_BWSac FX_BIDIWEAKSTATE_ac | 90 #define FX_BWSac FX_BIDIWEAKSTATE_ac |
107 #define FX_BWSrc FX_BIDIWEAKSTATE_rc | 91 #define FX_BWSrc FX_BIDIWEAKSTATE_rc |
108 #define FX_BWSrs FX_BIDIWEAKSTATE_rs | 92 #define FX_BWSrs FX_BIDIWEAKSTATE_rs |
109 #define FX_BWSlc FX_BIDIWEAKSTATE_lc | 93 #define FX_BWSlc FX_BIDIWEAKSTATE_lc |
110 #define FX_BWSls FX_BIDIWEAKSTATE_ls | 94 #define FX_BWSls FX_BIDIWEAKSTATE_ls |
111 #define FX_BWSret FX_BIDIWEAKSTATE_ret | 95 #define FX_BWSret FX_BIDIWEAKSTATE_ret |
112 #define FX_BWSlet FX_BIDIWEAKSTATE_let | 96 #define FX_BWSlet FX_BIDIWEAKSTATE_let |
| 97 |
113 enum FX_BIDIWEAKACTION { | 98 enum FX_BIDIWEAKACTION { |
114 FX_BIDIWEAKACTION_IX = 0x100, | 99 FX_BIDIWEAKACTION_IX = 0x100, |
115 FX_BIDIWEAKACTION_XX = 0x0F, | 100 FX_BIDIWEAKACTION_XX = 0x0F, |
116 FX_BIDIWEAKACTION_xxx = (0x0F << 4) + 0x0F, | 101 FX_BIDIWEAKACTION_xxx = (0x0F << 4) + 0x0F, |
117 FX_BIDIWEAKACTION_xIx = 0x100 + FX_BIDIWEAKACTION_xxx, | 102 FX_BIDIWEAKACTION_xIx = 0x100 + FX_BIDIWEAKACTION_xxx, |
118 FX_BIDIWEAKACTION_xxN = (0x0F << 4) + FX_BIDICLASS_ON, | 103 FX_BIDIWEAKACTION_xxN = (0x0F << 4) + FX_BIDICLASS_ON, |
119 FX_BIDIWEAKACTION_xxE = (0x0F << 4) + FX_BIDICLASS_EN, | 104 FX_BIDIWEAKACTION_xxE = (0x0F << 4) + FX_BIDICLASS_EN, |
120 FX_BIDIWEAKACTION_xxA = (0x0F << 4) + FX_BIDICLASS_AN, | 105 FX_BIDIWEAKACTION_xxA = (0x0F << 4) + FX_BIDICLASS_AN, |
121 FX_BIDIWEAKACTION_xxR = (0x0F << 4) + FX_BIDICLASS_R, | 106 FX_BIDIWEAKACTION_xxR = (0x0F << 4) + FX_BIDICLASS_R, |
122 FX_BIDIWEAKACTION_xxL = (0x0F << 4) + FX_BIDICLASS_L, | 107 FX_BIDIWEAKACTION_xxL = (0x0F << 4) + FX_BIDICLASS_L, |
(...skipping 26 matching lines...) Expand all Loading... |
149 #define FX_BWANIx FX_BIDIWEAKACTION_NIx | 134 #define FX_BWANIx FX_BIDIWEAKACTION_NIx |
150 #define FX_BWANxN FX_BIDIWEAKACTION_NxN | 135 #define FX_BWANxN FX_BIDIWEAKACTION_NxN |
151 #define FX_BWANxR FX_BIDIWEAKACTION_NxR | 136 #define FX_BWANxR FX_BIDIWEAKACTION_NxR |
152 #define FX_BWANxE FX_BIDIWEAKACTION_NxE | 137 #define FX_BWANxE FX_BIDIWEAKACTION_NxE |
153 #define FX_BWAAxA FX_BIDIWEAKACTION_AxA | 138 #define FX_BWAAxA FX_BIDIWEAKACTION_AxA |
154 #define FX_BWANxL FX_BIDIWEAKACTION_NxL | 139 #define FX_BWANxL FX_BIDIWEAKACTION_NxL |
155 #define FX_BWALxL FX_BIDIWEAKACTION_LxL | 140 #define FX_BWALxL FX_BIDIWEAKACTION_LxL |
156 #define FX_BWAxIL FX_BIDIWEAKACTION_xIL | 141 #define FX_BWAxIL FX_BIDIWEAKACTION_xIL |
157 #define FX_BWAAxR FX_BIDIWEAKACTION_AxR | 142 #define FX_BWAAxR FX_BIDIWEAKACTION_AxR |
158 #define FX_BWALxx FX_BIDIWEAKACTION_Lxx | 143 #define FX_BWALxx FX_BIDIWEAKACTION_Lxx |
159 #define FX_BidiGetDeferredType(a) (((a) >> 4) & 0x0F) | 144 |
160 #define FX_BidiGetResolvedType(a) ((a)&0x0F) | |
161 void FX_BidiResolveWeak(int32_t iBaseLevel, | 145 void FX_BidiResolveWeak(int32_t iBaseLevel, |
162 CFX_Int32Array& classes, | 146 CFX_Int32Array& classes, |
163 CFX_Int32Array& levels); | 147 CFX_Int32Array& levels); |
164 enum FX_BIDINEUTRALSTATE { | 148 enum FX_BIDINEUTRALSTATE { |
165 FX_BIDINEUTRALSTATE_r = 0, | 149 FX_BIDINEUTRALSTATE_r = 0, |
166 FX_BIDINEUTRALSTATE_l, | 150 FX_BIDINEUTRALSTATE_l, |
167 FX_BIDINEUTRALSTATE_rn, | 151 FX_BIDINEUTRALSTATE_rn, |
168 FX_BIDINEUTRALSTATE_ln, | 152 FX_BIDINEUTRALSTATE_ln, |
169 FX_BIDINEUTRALSTATE_a, | 153 FX_BIDINEUTRALSTATE_a, |
170 FX_BIDINEUTRALSTATE_na, | 154 FX_BIDINEUTRALSTATE_na, |
(...skipping 30 matching lines...) Expand all Loading... |
201 CFX_Int32Array& levels); | 185 CFX_Int32Array& levels); |
202 int32_t FX_BidiReorderLevel(int32_t iBaseLevel, | 186 int32_t FX_BidiReorderLevel(int32_t iBaseLevel, |
203 CFX_WideString& wsText, | 187 CFX_WideString& wsText, |
204 const CFX_Int32Array& levels, | 188 const CFX_Int32Array& levels, |
205 int32_t iStart, | 189 int32_t iStart, |
206 FX_BOOL bReverse = FALSE); | 190 FX_BOOL bReverse = FALSE); |
207 void FX_BidiReorder(int32_t iBaseLevel, | 191 void FX_BidiReorder(int32_t iBaseLevel, |
208 CFX_WideString& wsText, | 192 CFX_WideString& wsText, |
209 const CFX_Int32Array& levels); | 193 const CFX_Int32Array& levels); |
210 | 194 |
211 #endif // CORE_FXCRT_FX_ARABIC_H_ | 195 #endif // CORE_FXCRT_INCLUDE_FX_ARABIC_H_ |
OLD | NEW |