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 "core/fxcrt/fx_arabic.h" | 7 #include "core/fxcrt/fx_arabic.h" |
8 #include "core/fxcrt/fx_ucd.h" | 8 #include "core/fxcrt/fx_ucd.h" |
9 | 9 |
10 namespace { | 10 namespace { |
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
369 return 0; | 369 return 0; |
370 } else { | 370 } else { |
371 return iAction; | 371 return iAction; |
372 } | 372 } |
373 } | 373 } |
374 | 374 |
375 int32_t FX_BidiReorderLevel(int32_t iBaseLevel, | 375 int32_t FX_BidiReorderLevel(int32_t iBaseLevel, |
376 CFX_WideString& wsText, | 376 CFX_WideString& wsText, |
377 const CFX_Int32Array& levels, | 377 const CFX_Int32Array& levels, |
378 int32_t iStart, | 378 int32_t iStart, |
379 FX_BOOL bReverse) { | 379 bool bReverse) { |
380 ASSERT(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL); | 380 ASSERT(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL); |
381 ASSERT(wsText.GetLength() == levels.GetSize()); | 381 ASSERT(wsText.GetLength() == levels.GetSize()); |
382 ASSERT(iStart >= 0 && iStart < wsText.GetLength()); | 382 ASSERT(iStart >= 0 && iStart < wsText.GetLength()); |
383 int32_t iSize = wsText.GetLength(); | 383 int32_t iSize = wsText.GetLength(); |
384 if (iSize < 1) { | 384 if (iSize < 1) { |
385 return 0; | 385 return 0; |
386 } | 386 } |
387 bReverse = bReverse || FX_IsOdd(iBaseLevel); | 387 bReverse = bReverse || FX_IsOdd(iBaseLevel); |
388 int32_t i = iStart, iLevel; | 388 int32_t i = iStart, iLevel; |
389 for (; i < iSize; i++) { | 389 for (; i < iSize; i++) { |
(...skipping 15 matching lines...) Expand all Loading... |
405 CFX_WideString& wsText, | 405 CFX_WideString& wsText, |
406 const CFX_Int32Array& levels) { | 406 const CFX_Int32Array& levels) { |
407 ASSERT(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL); | 407 ASSERT(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL); |
408 ASSERT(wsText.GetLength() == levels.GetSize()); | 408 ASSERT(wsText.GetLength() == levels.GetSize()); |
409 int32_t iSize = wsText.GetLength(); | 409 int32_t iSize = wsText.GetLength(); |
410 if (iSize < 1) { | 410 if (iSize < 1) { |
411 return; | 411 return; |
412 } | 412 } |
413 int32_t i = 0; | 413 int32_t i = 0; |
414 while (i < iSize) { | 414 while (i < iSize) { |
415 i += FX_BidiReorderLevel(iBaseLevel, wsText, levels, i, FALSE); | 415 i += FX_BidiReorderLevel(iBaseLevel, wsText, levels, i, false); |
416 } | 416 } |
417 } | 417 } |
418 | 418 |
419 template <class baseType> | 419 template <class baseType> |
420 class CFX_BidiLineTemplate { | 420 class CFX_BidiLineTemplate { |
421 public: | 421 public: |
422 void FX_BidiReverseString(CFX_ArrayTemplate<baseType>& chars, | 422 void FX_BidiReverseString(CFX_ArrayTemplate<baseType>& chars, |
423 int32_t iStart, | 423 int32_t iStart, |
424 int32_t iCount) { | 424 int32_t iCount) { |
425 ASSERT(iStart > -1 && iStart < chars.GetSize()); | 425 ASSERT(iStart > -1 && iStart < chars.GetSize()); |
426 ASSERT(iCount >= 0 && iStart + iCount <= chars.GetSize()); | 426 ASSERT(iCount >= 0 && iStart + iCount <= chars.GetSize()); |
427 baseType *pStart, *pEnd; | 427 baseType *pStart, *pEnd; |
428 int32_t iEnd = iStart + iCount - 1, iTemp; | 428 int32_t iEnd = iStart + iCount - 1, iTemp; |
429 while (iStart < iEnd) { | 429 while (iStart < iEnd) { |
430 pStart = chars.GetDataPtr(iStart++); | 430 pStart = chars.GetDataPtr(iStart++); |
431 pEnd = chars.GetDataPtr(iEnd--); | 431 pEnd = chars.GetDataPtr(iEnd--); |
432 iTemp = pStart->m_iBidiPos; | 432 iTemp = pStart->m_iBidiPos; |
433 pStart->m_iBidiPos = pEnd->m_iBidiPos; | 433 pStart->m_iBidiPos = pEnd->m_iBidiPos; |
434 pEnd->m_iBidiPos = iTemp; | 434 pEnd->m_iBidiPos = iTemp; |
435 } | 435 } |
436 } | 436 } |
437 void FX_BidiSetDeferredRun(CFX_ArrayTemplate<baseType>& chars, | 437 void FX_BidiSetDeferredRun(CFX_ArrayTemplate<baseType>& chars, |
438 FX_BOOL bClass, | 438 bool bClass, |
439 int32_t iStart, | 439 int32_t iStart, |
440 int32_t iCount, | 440 int32_t iCount, |
441 int32_t iValue) { | 441 int32_t iValue) { |
442 ASSERT(iStart > -1 && iStart <= chars.GetSize()); | 442 ASSERT(iStart > -1 && iStart <= chars.GetSize()); |
443 ASSERT(iStart - iCount > -1); | 443 ASSERT(iStart - iCount > -1); |
444 baseType* pTC; | 444 baseType* pTC; |
445 int32_t iLast = iStart - iCount; | 445 int32_t iLast = iStart - iCount; |
446 if (bClass) { | 446 if (bClass) { |
447 for (int32_t i = iStart - 1; i >= iLast; i--) { | 447 for (int32_t i = iStart - 1; i >= iLast; i--) { |
448 pTC = chars.GetDataPtr(i); | 448 pTC = chars.GetDataPtr(i); |
449 pTC->m_iBidiClass = (int16_t)iValue; | 449 pTC->m_iBidiClass = (int16_t)iValue; |
450 } | 450 } |
451 } else { | 451 } else { |
452 for (int32_t i = iStart - 1; i >= iLast; i--) { | 452 for (int32_t i = iStart - 1; i >= iLast; i--) { |
453 pTC = chars.GetDataPtr(i); | 453 pTC = chars.GetDataPtr(i); |
454 pTC->m_iBidiLevel = (int16_t)iValue; | 454 pTC->m_iBidiLevel = (int16_t)iValue; |
455 } | 455 } |
456 } | 456 } |
457 } | 457 } |
458 void FX_BidiClassify(CFX_ArrayTemplate<baseType>& chars, | 458 void FX_BidiClassify(CFX_ArrayTemplate<baseType>& chars, |
459 int32_t iCount, | 459 int32_t iCount, |
460 FX_BOOL bWS) { | 460 bool bWS) { |
461 ASSERT(iCount > -1 && iCount <= chars.GetSize()); | 461 ASSERT(iCount > -1 && iCount <= chars.GetSize()); |
462 baseType* pTC; | 462 baseType* pTC; |
463 if (bWS) { | 463 if (bWS) { |
464 for (int32_t i = 0; i < iCount; i++) { | 464 for (int32_t i = 0; i < iCount; i++) { |
465 pTC = chars.GetDataPtr(i); | 465 pTC = chars.GetDataPtr(i); |
466 pTC->m_iBidiClass = | 466 pTC->m_iBidiClass = |
467 (int16_t)(pTC->m_dwCharProps & FX_BIDICLASSBITSMASK) >> | 467 (int16_t)(pTC->m_dwCharProps & FX_BIDICLASSBITSMASK) >> |
468 FX_BIDICLASSBITS; | 468 FX_BIDICLASSBITS; |
469 } | 469 } |
470 } else { | 470 } else { |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
534 if (iNum > 0) { | 534 if (iNum > 0) { |
535 iNum++; | 535 iNum++; |
536 } | 536 } |
537 continue; | 537 continue; |
538 } | 538 } |
539 } | 539 } |
540 ASSERT(iClsCur <= FX_BIDICLASS_BN); | 540 ASSERT(iClsCur <= FX_BIDICLASS_BN); |
541 iAction = gc_FX_BidiWeakActions[iState][iClsCur]; | 541 iAction = gc_FX_BidiWeakActions[iState][iClsCur]; |
542 iClsRun = FX_BidiGetDeferredType(iAction); | 542 iClsRun = FX_BidiGetDeferredType(iAction); |
543 if (iClsRun != FX_BIDIWEAKACTION_XX && iNum > 0) { | 543 if (iClsRun != FX_BIDIWEAKACTION_XX && iNum > 0) { |
544 FX_BidiSetDeferredRun(chars, TRUE, i, iNum, iClsRun); | 544 FX_BidiSetDeferredRun(chars, true, i, iNum, iClsRun); |
545 iNum = 0; | 545 iNum = 0; |
546 } | 546 } |
547 iClsNew = FX_BidiGetResolvedType(iAction); | 547 iClsNew = FX_BidiGetResolvedType(iAction); |
548 if (iClsNew != FX_BIDIWEAKACTION_XX) { | 548 if (iClsNew != FX_BIDIWEAKACTION_XX) { |
549 pTC->m_iBidiClass = (int16_t)iClsNew; | 549 pTC->m_iBidiClass = (int16_t)iClsNew; |
550 } | 550 } |
551 if (FX_BIDIWEAKACTION_IX & iAction) { | 551 if (FX_BIDIWEAKACTION_IX & iAction) { |
552 iNum++; | 552 iNum++; |
553 } | 553 } |
554 iState = gc_FX_BidiWeakStates[iState][iClsCur]; | 554 iState = gc_FX_BidiWeakStates[iState][iClsCur]; |
555 } | 555 } |
556 if (iNum > 0) { | 556 if (iNum > 0) { |
557 iClsCur = FX_BidiDirection(iBaseLevel); | 557 iClsCur = FX_BidiDirection(iBaseLevel); |
558 iClsRun = FX_BidiGetDeferredType(gc_FX_BidiWeakActions[iState][iClsCur]); | 558 iClsRun = FX_BidiGetDeferredType(gc_FX_BidiWeakActions[iState][iClsCur]); |
559 if (iClsRun != FX_BIDIWEAKACTION_XX) { | 559 if (iClsRun != FX_BIDIWEAKACTION_XX) { |
560 FX_BidiSetDeferredRun(chars, TRUE, i, iNum, iClsRun); | 560 FX_BidiSetDeferredRun(chars, true, i, iNum, iClsRun); |
561 } | 561 } |
562 } | 562 } |
563 } | 563 } |
564 void FX_BidiResolveNeutrals(CFX_ArrayTemplate<baseType>& chars, | 564 void FX_BidiResolveNeutrals(CFX_ArrayTemplate<baseType>& chars, |
565 int32_t iCount, | 565 int32_t iCount, |
566 int32_t iBaseLevel) { | 566 int32_t iBaseLevel) { |
567 ASSERT(iCount > -1 && iCount <= chars.GetSize()); | 567 ASSERT(iCount > -1 && iCount <= chars.GetSize()); |
568 ASSERT(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL); | 568 ASSERT(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL); |
569 iCount--; | 569 iCount--; |
570 if (iCount < 1) { | 570 if (iCount < 1) { |
571 return; | 571 return; |
572 } | 572 } |
573 baseType* pTC; | 573 baseType* pTC; |
574 int32_t iLevel = iBaseLevel; | 574 int32_t iLevel = iBaseLevel; |
575 int32_t iState = FX_IsOdd(iBaseLevel) ? FX_BNSr : FX_BNSl; | 575 int32_t iState = FX_IsOdd(iBaseLevel) ? FX_BNSr : FX_BNSl; |
576 int32_t i = 0, iNum = 0, iClsCur, iClsRun, iClsNew, iAction; | 576 int32_t i = 0, iNum = 0, iClsCur, iClsRun, iClsNew, iAction; |
577 for (; i <= iCount; i++) { | 577 for (; i <= iCount; i++) { |
578 pTC = chars.GetDataPtr(i); | 578 pTC = chars.GetDataPtr(i); |
579 iClsCur = pTC->m_iBidiClass; | 579 iClsCur = pTC->m_iBidiClass; |
580 if (iClsCur == FX_BIDICLASS_BN) { | 580 if (iClsCur == FX_BIDICLASS_BN) { |
581 if (iNum) { | 581 if (iNum) { |
582 iNum++; | 582 iNum++; |
583 } | 583 } |
584 continue; | 584 continue; |
585 } | 585 } |
586 ASSERT(iClsCur < FX_BIDICLASS_AL); | 586 ASSERT(iClsCur < FX_BIDICLASS_AL); |
587 iAction = gc_FX_BidiNeutralActions[iState][iClsCur]; | 587 iAction = gc_FX_BidiNeutralActions[iState][iClsCur]; |
588 iClsRun = FX_BidiGetDeferredNeutrals(iAction, iLevel); | 588 iClsRun = FX_BidiGetDeferredNeutrals(iAction, iLevel); |
589 if (iClsRun != FX_BIDICLASS_N && iNum > 0) { | 589 if (iClsRun != FX_BIDICLASS_N && iNum > 0) { |
590 FX_BidiSetDeferredRun(chars, TRUE, i, iNum, iClsRun); | 590 FX_BidiSetDeferredRun(chars, true, i, iNum, iClsRun); |
591 iNum = 0; | 591 iNum = 0; |
592 } | 592 } |
593 iClsNew = FX_BidiGetResolvedNeutrals(iAction); | 593 iClsNew = FX_BidiGetResolvedNeutrals(iAction); |
594 if (iClsNew != FX_BIDICLASS_N) { | 594 if (iClsNew != FX_BIDICLASS_N) { |
595 pTC->m_iBidiClass = (int16_t)iClsNew; | 595 pTC->m_iBidiClass = (int16_t)iClsNew; |
596 } | 596 } |
597 if (FX_BIDINEUTRALACTION_In & iAction) { | 597 if (FX_BIDINEUTRALACTION_In & iAction) { |
598 iNum++; | 598 iNum++; |
599 } | 599 } |
600 iState = gc_FX_BidiNeutralStates[iState][iClsCur]; | 600 iState = gc_FX_BidiNeutralStates[iState][iClsCur]; |
601 iLevel = pTC->m_iBidiLevel; | 601 iLevel = pTC->m_iBidiLevel; |
602 } | 602 } |
603 if (iNum > 0) { | 603 if (iNum > 0) { |
604 iClsCur = FX_BidiDirection(iLevel); | 604 iClsCur = FX_BidiDirection(iLevel); |
605 iClsRun = FX_BidiGetDeferredNeutrals( | 605 iClsRun = FX_BidiGetDeferredNeutrals( |
606 gc_FX_BidiNeutralActions[iState][iClsCur], iLevel); | 606 gc_FX_BidiNeutralActions[iState][iClsCur], iLevel); |
607 if (iClsRun != FX_BIDICLASS_N) { | 607 if (iClsRun != FX_BIDICLASS_N) { |
608 FX_BidiSetDeferredRun(chars, TRUE, i, iNum, iClsRun); | 608 FX_BidiSetDeferredRun(chars, true, i, iNum, iClsRun); |
609 } | 609 } |
610 } | 610 } |
611 } | 611 } |
612 void FX_BidiResolveImplicit(CFX_ArrayTemplate<baseType>& chars, | 612 void FX_BidiResolveImplicit(CFX_ArrayTemplate<baseType>& chars, |
613 int32_t iCount) { | 613 int32_t iCount) { |
614 ASSERT(iCount > -1 && iCount <= chars.GetSize()); | 614 ASSERT(iCount > -1 && iCount <= chars.GetSize()); |
615 baseType* pTC; | 615 baseType* pTC; |
616 int32_t iCls, iLevel; | 616 int32_t iCls, iLevel; |
617 for (int32_t i = 0; i < iCount; i++) { | 617 for (int32_t i = 0; i < iCount; i++) { |
618 pTC = chars.GetDataPtr(i); | 618 pTC = chars.GetDataPtr(i); |
(...skipping 30 matching lines...) Expand all Loading... |
649 case FX_BIDICLASS_LRO: | 649 case FX_BIDICLASS_LRO: |
650 case FX_BIDICLASS_RLO: | 650 case FX_BIDICLASS_RLO: |
651 case FX_BIDICLASS_PDF: | 651 case FX_BIDICLASS_PDF: |
652 case FX_BIDICLASS_BN: | 652 case FX_BIDICLASS_BN: |
653 pTC->m_iBidiLevel = (int16_t)iLevel; | 653 pTC->m_iBidiLevel = (int16_t)iLevel; |
654 iNum++; | 654 iNum++; |
655 break; | 655 break; |
656 case FX_BIDICLASS_S: | 656 case FX_BIDICLASS_S: |
657 case FX_BIDICLASS_B: | 657 case FX_BIDICLASS_B: |
658 if (iNum > 0) { | 658 if (iNum > 0) { |
659 FX_BidiSetDeferredRun(chars, FALSE, i, iNum, iBaseLevel); | 659 FX_BidiSetDeferredRun(chars, false, i, iNum, iBaseLevel); |
660 } | 660 } |
661 pTC->m_iBidiLevel = (int16_t)iBaseLevel; | 661 pTC->m_iBidiLevel = (int16_t)iBaseLevel; |
662 iNum = 0; | 662 iNum = 0; |
663 break; | 663 break; |
664 default: | 664 default: |
665 iNum = 0; | 665 iNum = 0; |
666 break; | 666 break; |
667 } | 667 } |
668 iLevel = pTC->m_iBidiLevel; | 668 iLevel = pTC->m_iBidiLevel; |
669 } | 669 } |
670 if (iNum > 0) { | 670 if (iNum > 0) { |
671 FX_BidiSetDeferredRun(chars, FALSE, i, iNum, iBaseLevel); | 671 FX_BidiSetDeferredRun(chars, false, i, iNum, iBaseLevel); |
672 } | 672 } |
673 } | 673 } |
674 int32_t FX_BidiReorderLevel(CFX_ArrayTemplate<baseType>& chars, | 674 int32_t FX_BidiReorderLevel(CFX_ArrayTemplate<baseType>& chars, |
675 int32_t iCount, | 675 int32_t iCount, |
676 int32_t iBaseLevel, | 676 int32_t iBaseLevel, |
677 int32_t iStart, | 677 int32_t iStart, |
678 FX_BOOL bReverse) { | 678 bool bReverse) { |
679 ASSERT(iCount > -1 && iCount <= chars.GetSize()); | 679 ASSERT(iCount > -1 && iCount <= chars.GetSize()); |
680 ASSERT(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL); | 680 ASSERT(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL); |
681 ASSERT(iStart >= 0 && iStart < iCount); | 681 ASSERT(iStart >= 0 && iStart < iCount); |
682 if (iCount < 1) { | 682 if (iCount < 1) { |
683 return 0; | 683 return 0; |
684 } | 684 } |
685 baseType* pTC; | 685 baseType* pTC; |
686 bReverse = bReverse || FX_IsOdd(iBaseLevel); | 686 bReverse = bReverse || FX_IsOdd(iBaseLevel); |
687 int32_t i = iStart, iLevel; | 687 int32_t i = iStart, iLevel; |
688 for (; i < iCount; i++) { | 688 for (; i < iCount; i++) { |
(...skipping 12 matching lines...) Expand all Loading... |
701 } | 701 } |
702 return iNum; | 702 return iNum; |
703 } | 703 } |
704 void FX_BidiReorder(CFX_ArrayTemplate<baseType>& chars, | 704 void FX_BidiReorder(CFX_ArrayTemplate<baseType>& chars, |
705 int32_t iCount, | 705 int32_t iCount, |
706 int32_t iBaseLevel) { | 706 int32_t iBaseLevel) { |
707 ASSERT(iCount > -1 && iCount <= chars.GetSize()); | 707 ASSERT(iCount > -1 && iCount <= chars.GetSize()); |
708 ASSERT(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL); | 708 ASSERT(iBaseLevel >= 0 && iBaseLevel <= FX_BIDIMAXLEVEL); |
709 int32_t i = 0; | 709 int32_t i = 0; |
710 while (i < iCount) { | 710 while (i < iCount) { |
711 i += FX_BidiReorderLevel(chars, iCount, iBaseLevel, i, FALSE); | 711 i += FX_BidiReorderLevel(chars, iCount, iBaseLevel, i, false); |
712 } | 712 } |
713 } | 713 } |
714 void FX_BidiPosition(CFX_ArrayTemplate<baseType>& chars, int32_t iCount) { | 714 void FX_BidiPosition(CFX_ArrayTemplate<baseType>& chars, int32_t iCount) { |
715 ASSERT(iCount > -1 && iCount <= chars.GetSize()); | 715 ASSERT(iCount > -1 && iCount <= chars.GetSize()); |
716 baseType* pTC; | 716 baseType* pTC; |
717 int32_t i = 0; | 717 int32_t i = 0; |
718 while (i < iCount) { | 718 while (i < iCount) { |
719 pTC = chars.GetDataPtr(i); | 719 pTC = chars.GetDataPtr(i); |
720 pTC = chars.GetDataPtr(pTC->m_iBidiPos); | 720 pTC = chars.GetDataPtr(pTC->m_iBidiPos); |
721 pTC->m_iBidiOrder = i++; | 721 pTC->m_iBidiOrder = i++; |
722 } | 722 } |
723 } | 723 } |
724 | 724 |
725 void FX_BidiLine(CFX_ArrayTemplate<baseType>& chars, | 725 void FX_BidiLine(CFX_ArrayTemplate<baseType>& chars, |
726 int32_t iCount, | 726 int32_t iCount, |
727 int32_t iBaseLevel) { | 727 int32_t iBaseLevel) { |
728 ASSERT(iCount > -1 && iCount <= chars.GetSize()); | 728 ASSERT(iCount > -1 && iCount <= chars.GetSize()); |
729 if (iCount < 2) { | 729 if (iCount < 2) { |
730 return; | 730 return; |
731 } | 731 } |
732 FX_BidiClassify(chars, iCount, FALSE); | 732 FX_BidiClassify(chars, iCount, false); |
733 FX_BidiResolveExplicit(chars, iCount, iBaseLevel); | 733 FX_BidiResolveExplicit(chars, iCount, iBaseLevel); |
734 FX_BidiResolveWeak(chars, iCount, iBaseLevel); | 734 FX_BidiResolveWeak(chars, iCount, iBaseLevel); |
735 FX_BidiResolveNeutrals(chars, iCount, iBaseLevel); | 735 FX_BidiResolveNeutrals(chars, iCount, iBaseLevel); |
736 FX_BidiResolveImplicit(chars, iCount); | 736 FX_BidiResolveImplicit(chars, iCount); |
737 FX_BidiClassify(chars, iCount, TRUE); | 737 FX_BidiClassify(chars, iCount, true); |
738 FX_BidiResolveWhitespace(chars, iCount, iBaseLevel); | 738 FX_BidiResolveWhitespace(chars, iCount, iBaseLevel); |
739 FX_BidiReorder(chars, iCount, iBaseLevel); | 739 FX_BidiReorder(chars, iCount, iBaseLevel); |
740 FX_BidiPosition(chars, iCount); | 740 FX_BidiPosition(chars, iCount); |
741 } | 741 } |
742 }; | 742 }; |
743 void FX_BidiLine(CFX_TxtCharArray& chars, int32_t iCount, int32_t iBaseLevel) { | 743 void FX_BidiLine(CFX_TxtCharArray& chars, int32_t iCount, int32_t iBaseLevel) { |
744 CFX_BidiLineTemplate<CFX_TxtChar> blt; | 744 CFX_BidiLineTemplate<CFX_TxtChar> blt; |
745 blt.FX_BidiLine(chars, iCount, iBaseLevel); | 745 blt.FX_BidiLine(chars, iCount, iBaseLevel); |
746 } | 746 } |
747 void FX_BidiLine(CFX_RTFCharArray& chars, int32_t iCount, int32_t iBaseLevel) { | 747 void FX_BidiLine(CFX_RTFCharArray& chars, int32_t iCount, int32_t iBaseLevel) { |
748 CFX_BidiLineTemplate<CFX_RTFChar> blt; | 748 CFX_BidiLineTemplate<CFX_RTFChar> blt; |
749 blt.FX_BidiLine(chars, iCount, iBaseLevel); | 749 blt.FX_BidiLine(chars, iCount, iBaseLevel); |
750 } | 750 } |
OLD | NEW |