Lines Matching full:levels
37 * This means that there is a UBiDi object with a levels
40 * Only if the length of the text is zero, then levels==dirProps==nullptr.
53 * Here, the levels array is scanned as soon as necessary, and a vector of
62 * In a further attempt to save memory, the levels array is never changed
67 * which is not reflected in the levels array.
68 * This allows a line UBiDi object to use the same levels array as
72 * paragraph's levels and dirProps arrays are reused by way of setting
74 * change the now shared levels for (L1).
82 * the paragraph's levels array that we just point into.
96 UBiDiLevel *levels=pBiDi->levels; in setTrailingWSStart() local
116 while(start>0 && levels[start-1]==paraLevel) { in setTrailingWSStart()
171 pLineBiDi->levels=pParaBiDi->levels+start; in ubidi_setLine()
179 * The parent's levels are all either in ubidi_setLine()
191 const UBiDiLevel *levels=pLineBiDi->levels; in ubidi_setLine() local
200 /* all levels are at paraLevel */ in ubidi_setLine()
204 level=(UBiDiLevel)(levels[0]&1); in ubidi_setLine()
208 /* the trailing WS is at paraLevel, which differs from levels[0] */ in ubidi_setLine()
211 … /* see if levels[1..trailingWSStart-1] have the same direction as levels[0] and paraLevel */ in ubidi_setLine()
218 } else if((levels[i]&1)!=level) { in ubidi_setLine()
232 /* all levels are implicitly at paraLevel (important for ubidi_getLevels()) */ in ubidi_setLine()
239 /* all levels are implicitly at paraLevel (important for ubidi_getLevels()) */ in ubidi_setLine()
258 return pBiDi->levels[charIndex]; in ubidi_getLevelAt()
273 /* the current levels array reflects the WS run */ in ubidi_getLevels()
274 return pBiDi->levels; in ubidi_getLevels()
278 * After the previous if(), we know that the levels array in ubidi_getLevels()
280 * reflect itself all the levels. in ubidi_getLevels()
282 * we need to create a new levels array. in ubidi_getLevels()
285 UBiDiLevel *levels=pBiDi->levelsMemory; in ubidi_getLevels() local
287 if(start>0 && levels!=pBiDi->levels) { in ubidi_getLevels()
288 uprv_memcpy(levels, pBiDi->levels, start); in ubidi_getLevels()
292 uprv_memset(levels+start, pBiDi->paraLevel, length-start); in ubidi_getLevels()
294 /* this new levels array is set for the line and reflects the WS run */ in ubidi_getLevels()
296 return pBiDi->levels=levels; in ubidi_getLevels()
318 /* this is done based on runs rather than on levels since levels have in ubidi_getLogicalRun()
344 *pLevel=pBiDi->levels[logicalPosition]; in ubidi_getLogicalRun()
426 * reflected in levels[] if this is not a paragraph object.
439 UBiDiLevel *levels; in reorderLine() local
455 levels=pBiDi->levels; in reorderLine()
470 while(firstRun<runCount && levels[runs[firstRun].logicalStart]<maxLevel) { in reorderLine()
478 … for(limitRun=firstRun; ++limitRun<runCount && levels[runs[limitRun].logicalStart]>=maxLevel;) {} in reorderLine()
537 * Compute the runs array from the levels array.
564 UBiDiLevel *levels=pBiDi->levels; in ubidi_getRuns() local
573 * modify the levels array which a line UBiDi object shares in ubidi_getRuns()
576 * levels[]!=paraLevel but we have to treat it like it were so. in ubidi_getRuns()
583 if(levels[i]!=level) { in ubidi_getRuns()
585 level=levels[i]; in ubidi_getRuns()
595 getSingleRun(pBiDi, levels[0]); in ubidi_getRuns()
627 level=levels[i]; in ubidi_getRuns()
636 while(++i<limit && levels[i]==level) {} in ubidi_getRuns()
666 ADD_ODD_BIT_FROM_LEVEL(runs[i].logicalStart, levels[runs[i].logicalStart]); in ubidi_getRuns()
710 prepareReorder(const UBiDiLevel *levels, int32_t length, in prepareReorder() argument
716 if(levels==nullptr || length<=0) { in prepareReorder()
724 level=levels[--start]; in prepareReorder()
747 /* reorder a line based on a levels array (L2) ------------------------------ */
750 ubidi_reorderLogical(const UBiDiLevel *levels, int32_t length, int32_t *indexMap) { in ubidi_reorderLogical() argument
754 if(indexMap==nullptr || !prepareReorder(levels, length, indexMap, &minLevel, &maxLevel)) { in ubidi_reorderLogical()
770 /* loop for all sequences of levels to reorder at the current maxLevel */ in ubidi_reorderLogical()
772 /* look for a sequence of levels that are all at >=maxLevel */ in ubidi_reorderLogical()
774 while(start<length && levels[start]<maxLevel) { in ubidi_reorderLogical()
782 for(limit=start; ++limit<length && levels[limit]>=maxLevel;) {} in ubidi_reorderLogical()
813 ubidi_reorderVisual(const UBiDiLevel *levels, int32_t length, int32_t *indexMap) { in ubidi_reorderVisual() argument
817 if(indexMap==nullptr || !prepareReorder(levels, length, indexMap, &minLevel, &maxLevel)) { in ubidi_reorderVisual()
833 /* loop for all sequences of levels to reorder at the current maxLevel */ in ubidi_reorderVisual()
835 /* look for a sequence of levels that are all at >=maxLevel */ in ubidi_reorderVisual()
837 while(start<length && levels[start]<maxLevel) { in ubidi_reorderVisual()
845 for(limit=start; ++limit<length && levels[limit]>=maxLevel;) {} in ubidi_reorderVisual()
849 * We don't need to swap the levels for the purpose of this in ubidi_reorderVisual()
850 * algorithm: the sequence of levels that we look at does not in ubidi_reorderVisual()