Lines Matching defs:pBiDi
133 UBiDi *pBiDi;
144 pBiDi=(UBiDi *)uprv_malloc(sizeof(UBiDi));
145 if(pBiDi==NULL) {
151 uprv_memset(pBiDi, 0, sizeof(UBiDi));
154 pBiDi->bdp=ubidi_getSingleton();
158 if( !getInitialDirPropsMemory(pBiDi, maxLength) ||
159 !getInitialLevelsMemory(pBiDi, maxLength)
164 pBiDi->mayAllocateText=TRUE;
170 pBiDi->runsSize=sizeof(Run);
171 } else if(!getInitialRunsMemory(pBiDi, maxRunCount)) {
175 pBiDi->mayAllocateRuns=TRUE;
179 return pBiDi;
181 ubidi_close(pBiDi);
239 ubidi_close(UBiDi *pBiDi) {
240 if(pBiDi!=NULL) {
241 pBiDi->pParaBiDi=NULL; /* in case one tries to reuse this block */
242 if(pBiDi->dirPropsMemory!=NULL) {
243 uprv_free(pBiDi->dirPropsMemory);
245 if(pBiDi->levelsMemory!=NULL) {
246 uprv_free(pBiDi->levelsMemory);
248 if(pBiDi->openingsMemory!=NULL) {
249 uprv_free(pBiDi->openingsMemory);
251 if(pBiDi->parasMemory!=NULL) {
252 uprv_free(pBiDi->parasMemory);
254 if(pBiDi->runsMemory!=NULL) {
255 uprv_free(pBiDi->runsMemory);
257 if(pBiDi->isolatesMemory!=NULL) {
258 uprv_free(pBiDi->isolatesMemory);
260 if(pBiDi->insertPoints.points!=NULL) {
261 uprv_free(pBiDi->insertPoints.points);
264 uprv_free(pBiDi);
271 ubidi_setInverse(UBiDi *pBiDi, UBool isInverse) {
272 if(pBiDi!=NULL) {
273 pBiDi->isInverse=isInverse;
274 pBiDi->reorderingMode = isInverse ? UBIDI_REORDER_INVERSE_NUMBERS_AS_L
280 ubidi_isInverse(UBiDi *pBiDi) {
281 if(pBiDi!=NULL) {
282 return pBiDi->isInverse;
304 ubidi_setReorderingMode(UBiDi *pBiDi, UBiDiReorderingMode reorderingMode) {
305 if ((pBiDi!=NULL) && (reorderingMode >= UBIDI_REORDER_DEFAULT)
307 pBiDi->reorderingMode = reorderingMode;
308 pBiDi->isInverse = (UBool)(reorderingMode == UBIDI_REORDER_INVERSE_NUMBERS_AS_L);
313 ubidi_getReorderingMode(UBiDi *pBiDi) {
314 if (pBiDi!=NULL) {
315 return pBiDi->reorderingMode;
322 ubidi_setReorderingOptions(UBiDi *pBiDi, uint32_t reorderingOptions) {
326 if (pBiDi!=NULL) {
327 pBiDi->reorderingOptions=reorderingOptions;
332 ubidi_getReorderingOptions(UBiDi *pBiDi) {
333 if (pBiDi!=NULL) {
334 return pBiDi->reorderingOptions;
376 firstL_R_AL(UBiDi *pBiDi) {
377 const UChar *text=pBiDi->prologue;
378 int32_t length=pBiDi->proLength;
385 dirProp=(DirProp)ubidi_getCustomizedClass(pBiDi, uchar);
400 * Check that there are enough entries in the array pointed to by pBiDi->paras
403 checkParaCount(UBiDi *pBiDi) {
404 int32_t count=pBiDi->paraCount;
405 if(pBiDi->paras==pBiDi->simpleParas) {
408 if(!getInitialParasMemory(pBiDi, SIMPLE_PARAS_COUNT * 2))
410 pBiDi->paras=pBiDi->parasMemory;
411 uprv_memcpy(pBiDi->parasMemory, pBiDi->simpleParas, SIMPLE_PARAS_COUNT * sizeof(Para));
414 if(!getInitialParasMemory(pBiDi, count * 2))
416 pBiDi->paras=pBiDi->parasMemory;
422 * determine the paragraph level if necessary (in pBiDi->paras[i].level).
429 getDirProps(UBiDi *pBiDi) {
430 const UChar *text=pBiDi->text;
431 DirProp *dirProps=pBiDi->dirPropsMemory; /* pBiDi->dirProps is const */
433 int32_t i=0, originalLength=pBiDi->originalLength;
437 UBool isDefaultLevel=IS_DEFAULT_LEVEL(pBiDi->paraLevel);
441 (pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_LIKE_DIRECT ||
442 pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL);
445 UBool removeBiDiControls = (UBool)(pBiDi->reorderingOptions &
470 if(pBiDi->reorderingOptions & UBIDI_OPTION_STREAMING)
471 pBiDi->length=0;
472 defaultParaLevel=pBiDi->paraLevel&1;
474 pBiDi->paras[0].level=defaultParaLevel;
476 if(pBiDi->proLength>0 && /* there is a prologue */
477 (dirProp=firstL_R_AL(pBiDi))!=ON) { /* with a strong character */
479 pBiDi->paras[0].level=0; /* set the default para level */
481 pBiDi->paras[0].level=1; /* set the default para level */
487 pBiDi->paras[0].level=pBiDi->paraLevel;
499 flags|=DIRPROP_FLAG(dirProp=(DirProp)ubidi_getCustomizedClass(pBiDi, uchar));
509 pBiDi->paras[pBiDi->paraCount-1].level=0;
525 pBiDi->paras[pBiDi->paraCount-1].level=1;
572 pBiDi->paras[pBiDi->paraCount-1].limit=i;
574 pBiDi->paras[pBiDi->paraCount-1].level=1;
575 if(pBiDi->reorderingOptions & UBIDI_OPTION_STREAMING) {
578 pBiDi->length=i; /* i is index to next character */
579 pBiDi->controlCount=controlCount;
582 pBiDi->paraCount++;
583 if(checkParaCount(pBiDi)==FALSE) /* not enough memory for a new para entry */
586 pBiDi->paras[pBiDi->paraCount-1].level=defaultParaLevel;
590 pBiDi->paras[pBiDi->paraCount-1].level=pBiDi->paraLevel;
615 if(pBiDi->reorderingOptions & UBIDI_OPTION_STREAMING) {
616 if(pBiDi->length<originalLength)
617 pBiDi->paraCount--;
619 pBiDi->paras[pBiDi->paraCount-1].limit=originalLength;
620 pBiDi->controlCount=controlCount;
625 pBiDi->paras[pBiDi->paraCount-1].level=1;
628 pBiDi->paraLevel=pBiDi->paras[0].level;
632 for(i=0; i<pBiDi->paraCount; i++)
633 flags|=DIRPROP_FLAG_LR(pBiDi->paras[i].level);
635 if(pBiDi->orderParagraphsLTR && (flags&DIRPROP_FLAG(B))) {
638 pBiDi->flags=flags;
639 pBiDi->lastArabicPos=lastArabicPos;
645 ubidi_getParaLevelAtIndex(const UBiDi *pBiDi, int32_t pindex) {
647 for(i=0; i<pBiDi->paraCount; i++)
648 if(pindex<pBiDi->paras[i].limit)
650 if(i>=pBiDi->paraCount)
651 i=pBiDi->paraCount-1;
652 return (UBiDiLevel)(pBiDi->paras[i].level);
672 bracketInit(UBiDi *pBiDi, BracketData *bd) {
673 bd->pBiDi=pBiDi;
677 bd->isoRuns[0].level=GET_PARALEVEL(pBiDi, 0);
678 bd->isoRuns[0].lastStrong=bd->isoRuns[0].lastBase=bd->isoRuns[0].contextDir=GET_PARALEVEL(pBiDi, 0)&1;
680 if(pBiDi->openingsMemory) {
681 bd->openings=pBiDi->openingsMemory;
682 bd->openingsCount=pBiDi->openingsSize / sizeof(Opening);
687 bd->isNumbersSpecial=bd->pBiDi->reorderingMode==UBIDI_REORDER_NUMBERS_SPECIAL ||
688 bd->pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL;
706 DirProp *dirProps=bd->pBiDi->dirProps;
747 UBiDi *pBiDi=bd->pBiDi;
748 if(!getInitialOpeningsMemory(pBiDi, pLastIsoRun->limit * 2))
751 uprv_memcpy(pBiDi->openingsMemory, bd->simpleOpenings,
753 bd->openings=pBiDi->openingsMemory; /* may have changed */
754 bd->openingsCount=pBiDi->openingsSize / sizeof(Opening);
772 DirProp *dirProps=bd->pBiDi->dirProps;
840 bd->pBiDi->dirProps[pOpening->position]=newProp;
841 bd->pBiDi->dirProps[position]=newProp;
877 dirProps=bd->pBiDi->dirProps;
884 c=bd->pBiDi->text[position];
897 level=bd->pBiDi->levels[position];
907 bd->pBiDi->levels[position]&=~UBIDI_LEVEL_OVERRIDE;
910 bd->pBiDi->levels[bd->openings[idx].position]&=~UBIDI_LEVEL_OVERRIDE;
921 ubidi_getPairedBracketType(bd->pBiDi->bdp, c)==U_BPT_OPEN) { /* opening bracket */
936 level=bd->pBiDi->levels[position];
1004 directionFromFlags(UBiDi *pBiDi) {
1005 Flags flags=pBiDi->flags;
1068 resolveExplicitLevels(UBiDi *pBiDi, UErrorCode *pErrorCode) {
1069 DirProp *dirProps=pBiDi->dirProps;
1070 UBiDiLevel *levels=pBiDi->levels;
1071 const UChar *text=pBiDi->text;
1073 int32_t i=0, length=pBiDi->length;
1074 Flags flags=pBiDi->flags; /* collect all directionalities in the text */
1076 UBiDiLevel level=GET_PARALEVEL(pBiDi, 0);
1078 pBiDi->isolateCount=0;
1083 direction=directionFromFlags(pBiDi);
1090 if(pBiDi->reorderingMode > UBIDI_REORDER_LAST_LOGICAL_TO_VISUAL) {
1094 for(paraIndex=0; paraIndex<pBiDi->paraCount; paraIndex++) {
1098 start=pBiDi->paras[paraIndex-1].limit;
1099 limit=pBiDi->paras[paraIndex].limit;
1100 level=pBiDi->paras[paraIndex].level;
1111 bracketInit(pBiDi, &bracketData);
1112 for(paraIndex=0; paraIndex<pBiDi->paraCount; paraIndex++) {
1116 start=pBiDi->paras[paraIndex-1].limit;
1117 limit=pBiDi->paras[paraIndex].limit;
1118 level=pBiDi->paras[paraIndex].level;
1158 bracketInit(pBiDi, &bracketData);
1237 if(validIsolateCount>pBiDi->isolateCount)
1238 pBiDi->isolateCount=validIsolateCount;
1282 levels[i]=GET_PARALEVEL(pBiDi, i);
1289 previousLevel=embeddingLevel=GET_PARALEVEL(pBiDi, i+1);
1321 flags|=DIRPROP_FLAG_LR(pBiDi->paraLevel);
1322 if(pBiDi->orderParagraphsLTR && (flags&DIRPROP_FLAG(B)))
1325 pBiDi->flags=flags;
1326 direction=directionFromFlags(pBiDi);
1342 checkExplicitLevels(UBiDi *pBiDi, UErrorCode *pErrorCode) {
1343 DirProp *dirProps=pBiDi->dirProps;
1345 UBiDiLevel *levels=pBiDi->levels;
1348 int32_t i, length=pBiDi->length;
1351 pBiDi->isolateCount=0;
1358 if(isolateCount>pBiDi->isolateCount)
1359 pBiDi->isolateCount=isolateCount;
1373 if((level<GET_PARALEVEL(pBiDi, i) &&
1382 flags|=DIRPROP_FLAG_LR(pBiDi->paraLevel);
1384 pBiDi->flags=flags;
1385 return directionFromFlags(pBiDi);
1762 addPoint(UBiDi *pBiDi, int32_t pos, int32_t flag)
1769 InsertPoints * pInsertPoints=&(pBiDi->insertPoints);
1802 setLevelsOutsideIsolates(UBiDi *pBiDi, int32_t start, int32_t limit, UBiDiLevel level)
1804 DirProp *dirProps=pBiDi->dirProps, dirProp;
1805 UBiDiLevel *levels=pBiDi->levels;
1834 processPropertySeq(UBiDi *pBiDi, LevState *pLevState, uint8_t _prop,
1839 UBiDiLevel * levels=pBiDi->levels;
1863 setLevelsOutsideIsolates(pBiDi, pLevState->startON, start0, level);
1868 setLevelsOutsideIsolates(pBiDi, pLevState->startON, start0, level);
1874 addPoint(pBiDi, pLevState->startL2EN, LRM_BEFORE);
1878 pInsertPoints=&(pBiDi->insertPoints);
1891 addPoint(pBiDi, start0, LRM_BEFORE);
1907 addPoint(pBiDi, start0, LRM_BEFORE);
1914 pInsertPoints=&(pBiDi->insertPoints);
1925 if ((_prop == DirProp_AN) && (pBiDi->dirProps[start0] == AN) &&
1926 (pBiDi->reorderingMode!=UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL))
1937 addPoint(pBiDi, pLevState->startL2EN, LRM_BEFORE);
1941 addPoint(pBiDi, start0, LRM_BEFORE);
1959 addPoint(pBiDi, k, RLM_BEFORE); /* add RLM before */
1960 pInsertPoints=&(pBiDi->insertPoints);
1969 addPoint(pBiDi, start0, LRM_BEFORE); /* add LRM before */
1970 addPoint(pBiDi, start0, LRM_AFTER); /* add LRM after */
1975 pInsertPoints=&(pBiDi->insertPoints);
1979 addPoint(pBiDi, start0, RLM_BEFORE);
1990 pInsertPoints=&(pBiDi->insertPoints);
2035 setLevelsOutsideIsolates(pBiDi, start, limit, level);
2045 lastL_R_AL(UBiDi *pBiDi) {
2046 const UChar *text=pBiDi->prologue;
2047 int32_t length=pBiDi->proLength;
2054 dirProp=(DirProp)ubidi_getCustomizedClass(pBiDi, uchar);
2073 firstL_R_AL_EN_AN(UBiDi *pBiDi) {
2074 const UChar *text=pBiDi->epilogue;
2075 int32_t length=pBiDi->epiLength;
2082 dirProp=(DirProp)ubidi_getCustomizedClass(pBiDi, uchar);
2100 resolveImplicitLevels(UBiDi *pBiDi,
2103 const DirProp *dirProps=pBiDi->dirProps;
2121 ((start<pBiDi->lastArabicPos) && (GET_PARALEVEL(pBiDi, start) & 1) &&
2122 (pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_LIKE_DIRECT ||
2123 pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL));
2129 levState.runLevel=pBiDi->levels[start];
2130 levState.pImpTab=(const ImpTab*)((pBiDi->pImpTabPair)->pImpTab)[levState.runLevel&1];
2131 levState.pImpAct=(const ImpAct*)((pBiDi->pImpTabPair)->pImpAct)[levState.runLevel&1];
2132 if(start==0 && pBiDi->proLength>0) {
2133 DirProp lastStrong=lastL_R_AL(pBiDi);
2141 if(dirProps[start]==PDI && pBiDi->isolateCount >= 0) {
2142 levState.startON=pBiDi->isolates[pBiDi->isolateCount].startON;
2143 start1=pBiDi->isolates[pBiDi->isolateCount].start1;
2144 stateImp=pBiDi->isolates[pBiDi->isolateCount].stateImp;
2145 levState.state=pBiDi->isolates[pBiDi->isolateCount].state;
2146 pBiDi->isolateCount--;
2155 processPropertySeq(pBiDi, &levState, sor, start, start);
2171 pBiDi->isolateCount=-1; /* current isolates stack entry == none */
2211 processPropertySeq(pBiDi, &levState, resProp, start1, i);
2218 processPropertySeq(pBiDi, &levState, resProp, start1, start2);
2219 processPropertySeq(pBiDi, &levState, DirProp_ON, start2, i);
2223 processPropertySeq(pBiDi, &levState, resProp, start1, start2);
2235 if(limit==pBiDi->length && pBiDi->epiLength>0) {
2236 DirProp firstStrong=firstL_R_AL_EN_AN(pBiDi);
2245 if((dirProp==LRI || dirProp==RLI) && limit<pBiDi->length) {
2246 pBiDi->isolateCount++;
2247 pBiDi->isolates[pBiDi->isolateCount].stateImp=stateImp;
2248 pBiDi->isolates[pBiDi->isolateCount].state=levState.state;
2249 pBiDi->isolates[pBiDi->isolateCount].start1=start1;
2250 pBiDi->isolates[pBiDi->isolateCount].startON=levState.startON;
2253 processPropertySeq(pBiDi, &levState, eor, limit, limit);
2265 adjustWSLevels(UBiDi *pBiDi) {
2266 const DirProp *dirProps=pBiDi->dirProps;
2267 UBiDiLevel *levels=pBiDi->levels;
2270 if(pBiDi->flags&MASK_WS) {
2271 UBool orderParagraphsLTR=pBiDi->orderParagraphsLTR;
2274 i=pBiDi->trailingWSStart;
2281 levels[i]=GET_PARALEVEL(pBiDi, i);
2295 levels[i]=GET_PARALEVEL(pBiDi, i);
2304 ubidi_setContext(UBiDi *pBiDi,
2310 if(pBiDi==NULL || proLength<-1 || epiLength<-1 ||
2317 pBiDi->proLength=u_strlen(prologue);
2319 pBiDi->proLength=proLength;
2322 pBiDi->epiLength=u_strlen(epilogue);
2324 pBiDi->epiLength=epiLength;
2326 pBiDi->prologue=prologue;
2327 pBiDi->epilogue=epilogue;
2331 setParaSuccess(UBiDi *pBiDi) {
2332 pBiDi->proLength=0; /* forget the last context */
2333 pBiDi->epiLength=0;
2334 pBiDi->pParaBiDi=pBiDi; /* mark successful setPara */
2341 setParaRunsOnly(UBiDi *pBiDi, const UChar *text, int32_t length,
2358 pBiDi->reorderingMode=UBIDI_REORDER_DEFAULT;
2360 ubidi_setPara(pBiDi, text, length, paraLevel, NULL, pErrorCode);
2372 saveOptions=pBiDi->reorderingOptions;
2374 pBiDi->reorderingOptions&=~UBIDI_OPTION_INSERT_MARKS;
2375 pBiDi->reorderingOptions|=UBIDI_OPTION_REMOVE_CONTROLS;
2378 ubidi_setPara(pBiDi, text, length, paraLevel, NULL, pErrorCode);
2382 /* we cannot access directly pBiDi->levels since it is not yet set if
2385 levels=ubidi_getLevels(pBiDi, pErrorCode);
2386 uprv_memcpy(saveLevels, levels, pBiDi->length*sizeof(UBiDiLevel));
2387 saveTrailingWSStart=pBiDi->trailingWSStart;
2388 saveLength=pBiDi->length;
2389 saveDirection=pBiDi->direction;
2397 visualLength=ubidi_writeReordered(pBiDi, visualText, length,
2399 ubidi_getVisualMap(pBiDi, visualMap, pErrorCode);
2403 pBiDi->reorderingOptions=saveOptions;
2405 pBiDi->reorderingMode=UBIDI_REORDER_INVERSE_LIKE_DIRECT;
2414 saveMayAllocateText=pBiDi->mayAllocateText;
2415 pBiDi->mayAllocateText=FALSE;
2416 ubidi_setPara(pBiDi, visualText, visualLength, paraLevel, NULL, pErrorCode);
2417 pBiDi->mayAllocateText=saveMayAllocateText;
2418 ubidi_getRuns(pBiDi, pErrorCode);
2424 runCount=pBiDi->runCount;
2425 runs=pBiDi->runs;
2442 if(getRunsMemory(pBiDi, runCount+addedRuns)) {
2445 pBiDi->runsMemory[0]=runs[0];
2447 runs=pBiDi->runs=pBiDi->runsMemory;
2448 pBiDi->runCount+=addedRuns;
2504 pBiDi->paraLevel^=1;
2507 pBiDi->text=text;
2508 pBiDi->length=saveLength;
2509 pBiDi->originalLength=length;
2510 pBiDi->direction=saveDirection;
2512 if(saveLength>pBiDi->levelsSize) {
2513 saveLength=pBiDi->levelsSize;
2515 uprv_memcpy(pBiDi->levels, saveLevels, saveLength*sizeof(UBiDiLevel));
2516 pBiDi->trailingWSStart=saveTrailingWSStart;
2517 if(pBiDi->runCount>1) {
2518 pBiDi->direction=UBIDI_MIXED;
2524 pBiDi->reorderingMode=UBIDI_REORDER_RUNS_ONLY;
2530 ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length,
2538 if(pBiDi==NULL || text==NULL || length<-1 ||
2549 if(pBiDi->reorderingMode==UBIDI_REORDER_RUNS_ONLY) {
2550 setParaRunsOnly(pBiDi, text, length, paraLevel, pErrorCode);
2555 pBiDi->pParaBiDi=NULL; /* mark unfinished setPara */
2556 pBiDi->text=text;
2557 pBiDi->length=pBiDi->originalLength=pBiDi->resultLength=length;
2558 pBiDi->paraLevel=paraLevel;
2559 pBiDi->direction=paraLevel&1;
2560 pBiDi->paraCount=1;
2562 pBiDi->dirProps=NULL;
2563 pBiDi->levels=NULL;
2564 pBiDi->runs=NULL;
2565 pBiDi->insertPoints.size=0; /* clean up from last call */
2566 pBiDi->insertPoints.confirmed=0; /* clean up from last call */
2571 pBiDi->defaultParaLevel=IS_DEFAULT_LEVEL(paraLevel);
2580 pBiDi->paraLevel&=1;
2581 pBiDi->defaultParaLevel=0;
2583 pBiDi->flags=DIRPROP_FLAG_LR(paraLevel);
2584 pBiDi->runCount=0;
2585 pBiDi->paraCount=0;
2586 setParaSuccess(pBiDi); /* mark successful setPara */
2590 pBiDi->runCount=-1;
2593 if(pBiDi->parasMemory)
2594 pBiDi->paras=pBiDi->parasMemory;
2596 pBiDi->paras=pBiDi->simpleParas;
2603 if(getDirPropsMemory(pBiDi, length)) {
2604 pBiDi->dirProps=pBiDi->dirPropsMemory;
2605 if(!getDirProps(pBiDi)) {
2613 dirProps=pBiDi->dirProps;
2615 length= pBiDi->length;
2616 pBiDi->trailingWSStart=length; /* the levels[] will reflect the WS run */
2621 if(getLevelsMemory(pBiDi, length)) {
2622 pBiDi->levels=pBiDi->levelsMemory;
2623 direction=resolveExplicitLevels(pBiDi, pErrorCode);
2633 pBiDi->levels=embeddingLevels;
2634 direction=checkExplicitLevels(pBiDi, pErrorCode);
2641 if(pBiDi->isolateCount<=SIMPLE_ISOLATES_COUNT)
2642 pBiDi->isolates=pBiDi->simpleIsolates;
2644 if((int32_t)(pBiDi->isolateCount*sizeof(Isolate))<=pBiDi->isolatesSize)
2645 pBiDi->isolates=pBiDi->isolatesMemory;
2647 if(getInitialIsolatesMemory(pBiDi, pBiDi->isolateCount)) {
2648 pBiDi->isolates=pBiDi->isolatesMemory;
2654 pBiDi->isolateCount=-1; /* current isolates stack entry == none */
2660 pBiDi->direction=direction;
2664 pBiDi->trailingWSStart=0;
2668 pBiDi->trailingWSStart=0;
2674 switch(pBiDi->reorderingMode) {
2676 pBiDi->pImpTabPair=&impTab_DEFAULT;
2679 pBiDi->pImpTabPair=&impTab_NUMBERS_SPECIAL;
2682 pBiDi->pImpTabPair=&impTab_GROUP_NUMBERS_WITH_R;
2685 pBiDi->pImpTabPair=&impTab_INVERSE_NUMBERS_AS_L;
2688 if (pBiDi->reorderingOptions & UBIDI_OPTION_INSERT_MARKS) {
2689 pBiDi->pImpTabPair=&impTab_INVERSE_LIKE_DIRECT_WITH_MARKS;
2691 pBiDi->pImpTabPair=&impTab_INVERSE_LIKE_DIRECT;
2695 if (pBiDi->reorderingOptions & UBIDI_OPTION_INSERT_MARKS) {
2696 pBiDi->pImpTabPair=&impTab_INVERSE_FOR_NUMBERS_SPECIAL_WITH_MARKS;
2698 pBiDi->pImpTabPair=&impTab_INVERSE_FOR_NUMBERS_SPECIAL;
2717 if(embeddingLevels==NULL && pBiDi->paraCount<=1 &&
2718 !(pBiDi->flags&DIRPROP_FLAG_MULTI_RUNS)) {
2719 resolveImplicitLevels(pBiDi, 0, length,
2720 GET_LR_FROM_LEVEL(GET_PARALEVEL(pBiDi, 0)),
2721 GET_LR_FROM_LEVEL(GET_PARALEVEL(pBiDi, length-1)));
2724 UBiDiLevel *levels=pBiDi->levels;
2730 level=GET_PARALEVEL(pBiDi, 0);
2746 sor=GET_LR_FROM_LEVEL(GET_PARALEVEL(pBiDi, start));
2760 nextLevel=GET_PARALEVEL(pBiDi, length-1);
2773 resolveImplicitLevels(pBiDi, start, limit, sor, eor);
2783 if (U_FAILURE(pBiDi->insertPoints.errorCode))
2785 *pErrorCode=pBiDi->insertPoints.errorCode;
2789 adjustWSLevels(pBiDi);
2795 if((pBiDi->defaultParaLevel>0) &&
2796 (pBiDi->reorderingOptions & UBIDI_OPTION_INSERT_MARKS) &&
2797 ((pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_LIKE_DIRECT) ||
2798 (pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL))) {
2802 for(i=0; i<pBiDi
2803 last=(pBiDi->paras[i].limit)-1;
2804 level=pBiDi->paras[i].level;
2807 start= i==0 ? 0 : pBiDi->paras[i-1].limit;
2816 addPoint(pBiDi, last, RLM_BEFORE);
2826 if(pBiDi->reorderingOptions & UBIDI_OPTION_REMOVE_CONTROLS) {
2827 pBiDi->resultLength -= pBiDi->controlCount;
2829 pBiDi->resultLength += pBiDi->insertPoints.size;
2831 setParaSuccess(pBiDi); /* mark successful setPara */
2835 ubidi_orderParagraphsLTR(UBiDi *pBiDi, UBool orderParagraphsLTR) {
2836 if(pBiDi!=NULL) {
2837 pBiDi->orderParagraphsLTR=orderParagraphsLTR;
2842 ubidi_isOrderParagraphsLTR(UBiDi *pBiDi) {
2843 if(pBiDi!=NULL) {
2844 return pBiDi->orderParagraphsLTR;
2851 ubidi_getDirection(const UBiDi *pBiDi) {
2852 if(IS_VALID_PARA_OR_LINE(pBiDi)) {
2853 return pBiDi->direction;
2860 ubidi_getText(const UBiDi *pBiDi) {
2861 if(IS_VALID_PARA_OR_LINE(pBiDi)) {
2862 return pBiDi->text;
2869 ubidi_getLength(const UBiDi *pBiDi) {
2870 if(IS_VALID_PARA_OR_LINE(pBiDi)) {
2871 return pBiDi->originalLength;
2878 ubidi_getProcessedLength(const UBiDi *pBiDi) {
2879 if(IS_VALID_PARA_OR_LINE(pBiDi)) {
2880 return pBiDi->length;
2887 ubidi_getResultLength(const UBiDi *pBiDi) {
2888 if(IS_VALID_PARA_OR_LINE(pBiDi)) {
2889 return pBiDi->resultLength;
2898 ubidi_getParaLevel(const UBiDi *pBiDi) {
2899 if(IS_VALID_PARA_OR_LINE(pBiDi)) {
2900 return pBiDi->paraLevel;
2907 ubidi_countParagraphs(UBiDi *pBiDi) {
2908 if(!IS_VALID_PARA_OR_LINE(pBiDi)) {
2911 return pBiDi->paraCount;
2916 ubidi_getParagraphByIndex(const UBiDi *pBiDi, int32_t paraIndex,
2923 RETURN_VOID_IF_NOT_VALID_PARA_OR_LINE(pBiDi, *pErrorCode);
2924 RETURN_VOID_IF_BAD_RANGE(paraIndex, 0, pBiDi->paraCount, *pErrorCode);
2926 pBiDi=pBiDi->pParaBiDi; /* get Para object if Line object */
2928 paraStart=pBiDi->paras[paraIndex-1].limit;
2936 *pParaLimit=pBiDi->paras[paraIndex].limit;
2939 *pParaLevel=GET_PARALEVEL(pBiDi, paraStart);
2944 ubidi_getParagraph(const UBiDi *pBiDi, int32_t charIndex,
2952 RETURN_IF_NOT_VALID_PARA_OR_LINE(pBiDi, *pErrorCode, -1);
2953 pBiDi=pBiDi->pParaBiDi; /* get Para object if Line object */
2954 RETURN_IF_BAD_RANGE(charIndex, 0, pBiDi->length, *pErrorCode, -1);
2956 for(paraIndex=0; charIndex>=pBiDi->paras[paraIndex].limit; paraIndex++);
2957 ubidi_getParagraphByIndex(pBiDi, paraIndex, pParaStart, pParaLimit, pParaLevel, pErrorCode);
2962 ubidi_setClassCallback(UBiDi *pBiDi, UBiDiClassCallback *newFn,
2967 if(pBiDi==NULL) {
2973 *oldFn = pBiDi->fnClassCallback;
2977 *oldContext = pBiDi->coClassCallback;
2979 pBiDi->fnClassCallback = newFn;
2980 pBiDi->coClassCallback = newContext;
2984 ubidi_getClassCallback(UBiDi *pBiDi, UBiDiClassCallback **fn, const void **context)
2986 if(pBiDi==NULL) {
2991 *fn = pBiDi->fnClassCallback;
2995 *context = pBiDi->coClassCallback;
3000 ubidi_getCustomizedClass(UBiDi *pBiDi, UChar32 c)
3004 if( pBiDi->fnClassCallback == NULL ||
3005 (dir = (*pBiDi->fnClassCallback)(pBiDi->coClassCallback, c)) == U_BIDI_CLASS_DEFAULT )
3007 dir = ubidi_getClass(pBiDi->bdp, c);