| 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 "../../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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |