com.ibm.icu.text.BidiRun Maven / Gradle / Ivy
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
* Copyright (C) 2001-2016, International Business Machines
* Corporation and others. All Rights Reserved.
*******************************************************************************
*/
/* Written by Simon Montagu, Matitiahu Allouche
* (ported from C code written by Markus W. Scherer)
*/
package com.ibm.icu.text;
/**
* A BidiRun represents a sequence of characters at the same embedding level.
* The Bidi algorithm decomposes a piece of text into sequences of characters
* at the same embedding level, each such sequence is called a "run".
*
* A BidiRun represents such a run by storing its essential properties,
* but does not duplicate the characters which form the run.
*
*
The "limit" of the run is the position just after the
* last character, i.e., one more than that position.
*
*
This class has no public constructor, and its members cannot be
* modified by users.
*
* @see com.ibm.icu.text.Bidi
* @stable ICU 3.8
*/
public class BidiRun {
int start; /* first logical position of the run */
int limit; /* last visual position of the run +1 */
int insertRemove; /* if >0, flags for inserting LRM/RLM before/after run,
if <0, count of bidi controls within run */
byte level;
/*
* Default constructor
*
* Note that members start and limit of a run instance have different
* meanings depending whether the run is part of the runs array of a Bidi
* object, or if it is a reference returned by getVisualRun() or
* getLogicalRun().
* For a member of the runs array of a Bidi object,
* - start is the first logical position of the run in the source text.
* - limit is one after the last visual position of the run.
* For a reference returned by getLogicalRun() or getVisualRun(),
* - start is the first logical position of the run in the source text.
* - limit is one after the last logical position of the run.
*/
BidiRun()
{
this(0, 0, (byte)0);
}
/*
* Constructor
*/
BidiRun(int start, int limit, byte embeddingLevel)
{
this.start = start;
this.limit = limit;
this.level = embeddingLevel;
}
/*
* Copy the content of a BidiRun instance
*/
void copyFrom(BidiRun run)
{
this.start = run.start;
this.limit = run.limit;
this.level = run.level;
this.insertRemove = run.insertRemove;
}
/**
* Get the first logical position of the run in the source text
* @stable ICU 3.8
*/
public int getStart()
{
return start;
}
/**
* Get position of one character after the end of the run in the source text
* @stable ICU 3.8
*/
public int getLimit()
{
return limit;
}
/**
* Get length of run
* @stable ICU 3.8
*/
public int getLength()
{
return limit - start;
}
/**
* Get level of run
* @stable ICU 3.8
*/
public byte getEmbeddingLevel()
{
return level;
}
/**
* Check if run level is odd
* @return true if the embedding level of this run is odd, i.e. it is a
* right-to-left run.
* @stable ICU 3.8
*/
public boolean isOddRun()
{
return (level & 1) == 1;
}
/**
* Check if run level is even
* @return true if the embedding level of this run is even, i.e. it is a
* left-to-right run.
* @stable ICU 3.8
*/
public boolean isEvenRun()
{
return (level & 1) == 0;
}
/**
* Get direction of run
* @stable ICU 3.8
*/
public byte getDirection()
{
return (byte)(level & 1);
}
/**
* String to display run
* @stable ICU 3.8
*/
@Override
public String toString()
{
return "BidiRun " + start + " - " + limit + " @ " + level;
}
}