private byte directionFromFlags() { /* if the text contains AN and neutrals, then some neutrals may become RTL */ if (!((flags & MASK_RTL) != 0 || ((flags & DirPropFlag(AN)) != 0 && (flags & MASK_POSSIBLE_N) != 0))) { return LTR; } else if ((flags & MASK_LTR) == 0) { return RTL; } else { return MIXED; } }
} else { flags |= DirPropFlagE(level) | DirPropFlag(dirProp);
flags |= DirPropFlag(dirProp); dirProps[i1] = dirProp; if (i1 > i0) { /* set previous code units' properties to BN */ flags |= DirPropFlag(BN); do { dirProps[--i1] = BN; flags |= DirPropFlag(LRI); if (stackLast <= MAX_EXPLICIT_LEVEL) { dirProps[isolateStartStack[stackLast]] = RLI; flags |= DirPropFlag(RLI); flags |= DirPropFlag(LRI); flags |= DirPropFlag(LRI); break; flags |= DirPropFlagLR(paras_level[i]); if (orderParagraphsLTR && (flags & DirPropFlag(B)) != 0) { flags |= DirPropFlag(L);
flags |= DirPropFlag(BN); levels[i] = previousLevel; if (dirProp == LRE || dirProp == LRO) flags |= DirPropFlag(BN); levels[i] = previousLevel; case LRI: case RLI: flags |= DirPropFlag(ON) | DirPropFlagLR(embeddingLevel); levels[i] = NoOverride(embeddingLevel); if (NoOverride(embeddingLevel) != NoOverride(previousLevel)) { if (newLevel <= MAX_EXPLICIT_LEVEL && overflowIsolateCount == 0 && overflowEmbeddingCount == 0) { flags |= DirPropFlag(dirProp); lastCcPos = i; validIsolateCount++; flags |= DirPropFlag(PDI); lastCcPos = i; overflowEmbeddingCount = 0; flags |= DirPropFlag(ON) | DirPropFlagLR(embeddingLevel); previousLevel = embeddingLevel; levels[i] = NoOverride(embeddingLevel); break; case B: flags |= DirPropFlag(B);
boolean testDirPropFlagAt(int flag, int index) { return ((DirPropFlag(dirProps[index]) & flag) != 0); }
((DirPropFlag(dirProps[limit]) & MASK_BN_EXPLICIT) != 0))) {} break; if ((DirPropFlag(dirProp) & MASK_R_AL) != 0) { break;
static void setTrailingWSStart(Bidi bidi) { byte[] dirProps = bidi.dirProps; byte[] levels = bidi.levels; int start = bidi.length; byte paraLevel = bidi.paraLevel; /* If the line is terminated by a block separator, all preceding WS etc... are already set to paragraph level. Setting trailingWSStart to pBidi->length will avoid changing the level of B chars from 0 to paraLevel in getLevels when orderParagraphsLTR==TRUE */ if (dirProps[start - 1] == Bidi.B) { bidi.trailingWSStart = start; /* currently == bidi.length */ return; } /* go backwards across all WS, BN, explicit codes */ while (start > 0 && (Bidi.DirPropFlag(dirProps[start - 1]) & Bidi.MASK_WS) != 0) { --start; } /* if the WS run can be merged with the previous run then do so here */ while (start > 0 && levels[start - 1] == paraLevel) { --start; } bidi.trailingWSStart=start; }
while (i > 0) { while (i > 0 && ((flag = DirPropFlag(dirProps[--i])) & MASK_WS) != 0) { if (orderParagraphsLTR && (flag & DirPropFlag(B)) != 0) { levels[i] = 0; } else { flag = DirPropFlag(dirProps[--i]); if ((flag & MASK_BN_EXPLICIT) != 0) { levels[i] = levels[i + 1]; } else if (orderParagraphsLTR && (flag & DirPropFlag(B)) != 0) { levels[i] = 0; break;
private void bracketProcessBoundary(BracketData bd, int lastCcPos, byte contextLevel, byte embeddingLevel) { IsoRun pLastIsoRun = bd.isoRuns[bd.isoRunLast]; if ((DirPropFlag(dirProps[lastCcPos]) & MASK_ISO) != 0) /* after an isolate */ return; if (NoOverride(embeddingLevel) > NoOverride(contextLevel)) /* not a PDF */ contextLevel = embeddingLevel; pLastIsoRun.limit = pLastIsoRun.start; pLastIsoRun.level = embeddingLevel; pLastIsoRun.lastStrong = pLastIsoRun.lastBase = pLastIsoRun.contextDir = (byte)(contextLevel & 1); pLastIsoRun.contextPos = lastCcPos; }
(MASK_R_AL & Bidi.DirPropFlag(dirProps[bidiRun.start])) == 0) { markFlag |= Bidi.RLM_AFTER; if ((MASK_R_AL & Bidi.DirPropFlag(dirProps[bidiRun.start])) == 0) { dest.append(RLM_CHAR); bidiRun.limit, options)); if ((MASK_R_AL & Bidi.DirPropFlag(dirProps[bidiRun.limit - 1])) == 0) { dest.append(RLM_CHAR);
newProp = (byte)(level & 1); pLastIsoRun.lastStrong = newProp; flag = (short)DirPropFlag(newProp); for (i = pLastIsoRun.start; i < idx; i++) bd.openings[i].flags |= flag; short flag = (short)DirPropFlag(DirFromStrong(newProp)); for (i = pLastIsoRun.start; i < pLastIsoRun.limit; i++) if (position > bd.openings[i].position)
for (k = limit - 1; k > start && (DirPropFlag(dirProps[k]) & MASK_BN_EXPLICIT) != 0; k--); dirProp = dirProps[k]; (DirPropFlag(dirProps[i]) & MASK_BN_EXPLICIT) != 0; i--); dirProp = dirProps[i];