Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(242)

Side by Side Diff: core/src/fxcrt/fx_arabic.cpp

Issue 1172793002: Merge to XFA: Use stdint.h types throughout PDFium. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/src/fxcrt/fx_arabic.h ('k') | core/src/fxcrt/fx_basic_array.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "../../include/fxcrt/fx_ext.h" 7 #include "../../include/fxcrt/fx_ext.h"
8 #include "fx_arabic.h" 8 #include "fx_arabic.h"
9 extern const FX_DWORD gs_FX_TextLayout_CodeProperties[65536]; 9 extern const FX_DWORD gs_FX_TextLayout_CodeProperties[65536];
10 #ifdef __cplusplus 10 #ifdef __cplusplus
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 }; 207 };
208 FX_LPCARBFORMTABLE FX_GetArabicFormTable(FX_WCHAR unicode) 208 FX_LPCARBFORMTABLE FX_GetArabicFormTable(FX_WCHAR unicode)
209 { 209 {
210 if (unicode < 0x622 || unicode > 0x6d5) { 210 if (unicode < 0x622 || unicode > 0x6d5) {
211 return NULL; 211 return NULL;
212 } 212 }
213 return g_FX_ArabicFormTables + unicode - 0x622; 213 return g_FX_ArabicFormTables + unicode - 0x622;
214 } 214 }
215 FX_WCHAR FX_GetArabicFromAlefTable(FX_WCHAR alef) 215 FX_WCHAR FX_GetArabicFromAlefTable(FX_WCHAR alef)
216 { 216 {
217 static const FX_INT32 s_iAlefCount = sizeof(gs_FX_AlefTable) / sizeof(FX_ARA ALEF); 217 static const int32_t s_iAlefCount = sizeof(gs_FX_AlefTable) / sizeof(FX_ARAA LEF);
218 for (FX_INT32 iStart = 0; iStart < s_iAlefCount; iStart ++) { 218 for (int32_t iStart = 0; iStart < s_iAlefCount; iStart ++) {
219 const FX_ARAALEF &v = gs_FX_AlefTable[iStart]; 219 const FX_ARAALEF &v = gs_FX_AlefTable[iStart];
220 if (v.wAlef == alef) { 220 if (v.wAlef == alef) {
221 return v.wIsolated; 221 return v.wIsolated;
222 } 222 }
223 } 223 }
224 return alef; 224 return alef;
225 } 225 }
226 FX_WCHAR FX_GetArabicFromShaddaTable(FX_WCHAR shadda) 226 FX_WCHAR FX_GetArabicFromShaddaTable(FX_WCHAR shadda)
227 { 227 {
228 static const FX_INT32 s_iShaddaCount = sizeof(gs_FX_ShaddaTable) / sizeof(FX _ARASHADDA); 228 static const int32_t s_iShaddaCount = sizeof(gs_FX_ShaddaTable) / sizeof(FX_ ARASHADDA);
229 for (FX_INT32 iStart = 0; iStart < s_iShaddaCount; iStart ++) { 229 for (int32_t iStart = 0; iStart < s_iShaddaCount; iStart ++) {
230 const FX_ARASHADDA &v = gs_FX_ShaddaTable[iStart]; 230 const FX_ARASHADDA &v = gs_FX_ShaddaTable[iStart];
231 if (v.wShadda == shadda) { 231 if (v.wShadda == shadda) {
232 return v.wIsolated; 232 return v.wIsolated;
233 } 233 }
234 } 234 }
235 return shadda; 235 return shadda;
236 } 236 }
237 #ifdef __cplusplus 237 #ifdef __cplusplus
238 }; 238 };
239 #endif 239 #endif
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 return NULL; 300 return NULL;
301 } 301 }
302 eType = (FX_CHARTYPE)pTC->GetCharType(); 302 eType = (FX_CHARTYPE)pTC->GetCharType();
303 wChar = (FX_WCHAR)pTC->m_wCharCode; 303 wChar = (FX_WCHAR)pTC->m_wCharCode;
304 FX_LPCARBFORMTABLE pFT = FX_GetArabicFormTable(wChar); 304 FX_LPCARBFORMTABLE pFT = FX_GetArabicFormTable(wChar);
305 if (pFT == NULL || eType >= FX_CHARTYPE_ArabicNormal) { 305 if (pFT == NULL || eType >= FX_CHARTYPE_ArabicNormal) {
306 eType = FX_CHARTYPE_Unknown; 306 eType = FX_CHARTYPE_Unknown;
307 } 307 }
308 return pFT; 308 return pFT;
309 } 309 }
310 void FX_BidiReverseString(CFX_WideString &wsText, FX_INT32 iStart, FX_INT32 iCou nt) 310 void FX_BidiReverseString(CFX_WideString &wsText, int32_t iStart, int32_t iCount )
311 { 311 {
312 FXSYS_assert(iStart > -1 && iStart < wsText.GetLength()); 312 FXSYS_assert(iStart > -1 && iStart < wsText.GetLength());
313 FXSYS_assert(iCount >= 0 && iStart + iCount <= wsText.GetLength()); 313 FXSYS_assert(iCount >= 0 && iStart + iCount <= wsText.GetLength());
314 FX_WCHAR wch; 314 FX_WCHAR wch;
315 FX_LPWSTR pStart = (FX_LPWSTR)(FX_LPCWSTR)wsText; 315 FX_LPWSTR pStart = (FX_LPWSTR)(FX_LPCWSTR)wsText;
316 pStart += iStart; 316 pStart += iStart;
317 FX_LPWSTR pEnd = pStart + iCount - 1; 317 FX_LPWSTR pEnd = pStart + iCount - 1;
318 while (pStart < pEnd) { 318 while (pStart < pEnd) {
319 wch = *pStart; 319 wch = *pStart;
320 *pStart ++ = *pEnd; 320 *pStart ++ = *pEnd;
321 *pEnd -- = wch; 321 *pEnd -- = wch;
322 } 322 }
323 } 323 }
324 void FX_BidiSetDeferredRun(CFX_Int32Array &values, FX_INT32 iStart, FX_INT32 iCo unt, FX_INT32 iValue) 324 void FX_BidiSetDeferredRun(CFX_Int32Array &values, int32_t iStart, int32_t iCoun t, int32_t iValue)
325 { 325 {
326 FXSYS_assert(iStart > -1 && iStart <= values.GetSize()); 326 FXSYS_assert(iStart > -1 && iStart <= values.GetSize());
327 FXSYS_assert(iStart - iCount > -1); 327 FXSYS_assert(iStart - iCount > -1);
328 for (FX_INT32 i = iStart - 1; i >= iStart - iCount; i --) { 328 for (int32_t i = iStart - 1; i >= iStart - iCount; i --) {
329 values.SetAt(i, iValue); 329 values.SetAt(i, iValue);
330 } 330 }
331 } 331 }
332 const FX_INT32 gc_FX_BidiNTypes[] = { 332 const int32_t gc_FX_BidiNTypes[] = {
333 FX_BIDICLASS_N, 333 FX_BIDICLASS_N,
334 FX_BIDICLASS_L, 334 FX_BIDICLASS_L,
335 FX_BIDICLASS_R, 335 FX_BIDICLASS_R,
336 FX_BIDICLASS_AN, 336 FX_BIDICLASS_AN,
337 FX_BIDICLASS_EN, 337 FX_BIDICLASS_EN,
338 FX_BIDICLASS_AL, 338 FX_BIDICLASS_AL,
339 FX_BIDICLASS_NSM, 339 FX_BIDICLASS_NSM,
340 FX_BIDICLASS_CS, 340 FX_BIDICLASS_CS,
341 FX_BIDICLASS_ES, 341 FX_BIDICLASS_ES,
342 FX_BIDICLASS_ET, 342 FX_BIDICLASS_ET,
343 FX_BIDICLASS_BN, 343 FX_BIDICLASS_BN,
344 FX_BIDICLASS_BN, 344 FX_BIDICLASS_BN,
345 FX_BIDICLASS_N, 345 FX_BIDICLASS_N,
346 FX_BIDICLASS_B, 346 FX_BIDICLASS_B,
347 FX_BIDICLASS_RLO, 347 FX_BIDICLASS_RLO,
348 FX_BIDICLASS_RLE, 348 FX_BIDICLASS_RLE,
349 FX_BIDICLASS_LRO, 349 FX_BIDICLASS_LRO,
350 FX_BIDICLASS_LRE, 350 FX_BIDICLASS_LRE,
351 FX_BIDICLASS_PDF, 351 FX_BIDICLASS_PDF,
352 FX_BIDICLASS_ON, 352 FX_BIDICLASS_ON,
353 }; 353 };
354 void FX_BidiClassify(const CFX_WideString &wsText, CFX_Int32Array &classes, FX_B OOL bWS) 354 void FX_BidiClassify(const CFX_WideString &wsText, CFX_Int32Array &classes, FX_B OOL bWS)
355 { 355 {
356 FXSYS_assert(wsText.GetLength() == classes.GetSize()); 356 FXSYS_assert(wsText.GetLength() == classes.GetSize());
357 FX_INT32 iCount = wsText.GetLength(); 357 int32_t iCount = wsText.GetLength();
358 FX_LPCWSTR pwsStart = (FX_LPCWSTR)wsText; 358 FX_LPCWSTR pwsStart = (FX_LPCWSTR)wsText;
359 FX_WCHAR wch; 359 FX_WCHAR wch;
360 FX_INT32 iCls; 360 int32_t iCls;
361 if (bWS) { 361 if (bWS) {
362 for (FX_INT32 i = 0; i < iCount; i ++) { 362 for (int32_t i = 0; i < iCount; i ++) {
363 wch = *pwsStart ++; 363 wch = *pwsStart ++;
364 iCls = ((gs_FX_TextLayout_CodeProperties[(FX_WORD)wch] & FX_BIDICLAS SBITSMASK) >> FX_BIDICLASSBITS); 364 iCls = ((gs_FX_TextLayout_CodeProperties[(FX_WORD)wch] & FX_BIDICLAS SBITSMASK) >> FX_BIDICLASSBITS);
365 classes.SetAt(i, iCls); 365 classes.SetAt(i, iCls);
366 } 366 }
367 } else { 367 } else {
368 for (FX_INT32 i = 0; i < iCount; i ++) { 368 for (int32_t i = 0; i < iCount; i ++) {
369 wch = *pwsStart ++; 369 wch = *pwsStart ++;
370 iCls = ((gs_FX_TextLayout_CodeProperties[(FX_WORD)wch] & FX_BIDICLAS SBITSMASK) >> FX_BIDICLASSBITS); 370 iCls = ((gs_FX_TextLayout_CodeProperties[(FX_WORD)wch] & FX_BIDICLAS SBITSMASK) >> FX_BIDICLASSBITS);
371 classes.SetAt(i, gc_FX_BidiNTypes[iCls]); 371 classes.SetAt(i, gc_FX_BidiNTypes[iCls]);
372 } 372 }
373 } 373 }
374 } 374 }
375 FX_INT32 FX_BidiResolveExplicit(FX_INT32 iBaseLevel, FX_INT32 iDirection, CFX_In t32Array &classes, CFX_Int32Array &levels, FX_INT32 iStart, FX_INT32 iCount, FX_ INT32 iNest) 375 int32_t FX_BidiResolveExplicit(int32_t iBaseLevel, int32_t iDirection, CFX_Int32 Array &classes, CFX_Int32Array &levels, int32_t iStart, int32_t iCount, int32_t iNest)
376 { 376 {
377 FXSYS_assert(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL && iNest >= 0) ; 377 FXSYS_assert(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL && iNest >= 0) ;
378 FXSYS_assert(classes.GetSize() == levels.GetSize()); 378 FXSYS_assert(classes.GetSize() == levels.GetSize());
379 FXSYS_assert(iStart >= 0 && iStart < classes.GetSize()); 379 FXSYS_assert(iStart >= 0 && iStart < classes.GetSize());
380 FXSYS_assert(iCount >= 0 && iStart + iCount <= classes.GetSize()); 380 FXSYS_assert(iCount >= 0 && iStart + iCount <= classes.GetSize());
381 if (iCount < 1) { 381 if (iCount < 1) {
382 return 0; 382 return 0;
383 } 383 }
384 #if 0 384 #if 0
385 FX_INT32 iLastNest = iNest; 385 int32_t iLastNest = iNest;
386 #endif 386 #endif
387 FX_INT32 iSize = classes.GetSize(); 387 int32_t iSize = classes.GetSize();
388 FX_INT32 i = iStart, iCur, iCls; 388 int32_t i = iStart, iCur, iCls;
389 for (; i < iSize && iCount > 0; i ++, iCount --) { 389 for (; i < iSize && iCount > 0; i ++, iCount --) {
390 iCur = iCls = classes.GetAt(i); 390 iCur = iCls = classes.GetAt(i);
391 #if 0 391 #if 0
392 switch (iCls) { 392 switch (iCls) {
393 case FX_BIDICLASS_LRO: 393 case FX_BIDICLASS_LRO:
394 case FX_BIDICLASS_LRE: 394 case FX_BIDICLASS_LRE:
395 classes.SetAt(i, FX_BIDICLASS_BN); 395 classes.SetAt(i, FX_BIDICLASS_BN);
396 iCls = FX_BIDICLASS_BN; 396 iCls = FX_BIDICLASS_BN;
397 iNest ++; 397 iNest ++;
398 if (FX_BidiGreaterEven(iBaseLevel) <= MAX_LEVEL) { 398 if (FX_BidiGreaterEven(iBaseLevel) <= MAX_LEVEL) {
399 FX_INT32 iLevel = FX_BidiGreaterEven(iBaseLevel); 399 int32_t iLevel = FX_BidiGreaterEven(iBaseLevel);
400 levels.SetAt(i, iLevel); 400 levels.SetAt(i, iLevel);
401 i += FX_BidiResolveExplicit(iLevel, 401 i += FX_BidiResolveExplicit(iLevel,
402 (iCls == FX_BIDICLASS_LRE ? FX_B IDICLASS_N : FX_BIDICLASS_L), 402 (iCls == FX_BIDICLASS_LRE ? FX_B IDICLASS_N : FX_BIDICLASS_L),
403 classes, 403 classes,
404 levels, 404 levels,
405 i + 1, 405 i + 1,
406 iCount - 1, 406 iCount - 1,
407 iNest); 407 iNest);
408 iNest --; 408 iNest --;
409 continue; 409 continue;
410 } 410 }
411 break; 411 break;
412 case FX_BIDICLASS_RLO: 412 case FX_BIDICLASS_RLO:
413 case FX_BIDICLASS_RLE: 413 case FX_BIDICLASS_RLE:
414 classes.SetAt(i, FX_BIDICLASS_BN); 414 classes.SetAt(i, FX_BIDICLASS_BN);
415 iCls = FX_BIDICLASS_BN; 415 iCls = FX_BIDICLASS_BN;
416 iNest ++; 416 iNest ++;
417 if (FX_BidiGreaterOdd(iBaseLevel) <= MAX_LEVEL) { 417 if (FX_BidiGreaterOdd(iBaseLevel) <= MAX_LEVEL) {
418 FX_INT32 iLevel = FX_BidiGreaterOdd(iBaseLevel); 418 int32_t iLevel = FX_BidiGreaterOdd(iBaseLevel);
419 levels.SetAt(i, iLevel); 419 levels.SetAt(i, iLevel);
420 i += FX_BidiResolveExplicit(iLevel, 420 i += FX_BidiResolveExplicit(iLevel,
421 (iCls == FX_BIDICLASS_RLE ? FX_B IDICLASS_N : FX_BIDICLASS_R), 421 (iCls == FX_BIDICLASS_RLE ? FX_B IDICLASS_N : FX_BIDICLASS_R),
422 classes, 422 classes,
423 levels, 423 levels,
424 i + 1, 424 i + 1,
425 iCount - 1, 425 iCount - 1,
426 iNest); 426 iNest);
427 iNest --; 427 iNest --;
428 continue; 428 continue;
(...skipping 16 matching lines...) Expand all
445 if (iDirection != FX_BIDICLASS_N) { 445 if (iDirection != FX_BIDICLASS_N) {
446 iCls = iDirection; 446 iCls = iDirection;
447 } 447 }
448 if (iCur != FX_BIDICLASS_BN) { 448 if (iCur != FX_BIDICLASS_BN) {
449 classes.SetAt(i, iCls); 449 classes.SetAt(i, iCls);
450 } 450 }
451 levels.SetAt(i, iBaseLevel); 451 levels.SetAt(i, iBaseLevel);
452 } 452 }
453 return i - iStart; 453 return i - iStart;
454 } 454 }
455 const FX_INT32 gc_FX_BidiWeakStates[][10] = { 455 const int32_t gc_FX_BidiWeakStates[][10] = {
456 {FX_BWSao, FX_BWSxl, FX_BWSxr, FX_BWScn, FX_BWScn, FX_BWSxa, FX_BWSxa, FX_BWSao, FX_BWSao, FX_BWSao}, 456 {FX_BWSao, FX_BWSxl, FX_BWSxr, FX_BWScn, FX_BWScn, FX_BWSxa, FX_BWSxa, FX_BWSao, FX_BWSao, FX_BWSao},
457 {FX_BWSro, FX_BWSxl, FX_BWSxr, FX_BWSra, FX_BWSre, FX_BWSxa, FX_BWSxr, FX_BWSro, FX_BWSro, FX_BWSrt}, 457 {FX_BWSro, FX_BWSxl, FX_BWSxr, FX_BWSra, FX_BWSre, FX_BWSxa, FX_BWSxr, FX_BWSro, FX_BWSro, FX_BWSrt},
458 {FX_BWSlo, FX_BWSxl, FX_BWSxr, FX_BWSla, FX_BWSle, FX_BWSxa, FX_BWSxl, FX_BWSlo, FX_BWSlo, FX_BWSlt}, 458 {FX_BWSlo, FX_BWSxl, FX_BWSxr, FX_BWSla, FX_BWSle, FX_BWSxa, FX_BWSxl, FX_BWSlo, FX_BWSlo, FX_BWSlt},
459 {FX_BWSao, FX_BWSxl, FX_BWSxr, FX_BWScn, FX_BWScn, FX_BWSxa, FX_BWSao, FX_BWSao, FX_BWSao, FX_BWSao}, 459 {FX_BWSao, FX_BWSxl, FX_BWSxr, FX_BWScn, FX_BWScn, FX_BWSxa, FX_BWSao, FX_BWSao, FX_BWSao, FX_BWSao},
460 {FX_BWSro, FX_BWSxl, FX_BWSxr, FX_BWSra, FX_BWSre, FX_BWSxa, FX_BWSro, FX_BWSro, FX_BWSro, FX_BWSrt}, 460 {FX_BWSro, FX_BWSxl, FX_BWSxr, FX_BWSra, FX_BWSre, FX_BWSxa, FX_BWSro, FX_BWSro, FX_BWSro, FX_BWSrt},
461 {FX_BWSlo, FX_BWSxl, FX_BWSxr, FX_BWSla, FX_BWSle, FX_BWSxa, FX_BWSlo, FX_BWSlo, FX_BWSlo, FX_BWSlt}, 461 {FX_BWSlo, FX_BWSxl, FX_BWSxr, FX_BWSla, FX_BWSle, FX_BWSxa, FX_BWSlo, FX_BWSlo, FX_BWSlo, FX_BWSlt},
462 {FX_BWSro, FX_BWSxl, FX_BWSxr, FX_BWSra, FX_BWSre, FX_BWSxa, FX_BWSrt, FX_BWSro, FX_BWSro, FX_BWSrt}, 462 {FX_BWSro, FX_BWSxl, FX_BWSxr, FX_BWSra, FX_BWSre, FX_BWSxa, FX_BWSrt, FX_BWSro, FX_BWSro, FX_BWSrt},
463 {FX_BWSlo, FX_BWSxl, FX_BWSxr, FX_BWSla, FX_BWSle, FX_BWSxa, FX_BWSlt, FX_BWSlo, FX_BWSlo, FX_BWSlt}, 463 {FX_BWSlo, FX_BWSxl, FX_BWSxr, FX_BWSla, FX_BWSle, FX_BWSxa, FX_BWSlt, FX_BWSlo, FX_BWSlo, FX_BWSlt},
464 {FX_BWSao, FX_BWSxl, FX_BWSxr, FX_BWScn, FX_BWScn, FX_BWSxa, FX_BWScn, FX_BWSac, FX_BWSao, FX_BWSao}, 464 {FX_BWSao, FX_BWSxl, FX_BWSxr, FX_BWScn, FX_BWScn, FX_BWSxa, FX_BWScn, FX_BWSac, FX_BWSao, FX_BWSao},
465 {FX_BWSro, FX_BWSxl, FX_BWSxr, FX_BWSra, FX_BWSre, FX_BWSxa, FX_BWSra, FX_BWSrc, FX_BWSro, FX_BWSrt}, 465 {FX_BWSro, FX_BWSxl, FX_BWSxr, FX_BWSra, FX_BWSre, FX_BWSxa, FX_BWSra, FX_BWSrc, FX_BWSro, FX_BWSrt},
466 {FX_BWSro, FX_BWSxl, FX_BWSxr, FX_BWSra, FX_BWSre, FX_BWSxa, FX_BWSre, FX_BWSrs, FX_BWSrs, FX_BWSret}, 466 {FX_BWSro, FX_BWSxl, FX_BWSxr, FX_BWSra, FX_BWSre, FX_BWSxa, FX_BWSre, FX_BWSrs, FX_BWSrs, FX_BWSret},
467 {FX_BWSlo, FX_BWSxl, FX_BWSxr, FX_BWSla, FX_BWSle, FX_BWSxa, FX_BWSla, FX_BWSlc, FX_BWSlo, FX_BWSlt}, 467 {FX_BWSlo, FX_BWSxl, FX_BWSxr, FX_BWSla, FX_BWSle, FX_BWSxa, FX_BWSla, FX_BWSlc, FX_BWSlo, FX_BWSlt},
468 {FX_BWSlo, FX_BWSxl, FX_BWSxr, FX_BWSla, FX_BWSle, FX_BWSxa, FX_BWSle, FX_BWSls, FX_BWSls, FX_BWSlet}, 468 {FX_BWSlo, FX_BWSxl, FX_BWSxr, FX_BWSla, FX_BWSle, FX_BWSxa, FX_BWSle, FX_BWSls, FX_BWSls, FX_BWSlet},
469 {FX_BWSao, FX_BWSxl, FX_BWSxr, FX_BWScn, FX_BWScn, FX_BWSxa, FX_BWSao, FX_BWSao, FX_BWSao, FX_BWSao}, 469 {FX_BWSao, FX_BWSxl, FX_BWSxr, FX_BWScn, FX_BWScn, FX_BWSxa, FX_BWSao, FX_BWSao, FX_BWSao, FX_BWSao},
470 {FX_BWSro, FX_BWSxl, FX_BWSxr, FX_BWSra, FX_BWSre, FX_BWSxa, FX_BWSro, FX_BWSro, FX_BWSro, FX_BWSrt}, 470 {FX_BWSro, FX_BWSxl, FX_BWSxr, FX_BWSra, FX_BWSre, FX_BWSxa, FX_BWSro, FX_BWSro, FX_BWSro, FX_BWSrt},
471 {FX_BWSro, FX_BWSxl, FX_BWSxr, FX_BWSra, FX_BWSre, FX_BWSxa, FX_BWSro, FX_BWSro, FX_BWSro, FX_BWSrt}, 471 {FX_BWSro, FX_BWSxl, FX_BWSxr, FX_BWSra, FX_BWSre, FX_BWSxa, FX_BWSro, FX_BWSro, FX_BWSro, FX_BWSrt},
472 {FX_BWSlo, FX_BWSxl, FX_BWSxr, FX_BWSla, FX_BWSle, FX_BWSxa, FX_BWSlo, FX_BWSlo, FX_BWSlo, FX_BWSlt}, 472 {FX_BWSlo, FX_BWSxl, FX_BWSxr, FX_BWSla, FX_BWSle, FX_BWSxa, FX_BWSlo, FX_BWSlo, FX_BWSlo, FX_BWSlt},
473 {FX_BWSlo, FX_BWSxl, FX_BWSxr, FX_BWSla, FX_BWSle, FX_BWSxa, FX_BWSlo, FX_BWSlo, FX_BWSlo, FX_BWSlt}, 473 {FX_BWSlo, FX_BWSxl, FX_BWSxr, FX_BWSla, FX_BWSle, FX_BWSxa, FX_BWSlo, FX_BWSlo, FX_BWSlo, FX_BWSlt},
474 {FX_BWSro, FX_BWSxl, FX_BWSxr, FX_BWSra, FX_BWSre, FX_BWSxa, FX_BWSret, FX_BWSro, FX_BWSro, FX_BWSret}, 474 {FX_BWSro, FX_BWSxl, FX_BWSxr, FX_BWSra, FX_BWSre, FX_BWSxa, FX_BWSret, FX_BWSro, FX_BWSro, FX_BWSret},
475 {FX_BWSlo, FX_BWSxl, FX_BWSxr, FX_BWSla, FX_BWSle, FX_BWSxa, FX_BWSlet, FX_BWSlo, FX_BWSlo, FX_BWSlet}, 475 {FX_BWSlo, FX_BWSxl, FX_BWSxr, FX_BWSla, FX_BWSle, FX_BWSxa, FX_BWSlet, FX_BWSlo, FX_BWSlo, FX_BWSlet},
476 }; 476 };
477 const FX_INT32 gc_FX_BidiWeakActions[][10] = { 477 const int32_t gc_FX_BidiWeakActions[][10] = {
478 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxA, FX_BWAxxR, FX_BWAxxR , FX_BWAxxN, FX_BWAxxN, FX_BWAxxN}, 478 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxA, FX_BWAxxR, FX_BWAxxR , FX_BWAxxN, FX_BWAxxN, FX_BWAxxN},
479 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxE, FX_BWAxxR, FX_BWAxxR , FX_BWAxxN, FX_BWAxxN, FX_BWAxIx}, 479 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxE, FX_BWAxxR, FX_BWAxxR , FX_BWAxxN, FX_BWAxxN, FX_BWAxIx},
480 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxL, FX_BWAxxR, FX_BWAxxL , FX_BWAxxN, FX_BWAxxN, FX_BWAxIx}, 480 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxL, FX_BWAxxR, FX_BWAxxL , FX_BWAxxN, FX_BWAxxN, FX_BWAxIx},
481 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxA, FX_BWAxxR, FX_BWAxxN , FX_BWAxxN, FX_BWAxxN, FX_BWAxxN}, 481 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxA, FX_BWAxxR, FX_BWAxxN , FX_BWAxxN, FX_BWAxxN, FX_BWAxxN},
482 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxE, FX_BWAxxR, FX_BWAxxN , FX_BWAxxN, FX_BWAxxN, FX_BWAxIx}, 482 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxE, FX_BWAxxR, FX_BWAxxN , FX_BWAxxN, FX_BWAxxN, FX_BWAxIx},
483 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxL, FX_BWAxxR, FX_BWAxxN , FX_BWAxxN, FX_BWAxxN, FX_BWAxIx}, 483 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxL, FX_BWAxxR, FX_BWAxxN , FX_BWAxxN, FX_BWAxxN, FX_BWAxIx},
484 {FX_BWANxx, FX_BWANxx, FX_BWANxx, FX_BWANxx, FX_BWAExE, FX_BWANxR, FX_BWAxIx , FX_BWANxN, FX_BWANxN, FX_BWAxIx}, 484 {FX_BWANxx, FX_BWANxx, FX_BWANxx, FX_BWANxx, FX_BWAExE, FX_BWANxR, FX_BWAxIx , FX_BWANxN, FX_BWANxN, FX_BWAxIx},
485 {FX_BWANxx, FX_BWANxx, FX_BWANxx, FX_BWANxx, FX_BWALxL, FX_BWANxR, FX_BWAxIx , FX_BWANxN, FX_BWANxN, FX_BWAxIx}, 485 {FX_BWANxx, FX_BWANxx, FX_BWANxx, FX_BWANxx, FX_BWALxL, FX_BWANxR, FX_BWAxIx , FX_BWANxN, FX_BWANxN, FX_BWAxIx},
486 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxA, FX_BWAxxR, FX_BWAxxA , FX_BWAxIx, FX_BWAxxN, FX_BWAxxN}, 486 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxA, FX_BWAxxR, FX_BWAxxA , FX_BWAxIx, FX_BWAxxN, FX_BWAxxN},
487 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxE, FX_BWAxxR, FX_BWAxxA , FX_BWAxIx, FX_BWAxxN, FX_BWAxIx}, 487 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxE, FX_BWAxxR, FX_BWAxxA , FX_BWAxIx, FX_BWAxxN, FX_BWAxIx},
488 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxE, FX_BWAxxR, FX_BWAxxE , FX_BWAxIx, FX_BWAxIx, FX_BWAxxE}, 488 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxE, FX_BWAxxR, FX_BWAxxE , FX_BWAxIx, FX_BWAxIx, FX_BWAxxE},
489 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxL, FX_BWAxxR, FX_BWAxxA , FX_BWAxIx, FX_BWAxxN, FX_BWAxIx}, 489 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxL, FX_BWAxxR, FX_BWAxxA , FX_BWAxIx, FX_BWAxxN, FX_BWAxIx},
490 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxL, FX_BWAxxR, FX_BWAxxL , FX_BWAxIx, FX_BWAxIx, FX_BWAxxL}, 490 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxL, FX_BWAxxR, FX_BWAxxL , FX_BWAxIx, FX_BWAxIx, FX_BWAxxL},
491 {FX_BWANxx, FX_BWANxx, FX_BWANxx, FX_BWAAxx, FX_BWAAxA, FX_BWANxR, FX_BWANxN , FX_BWANxN, FX_BWANxN, FX_BWANxN}, 491 {FX_BWANxx, FX_BWANxx, FX_BWANxx, FX_BWAAxx, FX_BWAAxA, FX_BWANxR, FX_BWANxN , FX_BWANxN, FX_BWANxN, FX_BWANxN},
492 {FX_BWANxx, FX_BWANxx, FX_BWANxx, FX_BWAAxx, FX_BWANxE, FX_BWANxR, FX_BWANxN , FX_BWANxN, FX_BWANxN, FX_BWANIx}, 492 {FX_BWANxx, FX_BWANxx, FX_BWANxx, FX_BWAAxx, FX_BWANxE, FX_BWANxR, FX_BWANxN , FX_BWANxN, FX_BWANxN, FX_BWANIx},
493 {FX_BWANxx, FX_BWANxx, FX_BWANxx, FX_BWANxx, FX_BWAExE, FX_BWANxR, FX_BWANxN , FX_BWANxN, FX_BWANxN, FX_BWANIx}, 493 {FX_BWANxx, FX_BWANxx, FX_BWANxx, FX_BWANxx, FX_BWAExE, FX_BWANxR, FX_BWANxN , FX_BWANxN, FX_BWANxN, FX_BWANIx},
494 {FX_BWANxx, FX_BWANxx, FX_BWANxx, FX_BWAAxx, FX_BWANxL, FX_BWANxR, FX_BWANxN , FX_BWANxN, FX_BWANxN, FX_BWANIx}, 494 {FX_BWANxx, FX_BWANxx, FX_BWANxx, FX_BWAAxx, FX_BWANxL, FX_BWANxR, FX_BWANxN , FX_BWANxN, FX_BWANxN, FX_BWANIx},
495 {FX_BWANxx, FX_BWANxx, FX_BWANxx, FX_BWANxx, FX_BWALxL, FX_BWANxR, FX_BWANxN , FX_BWANxN, FX_BWANxN, FX_BWANIx}, 495 {FX_BWANxx, FX_BWANxx, FX_BWANxx, FX_BWANxx, FX_BWALxL, FX_BWANxR, FX_BWANxN , FX_BWANxN, FX_BWANxN, FX_BWANIx},
496 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxE, FX_BWAxxR, FX_BWAxxE , FX_BWAxxN, FX_BWAxxN, FX_BWAxxE}, 496 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxE, FX_BWAxxR, FX_BWAxxE , FX_BWAxxN, FX_BWAxxN, FX_BWAxxE},
497 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxL, FX_BWAxxR, FX_BWAxxL , FX_BWAxxN, FX_BWAxxN, FX_BWAxxL}, 497 {FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxx, FX_BWAxxL, FX_BWAxxR, FX_BWAxxL , FX_BWAxxN, FX_BWAxxN, FX_BWAxxL},
498 }; 498 };
499 void FX_BidiResolveWeak(FX_INT32 iBaseLevel, CFX_Int32Array &classes, CFX_Int32A rray &levels) 499 void FX_BidiResolveWeak(int32_t iBaseLevel, CFX_Int32Array &classes, CFX_Int32Ar ray &levels)
500 { 500 {
501 FXSYS_assert(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL); 501 FXSYS_assert(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL);
502 FXSYS_assert(classes.GetSize() == levels.GetSize()); 502 FXSYS_assert(classes.GetSize() == levels.GetSize());
503 FX_INT32 iSize = classes.GetSize(); 503 int32_t iSize = classes.GetSize();
504 if (iSize < 1) { 504 if (iSize < 1) {
505 return; 505 return;
506 } 506 }
507 iSize --; 507 iSize --;
508 FX_INT32 iLevelCur = iBaseLevel; 508 int32_t iLevelCur = iBaseLevel;
509 FX_INT32 iState = FX_IsOdd(iBaseLevel) ? FX_BWSxr : FX_BWSxl; 509 int32_t iState = FX_IsOdd(iBaseLevel) ? FX_BWSxr : FX_BWSxl;
510 FX_INT32 i = 0, iCount = 0, iClsCur, iClsRun, iClsNew, iAction; 510 int32_t i = 0, iCount = 0, iClsCur, iClsRun, iClsNew, iAction;
511 for (; i <= iSize; i ++) { 511 for (; i <= iSize; i ++) {
512 iClsCur = classes.GetAt(i); 512 iClsCur = classes.GetAt(i);
513 #if 0 513 #if 0
514 if (iClsCur == FX_BIDICLASS_BN) { 514 if (iClsCur == FX_BIDICLASS_BN) {
515 levels.SetAt(i, iLevelCur); 515 levels.SetAt(i, iLevelCur);
516 if (i == iSize && iLevelCur != iBaseLevel) { 516 if (i == iSize && iLevelCur != iBaseLevel) {
517 iClsCur = FX_BidiDirection(iLevelCur); 517 iClsCur = FX_BidiDirection(iLevelCur);
518 classes.SetAt(i, iClsCur); 518 classes.SetAt(i, iClsCur);
519 } else if (i < iSize) { 519 } else if (i < iSize) {
520 FX_INT32 iLevelNext, iLevelNew; 520 int32_t iLevelNext, iLevelNew;
521 iClsNew = classes.GetAt(i + 1); 521 iClsNew = classes.GetAt(i + 1);
522 iLevelNext = levels.GetAt(i + 1); 522 iLevelNext = levels.GetAt(i + 1);
523 if (iClsNew != FX_BIDICLASS_BN && iLevelCur != iLevelNext) { 523 if (iClsNew != FX_BIDICLASS_BN && iLevelCur != iLevelNext) {
524 iLevelNew = iLevelNext; 524 iLevelNew = iLevelNext;
525 if (iLevelCur > iLevelNew) { 525 if (iLevelCur > iLevelNew) {
526 iLevelNew = iLevelCur; 526 iLevelNew = iLevelCur;
527 } 527 }
528 levels.SetAt(i, iLevelNew); 528 levels.SetAt(i, iLevelNew);
529 iClsCur = FX_BidiDirection(iLevelNew); 529 iClsCur = FX_BidiDirection(iLevelNew);
530 classes.SetAt(i, iClsCur); 530 classes.SetAt(i, iClsCur);
(...skipping 27 matching lines...) Expand all
558 iCount ++; 558 iCount ++;
559 } 559 }
560 iState = gc_FX_BidiWeakStates[iState][iClsCur]; 560 iState = gc_FX_BidiWeakStates[iState][iClsCur];
561 } 561 }
562 iClsCur = FX_BidiDirection(iLevelCur); 562 iClsCur = FX_BidiDirection(iLevelCur);
563 iClsRun = FX_BidiGetDeferredType(gc_FX_BidiWeakActions[iState][iClsCur]); 563 iClsRun = FX_BidiGetDeferredType(gc_FX_BidiWeakActions[iState][iClsCur]);
564 if (iClsRun != FX_BIDIWEAKACTION_XX && iCount > 0) { 564 if (iClsRun != FX_BIDIWEAKACTION_XX && iCount > 0) {
565 FX_BidiSetDeferredRun(classes, i, iCount, iClsRun); 565 FX_BidiSetDeferredRun(classes, i, iCount, iClsRun);
566 } 566 }
567 } 567 }
568 const FX_INT32 gc_FX_BidiNeutralStates[][5] = { 568 const int32_t gc_FX_BidiNeutralStates[][5] = {
569 {FX_BNSrn, FX_BNSl, FX_BNSr, FX_BNSr, FX_BNSr}, 569 {FX_BNSrn, FX_BNSl, FX_BNSr, FX_BNSr, FX_BNSr},
570 {FX_BNSln, FX_BNSl, FX_BNSr, FX_BNSa, FX_BNSl}, 570 {FX_BNSln, FX_BNSl, FX_BNSr, FX_BNSa, FX_BNSl},
571 {FX_BNSrn, FX_BNSl, FX_BNSr, FX_BNSr, FX_BNSr}, 571 {FX_BNSrn, FX_BNSl, FX_BNSr, FX_BNSr, FX_BNSr},
572 {FX_BNSln, FX_BNSl, FX_BNSr, FX_BNSa, FX_BNSl}, 572 {FX_BNSln, FX_BNSl, FX_BNSr, FX_BNSa, FX_BNSl},
573 {FX_BNSna, FX_BNSl, FX_BNSr, FX_BNSa, FX_BNSl}, 573 {FX_BNSna, FX_BNSl, FX_BNSr, FX_BNSa, FX_BNSl},
574 {FX_BNSna, FX_BNSl, FX_BNSr, FX_BNSa, FX_BNSl}, 574 {FX_BNSna, FX_BNSl, FX_BNSr, FX_BNSa, FX_BNSl},
575 }; 575 };
576 const FX_INT32 gc_FX_BidiNeutralActions[][5] = { 576 const int32_t gc_FX_BidiNeutralActions[][5] = {
577 {FX_BNAIn, 0, 0, 0, 0 }, 577 {FX_BNAIn, 0, 0, 0, 0 },
578 {FX_BNAIn, 0, 0, 0, FX_BCL }, 578 {FX_BNAIn, 0, 0, 0, FX_BCL },
579 {FX_BNAIn, FX_BNAEn, FX_BNARn, FX_BNARn, FX_BNARn }, 579 {FX_BNAIn, FX_BNAEn, FX_BNARn, FX_BNARn, FX_BNARn },
580 {FX_BNAIn, FX_BNALn, FX_BNAEn, FX_BNAEn, FX_BNALnL }, 580 {FX_BNAIn, FX_BNALn, FX_BNAEn, FX_BNAEn, FX_BNALnL },
581 {FX_BNAIn, 0, 0, 0, FX_BCL }, 581 {FX_BNAIn, 0, 0, 0, FX_BCL },
582 {FX_BNAIn, FX_BNAEn, FX_BNARn, FX_BNARn, FX_BNAEn }, 582 {FX_BNAIn, FX_BNAEn, FX_BNARn, FX_BNARn, FX_BNAEn },
583 }; 583 };
584 FX_INT32 FX_BidiGetDeferredNeutrals(FX_INT32 iAction, FX_INT32 iLevel) 584 int32_t FX_BidiGetDeferredNeutrals(int32_t iAction, int32_t iLevel)
585 { 585 {
586 iAction = (iAction >> 4) & 0xF; 586 iAction = (iAction >> 4) & 0xF;
587 if (iAction == (FX_BIDINEUTRALACTION_En >> 4)) { 587 if (iAction == (FX_BIDINEUTRALACTION_En >> 4)) {
588 return FX_BidiDirection(iLevel); 588 return FX_BidiDirection(iLevel);
589 } else { 589 } else {
590 return iAction; 590 return iAction;
591 } 591 }
592 } 592 }
593 FX_INT32 FX_BidiGetResolvedNeutrals(FX_INT32 iAction) 593 int32_t FX_BidiGetResolvedNeutrals(int32_t iAction)
594 { 594 {
595 iAction = (iAction & 0xF); 595 iAction = (iAction & 0xF);
596 if (iAction == FX_BIDINEUTRALACTION_In) { 596 if (iAction == FX_BIDINEUTRALACTION_In) {
597 return 0; 597 return 0;
598 } else { 598 } else {
599 return iAction; 599 return iAction;
600 } 600 }
601 } 601 }
602 void FX_BidiResolveNeutrals(FX_INT32 iBaseLevel, CFX_Int32Array &classes, const CFX_Int32Array &levels) 602 void FX_BidiResolveNeutrals(int32_t iBaseLevel, CFX_Int32Array &classes, const C FX_Int32Array &levels)
603 { 603 {
604 FXSYS_assert(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL); 604 FXSYS_assert(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL);
605 FXSYS_assert(classes.GetSize() == levels.GetSize()); 605 FXSYS_assert(classes.GetSize() == levels.GetSize());
606 FX_INT32 iSize = classes.GetSize(); 606 int32_t iSize = classes.GetSize();
607 if (iSize < 1) { 607 if (iSize < 1) {
608 return; 608 return;
609 } 609 }
610 iSize --; 610 iSize --;
611 FX_INT32 iLevel = iBaseLevel; 611 int32_t iLevel = iBaseLevel;
612 FX_INT32 iState = FX_IsOdd(iBaseLevel) ? FX_BNSr : FX_BNSl; 612 int32_t iState = FX_IsOdd(iBaseLevel) ? FX_BNSr : FX_BNSl;
613 FX_INT32 i = 0, iCount = 0, iClsCur, iClsRun, iClsNew, iAction; 613 int32_t i = 0, iCount = 0, iClsCur, iClsRun, iClsNew, iAction;
614 for (; i <= iSize; i ++) { 614 for (; i <= iSize; i ++) {
615 iClsCur = classes.GetAt(i); 615 iClsCur = classes.GetAt(i);
616 if (iClsCur == FX_BIDICLASS_BN) { 616 if (iClsCur == FX_BIDICLASS_BN) {
617 if (iCount) { 617 if (iCount) {
618 iCount ++; 618 iCount ++;
619 } 619 }
620 continue; 620 continue;
621 } 621 }
622 FXSYS_assert(iClsCur < FX_BIDICLASS_AL); 622 FXSYS_assert(iClsCur < FX_BIDICLASS_AL);
623 iAction = gc_FX_BidiNeutralActions[iState][iClsCur]; 623 iAction = gc_FX_BidiNeutralActions[iState][iClsCur];
(...skipping 11 matching lines...) Expand all
635 } 635 }
636 iState = gc_FX_BidiNeutralStates[iState][iClsCur]; 636 iState = gc_FX_BidiNeutralStates[iState][iClsCur];
637 iLevel = levels.GetAt(i); 637 iLevel = levels.GetAt(i);
638 } 638 }
639 iClsCur = FX_BidiDirection(iLevel); 639 iClsCur = FX_BidiDirection(iLevel);
640 iClsRun = FX_BidiGetDeferredNeutrals(gc_FX_BidiNeutralActions[iState][iClsCu r], iLevel); 640 iClsRun = FX_BidiGetDeferredNeutrals(gc_FX_BidiNeutralActions[iState][iClsCu r], iLevel);
641 if (iClsRun != FX_BIDICLASS_N && iCount > 0) { 641 if (iClsRun != FX_BIDICLASS_N && iCount > 0) {
642 FX_BidiSetDeferredRun(classes, i, iCount, iClsRun); 642 FX_BidiSetDeferredRun(classes, i, iCount, iClsRun);
643 } 643 }
644 } 644 }
645 const FX_INT32 gc_FX_BidiAddLevel[][4] = { 645 const int32_t gc_FX_BidiAddLevel[][4] = {
646 {0, 1, 2, 2}, 646 {0, 1, 2, 2},
647 {1, 0, 1, 1}, 647 {1, 0, 1, 1},
648 }; 648 };
649 void FX_BidiResolveImplicit(const CFX_Int32Array &classes, CFX_Int32Array &level s) 649 void FX_BidiResolveImplicit(const CFX_Int32Array &classes, CFX_Int32Array &level s)
650 { 650 {
651 FXSYS_assert(classes.GetSize() == levels.GetSize()); 651 FXSYS_assert(classes.GetSize() == levels.GetSize());
652 FX_INT32 iSize = classes.GetSize(); 652 int32_t iSize = classes.GetSize();
653 if (iSize < 1) { 653 if (iSize < 1) {
654 return; 654 return;
655 } 655 }
656 iSize --; 656 iSize --;
657 FX_INT32 iCls, iLevel; 657 int32_t iCls, iLevel;
658 for (FX_INT32 i = 0; i <= iSize; i ++) { 658 for (int32_t i = 0; i <= iSize; i ++) {
659 iCls = classes.GetAt(i); 659 iCls = classes.GetAt(i);
660 if (iCls == FX_BIDICLASS_BN) { 660 if (iCls == FX_BIDICLASS_BN) {
661 continue; 661 continue;
662 } 662 }
663 FXSYS_assert(iCls > FX_BIDICLASS_ON && iCls < FX_BIDICLASS_AL); 663 FXSYS_assert(iCls > FX_BIDICLASS_ON && iCls < FX_BIDICLASS_AL);
664 iLevel = levels.GetAt(i); 664 iLevel = levels.GetAt(i);
665 iLevel += gc_FX_BidiAddLevel[FX_IsOdd(iLevel)][iCls - 1]; 665 iLevel += gc_FX_BidiAddLevel[FX_IsOdd(iLevel)][iCls - 1];
666 levels.SetAt(i, iLevel); 666 levels.SetAt(i, iLevel);
667 } 667 }
668 } 668 }
669 void FX_BidiResolveWhitespace(FX_INT32 iBaseLevel, const CFX_Int32Array &classes , CFX_Int32Array &levels) 669 void FX_BidiResolveWhitespace(int32_t iBaseLevel, const CFX_Int32Array &classes, CFX_Int32Array &levels)
670 { 670 {
671 FXSYS_assert(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL); 671 FXSYS_assert(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL);
672 FXSYS_assert(classes.GetSize() == levels.GetSize()); 672 FXSYS_assert(classes.GetSize() == levels.GetSize());
673 FX_INT32 iSize = classes.GetSize(); 673 int32_t iSize = classes.GetSize();
674 if (iSize < 1) { 674 if (iSize < 1) {
675 return; 675 return;
676 } 676 }
677 iSize --; 677 iSize --;
678 FX_INT32 iLevel = iBaseLevel; 678 int32_t iLevel = iBaseLevel;
679 FX_INT32 i = 0, iCount = 0; 679 int32_t i = 0, iCount = 0;
680 for (; i <= iSize; i ++) { 680 for (; i <= iSize; i ++) {
681 switch(classes.GetAt(i)) { 681 switch(classes.GetAt(i)) {
682 case FX_BIDICLASS_WS: 682 case FX_BIDICLASS_WS:
683 iCount ++; 683 iCount ++;
684 break; 684 break;
685 case FX_BIDICLASS_RLE: 685 case FX_BIDICLASS_RLE:
686 case FX_BIDICLASS_LRE: 686 case FX_BIDICLASS_LRE:
687 case FX_BIDICLASS_LRO: 687 case FX_BIDICLASS_LRO:
688 case FX_BIDICLASS_RLO: 688 case FX_BIDICLASS_RLO:
689 case FX_BIDICLASS_PDF: 689 case FX_BIDICLASS_PDF:
(...skipping 12 matching lines...) Expand all
702 default: 702 default:
703 iCount = 0; 703 iCount = 0;
704 break; 704 break;
705 } 705 }
706 iLevel = levels.GetAt(i); 706 iLevel = levels.GetAt(i);
707 } 707 }
708 if (iCount > 0) { 708 if (iCount > 0) {
709 FX_BidiSetDeferredRun(levels, i, iCount, iBaseLevel); 709 FX_BidiSetDeferredRun(levels, i, iCount, iBaseLevel);
710 } 710 }
711 } 711 }
712 FX_INT32 FX_BidiReorderLevel(FX_INT32 iBaseLevel, CFX_WideString &wsText, const CFX_Int32Array &levels, FX_INT32 iStart, FX_BOOL bReverse) 712 int32_t FX_BidiReorderLevel(int32_t iBaseLevel, CFX_WideString &wsText, const CF X_Int32Array &levels, int32_t iStart, FX_BOOL bReverse)
713 { 713 {
714 FXSYS_assert(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL); 714 FXSYS_assert(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL);
715 FXSYS_assert(wsText.GetLength() == levels.GetSize()); 715 FXSYS_assert(wsText.GetLength() == levels.GetSize());
716 FXSYS_assert(iStart >= 0 && iStart < wsText.GetLength()); 716 FXSYS_assert(iStart >= 0 && iStart < wsText.GetLength());
717 FX_INT32 iSize = wsText.GetLength(); 717 int32_t iSize = wsText.GetLength();
718 if (iSize < 1) { 718 if (iSize < 1) {
719 return 0; 719 return 0;
720 } 720 }
721 bReverse = bReverse || FX_IsOdd(iBaseLevel); 721 bReverse = bReverse || FX_IsOdd(iBaseLevel);
722 FX_INT32 i = iStart, iLevel; 722 int32_t i = iStart, iLevel;
723 for (; i < iSize; i ++) { 723 for (; i < iSize; i ++) {
724 if ((iLevel = levels.GetAt(i)) == iBaseLevel) { 724 if ((iLevel = levels.GetAt(i)) == iBaseLevel) {
725 continue; 725 continue;
726 } 726 }
727 if (iLevel < iBaseLevel) { 727 if (iLevel < iBaseLevel) {
728 break; 728 break;
729 } 729 }
730 i += FX_BidiReorderLevel(iBaseLevel + 1, wsText, levels, i, bReverse) - 1; 730 i += FX_BidiReorderLevel(iBaseLevel + 1, wsText, levels, i, bReverse) - 1;
731 } 731 }
732 FX_INT32 iCount = i - iStart; 732 int32_t iCount = i - iStart;
733 if (bReverse && iCount > 1) { 733 if (bReverse && iCount > 1) {
734 FX_BidiReverseString(wsText, iStart, iCount); 734 FX_BidiReverseString(wsText, iStart, iCount);
735 } 735 }
736 return iCount; 736 return iCount;
737 } 737 }
738 void FX_BidiReorder(FX_INT32 iBaseLevel, CFX_WideString &wsText, const CFX_Int32 Array &levels) 738 void FX_BidiReorder(int32_t iBaseLevel, CFX_WideString &wsText, const CFX_Int32A rray &levels)
739 { 739 {
740 FXSYS_assert(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL); 740 FXSYS_assert(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL);
741 FXSYS_assert(wsText.GetLength() == levels.GetSize()); 741 FXSYS_assert(wsText.GetLength() == levels.GetSize());
742 FX_INT32 iSize = wsText.GetLength(); 742 int32_t iSize = wsText.GetLength();
743 if (iSize < 1) { 743 if (iSize < 1) {
744 return; 744 return;
745 } 745 }
746 FX_INT32 i = 0; 746 int32_t i = 0;
747 while (i < iSize) { 747 while (i < iSize) {
748 i += FX_BidiReorderLevel(iBaseLevel, wsText, levels, i, FALSE); 748 i += FX_BidiReorderLevel(iBaseLevel, wsText, levels, i, FALSE);
749 } 749 }
750 } 750 }
751 void FX_BidiLine(CFX_WideString &wsText, FX_INT32 iBaseLevel) 751 void FX_BidiLine(CFX_WideString &wsText, int32_t iBaseLevel)
752 { 752 {
753 FX_INT32 iLength = wsText.GetLength(); 753 int32_t iLength = wsText.GetLength();
754 if (iLength < 2) { 754 if (iLength < 2) {
755 return; 755 return;
756 } 756 }
757 CFX_Int32Array classes, levels; 757 CFX_Int32Array classes, levels;
758 classes.SetAtGrow(iLength - 1, 0); 758 classes.SetAtGrow(iLength - 1, 0);
759 levels.SetAtGrow(iLength - 1, 0); 759 levels.SetAtGrow(iLength - 1, 0);
760 FX_BidiClassify(wsText, classes, FALSE); 760 FX_BidiClassify(wsText, classes, FALSE);
761 FX_BidiResolveExplicit(iBaseLevel, FX_BIDICLASS_N, classes, levels, 0, iLeng th, 0); 761 FX_BidiResolveExplicit(iBaseLevel, FX_BIDICLASS_N, classes, levels, 0, iLeng th, 0);
762 FX_BidiResolveWeak(iBaseLevel, classes, levels); 762 FX_BidiResolveWeak(iBaseLevel, classes, levels);
763 FX_BidiResolveNeutrals(iBaseLevel, classes, levels); 763 FX_BidiResolveNeutrals(iBaseLevel, classes, levels);
764 FX_BidiResolveImplicit(classes, levels); 764 FX_BidiResolveImplicit(classes, levels);
765 FX_BidiClassify(wsText, classes, TRUE); 765 FX_BidiClassify(wsText, classes, TRUE);
766 FX_BidiResolveWhitespace(iBaseLevel, classes, levels); 766 FX_BidiResolveWhitespace(iBaseLevel, classes, levels);
767 FX_BidiReorder(iBaseLevel, wsText, levels); 767 FX_BidiReorder(iBaseLevel, wsText, levels);
768 classes.RemoveAll(); 768 classes.RemoveAll();
769 levels.RemoveAll(); 769 levels.RemoveAll();
770 } 770 }
771 template<class baseType> 771 template<class baseType>
772 class CFX_BidiLineTemplate 772 class CFX_BidiLineTemplate
773 { 773 {
774 public: 774 public:
775 void FX_BidiReverseString(CFX_ArrayTemplate<baseType> &chars, FX_INT32 iStar t, FX_INT32 iCount) 775 void FX_BidiReverseString(CFX_ArrayTemplate<baseType> &chars, int32_t iStart , int32_t iCount)
776 { 776 {
777 FXSYS_assert(iStart > -1 && iStart < chars.GetSize()); 777 FXSYS_assert(iStart > -1 && iStart < chars.GetSize());
778 FXSYS_assert(iCount >= 0 && iStart + iCount <= chars.GetSize()); 778 FXSYS_assert(iCount >= 0 && iStart + iCount <= chars.GetSize());
779 baseType *pStart, *pEnd; 779 baseType *pStart, *pEnd;
780 FX_INT32 iEnd = iStart + iCount - 1, iTemp; 780 int32_t iEnd = iStart + iCount - 1, iTemp;
781 while (iStart < iEnd) { 781 while (iStart < iEnd) {
782 pStart = chars.GetDataPtr(iStart ++); 782 pStart = chars.GetDataPtr(iStart ++);
783 pEnd = chars.GetDataPtr(iEnd --); 783 pEnd = chars.GetDataPtr(iEnd --);
784 iTemp = pStart->m_iBidiPos; 784 iTemp = pStart->m_iBidiPos;
785 pStart->m_iBidiPos = pEnd->m_iBidiPos; 785 pStart->m_iBidiPos = pEnd->m_iBidiPos;
786 pEnd->m_iBidiPos = iTemp; 786 pEnd->m_iBidiPos = iTemp;
787 } 787 }
788 } 788 }
789 void FX_BidiSetDeferredRun(CFX_ArrayTemplate<baseType> &chars, FX_BOOL bClas s, FX_INT32 iStart, FX_INT32 iCount, FX_INT32 iValue) 789 void FX_BidiSetDeferredRun(CFX_ArrayTemplate<baseType> &chars, FX_BOOL bClas s, int32_t iStart, int32_t iCount, int32_t iValue)
790 { 790 {
791 FXSYS_assert(iStart > -1 && iStart <= chars.GetSize()); 791 FXSYS_assert(iStart > -1 && iStart <= chars.GetSize());
792 FXSYS_assert(iStart - iCount > -1); 792 FXSYS_assert(iStart - iCount > -1);
793 baseType *pTC; 793 baseType *pTC;
794 FX_INT32 iLast = iStart - iCount; 794 int32_t iLast = iStart - iCount;
795 if (bClass) { 795 if (bClass) {
796 for (FX_INT32 i = iStart - 1; i >= iLast; i --) { 796 for (int32_t i = iStart - 1; i >= iLast; i --) {
797 pTC = chars.GetDataPtr(i); 797 pTC = chars.GetDataPtr(i);
798 pTC->m_iBidiClass = (FX_INT16)iValue; 798 pTC->m_iBidiClass = (int16_t)iValue;
799 } 799 }
800 } else { 800 } else {
801 for (FX_INT32 i = iStart - 1; i >= iLast; i --) { 801 for (int32_t i = iStart - 1; i >= iLast; i --) {
802 pTC = chars.GetDataPtr(i); 802 pTC = chars.GetDataPtr(i);
803 pTC->m_iBidiLevel = (FX_INT16)iValue; 803 pTC->m_iBidiLevel = (int16_t)iValue;
804 } 804 }
805 } 805 }
806 } 806 }
807 void FX_BidiClassify(CFX_ArrayTemplate<baseType> &chars, FX_INT32 iCount, FX _BOOL bWS) 807 void FX_BidiClassify(CFX_ArrayTemplate<baseType> &chars, int32_t iCount, FX_ BOOL bWS)
808 { 808 {
809 FXSYS_assert(iCount > -1 && iCount <= chars.GetSize()); 809 FXSYS_assert(iCount > -1 && iCount <= chars.GetSize());
810 baseType *pTC; 810 baseType *pTC;
811 if (bWS) { 811 if (bWS) {
812 for (FX_INT32 i = 0; i < iCount; i ++) { 812 for (int32_t i = 0; i < iCount; i ++) {
813 pTC = chars.GetDataPtr(i); 813 pTC = chars.GetDataPtr(i);
814 pTC->m_iBidiClass = (FX_INT16)(pTC->m_dwCharProps & FX_BIDICLASS BITSMASK) >> FX_BIDICLASSBITS; 814 pTC->m_iBidiClass = (int16_t)(pTC->m_dwCharProps & FX_BIDICLASSB ITSMASK) >> FX_BIDICLASSBITS;
815 } 815 }
816 } else { 816 } else {
817 for (FX_INT32 i = 0; i < iCount; i ++) { 817 for (int32_t i = 0; i < iCount; i ++) {
818 pTC = chars.GetDataPtr(i); 818 pTC = chars.GetDataPtr(i);
819 pTC->m_iBidiClass = (FX_INT16)gc_FX_BidiNTypes[(pTC->m_dwCharPro ps & FX_BIDICLASSBITSMASK) >> FX_BIDICLASSBITS]; 819 pTC->m_iBidiClass = (int16_t)gc_FX_BidiNTypes[(pTC->m_dwCharProp s & FX_BIDICLASSBITSMASK) >> FX_BIDICLASSBITS];
820 } 820 }
821 } 821 }
822 } 822 }
823 void FX_BidiResolveExplicit(CFX_ArrayTemplate<baseType> &chars, FX_INT32 iCo unt, FX_INT32 iBaseLevel) 823 void FX_BidiResolveExplicit(CFX_ArrayTemplate<baseType> &chars, int32_t iCou nt, int32_t iBaseLevel)
824 { 824 {
825 FXSYS_assert(iCount > -1 && iCount <= chars.GetSize()); 825 FXSYS_assert(iCount > -1 && iCount <= chars.GetSize());
826 FXSYS_assert(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL); 826 FXSYS_assert(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL);
827 if (iCount < 1) { 827 if (iCount < 1) {
828 return; 828 return;
829 } 829 }
830 baseType *pTC; 830 baseType *pTC;
831 for (FX_INT32 i = 0; i < iCount; i ++) { 831 for (int32_t i = 0; i < iCount; i ++) {
832 pTC = chars.GetDataPtr(i); 832 pTC = chars.GetDataPtr(i);
833 pTC->m_iBidiLevel = (FX_INT16)iBaseLevel; 833 pTC->m_iBidiLevel = (int16_t)iBaseLevel;
834 } 834 }
835 } 835 }
836 void FX_BidiResolveWeak(CFX_ArrayTemplate<baseType> &chars, FX_INT32 iCount, FX_INT32 iBaseLevel) 836 void FX_BidiResolveWeak(CFX_ArrayTemplate<baseType> &chars, int32_t iCount, int32_t iBaseLevel)
837 { 837 {
838 FXSYS_assert(iCount > -1 && iCount <= chars.GetSize()); 838 FXSYS_assert(iCount > -1 && iCount <= chars.GetSize());
839 iCount --; 839 iCount --;
840 if (iCount < 1) { 840 if (iCount < 1) {
841 return; 841 return;
842 } 842 }
843 baseType *pTC, *pTCNext; 843 baseType *pTC, *pTCNext;
844 FX_INT32 iLevelCur = iBaseLevel; 844 int32_t iLevelCur = iBaseLevel;
845 FX_INT32 iState = FX_IsOdd(iBaseLevel) ? FX_BWSxr : FX_BWSxl; 845 int32_t iState = FX_IsOdd(iBaseLevel) ? FX_BWSxr : FX_BWSxl;
846 FX_INT32 i = 0, iNum = 0, iClsCur, iClsRun, iClsNew, iAction; 846 int32_t i = 0, iNum = 0, iClsCur, iClsRun, iClsNew, iAction;
847 for (; i <= iCount; i ++) { 847 for (; i <= iCount; i ++) {
848 pTC = chars.GetDataPtr(i); 848 pTC = chars.GetDataPtr(i);
849 iClsCur = pTC->m_iBidiClass; 849 iClsCur = pTC->m_iBidiClass;
850 if (iClsCur == FX_BIDICLASS_BN) { 850 if (iClsCur == FX_BIDICLASS_BN) {
851 pTC->m_iBidiLevel = (FX_INT16)iLevelCur; 851 pTC->m_iBidiLevel = (int16_t)iLevelCur;
852 if (i == iCount && iLevelCur != iBaseLevel) { 852 if (i == iCount && iLevelCur != iBaseLevel) {
853 iClsCur = FX_BidiDirection(iLevelCur); 853 iClsCur = FX_BidiDirection(iLevelCur);
854 pTC->m_iBidiClass = (FX_INT16)iClsCur; 854 pTC->m_iBidiClass = (int16_t)iClsCur;
855 } else if (i < iCount) { 855 } else if (i < iCount) {
856 pTCNext = chars.GetDataPtr(i + 1); 856 pTCNext = chars.GetDataPtr(i + 1);
857 FX_INT32 iLevelNext, iLevelNew; 857 int32_t iLevelNext, iLevelNew;
858 iClsNew = pTCNext->m_iBidiClass; 858 iClsNew = pTCNext->m_iBidiClass;
859 iLevelNext = pTCNext->m_iBidiLevel; 859 iLevelNext = pTCNext->m_iBidiLevel;
860 if (iClsNew != FX_BIDICLASS_BN && iLevelCur != iLevelNext) { 860 if (iClsNew != FX_BIDICLASS_BN && iLevelCur != iLevelNext) {
861 iLevelNew = iLevelNext; 861 iLevelNew = iLevelNext;
862 if (iLevelCur > iLevelNew) { 862 if (iLevelCur > iLevelNew) {
863 iLevelNew = iLevelCur; 863 iLevelNew = iLevelCur;
864 } 864 }
865 pTC->m_iBidiLevel = (FX_INT16)iLevelNew; 865 pTC->m_iBidiLevel = (int16_t)iLevelNew;
866 iClsCur = FX_BidiDirection(iLevelNew); 866 iClsCur = FX_BidiDirection(iLevelNew);
867 pTC->m_iBidiClass = (FX_INT16)iClsCur; 867 pTC->m_iBidiClass = (int16_t)iClsCur;
868 iLevelCur = iLevelNext; 868 iLevelCur = iLevelNext;
869 } else { 869 } else {
870 if (iNum > 0) { 870 if (iNum > 0) {
871 iNum ++; 871 iNum ++;
872 } 872 }
873 continue; 873 continue;
874 } 874 }
875 } else { 875 } else {
876 if (iNum > 0) { 876 if (iNum > 0) {
877 iNum ++; 877 iNum ++;
878 } 878 }
879 continue; 879 continue;
880 } 880 }
881 } 881 }
882 FXSYS_assert(iClsCur <= FX_BIDICLASS_BN); 882 FXSYS_assert(iClsCur <= FX_BIDICLASS_BN);
883 iAction = gc_FX_BidiWeakActions[iState][iClsCur]; 883 iAction = gc_FX_BidiWeakActions[iState][iClsCur];
884 iClsRun = FX_BidiGetDeferredType(iAction); 884 iClsRun = FX_BidiGetDeferredType(iAction);
885 if (iClsRun != FX_BIDIWEAKACTION_XX && iNum > 0) { 885 if (iClsRun != FX_BIDIWEAKACTION_XX && iNum > 0) {
886 FX_BidiSetDeferredRun(chars, TRUE, i, iNum, iClsRun); 886 FX_BidiSetDeferredRun(chars, TRUE, i, iNum, iClsRun);
887 iNum = 0; 887 iNum = 0;
888 } 888 }
889 iClsNew = FX_BidiGetResolvedType(iAction); 889 iClsNew = FX_BidiGetResolvedType(iAction);
890 if (iClsNew != FX_BIDIWEAKACTION_XX) { 890 if (iClsNew != FX_BIDIWEAKACTION_XX) {
891 pTC->m_iBidiClass = (FX_INT16)iClsNew; 891 pTC->m_iBidiClass = (int16_t)iClsNew;
892 } 892 }
893 if (FX_BIDIWEAKACTION_IX & iAction) { 893 if (FX_BIDIWEAKACTION_IX & iAction) {
894 iNum ++; 894 iNum ++;
895 } 895 }
896 iState = gc_FX_BidiWeakStates[iState][iClsCur]; 896 iState = gc_FX_BidiWeakStates[iState][iClsCur];
897 } 897 }
898 if (iNum > 0) { 898 if (iNum > 0) {
899 iClsCur = FX_BidiDirection(iBaseLevel); 899 iClsCur = FX_BidiDirection(iBaseLevel);
900 iClsRun = FX_BidiGetDeferredType(gc_FX_BidiWeakActions[iState][iClsC ur]); 900 iClsRun = FX_BidiGetDeferredType(gc_FX_BidiWeakActions[iState][iClsC ur]);
901 if (iClsRun != FX_BIDIWEAKACTION_XX) { 901 if (iClsRun != FX_BIDIWEAKACTION_XX) {
902 FX_BidiSetDeferredRun(chars, TRUE, i, iNum, iClsRun); 902 FX_BidiSetDeferredRun(chars, TRUE, i, iNum, iClsRun);
903 } 903 }
904 } 904 }
905 } 905 }
906 void FX_BidiResolveNeutrals(CFX_ArrayTemplate<baseType> &chars, FX_INT32 iCo unt, FX_INT32 iBaseLevel) 906 void FX_BidiResolveNeutrals(CFX_ArrayTemplate<baseType> &chars, int32_t iCou nt, int32_t iBaseLevel)
907 { 907 {
908 FXSYS_assert(iCount > -1 && iCount <= chars.GetSize()); 908 FXSYS_assert(iCount > -1 && iCount <= chars.GetSize());
909 FXSYS_assert(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL); 909 FXSYS_assert(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL);
910 iCount --; 910 iCount --;
911 if (iCount < 1) { 911 if (iCount < 1) {
912 return; 912 return;
913 } 913 }
914 baseType *pTC; 914 baseType *pTC;
915 FX_INT32 iLevel = iBaseLevel; 915 int32_t iLevel = iBaseLevel;
916 FX_INT32 iState = FX_IsOdd(iBaseLevel) ? FX_BNSr : FX_BNSl; 916 int32_t iState = FX_IsOdd(iBaseLevel) ? FX_BNSr : FX_BNSl;
917 FX_INT32 i = 0, iNum = 0, iClsCur, iClsRun, iClsNew, iAction; 917 int32_t i = 0, iNum = 0, iClsCur, iClsRun, iClsNew, iAction;
918 for (; i <= iCount; i ++) { 918 for (; i <= iCount; i ++) {
919 pTC = chars.GetDataPtr(i); 919 pTC = chars.GetDataPtr(i);
920 iClsCur = pTC->m_iBidiClass; 920 iClsCur = pTC->m_iBidiClass;
921 if (iClsCur == FX_BIDICLASS_BN) { 921 if (iClsCur == FX_BIDICLASS_BN) {
922 if (iNum) { 922 if (iNum) {
923 iNum ++; 923 iNum ++;
924 } 924 }
925 continue; 925 continue;
926 } 926 }
927 FXSYS_assert(iClsCur < FX_BIDICLASS_AL); 927 FXSYS_assert(iClsCur < FX_BIDICLASS_AL);
928 iAction = gc_FX_BidiNeutralActions[iState][iClsCur]; 928 iAction = gc_FX_BidiNeutralActions[iState][iClsCur];
929 iClsRun = FX_BidiGetDeferredNeutrals(iAction, iLevel); 929 iClsRun = FX_BidiGetDeferredNeutrals(iAction, iLevel);
930 if (iClsRun != FX_BIDICLASS_N && iNum > 0) { 930 if (iClsRun != FX_BIDICLASS_N && iNum > 0) {
931 FX_BidiSetDeferredRun(chars, TRUE, i, iNum, iClsRun); 931 FX_BidiSetDeferredRun(chars, TRUE, i, iNum, iClsRun);
932 iNum = 0; 932 iNum = 0;
933 } 933 }
934 iClsNew = FX_BidiGetResolvedNeutrals(iAction); 934 iClsNew = FX_BidiGetResolvedNeutrals(iAction);
935 if (iClsNew != FX_BIDICLASS_N) { 935 if (iClsNew != FX_BIDICLASS_N) {
936 pTC->m_iBidiClass = (FX_INT16)iClsNew; 936 pTC->m_iBidiClass = (int16_t)iClsNew;
937 } 937 }
938 if (FX_BIDINEUTRALACTION_In & iAction) { 938 if (FX_BIDINEUTRALACTION_In & iAction) {
939 iNum ++; 939 iNum ++;
940 } 940 }
941 iState = gc_FX_BidiNeutralStates[iState][iClsCur]; 941 iState = gc_FX_BidiNeutralStates[iState][iClsCur];
942 iLevel = pTC->m_iBidiLevel; 942 iLevel = pTC->m_iBidiLevel;
943 } 943 }
944 if (iNum > 0) { 944 if (iNum > 0) {
945 iClsCur = FX_BidiDirection(iLevel); 945 iClsCur = FX_BidiDirection(iLevel);
946 iClsRun = FX_BidiGetDeferredNeutrals(gc_FX_BidiNeutralActions[iState ][iClsCur], iLevel); 946 iClsRun = FX_BidiGetDeferredNeutrals(gc_FX_BidiNeutralActions[iState ][iClsCur], iLevel);
947 if (iClsRun != FX_BIDICLASS_N) { 947 if (iClsRun != FX_BIDICLASS_N) {
948 FX_BidiSetDeferredRun(chars, TRUE, i, iNum, iClsRun); 948 FX_BidiSetDeferredRun(chars, TRUE, i, iNum, iClsRun);
949 } 949 }
950 } 950 }
951 } 951 }
952 void FX_BidiResolveImplicit(CFX_ArrayTemplate<baseType> &chars, FX_INT32 iCo unt) 952 void FX_BidiResolveImplicit(CFX_ArrayTemplate<baseType> &chars, int32_t iCou nt)
953 { 953 {
954 FXSYS_assert(iCount > -1 && iCount <= chars.GetSize()); 954 FXSYS_assert(iCount > -1 && iCount <= chars.GetSize());
955 baseType *pTC; 955 baseType *pTC;
956 FX_INT32 iCls, iLevel; 956 int32_t iCls, iLevel;
957 for (FX_INT32 i = 0; i < iCount; i ++) { 957 for (int32_t i = 0; i < iCount; i ++) {
958 pTC = chars.GetDataPtr(i); 958 pTC = chars.GetDataPtr(i);
959 iCls = pTC->m_iBidiClass; 959 iCls = pTC->m_iBidiClass;
960 if (iCls == FX_BIDICLASS_BN) { 960 if (iCls == FX_BIDICLASS_BN) {
961 continue; 961 continue;
962 } 962 }
963 FXSYS_assert(iCls > FX_BIDICLASS_ON && iCls < FX_BIDICLASS_AL); 963 FXSYS_assert(iCls > FX_BIDICLASS_ON && iCls < FX_BIDICLASS_AL);
964 iLevel = pTC->m_iBidiLevel; 964 iLevel = pTC->m_iBidiLevel;
965 iLevel += gc_FX_BidiAddLevel[FX_IsOdd(iLevel)][iCls - 1]; 965 iLevel += gc_FX_BidiAddLevel[FX_IsOdd(iLevel)][iCls - 1];
966 pTC->m_iBidiLevel = (FX_INT16)iLevel; 966 pTC->m_iBidiLevel = (int16_t)iLevel;
967 } 967 }
968 } 968 }
969 void FX_BidiResolveWhitespace(CFX_ArrayTemplate<baseType> &chars, FX_INT32 i Count, FX_INT32 iBaseLevel) 969 void FX_BidiResolveWhitespace(CFX_ArrayTemplate<baseType> &chars, int32_t iC ount, int32_t iBaseLevel)
970 { 970 {
971 FXSYS_assert(iCount > -1 && iCount <= chars.GetSize()); 971 FXSYS_assert(iCount > -1 && iCount <= chars.GetSize());
972 FXSYS_assert(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL); 972 FXSYS_assert(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL);
973 if (iCount < 1) { 973 if (iCount < 1) {
974 return; 974 return;
975 } 975 }
976 iCount --; 976 iCount --;
977 FX_INT32 iLevel = iBaseLevel; 977 int32_t iLevel = iBaseLevel;
978 FX_INT32 i = 0, iNum = 0; 978 int32_t i = 0, iNum = 0;
979 baseType *pTC; 979 baseType *pTC;
980 for (; i <= iCount; i ++) { 980 for (; i <= iCount; i ++) {
981 pTC = chars.GetDataPtr(i); 981 pTC = chars.GetDataPtr(i);
982 switch(pTC->m_iBidiClass) { 982 switch(pTC->m_iBidiClass) {
983 case FX_BIDICLASS_WS: 983 case FX_BIDICLASS_WS:
984 iNum ++; 984 iNum ++;
985 break; 985 break;
986 case FX_BIDICLASS_RLE: 986 case FX_BIDICLASS_RLE:
987 case FX_BIDICLASS_LRE: 987 case FX_BIDICLASS_LRE:
988 case FX_BIDICLASS_LRO: 988 case FX_BIDICLASS_LRO:
989 case FX_BIDICLASS_RLO: 989 case FX_BIDICLASS_RLO:
990 case FX_BIDICLASS_PDF: 990 case FX_BIDICLASS_PDF:
991 case FX_BIDICLASS_BN: 991 case FX_BIDICLASS_BN:
992 pTC->m_iBidiLevel = (FX_INT16)iLevel; 992 pTC->m_iBidiLevel = (int16_t)iLevel;
993 iNum ++; 993 iNum ++;
994 break; 994 break;
995 case FX_BIDICLASS_S: 995 case FX_BIDICLASS_S:
996 case FX_BIDICLASS_B: 996 case FX_BIDICLASS_B:
997 if (iNum > 0) { 997 if (iNum > 0) {
998 FX_BidiSetDeferredRun(chars, FALSE, i, iNum, iBaseLevel) ; 998 FX_BidiSetDeferredRun(chars, FALSE, i, iNum, iBaseLevel) ;
999 } 999 }
1000 pTC->m_iBidiLevel = (FX_INT16)iBaseLevel; 1000 pTC->m_iBidiLevel = (int16_t)iBaseLevel;
1001 iNum = 0; 1001 iNum = 0;
1002 break; 1002 break;
1003 default: 1003 default:
1004 iNum = 0; 1004 iNum = 0;
1005 break; 1005 break;
1006 } 1006 }
1007 iLevel = pTC->m_iBidiLevel; 1007 iLevel = pTC->m_iBidiLevel;
1008 } 1008 }
1009 if (iNum > 0) { 1009 if (iNum > 0) {
1010 FX_BidiSetDeferredRun(chars, FALSE, i, iNum, iBaseLevel); 1010 FX_BidiSetDeferredRun(chars, FALSE, i, iNum, iBaseLevel);
1011 } 1011 }
1012 } 1012 }
1013 FX_INT32 FX_BidiReorderLevel(CFX_ArrayTemplate<baseType> &chars, FX_INT32 iC ount, FX_INT32 iBaseLevel, FX_INT32 iStart, FX_BOOL bReverse) 1013 int32_t FX_BidiReorderLevel(CFX_ArrayTemplate<baseType> &chars, int32_t iCou nt, int32_t iBaseLevel, int32_t iStart, FX_BOOL bReverse)
1014 { 1014 {
1015 FXSYS_assert(iCount > -1 && iCount <= chars.GetSize()); 1015 FXSYS_assert(iCount > -1 && iCount <= chars.GetSize());
1016 FXSYS_assert(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL); 1016 FXSYS_assert(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL);
1017 FXSYS_assert(iStart >= 0 && iStart < iCount); 1017 FXSYS_assert(iStart >= 0 && iStart < iCount);
1018 if (iCount < 1) { 1018 if (iCount < 1) {
1019 return 0; 1019 return 0;
1020 } 1020 }
1021 baseType *pTC; 1021 baseType *pTC;
1022 bReverse = bReverse || FX_IsOdd(iBaseLevel); 1022 bReverse = bReverse || FX_IsOdd(iBaseLevel);
1023 FX_INT32 i = iStart, iLevel; 1023 int32_t i = iStart, iLevel;
1024 for (; i < iCount; i ++) { 1024 for (; i < iCount; i ++) {
1025 pTC = chars.GetDataPtr(i); 1025 pTC = chars.GetDataPtr(i);
1026 if ((iLevel = pTC->m_iBidiLevel) == iBaseLevel) { 1026 if ((iLevel = pTC->m_iBidiLevel) == iBaseLevel) {
1027 continue; 1027 continue;
1028 } 1028 }
1029 if (iLevel < iBaseLevel) { 1029 if (iLevel < iBaseLevel) {
1030 break; 1030 break;
1031 } 1031 }
1032 i += FX_BidiReorderLevel(chars, iCount, iBaseLevel + 1, i, bReverse) - 1; 1032 i += FX_BidiReorderLevel(chars, iCount, iBaseLevel + 1, i, bReverse) - 1;
1033 } 1033 }
1034 FX_INT32 iNum = i - iStart; 1034 int32_t iNum = i - iStart;
1035 if (bReverse && iNum > 1) { 1035 if (bReverse && iNum > 1) {
1036 FX_BidiReverseString(chars, iStart, iNum); 1036 FX_BidiReverseString(chars, iStart, iNum);
1037 } 1037 }
1038 return iNum; 1038 return iNum;
1039 } 1039 }
1040 void FX_BidiReorder(CFX_ArrayTemplate<baseType> &chars, FX_INT32 iCount, FX_ INT32 iBaseLevel) 1040 void FX_BidiReorder(CFX_ArrayTemplate<baseType> &chars, int32_t iCount, int3 2_t iBaseLevel)
1041 { 1041 {
1042 FXSYS_assert(iCount > -1 && iCount <= chars.GetSize()); 1042 FXSYS_assert(iCount > -1 && iCount <= chars.GetSize());
1043 FXSYS_assert(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL); 1043 FXSYS_assert(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL);
1044 FX_INT32 i = 0; 1044 int32_t i = 0;
1045 while (i < iCount) { 1045 while (i < iCount) {
1046 i += FX_BidiReorderLevel(chars, iCount, iBaseLevel, i, FALSE); 1046 i += FX_BidiReorderLevel(chars, iCount, iBaseLevel, i, FALSE);
1047 } 1047 }
1048 } 1048 }
1049 void FX_BidiPosition(CFX_ArrayTemplate<baseType> &chars, FX_INT32 iCount) 1049 void FX_BidiPosition(CFX_ArrayTemplate<baseType> &chars, int32_t iCount)
1050 { 1050 {
1051 FXSYS_assert(iCount > -1 && iCount <= chars.GetSize()); 1051 FXSYS_assert(iCount > -1 && iCount <= chars.GetSize());
1052 baseType *pTC; 1052 baseType *pTC;
1053 FX_INT32 i = 0; 1053 int32_t i = 0;
1054 while (i < iCount) { 1054 while (i < iCount) {
1055 pTC = chars.GetDataPtr(i); 1055 pTC = chars.GetDataPtr(i);
1056 pTC = chars.GetDataPtr(pTC->m_iBidiPos); 1056 pTC = chars.GetDataPtr(pTC->m_iBidiPos);
1057 pTC->m_iBidiOrder = i ++; 1057 pTC->m_iBidiOrder = i ++;
1058 } 1058 }
1059 } 1059 }
1060 1060
1061 void FX_BidiLine(CFX_ArrayTemplate<baseType> &chars, FX_INT32 iCount, FX_INT 32 iBaseLevel) 1061 void FX_BidiLine(CFX_ArrayTemplate<baseType> &chars, int32_t iCount, int32_t iBaseLevel)
1062 { 1062 {
1063 FXSYS_assert(iCount > -1 && iCount <= chars.GetSize()); 1063 FXSYS_assert(iCount > -1 && iCount <= chars.GetSize());
1064 if (iCount < 2) { 1064 if (iCount < 2) {
1065 return; 1065 return;
1066 } 1066 }
1067 FX_BidiClassify(chars, iCount, FALSE); 1067 FX_BidiClassify(chars, iCount, FALSE);
1068 FX_BidiResolveExplicit(chars, iCount, iBaseLevel); 1068 FX_BidiResolveExplicit(chars, iCount, iBaseLevel);
1069 FX_BidiResolveWeak(chars, iCount, iBaseLevel); 1069 FX_BidiResolveWeak(chars, iCount, iBaseLevel);
1070 FX_BidiResolveNeutrals(chars, iCount, iBaseLevel); 1070 FX_BidiResolveNeutrals(chars, iCount, iBaseLevel);
1071 FX_BidiResolveImplicit(chars, iCount); 1071 FX_BidiResolveImplicit(chars, iCount);
1072 FX_BidiClassify(chars, iCount, TRUE); 1072 FX_BidiClassify(chars, iCount, TRUE);
1073 FX_BidiResolveWhitespace(chars, iCount, iBaseLevel); 1073 FX_BidiResolveWhitespace(chars, iCount, iBaseLevel);
1074 FX_BidiReorder(chars, iCount, iBaseLevel); 1074 FX_BidiReorder(chars, iCount, iBaseLevel);
1075 FX_BidiPosition(chars, iCount); 1075 FX_BidiPosition(chars, iCount);
1076 } 1076 }
1077 }; 1077 };
1078 void FX_BidiLine(CFX_TxtCharArray &chars, FX_INT32 iCount, FX_INT32 iBaseLevel) 1078 void FX_BidiLine(CFX_TxtCharArray &chars, int32_t iCount, int32_t iBaseLevel)
1079 { 1079 {
1080 CFX_BidiLineTemplate<CFX_TxtChar> blt; 1080 CFX_BidiLineTemplate<CFX_TxtChar> blt;
1081 blt.FX_BidiLine(chars, iCount, iBaseLevel); 1081 blt.FX_BidiLine(chars, iCount, iBaseLevel);
1082 } 1082 }
1083 void FX_BidiLine(CFX_RTFCharArray &chars, FX_INT32 iCount, FX_INT32 iBaseLevel) 1083 void FX_BidiLine(CFX_RTFCharArray &chars, int32_t iCount, int32_t iBaseLevel)
1084 { 1084 {
1085 CFX_BidiLineTemplate<CFX_RTFChar> blt; 1085 CFX_BidiLineTemplate<CFX_RTFChar> blt;
1086 blt.FX_BidiLine(chars, iCount, iBaseLevel); 1086 blt.FX_BidiLine(chars, iCount, iBaseLevel);
1087 } 1087 }
1088 IFX_BidiChar* IFX_BidiChar::Create() 1088 IFX_BidiChar* IFX_BidiChar::Create()
1089 { 1089 {
1090 return FX_NEW CFX_BidiChar; 1090 return FX_NEW CFX_BidiChar;
1091 } 1091 }
1092 CFX_BidiChar::CFX_BidiChar() 1092 CFX_BidiChar::CFX_BidiChar()
1093 : m_bSeparateNeutral(TRUE) 1093 : m_bSeparateNeutral(TRUE)
1094 , m_iCurStart(0) 1094 , m_iCurStart(0)
1095 , m_iCurCount(0) 1095 , m_iCurCount(0)
1096 , m_iCurBidi(0) 1096 , m_iCurBidi(0)
1097 , m_iLastBidi(0) 1097 , m_iLastBidi(0)
1098 , m_iLastStart(0) 1098 , m_iLastStart(0)
1099 , m_iLastCount(0) 1099 , m_iLastCount(0)
1100 { 1100 {
1101 } 1101 }
1102 FX_BOOL CFX_BidiChar::AppendChar(FX_WCHAR wch) 1102 FX_BOOL CFX_BidiChar::AppendChar(FX_WCHAR wch)
1103 { 1103 {
1104 FX_DWORD dwProps = gs_FX_TextLayout_CodeProperties[(FX_WORD)wch]; 1104 FX_DWORD dwProps = gs_FX_TextLayout_CodeProperties[(FX_WORD)wch];
1105 FX_INT32 iBidiCls = (dwProps & FX_BIDICLASSBITSMASK) >> FX_BIDICLASSBITS; 1105 int32_t iBidiCls = (dwProps & FX_BIDICLASSBITSMASK) >> FX_BIDICLASSBITS;
1106 FX_INT32 iContext = 0; 1106 int32_t iContext = 0;
1107 switch (iBidiCls) { 1107 switch (iBidiCls) {
1108 case FX_BIDICLASS_L: 1108 case FX_BIDICLASS_L:
1109 case FX_BIDICLASS_AN: 1109 case FX_BIDICLASS_AN:
1110 case FX_BIDICLASS_EN: 1110 case FX_BIDICLASS_EN:
1111 iContext = 1; 1111 iContext = 1;
1112 break; 1112 break;
1113 case FX_BIDICLASS_R: 1113 case FX_BIDICLASS_R:
1114 case FX_BIDICLASS_AL: 1114 case FX_BIDICLASS_AL:
1115 iContext = 2; 1115 iContext = 2;
1116 break; 1116 break;
(...skipping 23 matching lines...) Expand all
1140 return bRet; 1140 return bRet;
1141 } 1141 }
1142 FX_BOOL CFX_BidiChar::EndChar() 1142 FX_BOOL CFX_BidiChar::EndChar()
1143 { 1143 {
1144 m_iLastBidi = m_iCurBidi; 1144 m_iLastBidi = m_iCurBidi;
1145 m_iLastStart = m_iCurStart; 1145 m_iLastStart = m_iCurStart;
1146 m_iCurStart = m_iCurCount; 1146 m_iCurStart = m_iCurCount;
1147 m_iLastCount = m_iCurCount - m_iLastStart; 1147 m_iLastCount = m_iCurCount - m_iLastStart;
1148 return m_iLastCount > 0; 1148 return m_iLastCount > 0;
1149 } 1149 }
1150 FX_INT32 CFX_BidiChar::GetBidiInfo(FX_INT32 &iStart, FX_INT32 &iCount) 1150 int32_t CFX_BidiChar::GetBidiInfo(int32_t &iStart, int32_t &iCount)
1151 { 1151 {
1152 iStart = m_iLastStart; 1152 iStart = m_iLastStart;
1153 iCount = m_iLastCount; 1153 iCount = m_iLastCount;
1154 return m_iLastBidi; 1154 return m_iLastBidi;
1155 } 1155 }
1156 void CFX_BidiChar::Reset() 1156 void CFX_BidiChar::Reset()
1157 { 1157 {
1158 m_iCurStart = 0; 1158 m_iCurStart = 0;
1159 m_iCurCount = 0; 1159 m_iCurCount = 0;
1160 m_iCurBidi = 0; 1160 m_iCurBidi = 0;
1161 m_iLastBidi = 0; 1161 m_iLastBidi = 0;
1162 m_iLastStart = 0; 1162 m_iLastStart = 0;
1163 m_iLastCount = 0; 1163 m_iLastCount = 0;
1164 } 1164 }
OLDNEW
« no previous file with comments | « core/src/fxcrt/fx_arabic.h ('k') | core/src/fxcrt/fx_basic_array.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698