checkParaCount(UBiDi *pBiDi) {
int32_t count=pBiDi->paraCount;
if(pBiDi->paras==pBiDi->simpleParas) {
- if(count<=SIMPLE_PARAS_SIZE)
+ if(count<=SIMPLE_PARAS_COUNT)
return TRUE;
- if(!getInitialParasMemory(pBiDi, SIMPLE_PARAS_SIZE * 2))
+ if(!getInitialParasMemory(pBiDi, SIMPLE_PARAS_COUNT * 2))
return FALSE;
pBiDi->paras=pBiDi->parasMemory;
- uprv_memcpy(pBiDi->parasMemory, pBiDi->simpleParas, SIMPLE_PARAS_SIZE * sizeof(Para));
+ uprv_memcpy(pBiDi->parasMemory, pBiDi->simpleParas, SIMPLE_PARAS_COUNT * sizeof(Para));
return TRUE;
}
if(!getInitialParasMemory(pBiDi, count * 2))
bd->openingsCount=pBiDi->openingsSize / sizeof(Opening);
} else {
bd->openings=bd->simpleOpenings;
- bd->openingsCount=SIMPLE_OPENINGS_SIZE;
+ bd->openingsCount=SIMPLE_OPENINGS_COUNT;
}
bd->isNumbersSpecial=bd->pBiDi->reorderingMode==UBIDI_REORDER_NUMBERS_SPECIAL ||
bd->pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL;
return FALSE;
if(bd->openings==bd->simpleOpenings)
uprv_memcpy(pBiDi->openingsMemory, bd->simpleOpenings,
- SIMPLE_OPENINGS_SIZE * sizeof(Opening));
+ SIMPLE_OPENINGS_COUNT * sizeof(Opening));
bd->openings=pBiDi->openingsMemory; /* may have changed */
bd->openingsCount=pBiDi->openingsSize / sizeof(Opening);
}
} else {
DirProp prop, prop1;
prop=dirProps[i];
+ if(prop==B) {
+ pBiDi->isolateCount=-1; /* current isolates stack entry == none */
+ }
if(inverseRTL) {
if(prop==AL) {
/* AL before EN does not make it AN */
}
/* allocate isolate memory */
- if(pBiDi->isolateCount<=SIMPLE_ISOLATES_SIZE)
+ if(pBiDi->isolateCount<=SIMPLE_ISOLATES_COUNT)
pBiDi->isolates=pBiDi->simpleIsolates;
else
if((int32_t)(pBiDi->isolateCount*sizeof(Isolate))<=pBiDi->isolatesSize)
(ubidi)->paraLevel : ubidi_getParaLevelAtIndex((ubidi), (index))))
/* number of paras entries allocated initially without malloc */
-#define SIMPLE_PARAS_SIZE 10
+#define SIMPLE_PARAS_COUNT 10
/* number of isolate entries allocated initially without malloc */
-#define SIMPLE_ISOLATES_SIZE 5
+#define SIMPLE_ISOLATES_COUNT 5
/* number of isolate run entries for paired brackets allocated initially without malloc */
-#define SIMPLE_OPENINGS_SIZE 20
+#define SIMPLE_OPENINGS_COUNT 20
#define CR 0x000D
#define LF 0x000A
typedef struct BracketData {
UBiDi *pBiDi;
/* array of opening entries which should be enough in most cases; no malloc() */
- Opening simpleOpenings[SIMPLE_OPENINGS_SIZE];
+ Opening simpleOpenings[SIMPLE_OPENINGS_COUNT];
Opening *openings; /* pointer to current array of entries */
int32_t openingsCount; /* number of allocated entries */
int32_t isoRunLast; /* index of last used entry */
Para *paras;
/* for relatively short text, we only need a tiny array of paras (no malloc()) */
- Para simpleParas[SIMPLE_PARAS_SIZE];
+ Para simpleParas[SIMPLE_PARAS_COUNT];
/* fields for line reordering */
int32_t runCount; /* ==-1: runs not set up yet */
Isolate *isolates;
/* for simple text, have a small stack (no malloc()) */
- Isolate simpleIsolates[SIMPLE_ISOLATES_SIZE];
+ Isolate simpleIsolates[SIMPLE_ISOLATES_COUNT];
/* for inverse Bidi with insertion of directional marks */
InsertPoints insertPoints;