Merge to XFA: Fix ALL the include guards.
[pdfium.git] / core / src / fxcrt / fx_arabic.h
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_SRC_FXCRT_FX_ARABIC_H_
8 #define CORE_SRC_FXCRT_FX_ARABIC_H_
9
10 typedef struct _FX_ARABICCHARRANGE {
11     FX_WCHAR wStart;
12     FX_WCHAR wEnd;
13 } FX_ARABICCHARRANGE;
14 class CFX_ArabicChar : public IFX_ArabicChar
15 {
16 public:
17     virtual void                Release()
18     {
19         delete this;
20     }
21     virtual FX_BOOL             IsArabicChar(FX_WCHAR wch) const;
22     virtual FX_BOOL             IsArabicFormChar(FX_WCHAR wch) const;
23
24     virtual FX_WCHAR    GetFormChar(FX_WCHAR wch, FX_WCHAR prev = 0, FX_WCHAR next = 0) const;
25     virtual FX_WCHAR    GetFormChar(const CFX_Char *cur, const CFX_Char *prev, const CFX_Char *next) const;
26 protected:
27     FX_LPCARBFORMTABLE ParseChar(const CFX_Char *pTC, FX_WCHAR &wChar, FX_CHARTYPE &eType) const;
28 };
29 void FX_BidiReverseString(CFX_WideString &wsText, FX_INT32 iStart, FX_INT32 iCount);
30 void FX_BidiSetDeferredRun(CFX_Int32Array &values, FX_INT32 iStart, FX_INT32 iCount, FX_INT32 iValue);
31 #define FX_BCON         FX_BIDICLASS_ON
32 #define FX_BCL          FX_BIDICLASS_L
33 #define FX_BCR          FX_BIDICLASS_R
34 #define FX_BCAN         FX_BIDICLASS_AN
35 #define FX_BCEN         FX_BIDICLASS_EN
36 #define FX_BCAL         FX_BIDICLASS_AL
37 #define FX_BCNSM        FX_BIDICLASS_NSM
38 #define FX_BCCS         FX_BIDICLASS_CS
39 #define FX_BCES         FX_BIDICLASS_ES
40 #define FX_BCET         FX_BIDICLASS_ET
41 #define FX_BCBN         FX_BIDICLASS_BN
42 #define FX_BCS          FX_BIDICLASS_S
43 #define FX_BCWS         FX_BIDICLASS_WS
44 #define FX_BCB          FX_BIDICLASS_B
45 #define FX_BCRLO        FX_BIDICLASS_RLO
46 #define FX_BCRLE        FX_BIDICLASS_RLE
47 #define FX_BCLRO        FX_BIDICLASS_LRO
48 #define FX_BCLRE        FX_BIDICLASS_LRE
49 #define FX_BCPDF        FX_BIDICLASS_PDF
50 #define FX_BCN          FX_BIDICLASS_N
51 void FX_BidiClassify(const CFX_WideString &wsText, CFX_Int32Array &classes, FX_BOOL bWS = FALSE);
52 #define FX_BIDIMAXLEVEL                 61
53 #define FX_BidiGreaterEven(a)   (FX_IsOdd(a) ? ((a) + 1) : ((a) + 2))
54 #define FX_BidiGreaterOdd(a)    (FX_IsOdd(a) ? ((a) + 2) : ((a) + 1))
55 FX_INT32 FX_BidiResolveExplicit(FX_INT32 iBaseLevel, FX_INT32 iDirection, CFX_Int32Array &classes, CFX_Int32Array &levels, FX_INT32 iStart, FX_INT32 iCount, FX_INT32 iNest = 0);
56 #define FX_BidiDirection(a)     (FX_IsOdd(a) ? FX_BIDICLASS_R : FX_BIDICLASS_L)
57 enum FX_BIDIWEAKSTATE {
58     FX_BIDIWEAKSTATE_xa = 0,
59     FX_BIDIWEAKSTATE_xr,
60     FX_BIDIWEAKSTATE_xl,
61     FX_BIDIWEAKSTATE_ao,
62     FX_BIDIWEAKSTATE_ro,
63     FX_BIDIWEAKSTATE_lo,
64     FX_BIDIWEAKSTATE_rt,
65     FX_BIDIWEAKSTATE_lt,
66     FX_BIDIWEAKSTATE_cn,
67     FX_BIDIWEAKSTATE_ra,
68     FX_BIDIWEAKSTATE_re,
69     FX_BIDIWEAKSTATE_la,
70     FX_BIDIWEAKSTATE_le,
71     FX_BIDIWEAKSTATE_ac,
72     FX_BIDIWEAKSTATE_rc,
73     FX_BIDIWEAKSTATE_rs,
74     FX_BIDIWEAKSTATE_lc,
75     FX_BIDIWEAKSTATE_ls,
76     FX_BIDIWEAKSTATE_ret,
77     FX_BIDIWEAKSTATE_let,
78 };
79 #define FX_BWSxa        FX_BIDIWEAKSTATE_xa
80 #define FX_BWSxr        FX_BIDIWEAKSTATE_xr
81 #define FX_BWSxl        FX_BIDIWEAKSTATE_xl
82 #define FX_BWSao        FX_BIDIWEAKSTATE_ao
83 #define FX_BWSro        FX_BIDIWEAKSTATE_ro
84 #define FX_BWSlo        FX_BIDIWEAKSTATE_lo
85 #define FX_BWSrt        FX_BIDIWEAKSTATE_rt
86 #define FX_BWSlt        FX_BIDIWEAKSTATE_lt
87 #define FX_BWScn        FX_BIDIWEAKSTATE_cn
88 #define FX_BWSra        FX_BIDIWEAKSTATE_ra
89 #define FX_BWSre        FX_BIDIWEAKSTATE_re
90 #define FX_BWSla        FX_BIDIWEAKSTATE_la
91 #define FX_BWSle        FX_BIDIWEAKSTATE_le
92 #define FX_BWSac        FX_BIDIWEAKSTATE_ac
93 #define FX_BWSrc        FX_BIDIWEAKSTATE_rc
94 #define FX_BWSrs        FX_BIDIWEAKSTATE_rs
95 #define FX_BWSlc        FX_BIDIWEAKSTATE_lc
96 #define FX_BWSls        FX_BIDIWEAKSTATE_ls
97 #define FX_BWSret       FX_BIDIWEAKSTATE_ret
98 #define FX_BWSlet       FX_BIDIWEAKSTATE_let
99 enum FX_BIDIWEAKACTION {
100     FX_BIDIWEAKACTION_IX = 0x100,
101     FX_BIDIWEAKACTION_XX = 0x0F,
102     FX_BIDIWEAKACTION_xxx = (0x0F << 4) + 0x0F,
103     FX_BIDIWEAKACTION_xIx = 0x100 + FX_BIDIWEAKACTION_xxx,
104     FX_BIDIWEAKACTION_xxN = (0x0F << 4) + FX_BIDICLASS_ON,
105     FX_BIDIWEAKACTION_xxE = (0x0F << 4) + FX_BIDICLASS_EN,
106     FX_BIDIWEAKACTION_xxA = (0x0F << 4) + FX_BIDICLASS_AN,
107     FX_BIDIWEAKACTION_xxR = (0x0F << 4) + FX_BIDICLASS_R,
108     FX_BIDIWEAKACTION_xxL = (0x0F << 4) + FX_BIDICLASS_L,
109     FX_BIDIWEAKACTION_Nxx = (FX_BIDICLASS_ON << 4) + 0x0F,
110     FX_BIDIWEAKACTION_Axx = (FX_BIDICLASS_AN << 4) + 0x0F,
111     FX_BIDIWEAKACTION_ExE = (FX_BIDICLASS_EN << 4) + FX_BIDICLASS_EN,
112     FX_BIDIWEAKACTION_NIx = (FX_BIDICLASS_ON << 4) + 0x0F + 0x100,
113     FX_BIDIWEAKACTION_NxN = (FX_BIDICLASS_ON << 4) + FX_BIDICLASS_ON,
114     FX_BIDIWEAKACTION_NxR = (FX_BIDICLASS_ON << 4) + FX_BIDICLASS_R,
115     FX_BIDIWEAKACTION_NxE = (FX_BIDICLASS_ON << 4) + FX_BIDICLASS_EN,
116     FX_BIDIWEAKACTION_AxA = (FX_BIDICLASS_AN << 4) + FX_BIDICLASS_AN,
117     FX_BIDIWEAKACTION_NxL = (FX_BIDICLASS_ON << 4) + FX_BIDICLASS_L,
118     FX_BIDIWEAKACTION_LxL = (FX_BIDICLASS_L << 4) + FX_BIDICLASS_L,
119     FX_BIDIWEAKACTION_xIL = (0x0F << 4) + FX_BIDICLASS_L + 0x100,
120     FX_BIDIWEAKACTION_AxR = (FX_BIDICLASS_AN << 4) + FX_BIDICLASS_R,
121     FX_BIDIWEAKACTION_Lxx = (FX_BIDICLASS_L << 4) + 0x0F,
122 };
123 #define FX_BWAIX        FX_BIDIWEAKACTION_IX
124 #define FX_BWAXX        FX_BIDIWEAKACTION_XX
125 #define FX_BWAxxx       FX_BIDIWEAKACTION_xxx
126 #define FX_BWAxIx       FX_BIDIWEAKACTION_xIx
127 #define FX_BWAxxN       FX_BIDIWEAKACTION_xxN
128 #define FX_BWAxxE       FX_BIDIWEAKACTION_xxE
129 #define FX_BWAxxA       FX_BIDIWEAKACTION_xxA
130 #define FX_BWAxxR       FX_BIDIWEAKACTION_xxR
131 #define FX_BWAxxL       FX_BIDIWEAKACTION_xxL
132 #define FX_BWANxx       FX_BIDIWEAKACTION_Nxx
133 #define FX_BWAAxx       FX_BIDIWEAKACTION_Axx
134 #define FX_BWAExE       FX_BIDIWEAKACTION_ExE
135 #define FX_BWANIx       FX_BIDIWEAKACTION_NIx
136 #define FX_BWANxN       FX_BIDIWEAKACTION_NxN
137 #define FX_BWANxR       FX_BIDIWEAKACTION_NxR
138 #define FX_BWANxE       FX_BIDIWEAKACTION_NxE
139 #define FX_BWAAxA       FX_BIDIWEAKACTION_AxA
140 #define FX_BWANxL       FX_BIDIWEAKACTION_NxL
141 #define FX_BWALxL       FX_BIDIWEAKACTION_LxL
142 #define FX_BWAxIL       FX_BIDIWEAKACTION_xIL
143 #define FX_BWAAxR       FX_BIDIWEAKACTION_AxR
144 #define FX_BWALxx       FX_BIDIWEAKACTION_Lxx
145 #define FX_BidiGetDeferredType(a)       (((a) >> 4) & 0x0F)
146 #define FX_BidiGetResolvedType(a)       ((a) & 0x0F)
147 void FX_BidiResolveWeak(FX_INT32 iBaseLevel, CFX_Int32Array &classes, CFX_Int32Array &levels);
148 enum FX_BIDINEUTRALSTATE {
149     FX_BIDINEUTRALSTATE_r = 0,
150     FX_BIDINEUTRALSTATE_l,
151     FX_BIDINEUTRALSTATE_rn,
152     FX_BIDINEUTRALSTATE_ln,
153     FX_BIDINEUTRALSTATE_a,
154     FX_BIDINEUTRALSTATE_na,
155 };
156 #define FX_BNSr         FX_BIDINEUTRALSTATE_r
157 #define FX_BNSl         FX_BIDINEUTRALSTATE_l
158 #define FX_BNSrn        FX_BIDINEUTRALSTATE_rn
159 #define FX_BNSln        FX_BIDINEUTRALSTATE_ln
160 #define FX_BNSa         FX_BIDINEUTRALSTATE_a
161 #define FX_BNSna        FX_BIDINEUTRALSTATE_na
162 enum FX_BIDINEUTRALACTION {
163     FX_BIDINEUTRALACTION_nL = FX_BIDICLASS_L,
164     FX_BIDINEUTRALACTION_En = (FX_BIDICLASS_AN << 4),
165     FX_BIDINEUTRALACTION_Rn = (FX_BIDICLASS_R << 4),
166     FX_BIDINEUTRALACTION_Ln = (FX_BIDICLASS_L << 4),
167     FX_BIDINEUTRALACTION_In = FX_BIDIWEAKACTION_IX,
168     FX_BIDINEUTRALACTION_LnL = (FX_BIDICLASS_L << 4) + FX_BIDICLASS_L,
169 };
170 #define FX_BNAnL        FX_BIDINEUTRALACTION_nL
171 #define FX_BNAEn        FX_BIDINEUTRALACTION_En
172 #define FX_BNARn        FX_BIDINEUTRALACTION_Rn
173 #define FX_BNALn        FX_BIDINEUTRALACTION_Ln
174 #define FX_BNAIn        FX_BIDINEUTRALACTION_In
175 #define FX_BNALnL       FX_BIDINEUTRALACTION_LnL
176 FX_INT32 FX_BidiGetDeferredNeutrals(FX_INT32 iAction, FX_INT32 iLevel);
177 FX_INT32 FX_BidiGetResolvedNeutrals(FX_INT32 iAction);
178 void FX_BidiResolveNeutrals(FX_INT32 iBaseLevel, CFX_Int32Array &classes, const CFX_Int32Array &levels);
179 void FX_BidiResolveImplicit(const CFX_Int32Array &classes, CFX_Int32Array &levels);
180 void FX_BidiResolveWhitespace(FX_INT32 iBaseLevel, const CFX_Int32Array &classes, CFX_Int32Array &levels);
181 FX_INT32 FX_BidiReorderLevel(FX_INT32 iBaseLevel, CFX_WideString &wsText, const CFX_Int32Array &levels, FX_INT32 iStart, FX_BOOL bReverse = FALSE);
182 void FX_BidiReorder(FX_INT32 iBaseLevel, CFX_WideString &wsText, const CFX_Int32Array &levels);
183 class CFX_BidiChar FX_FINAL : public IFX_BidiChar
184 {
185 public:
186     CFX_BidiChar();
187     virtual void                Release() FX_OVERRIDE
188     {
189         delete this;
190     }
191     virtual void                SetPolicy(FX_BOOL bSeparateNeutral = TRUE) FX_OVERRIDE
192     {
193         m_bSeparateNeutral = bSeparateNeutral;
194     }
195     virtual FX_BOOL             AppendChar(FX_WCHAR wch) FX_OVERRIDE;
196     virtual FX_BOOL             EndChar() FX_OVERRIDE;
197     virtual FX_INT32    GetBidiInfo(FX_INT32 &iStart, FX_INT32 &iCount) FX_OVERRIDE;
198     virtual void                Reset() FX_OVERRIDE;
199
200 private:
201     ~CFX_BidiChar() { }
202     FX_BOOL             m_bSeparateNeutral;
203     FX_INT32    m_iCurStart;
204     FX_INT32    m_iCurCount;
205     FX_INT32    m_iCurBidi;
206     FX_INT32    m_iLastBidi;
207     FX_INT32    m_iLastStart;
208     FX_INT32    m_iLastCount;
209 };
210
211 #endif  // CORE_SRC_FXCRT_FX_ARABIC_H_