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 #include "../fgas_base.h" | 7 #include "../fgas_base.h" |
8 extern const FX_DWORD gs_FX_TextLayout_CodeProperties[65536]; | 8 |
9 extern const FX_LINEBREAKTYPE gs_FX_LineBreak_PairTable[64][32] = { | 9 extern const FX_LINEBREAKTYPE gs_FX_LineBreak_PairTable[64][32] = { |
10 {FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, | 10 {FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, |
11 FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, | 11 FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, |
12 FX_LBPB, FX_LBPB, FX_LBPB, FX_LBCP, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, | 12 FX_LBPB, FX_LBPB, FX_LBPB, FX_LBCP, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, |
13 FX_LBPB, FX_LBPB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, | 13 FX_LBPB, FX_LBPB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, |
14 {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, | 14 {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, |
15 FX_LBIB, FX_LBIB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, | 15 FX_LBIB, FX_LBIB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, |
16 FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, | 16 FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, |
17 FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, | 17 FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, |
18 {FX_LBPB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, | 18 {FX_LBPB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 }; | 266 }; |
267 void FX_GetLineBreakPositions(const FX_WCHAR* pwsText, | 267 void FX_GetLineBreakPositions(const FX_WCHAR* pwsText, |
268 FX_LINEBREAKTYPE* pBrkType, | 268 FX_LINEBREAKTYPE* pBrkType, |
269 int32_t iLength) { | 269 int32_t iLength) { |
270 if (iLength < 2) { | 270 if (iLength < 2) { |
271 return; | 271 return; |
272 } | 272 } |
273 FX_DWORD dwCur, dwNext; | 273 FX_DWORD dwCur, dwNext; |
274 FX_WCHAR wch; | 274 FX_WCHAR wch; |
275 wch = *pwsText++; | 275 wch = *pwsText++; |
276 dwCur = gs_FX_TextLayout_CodeProperties[(FX_WORD)wch] & 0x003F; | 276 dwCur = kTextLayoutCodeProperties[(FX_WORD)wch] & 0x003F; |
277 iLength--; | 277 iLength--; |
278 for (int32_t i = 0; i < iLength; i++) { | 278 for (int32_t i = 0; i < iLength; i++) { |
279 wch = *pwsText++; | 279 wch = *pwsText++; |
280 dwNext = gs_FX_TextLayout_CodeProperties[(FX_WORD)wch] & 0x003F; | 280 dwNext = kTextLayoutCodeProperties[(FX_WORD)wch] & 0x003F; |
281 if (dwNext == FX_CBP_SP) { | 281 if (dwNext == FX_CBP_SP) { |
282 pBrkType[i] = FX_LBT_PROHIBITED_BRK; | 282 pBrkType[i] = FX_LBT_PROHIBITED_BRK; |
283 } else { | 283 } else { |
284 pBrkType[i] = *((const FX_LINEBREAKTYPE*)gs_FX_LineBreak_PairTable + | 284 pBrkType[i] = *((const FX_LINEBREAKTYPE*)gs_FX_LineBreak_PairTable + |
285 (dwCur << 5) + dwNext); | 285 (dwCur << 5) + dwNext); |
286 } | 286 } |
287 dwCur = dwNext; | 287 dwCur = dwNext; |
288 } | 288 } |
289 pBrkType[iLength] = FX_LBT_INDIRECT_BRK; | 289 pBrkType[iLength] = FX_LBT_INDIRECT_BRK; |
290 } | 290 } |
291 void FX_GetLineBreakPositions(const FX_WCHAR* pwsText, | 291 void FX_GetLineBreakPositions(const FX_WCHAR* pwsText, |
292 int32_t iLength, | 292 int32_t iLength, |
293 CFX_Int32MassArray& bp) { | 293 CFX_Int32MassArray& bp) { |
294 if (iLength < 2) { | 294 if (iLength < 2) { |
295 return; | 295 return; |
296 } | 296 } |
297 FX_LINEBREAKTYPE eType; | 297 FX_LINEBREAKTYPE eType; |
298 FX_DWORD dwCur, dwNext; | 298 FX_DWORD dwCur, dwNext; |
299 FX_WCHAR wch; | 299 FX_WCHAR wch; |
300 wch = *pwsText++; | 300 wch = *pwsText++; |
301 dwCur = gs_FX_TextLayout_CodeProperties[(FX_WORD)wch] & 0x003F; | 301 dwCur = kTextLayoutCodeProperties[(FX_WORD)wch] & 0x003F; |
302 iLength--; | 302 iLength--; |
303 for (int32_t i = 0; i < iLength; i++) { | 303 for (int32_t i = 0; i < iLength; i++) { |
304 wch = *pwsText++; | 304 wch = *pwsText++; |
305 dwNext = gs_FX_TextLayout_CodeProperties[(FX_WORD)wch] & 0x003F; | 305 dwNext = kTextLayoutCodeProperties[(FX_WORD)wch] & 0x003F; |
306 if (dwNext == FX_CBP_SP) { | 306 if (dwNext == FX_CBP_SP) { |
307 eType = FX_LBT_PROHIBITED_BRK; | 307 eType = FX_LBT_PROHIBITED_BRK; |
308 } else { | 308 } else { |
309 eType = *((const FX_LINEBREAKTYPE*)gs_FX_LineBreak_PairTable + | 309 eType = *((const FX_LINEBREAKTYPE*)gs_FX_LineBreak_PairTable + |
310 (dwCur << 5) + dwNext); | 310 (dwCur << 5) + dwNext); |
311 } | 311 } |
312 if (eType == FX_LBT_DIRECT_BRK) { | 312 if (eType == FX_LBT_DIRECT_BRK) { |
313 bp.Add(i); | 313 bp.Add(i); |
314 } | 314 } |
315 dwCur = dwNext; | 315 dwCur = dwNext; |
316 } | 316 } |
317 } | 317 } |
OLD | NEW |