12ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller/* GENERATED SOURCE. DO NOT MODIFY. */
2f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// © 2016 and later: Unicode, Inc. and others.
3f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License
42ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller/*
52ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller*******************************************************************************
6bfab1e7fec36dff93fb980c546ad64a565faf9fcPaul Duffin*   Copyright (C) 2001-2016, International Business Machines
72ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller*   Corporation and others.  All Rights Reserved.
82ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller*******************************************************************************
92ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller*/
102ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller/* Written by Simon Montagu, Matitiahu Allouche
112ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * (ported from C code written by Markus W. Scherer)
122ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */
132ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
142ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerpackage android.icu.text;
152ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
162ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller/**
172ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * A BidiRun represents a sequence of characters at the same embedding level.
182ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * The Bidi algorithm decomposes a piece of text into sequences of characters
19bfab1e7fec36dff93fb980c546ad64a565faf9fcPaul Duffin * at the same embedding level, each such sequence is called a "run".
202ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller *
212ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p>A BidiRun represents such a run by storing its essential properties,
222ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * but does not duplicate the characters which form the run.
232ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller *
242ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p>The &quot;limit&quot; of the run is the position just after the
252ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * last character, i.e., one more than that position.
262ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller *
272ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p>This class has no public constructor, and its members cannot be
282ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * modified by users.
292ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller *
302ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @see android.icu.text.Bidi
31836e6b40a94ec3fb7545a76cb072960442b7eee9Neil Fuller * @hide Only a subset of ICU is exposed in Android
322ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */
332ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerpublic class BidiRun {
342ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
352ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    int start;              /* first logical position of the run */
362ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    int limit;              /* last visual position of the run +1 */
372ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    int insertRemove;       /* if >0, flags for inserting LRM/RLM before/after run,
382ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller                               if <0, count of bidi controls within run            */
392ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    byte level;
402ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
412ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    /*
422ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     * Default constructor
432ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     *
442ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     * Note that members start and limit of a run instance have different
452ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     * meanings depending whether the run is part of the runs array of a Bidi
462ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     * object, or if it is a reference returned by getVisualRun() or
472ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     * getLogicalRun().
482ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     * For a member of the runs array of a Bidi object,
492ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     *   - start is the first logical position of the run in the source text.
502ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     *   - limit is one after the last visual position of the run.
512ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     * For a reference returned by getLogicalRun() or getVisualRun(),
522ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     *   - start is the first logical position of the run in the source text.
532ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     *   - limit is one after the last logical position of the run.
542ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     */
552ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    BidiRun()
562ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    {
572ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        this(0, 0, (byte)0);
582ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    }
592ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
602ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    /*
612ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     * Constructor
622ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     */
632ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    BidiRun(int start, int limit, byte embeddingLevel)
642ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    {
652ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        this.start = start;
662ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        this.limit = limit;
672ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        this.level = embeddingLevel;
682ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    }
692ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
702ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    /*
712ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     * Copy the content of a BidiRun instance
722ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     */
732ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    void copyFrom(BidiRun run)
742ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    {
752ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        this.start = run.start;
762ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        this.limit = run.limit;
772ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        this.level = run.level;
782ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        this.insertRemove = run.insertRemove;
792ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    }
802ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
812ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    /**
822ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     * Get the first logical position of the run in the source text
832ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     */
842ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    public int getStart()
852ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    {
862ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        return start;
872ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    }
882ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
892ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    /**
902ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     * Get position of one character after the end of the run in the source text
912ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     */
922ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    public int getLimit()
932ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    {
942ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        return limit;
952ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    }
962ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
972ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    /**
982ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     * Get length of run
992ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     */
1002ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    public int getLength()
1012ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    {
1022ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        return limit - start;
1032ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    }
1042ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
1052ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    /**
1062ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     * Get level of run
1072ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     */
1082ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    public byte getEmbeddingLevel()
1092ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    {
1102ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        return level;
1112ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    }
1122ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
1132ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    /**
1142ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     * Check if run level is odd
1152ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     * @return true if the embedding level of this run is odd, i.e. it is a
1162ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     *  right-to-left run.
1172ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     */
1182ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    public boolean isOddRun()
1192ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    {
1202ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        return (level & 1) == 1;
1212ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    }
1222ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
1232ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    /**
1242ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     * Check if run level is even
1252ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     * @return true if the embedding level of this run is even, i.e. it is a
1262ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     *  left-to-right run.
1272ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     */
1282ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    public boolean isEvenRun()
1292ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    {
1302ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        return (level & 1) == 0;
1312ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    }
1322ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
1332ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    /**
1342ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     * Get direction of run
1352ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     */
1362ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    public byte getDirection()
1372ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    {
1382ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        return (byte)(level & 1);
1392ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    }
1402ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller
1412ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    /**
1422ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     * String to display run
1432ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller     */
144f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Override
1452ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    public String toString()
1462ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    {
1472ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller        return "BidiRun " + start + " - " + limit + " @ " + level;
1482ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller    }
1492ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller}
150