| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | |
| 6 | |
| 7 #ifndef CORE_FXCRT_FX_ARABIC_H_ | |
| 8 #define CORE_FXCRT_FX_ARABIC_H_ | |
| 9 | |
| 10 #include "core/fxcrt/include/fx_arb.h" | |
| 11 | |
| 12 class CFX_ArabicChar : public IFX_ArabicChar { | |
| 13 public: | |
| 14 virtual void Release() { delete this; } | |
| 15 virtual FX_BOOL IsArabicChar(FX_WCHAR wch) const; | |
| 16 virtual FX_BOOL IsArabicFormChar(FX_WCHAR wch) const; | |
| 17 | |
| 18 virtual FX_WCHAR GetFormChar(FX_WCHAR wch, | |
| 19 FX_WCHAR prev = 0, | |
| 20 FX_WCHAR next = 0) const; | |
| 21 virtual FX_WCHAR GetFormChar(const CFX_Char* cur, | |
| 22 const CFX_Char* prev, | |
| 23 const CFX_Char* next) const; | |
| 24 | |
| 25 protected: | |
| 26 const FX_ARBFORMTABLE* ParseChar(const CFX_Char* pTC, | |
| 27 FX_WCHAR& wChar, | |
| 28 FX_CHARTYPE& eType) const; | |
| 29 }; | |
| 30 void FX_BidiReverseString(CFX_WideString& wsText, | |
| 31 int32_t iStart, | |
| 32 int32_t iCount); | |
| 33 void FX_BidiSetDeferredRun(CFX_Int32Array& values, | |
| 34 int32_t iStart, | |
| 35 int32_t iCount, | |
| 36 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, | |
| 58 CFX_Int32Array& classes, | |
| 59 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, | |
| 64 int32_t iDirection, | |
| 65 CFX_Int32Array& classes, | |
| 66 CFX_Int32Array& levels, | |
| 67 int32_t iStart, | |
| 68 int32_t iCount, | |
| 69 int32_t iNest = 0); | |
| 70 #define FX_BidiDirection(a) (FX_IsOdd(a) ? FX_BIDICLASS_R : FX_BIDICLASS_L) | |
| 71 enum FX_BIDIWEAKSTATE { | |
| 72 FX_BIDIWEAKSTATE_xa = 0, | |
| 73 FX_BIDIWEAKSTATE_xr, | |
| 74 FX_BIDIWEAKSTATE_xl, | |
| 75 FX_BIDIWEAKSTATE_ao, | |
| 76 FX_BIDIWEAKSTATE_ro, | |
| 77 FX_BIDIWEAKSTATE_lo, | |
| 78 FX_BIDIWEAKSTATE_rt, | |
| 79 FX_BIDIWEAKSTATE_lt, | |
| 80 FX_BIDIWEAKSTATE_cn, | |
| 81 FX_BIDIWEAKSTATE_ra, | |
| 82 FX_BIDIWEAKSTATE_re, | |
| 83 FX_BIDIWEAKSTATE_la, | |
| 84 FX_BIDIWEAKSTATE_le, | |
| 85 FX_BIDIWEAKSTATE_ac, | |
| 86 FX_BIDIWEAKSTATE_rc, | |
| 87 FX_BIDIWEAKSTATE_rs, | |
| 88 FX_BIDIWEAKSTATE_lc, | |
| 89 FX_BIDIWEAKSTATE_ls, | |
| 90 FX_BIDIWEAKSTATE_ret, | |
| 91 FX_BIDIWEAKSTATE_let, | |
| 92 }; | |
| 93 #define FX_BWSxa FX_BIDIWEAKSTATE_xa | |
| 94 #define FX_BWSxr FX_BIDIWEAKSTATE_xr | |
| 95 #define FX_BWSxl FX_BIDIWEAKSTATE_xl | |
| 96 #define FX_BWSao FX_BIDIWEAKSTATE_ao | |
| 97 #define FX_BWSro FX_BIDIWEAKSTATE_ro | |
| 98 #define FX_BWSlo FX_BIDIWEAKSTATE_lo | |
| 99 #define FX_BWSrt FX_BIDIWEAKSTATE_rt | |
| 100 #define FX_BWSlt FX_BIDIWEAKSTATE_lt | |
| 101 #define FX_BWScn FX_BIDIWEAKSTATE_cn | |
| 102 #define FX_BWSra FX_BIDIWEAKSTATE_ra | |
| 103 #define FX_BWSre FX_BIDIWEAKSTATE_re | |
| 104 #define FX_BWSla FX_BIDIWEAKSTATE_la | |
| 105 #define FX_BWSle FX_BIDIWEAKSTATE_le | |
| 106 #define FX_BWSac FX_BIDIWEAKSTATE_ac | |
| 107 #define FX_BWSrc FX_BIDIWEAKSTATE_rc | |
| 108 #define FX_BWSrs FX_BIDIWEAKSTATE_rs | |
| 109 #define FX_BWSlc FX_BIDIWEAKSTATE_lc | |
| 110 #define FX_BWSls FX_BIDIWEAKSTATE_ls | |
| 111 #define FX_BWSret FX_BIDIWEAKSTATE_ret | |
| 112 #define FX_BWSlet FX_BIDIWEAKSTATE_let | |
| 113 enum FX_BIDIWEAKACTION { | |
| 114 FX_BIDIWEAKACTION_IX = 0x100, | |
| 115 FX_BIDIWEAKACTION_XX = 0x0F, | |
| 116 FX_BIDIWEAKACTION_xxx = (0x0F << 4) + 0x0F, | |
| 117 FX_BIDIWEAKACTION_xIx = 0x100 + FX_BIDIWEAKACTION_xxx, | |
| 118 FX_BIDIWEAKACTION_xxN = (0x0F << 4) + FX_BIDICLASS_ON, | |
| 119 FX_BIDIWEAKACTION_xxE = (0x0F << 4) + FX_BIDICLASS_EN, | |
| 120 FX_BIDIWEAKACTION_xxA = (0x0F << 4) + FX_BIDICLASS_AN, | |
| 121 FX_BIDIWEAKACTION_xxR = (0x0F << 4) + FX_BIDICLASS_R, | |
| 122 FX_BIDIWEAKACTION_xxL = (0x0F << 4) + FX_BIDICLASS_L, | |
| 123 FX_BIDIWEAKACTION_Nxx = (FX_BIDICLASS_ON << 4) + 0x0F, | |
| 124 FX_BIDIWEAKACTION_Axx = (FX_BIDICLASS_AN << 4) + 0x0F, | |
| 125 FX_BIDIWEAKACTION_ExE = (FX_BIDICLASS_EN << 4) + FX_BIDICLASS_EN, | |
| 126 FX_BIDIWEAKACTION_NIx = (FX_BIDICLASS_ON << 4) + 0x0F + 0x100, | |
| 127 FX_BIDIWEAKACTION_NxN = (FX_BIDICLASS_ON << 4) + FX_BIDICLASS_ON, | |
| 128 FX_BIDIWEAKACTION_NxR = (FX_BIDICLASS_ON << 4) + FX_BIDICLASS_R, | |
| 129 FX_BIDIWEAKACTION_NxE = (FX_BIDICLASS_ON << 4) + FX_BIDICLASS_EN, | |
| 130 FX_BIDIWEAKACTION_AxA = (FX_BIDICLASS_AN << 4) + FX_BIDICLASS_AN, | |
| 131 FX_BIDIWEAKACTION_NxL = (FX_BIDICLASS_ON << 4) + FX_BIDICLASS_L, | |
| 132 FX_BIDIWEAKACTION_LxL = (FX_BIDICLASS_L << 4) + FX_BIDICLASS_L, | |
| 133 FX_BIDIWEAKACTION_xIL = (0x0F << 4) + FX_BIDICLASS_L + 0x100, | |
| 134 FX_BIDIWEAKACTION_AxR = (FX_BIDICLASS_AN << 4) + FX_BIDICLASS_R, | |
| 135 FX_BIDIWEAKACTION_Lxx = (FX_BIDICLASS_L << 4) + 0x0F, | |
| 136 }; | |
| 137 #define FX_BWAIX FX_BIDIWEAKACTION_IX | |
| 138 #define FX_BWAXX FX_BIDIWEAKACTION_XX | |
| 139 #define FX_BWAxxx FX_BIDIWEAKACTION_xxx | |
| 140 #define FX_BWAxIx FX_BIDIWEAKACTION_xIx | |
| 141 #define FX_BWAxxN FX_BIDIWEAKACTION_xxN | |
| 142 #define FX_BWAxxE FX_BIDIWEAKACTION_xxE | |
| 143 #define FX_BWAxxA FX_BIDIWEAKACTION_xxA | |
| 144 #define FX_BWAxxR FX_BIDIWEAKACTION_xxR | |
| 145 #define FX_BWAxxL FX_BIDIWEAKACTION_xxL | |
| 146 #define FX_BWANxx FX_BIDIWEAKACTION_Nxx | |
| 147 #define FX_BWAAxx FX_BIDIWEAKACTION_Axx | |
| 148 #define FX_BWAExE FX_BIDIWEAKACTION_ExE | |
| 149 #define FX_BWANIx FX_BIDIWEAKACTION_NIx | |
| 150 #define FX_BWANxN FX_BIDIWEAKACTION_NxN | |
| 151 #define FX_BWANxR FX_BIDIWEAKACTION_NxR | |
| 152 #define FX_BWANxE FX_BIDIWEAKACTION_NxE | |
| 153 #define FX_BWAAxA FX_BIDIWEAKACTION_AxA | |
| 154 #define FX_BWANxL FX_BIDIWEAKACTION_NxL | |
| 155 #define FX_BWALxL FX_BIDIWEAKACTION_LxL | |
| 156 #define FX_BWAxIL FX_BIDIWEAKACTION_xIL | |
| 157 #define FX_BWAAxR FX_BIDIWEAKACTION_AxR | |
| 158 #define FX_BWALxx FX_BIDIWEAKACTION_Lxx | |
| 159 #define FX_BidiGetDeferredType(a) (((a) >> 4) & 0x0F) | |
| 160 #define FX_BidiGetResolvedType(a) ((a)&0x0F) | |
| 161 void FX_BidiResolveWeak(int32_t iBaseLevel, | |
| 162 CFX_Int32Array& classes, | |
| 163 CFX_Int32Array& levels); | |
| 164 enum FX_BIDINEUTRALSTATE { | |
| 165 FX_BIDINEUTRALSTATE_r = 0, | |
| 166 FX_BIDINEUTRALSTATE_l, | |
| 167 FX_BIDINEUTRALSTATE_rn, | |
| 168 FX_BIDINEUTRALSTATE_ln, | |
| 169 FX_BIDINEUTRALSTATE_a, | |
| 170 FX_BIDINEUTRALSTATE_na, | |
| 171 }; | |
| 172 #define FX_BNSr FX_BIDINEUTRALSTATE_r | |
| 173 #define FX_BNSl FX_BIDINEUTRALSTATE_l | |
| 174 #define FX_BNSrn FX_BIDINEUTRALSTATE_rn | |
| 175 #define FX_BNSln FX_BIDINEUTRALSTATE_ln | |
| 176 #define FX_BNSa FX_BIDINEUTRALSTATE_a | |
| 177 #define FX_BNSna FX_BIDINEUTRALSTATE_na | |
| 178 enum FX_BIDINEUTRALACTION { | |
| 179 FX_BIDINEUTRALACTION_nL = FX_BIDICLASS_L, | |
| 180 FX_BIDINEUTRALACTION_En = (FX_BIDICLASS_AN << 4), | |
| 181 FX_BIDINEUTRALACTION_Rn = (FX_BIDICLASS_R << 4), | |
| 182 FX_BIDINEUTRALACTION_Ln = (FX_BIDICLASS_L << 4), | |
| 183 FX_BIDINEUTRALACTION_In = FX_BIDIWEAKACTION_IX, | |
| 184 FX_BIDINEUTRALACTION_LnL = (FX_BIDICLASS_L << 4) + FX_BIDICLASS_L, | |
| 185 }; | |
| 186 #define FX_BNAnL FX_BIDINEUTRALACTION_nL | |
| 187 #define FX_BNAEn FX_BIDINEUTRALACTION_En | |
| 188 #define FX_BNARn FX_BIDINEUTRALACTION_Rn | |
| 189 #define FX_BNALn FX_BIDINEUTRALACTION_Ln | |
| 190 #define FX_BNAIn FX_BIDINEUTRALACTION_In | |
| 191 #define FX_BNALnL FX_BIDINEUTRALACTION_LnL | |
| 192 int32_t FX_BidiGetDeferredNeutrals(int32_t iAction, int32_t iLevel); | |
| 193 int32_t FX_BidiGetResolvedNeutrals(int32_t iAction); | |
| 194 void FX_BidiResolveNeutrals(int32_t iBaseLevel, | |
| 195 CFX_Int32Array& classes, | |
| 196 const CFX_Int32Array& levels); | |
| 197 void FX_BidiResolveImplicit(const CFX_Int32Array& classes, | |
| 198 CFX_Int32Array& levels); | |
| 199 void FX_BidiResolveWhitespace(int32_t iBaseLevel, | |
| 200 const CFX_Int32Array& classes, | |
| 201 CFX_Int32Array& levels); | |
| 202 int32_t FX_BidiReorderLevel(int32_t iBaseLevel, | |
| 203 CFX_WideString& wsText, | |
| 204 const CFX_Int32Array& levels, | |
| 205 int32_t iStart, | |
| 206 FX_BOOL bReverse = FALSE); | |
| 207 void FX_BidiReorder(int32_t iBaseLevel, | |
| 208 CFX_WideString& wsText, | |
| 209 const CFX_Int32Array& levels); | |
| 210 | |
| 211 #endif // CORE_FXCRT_FX_ARABIC_H_ | |
| OLD | NEW |