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

Side by Side Diff: source/common/ubidi.c

Issue 566073003: Fix a bug in ICU's bidi handling. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/icu52/
Patch Set: Created 6 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « patches/bidi.patch ('k') | source/common/ubidiimp.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 ****************************************************************************** 2 ******************************************************************************
3 * 3 *
4 * Copyright (C) 1999-2013, International Business Machines 4 * Copyright (C) 1999-2013, International Business Machines
5 * Corporation and others. All Rights Reserved. 5 * Corporation and others. All Rights Reserved.
6 * 6 *
7 ****************************************************************************** 7 ******************************************************************************
8 * file name: ubidi.c 8 * file name: ubidi.c
9 * encoding: US-ASCII 9 * encoding: US-ASCII
10 * tab size: 8 (not used) 10 * tab size: 8 (not used)
(...skipping 653 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 bracketInit(UBiDi *pBiDi, BracketData *bd) { 664 bracketInit(UBiDi *pBiDi, BracketData *bd) {
665 bd->pBiDi=pBiDi; 665 bd->pBiDi=pBiDi;
666 bd->isoRunLast=0; 666 bd->isoRunLast=0;
667 bd->isoRuns[0].start=0; 667 bd->isoRuns[0].start=0;
668 bd->isoRuns[0].limit=0; 668 bd->isoRuns[0].limit=0;
669 bd->isoRuns[0].level=GET_PARALEVEL(pBiDi, 0); 669 bd->isoRuns[0].level=GET_PARALEVEL(pBiDi, 0);
670 bd->isoRuns[0].lastStrong=bd->isoRuns[0].contextDir=GET_PARALEVEL(pBiDi, 0)& 1; 670 bd->isoRuns[0].lastStrong=bd->isoRuns[0].contextDir=GET_PARALEVEL(pBiDi, 0)& 1;
671 bd->isoRuns[0].lastStrongPos=bd->isoRuns[0].contextPos=0; 671 bd->isoRuns[0].lastStrongPos=bd->isoRuns[0].contextPos=0;
672 if(pBiDi->openingsMemory) { 672 if(pBiDi->openingsMemory) {
673 bd->openings=pBiDi->openingsMemory; 673 bd->openings=pBiDi->openingsMemory;
674 bd->openingsSize=pBiDi->openingsSize; 674 bd->openingsCount=pBiDi->openingsSize / sizeof(Opening);
675 } else { 675 } else {
676 bd->openings=bd->simpleOpenings; 676 bd->openings=bd->simpleOpenings;
677 bd->openingsSize=SIMPLE_OPENINGS_SIZE; 677 bd->openingsCount=SIMPLE_OPENINGS_SIZE;
678 } 678 }
679 bd->isNumbersSpecial=bd->pBiDi->reorderingMode==UBIDI_REORDER_NUMBERS_SPECIA L || 679 bd->isNumbersSpecial=bd->pBiDi->reorderingMode==UBIDI_REORDER_NUMBERS_SPECIA L ||
680 bd->pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_FOR_NU MBERS_SPECIAL; 680 bd->pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_FOR_NU MBERS_SPECIAL;
681 } 681 }
682 682
683 /* paragraph boundary */ 683 /* paragraph boundary */
684 static void 684 static void
685 bracketProcessB(BracketData *bd, UBiDiLevel level) { 685 bracketProcessB(BracketData *bd, UBiDiLevel level) {
686 bd->isoRunLast=0; 686 bd->isoRunLast=0;
687 bd->isoRuns[0].limit=0; 687 bd->isoRuns[0].limit=0;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
725 static void 725 static void
726 bracketProcessPDI(BracketData *bd) { 726 bracketProcessPDI(BracketData *bd) {
727 bd->isoRunLast--; 727 bd->isoRunLast--;
728 } 728 }
729 729
730 /* newly found opening bracket: create an openings entry */ 730 /* newly found opening bracket: create an openings entry */
731 static UBool /* return TRUE if success */ 731 static UBool /* return TRUE if success */
732 bracketAddOpening(BracketData *bd, UChar match, int32_t position) { 732 bracketAddOpening(BracketData *bd, UChar match, int32_t position) {
733 IsoRun *pLastIsoRun=&bd->isoRuns[bd->isoRunLast]; 733 IsoRun *pLastIsoRun=&bd->isoRuns[bd->isoRunLast];
734 Opening *pOpening; 734 Opening *pOpening;
735 if(pLastIsoRun->limit>=bd->openingsSize) { /* no available new entry */ 735 if(pLastIsoRun->limit>=bd->openingsCount) { /* no available new entry */
736 UBiDi *pBiDi=bd->pBiDi; 736 UBiDi *pBiDi=bd->pBiDi;
737 if(!getInitialOpeningsMemory(pBiDi, pLastIsoRun->limit * 2)) 737 if(!getInitialOpeningsMemory(pBiDi, pLastIsoRun->limit * 2))
738 return FALSE; 738 return FALSE;
739 if(bd->openings==bd->simpleOpenings) 739 if(bd->openings==bd->simpleOpenings)
740 uprv_memcpy(pBiDi->openingsMemory, bd->simpleOpenings, 740 uprv_memcpy(pBiDi->openingsMemory, bd->simpleOpenings,
741 SIMPLE_OPENINGS_SIZE * sizeof(Opening)); 741 SIMPLE_OPENINGS_SIZE * sizeof(Opening));
742 bd->openings=pBiDi->openingsMemory; /* may have changed */ 742 bd->openings=pBiDi->openingsMemory; /* may have changed */
743 bd->openingsSize=pBiDi->openingsSize; 743 bd->openingsCount=pBiDi->openingsSize / sizeof(Opening);
744 } 744 }
745 pOpening=&bd->openings[pLastIsoRun->limit]; 745 pOpening=&bd->openings[pLastIsoRun->limit];
746 pOpening->position=position; 746 pOpening->position=position;
747 pOpening->match=match; 747 pOpening->match=match;
748 pOpening->contextDir=pLastIsoRun->contextDir; 748 pOpening->contextDir=pLastIsoRun->contextDir;
749 pOpening->contextPos=pLastIsoRun->contextPos; 749 pOpening->contextPos=pLastIsoRun->contextPos;
750 pOpening->flags=0; 750 pOpening->flags=0;
751 pLastIsoRun->limit++; 751 pLastIsoRun->limit++;
752 return TRUE; 752 return TRUE;
753 } 753 }
(...skipping 2154 matching lines...) Expand 10 before | Expand all | Expand 10 after
2908 if( pBiDi->fnClassCallback == NULL || 2908 if( pBiDi->fnClassCallback == NULL ||
2909 (dir = (*pBiDi->fnClassCallback)(pBiDi->coClassCallback, c)) == U_BIDI_C LASS_DEFAULT ) 2909 (dir = (*pBiDi->fnClassCallback)(pBiDi->coClassCallback, c)) == U_BIDI_C LASS_DEFAULT )
2910 { 2910 {
2911 dir = ubidi_getClass(pBiDi->bdp, c); 2911 dir = ubidi_getClass(pBiDi->bdp, c);
2912 } 2912 }
2913 if(dir >= U_CHAR_DIRECTION_COUNT) { 2913 if(dir >= U_CHAR_DIRECTION_COUNT) {
2914 dir = ON; 2914 dir = ON;
2915 } 2915 }
2916 return dir; 2916 return dir;
2917 } 2917 }
OLDNEW
« no previous file with comments | « patches/bidi.patch ('k') | source/common/ubidiimp.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698