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 XFA_FGAS_LAYOUT_FGAS_RTFBREAK_H_ | 7 #ifndef XFA_FGAS_LAYOUT_FGAS_RTFBREAK_H_ |
8 #define XFA_FGAS_LAYOUT_FGAS_RTFBREAK_H_ | 8 #define XFA_FGAS_LAYOUT_FGAS_RTFBREAK_H_ |
9 | 9 |
10 #include "core/fxcrt/include/fx_basic.h" | 10 #include "core/fxcrt/include/fx_basic.h" |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 #define FX_RTFLINEALIGNMENT_DistributedLeft \ | 57 #define FX_RTFLINEALIGNMENT_DistributedLeft \ |
58 (FX_RTFLINEALIGNMENT_Left | FX_RTFLINEALIGNMENT_Distributed) | 58 (FX_RTFLINEALIGNMENT_Left | FX_RTFLINEALIGNMENT_Distributed) |
59 #define FX_RTFLINEALIGNMENT_DistributedCenter \ | 59 #define FX_RTFLINEALIGNMENT_DistributedCenter \ |
60 (FX_RTFLINEALIGNMENT_Center | FX_RTFLINEALIGNMENT_Distributed) | 60 (FX_RTFLINEALIGNMENT_Center | FX_RTFLINEALIGNMENT_Distributed) |
61 #define FX_RTFLINEALIGNMENT_DistributedRight \ | 61 #define FX_RTFLINEALIGNMENT_DistributedRight \ |
62 (FX_RTFLINEALIGNMENT_Right | FX_RTFLINEALIGNMENT_Distributed) | 62 (FX_RTFLINEALIGNMENT_Right | FX_RTFLINEALIGNMENT_Distributed) |
63 #define FX_RTFLINEALIGNMENT_LowerMask 0x03 | 63 #define FX_RTFLINEALIGNMENT_LowerMask 0x03 |
64 #define FX_RTFLINEALIGNMENT_HigherMask 0x0C | 64 #define FX_RTFLINEALIGNMENT_HigherMask 0x0C |
65 | 65 |
66 struct FX_RTFTEXTOBJ { | 66 struct FX_RTFTEXTOBJ { |
67 FX_RTFTEXTOBJ() { | 67 FX_RTFTEXTOBJ(); |
68 pStr = NULL; | |
69 pWidths = NULL; | |
70 iLength = 0; | |
71 pFont = NULL; | |
72 fFontSize = 12.0f; | |
73 dwLayoutStyles = 0; | |
74 iCharRotation = 0; | |
75 iBidiLevel = 0; | |
76 pRect = NULL; | |
77 wLineBreakChar = L'\n'; | |
78 iHorizontalScale = 100; | |
79 iVerticalScale = 100; | |
80 } | |
81 | 68 |
82 const FX_WCHAR* pStr; | 69 const FX_WCHAR* pStr; |
83 int32_t* pWidths; | 70 int32_t* pWidths; |
84 int32_t iLength; | 71 int32_t iLength; |
85 CFGAS_GEFont* pFont; | 72 CFGAS_GEFont* pFont; |
86 FX_FLOAT fFontSize; | 73 FX_FLOAT fFontSize; |
87 uint32_t dwLayoutStyles; | 74 uint32_t dwLayoutStyles; |
88 int32_t iCharRotation; | 75 int32_t iCharRotation; |
89 int32_t iBidiLevel; | 76 int32_t iBidiLevel; |
90 const CFX_RectF* pRect; | 77 const CFX_RectF* pRect; |
91 FX_WCHAR wLineBreakChar; | 78 FX_WCHAR wLineBreakChar; |
92 int32_t iHorizontalScale; | 79 int32_t iHorizontalScale; |
93 int32_t iVerticalScale; | 80 int32_t iVerticalScale; |
94 }; | 81 }; |
95 | 82 |
96 class CFX_RTFPiece : public CFX_Target { | 83 class CFX_RTFPiece : public CFX_Target { |
97 public: | 84 public: |
98 CFX_RTFPiece() | 85 CFX_RTFPiece(); |
99 : m_dwStatus(FX_RTFBREAK_PieceBreak), | 86 ~CFX_RTFPiece() override; |
100 m_iStartPos(0), | 87 |
101 m_iWidth(-1), | |
102 m_iStartChar(0), | |
103 m_iChars(0), | |
104 m_iBidiLevel(0), | |
105 m_iBidiPos(0), | |
106 m_iFontSize(0), | |
107 m_iFontHeight(0), | |
108 m_iHorizontalScale(100), | |
109 m_iVerticalScale(100), | |
110 m_dwLayoutStyles(0), | |
111 m_dwIdentity(0), | |
112 m_pChars(NULL), | |
113 m_pUserData(NULL) {} | |
114 ~CFX_RTFPiece() { Reset(); } | |
115 void AppendChar(const CFX_RTFChar& tc) { | 88 void AppendChar(const CFX_RTFChar& tc) { |
116 ASSERT(m_pChars != NULL); | 89 ASSERT(m_pChars != NULL); |
117 m_pChars->Add(tc); | 90 m_pChars->Add(tc); |
118 if (m_iWidth < 0) { | 91 if (m_iWidth < 0) { |
119 m_iWidth = tc.m_iCharWidth; | 92 m_iWidth = tc.m_iCharWidth; |
120 } else { | 93 } else { |
121 m_iWidth += tc.m_iCharWidth; | 94 m_iWidth += tc.m_iCharWidth; |
122 } | 95 } |
123 m_iChars++; | 96 m_iChars++; |
124 } | 97 } |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 m_iStartPos += m_iWidth; | 137 m_iStartPos += m_iWidth; |
165 } | 138 } |
166 m_iWidth = -1; | 139 m_iWidth = -1; |
167 m_iStartChar += m_iChars; | 140 m_iStartChar += m_iChars; |
168 m_iChars = 0; | 141 m_iChars = 0; |
169 m_iBidiLevel = 0; | 142 m_iBidiLevel = 0; |
170 m_iBidiPos = 0; | 143 m_iBidiPos = 0; |
171 m_iHorizontalScale = 100; | 144 m_iHorizontalScale = 100; |
172 m_iVerticalScale = 100; | 145 m_iVerticalScale = 100; |
173 } | 146 } |
| 147 |
174 uint32_t m_dwStatus; | 148 uint32_t m_dwStatus; |
175 int32_t m_iStartPos; | 149 int32_t m_iStartPos; |
176 int32_t m_iWidth; | 150 int32_t m_iWidth; |
177 int32_t m_iStartChar; | 151 int32_t m_iStartChar; |
178 int32_t m_iChars; | 152 int32_t m_iChars; |
179 int32_t m_iBidiLevel; | 153 int32_t m_iBidiLevel; |
180 int32_t m_iBidiPos; | 154 int32_t m_iBidiPos; |
181 int32_t m_iFontSize; | 155 int32_t m_iFontSize; |
182 int32_t m_iFontHeight; | 156 int32_t m_iFontHeight; |
183 int32_t m_iHorizontalScale; | 157 int32_t m_iHorizontalScale; |
184 int32_t m_iVerticalScale; | 158 int32_t m_iVerticalScale; |
185 uint32_t m_dwLayoutStyles; | 159 uint32_t m_dwLayoutStyles; |
186 uint32_t m_dwIdentity; | 160 uint32_t m_dwIdentity; |
187 CFX_RTFCharArray* m_pChars; | 161 CFX_RTFCharArray* m_pChars; |
188 IFX_Retainable* m_pUserData; | 162 IFX_Retainable* m_pUserData; |
189 }; | 163 }; |
| 164 |
190 typedef CFX_BaseArrayTemplate<CFX_RTFPiece> CFX_RTFPieceArray; | 165 typedef CFX_BaseArrayTemplate<CFX_RTFPiece> CFX_RTFPieceArray; |
191 | 166 |
192 class CFX_RTFLine { | 167 class CFX_RTFLine { |
193 public: | 168 public: |
194 CFX_RTFLine() | 169 CFX_RTFLine(); |
195 : m_LinePieces(16), | 170 ~CFX_RTFLine(); |
196 m_iStart(0), | 171 |
197 m_iWidth(0), | |
198 m_iArabicChars(0), | |
199 m_iMBCSChars(0) {} | |
200 ~CFX_RTFLine() { RemoveAll(); } | |
201 int32_t CountChars() const { return m_LineChars.GetSize(); } | 172 int32_t CountChars() const { return m_LineChars.GetSize(); } |
202 CFX_RTFChar& GetChar(int32_t index) { | 173 CFX_RTFChar& GetChar(int32_t index) { |
203 ASSERT(index > -1 && index < m_LineChars.GetSize()); | 174 ASSERT(index > -1 && index < m_LineChars.GetSize()); |
204 return *m_LineChars.GetDataPtr(index); | 175 return *m_LineChars.GetDataPtr(index); |
205 } | 176 } |
206 CFX_RTFChar* GetCharPtr(int32_t index) { | 177 CFX_RTFChar* GetCharPtr(int32_t index) { |
207 ASSERT(index > -1 && index < m_LineChars.GetSize()); | 178 ASSERT(index > -1 && index < m_LineChars.GetSize()); |
208 return m_LineChars.GetDataPtr(index); | 179 return m_LineChars.GetDataPtr(index); |
209 } | 180 } |
210 int32_t CountPieces() const { return m_LinePieces.GetSize(); } | 181 int32_t CountPieces() const { return m_LinePieces.GetSize(); } |
(...skipping 15 matching lines...) Expand all Loading... |
226 if ((pUnknown = pChar->m_pUserData) != NULL) { | 197 if ((pUnknown = pChar->m_pUserData) != NULL) { |
227 pUnknown->Release(); | 198 pUnknown->Release(); |
228 } | 199 } |
229 } | 200 } |
230 m_LineChars.RemoveAll(); | 201 m_LineChars.RemoveAll(); |
231 m_LinePieces.RemoveAll(bLeaveMemory); | 202 m_LinePieces.RemoveAll(bLeaveMemory); |
232 m_iWidth = 0; | 203 m_iWidth = 0; |
233 m_iArabicChars = 0; | 204 m_iArabicChars = 0; |
234 m_iMBCSChars = 0; | 205 m_iMBCSChars = 0; |
235 } | 206 } |
| 207 |
236 CFX_RTFCharArray m_LineChars; | 208 CFX_RTFCharArray m_LineChars; |
237 CFX_RTFPieceArray m_LinePieces; | 209 CFX_RTFPieceArray m_LinePieces; |
238 int32_t m_iStart; | 210 int32_t m_iStart; |
239 int32_t m_iWidth; | 211 int32_t m_iWidth; |
240 int32_t m_iArabicChars; | 212 int32_t m_iArabicChars; |
241 int32_t m_iMBCSChars; | 213 int32_t m_iMBCSChars; |
242 }; | 214 }; |
243 | 215 |
244 class CFX_RTFBreak { | 216 class CFX_RTFBreak { |
245 public: | 217 public: |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
283 CFX_RectFArray& rtArray, | 255 CFX_RectFArray& rtArray, |
284 FX_BOOL bCharBBox = FALSE) const; | 256 FX_BOOL bCharBBox = FALSE) const; |
285 uint32_t AppendChar_CharCode(FX_WCHAR wch); | 257 uint32_t AppendChar_CharCode(FX_WCHAR wch); |
286 uint32_t AppendChar_Combination(CFX_RTFChar* pCurChar, int32_t iRotation); | 258 uint32_t AppendChar_Combination(CFX_RTFChar* pCurChar, int32_t iRotation); |
287 uint32_t AppendChar_Tab(CFX_RTFChar* pCurChar, int32_t iRotation); | 259 uint32_t AppendChar_Tab(CFX_RTFChar* pCurChar, int32_t iRotation); |
288 uint32_t AppendChar_Control(CFX_RTFChar* pCurChar, int32_t iRotation); | 260 uint32_t AppendChar_Control(CFX_RTFChar* pCurChar, int32_t iRotation); |
289 uint32_t AppendChar_Arabic(CFX_RTFChar* pCurChar, int32_t iRotation); | 261 uint32_t AppendChar_Arabic(CFX_RTFChar* pCurChar, int32_t iRotation); |
290 uint32_t AppendChar_Others(CFX_RTFChar* pCurChar, int32_t iRotation); | 262 uint32_t AppendChar_Others(CFX_RTFChar* pCurChar, int32_t iRotation); |
291 | 263 |
292 protected: | 264 protected: |
| 265 int32_t GetLineRotation(uint32_t dwStyles) const; |
| 266 void SetBreakStatus(); |
| 267 CFX_RTFChar* GetLastChar(int32_t index) const; |
| 268 CFX_RTFLine* GetRTFLine(FX_BOOL bReady) const; |
| 269 CFX_RTFPieceArray* GetRTFPieces(FX_BOOL bReady) const; |
| 270 FX_CHARTYPE GetUnifiedCharType(FX_CHARTYPE chartype) const; |
| 271 int32_t GetLastPositionedTab() const; |
| 272 FX_BOOL GetPositionedTab(int32_t& iTabPos) const; |
| 273 |
| 274 int32_t GetBreakPos(CFX_RTFCharArray& tca, |
| 275 int32_t& iEndPos, |
| 276 FX_BOOL bAllChars = FALSE, |
| 277 FX_BOOL bOnlyBrk = FALSE); |
| 278 void SplitTextLine(CFX_RTFLine* pCurLine, |
| 279 CFX_RTFLine* pNextLine, |
| 280 FX_BOOL bAllChars = FALSE); |
| 281 FX_BOOL EndBreak_SplitLine(CFX_RTFLine* pNextLine, |
| 282 FX_BOOL bAllChars, |
| 283 uint32_t dwStatus); |
| 284 void EndBreak_BidiLine(CFX_TPOArray& tpos, uint32_t dwStatus); |
| 285 void EndBreak_Alignment(CFX_TPOArray& tpos, |
| 286 FX_BOOL bAllChars, |
| 287 uint32_t dwStatus); |
| 288 |
293 uint32_t m_dwPolicies; | 289 uint32_t m_dwPolicies; |
294 int32_t m_iBoundaryStart; | 290 int32_t m_iBoundaryStart; |
295 int32_t m_iBoundaryEnd; | 291 int32_t m_iBoundaryEnd; |
296 uint32_t m_dwLayoutStyles; | 292 uint32_t m_dwLayoutStyles; |
297 FX_BOOL m_bPagination; | 293 FX_BOOL m_bPagination; |
298 FX_BOOL m_bVertical; | 294 FX_BOOL m_bVertical; |
299 FX_BOOL m_bSingleLine; | 295 FX_BOOL m_bSingleLine; |
300 FX_BOOL m_bCharCode; | 296 FX_BOOL m_bCharCode; |
301 CFGAS_GEFont* m_pFont; | 297 CFGAS_GEFont* m_pFont; |
302 int32_t m_iFontHeight; | 298 int32_t m_iFontHeight; |
(...skipping 15 matching lines...) Expand all Loading... |
318 FX_BOOL m_bRTL; | 314 FX_BOOL m_bRTL; |
319 int32_t m_iAlignment; | 315 int32_t m_iAlignment; |
320 IFX_Retainable* m_pUserData; | 316 IFX_Retainable* m_pUserData; |
321 FX_CHARTYPE m_eCharType; | 317 FX_CHARTYPE m_eCharType; |
322 uint32_t m_dwIdentity; | 318 uint32_t m_dwIdentity; |
323 CFX_RTFLine m_RTFLine1; | 319 CFX_RTFLine m_RTFLine1; |
324 CFX_RTFLine m_RTFLine2; | 320 CFX_RTFLine m_RTFLine2; |
325 CFX_RTFLine* m_pCurLine; | 321 CFX_RTFLine* m_pCurLine; |
326 int32_t m_iReady; | 322 int32_t m_iReady; |
327 int32_t m_iTolerance; | 323 int32_t m_iTolerance; |
328 int32_t GetLineRotation(uint32_t dwStyles) const; | |
329 void SetBreakStatus(); | |
330 CFX_RTFChar* GetLastChar(int32_t index) const; | |
331 CFX_RTFLine* GetRTFLine(FX_BOOL bReady) const; | |
332 CFX_RTFPieceArray* GetRTFPieces(FX_BOOL bReady) const; | |
333 FX_CHARTYPE GetUnifiedCharType(FX_CHARTYPE chartype) const; | |
334 int32_t GetLastPositionedTab() const; | |
335 FX_BOOL GetPositionedTab(int32_t& iTabPos) const; | |
336 int32_t GetBreakPos(CFX_RTFCharArray& tca, | |
337 int32_t& iEndPos, | |
338 FX_BOOL bAllChars = FALSE, | |
339 FX_BOOL bOnlyBrk = FALSE); | |
340 void SplitTextLine(CFX_RTFLine* pCurLine, | |
341 CFX_RTFLine* pNextLine, | |
342 FX_BOOL bAllChars = FALSE); | |
343 FX_BOOL EndBreak_SplitLine(CFX_RTFLine* pNextLine, | |
344 FX_BOOL bAllChars, | |
345 uint32_t dwStatus); | |
346 void EndBreak_BidiLine(CFX_TPOArray& tpos, uint32_t dwStatus); | |
347 void EndBreak_Alignment(CFX_TPOArray& tpos, | |
348 FX_BOOL bAllChars, | |
349 uint32_t dwStatus); | |
350 }; | 324 }; |
351 | 325 |
352 #endif // XFA_FGAS_LAYOUT_FGAS_RTFBREAK_H_ | 326 #endif // XFA_FGAS_LAYOUT_FGAS_RTFBREAK_H_ |
OLD | NEW |