當前位置: 首頁>>代碼示例>>Java>>正文


Java Bidi.getRunLevel方法代碼示例

本文整理匯總了Java中java.text.Bidi.getRunLevel方法的典型用法代碼示例。如果您正苦於以下問題:Java Bidi.getRunLevel方法的具體用法?Java Bidi.getRunLevel怎麽用?Java Bidi.getRunLevel使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在java.text.Bidi的用法示例。


在下文中一共展示了Bidi.getRunLevel方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Java代碼示例。

示例1: getLevels

import java.text.Bidi; //導入方法依賴的package包/類
/**
 * Return the level of each character into the levels array starting at start.
 * This is a convenience method for clients who prefer to use an explicit levels
 * array instead of iterating over the runs.
 *
 * @param levels the array to receive the character levels
 * @param start the starting offset into the the array
 * @throws IndexOutOfBoundsException if <code>start</code> is less than 0 or
 * <code>start + getLength()</code> is greater than <code>levels.length</code>.
 */
public static void getLevels(Bidi bidi, byte[] levels, int start) {
    int limit = start + bidi.getLength();

    if (start < 0 || limit > levels.length) {
        throw new IndexOutOfBoundsException("levels.length = " + levels.length +
            " start: " + start + " limit: " + limit);
    }

    int runCount = bidi.getRunCount();
    int p = start;
    for (int i = 0; i < runCount; ++i) {
        int rlimit = start + bidi.getRunLimit(i);
        byte rlevel = (byte)bidi.getRunLevel(i);

        while (p < rlimit) {
            levels[p++] = rlevel;
        }
    }
}
 
開發者ID:SunburstApps,項目名稱:OpenJSharp,代碼行數:30,代碼來源:BidiUtils.java

示例2: getLevels

import java.text.Bidi; //導入方法依賴的package包/類
/**
 * Return the level of each character into the levels array starting at start.
 * This is a convenience method for clients who prefer to use an explicit levels
 * array instead of iterating over the runs.
 *
 * @param levels the array to receive the character levels
 * @param start the starting offset into the array
 * @throws IndexOutOfBoundsException if {@code start} is less than 0 or
 * {@code start + getLength()} is greater than {@code levels.length}.
 */
public static void getLevels(Bidi bidi, byte[] levels, int start) {
    int limit = start + bidi.getLength();

    if (start < 0 || limit > levels.length) {
        throw new IndexOutOfBoundsException("levels.length = " + levels.length +
            " start: " + start + " limit: " + limit);
    }

    int runCount = bidi.getRunCount();
    int p = start;
    for (int i = 0; i < runCount; ++i) {
        int rlimit = start + bidi.getRunLimit(i);
        byte rlevel = (byte)bidi.getRunLevel(i);

        while (p < rlimit) {
            levels[p++] = rlevel;
        }
    }
}
 
開發者ID:AdoptOpenJDK,項目名稱:openjdk-jdk10,代碼行數:30,代碼來源:BidiUtils.java

示例3: assertRunArrayEquals

import java.text.Bidi; //導入方法依賴的package包/類
public static void assertRunArrayEquals(int[][] expected, Bidi bidi) {
	assertEquals("different length", expected.length, bidi.getRunCount());

	FORRUN: for (int i = 0; i < bidi.getRunCount(); i++) {
		int[] butWas = new int[] { bidi.getRunStart(i),
				bidi.getRunLimit(i), bidi.getRunLevel(i) };

		for (int j = 0; j < expected.length; j++) {
			if (expected[j][0] == butWas[0] && expected[j][1] == butWas[1]
					&& expected[j][2] == butWas[2]) {
				continue FORRUN;
			}
		}
		fail("expected [" + i + "] " + " start: " + butWas[0] + " limit: "
				+ butWas[1] + " level: " + butWas[2]);
	}
}
 
開發者ID:shannah,項目名稱:cn1,代碼行數:18,代碼來源:BidiTest.java

示例4: layoutBidi

import java.text.Bidi; //導入方法依賴的package包/類
private int layoutBidi(String str) {
	final char[] text = str.toCharArray();

	/* Avoid performing full bidirectional analysis if text has no "strong" right-to-left characters */
	if (!Bidi.requiresBidi(text, 0, text.length))
		return layoutFont(text, 0, text.length, Font.LAYOUT_LEFT_TO_RIGHT);

	final Bidi bidi = new Bidi(text, 0, null, 0, text.length, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);

	/* If text is entirely right-to-left, then just lay it out */
	if (bidi.isRightToLeft())
		return layoutFont(text, 0, text.length, Font.LAYOUT_RIGHT_TO_LEFT);

	/* Otherwise text has a mixture of LTR and RLT, and it requires full bidirectional analysis */
	final int runCount = bidi.getRunCount();
	final byte[] levels = new byte[runCount];
	final Integer[] ranges = new Integer[runCount];

	for (int i = 0; i < runCount; i++) {
		levels[i] = (byte) bidi.getRunLevel(i);
		ranges[i] = i;
	}
	Bidi.reorderVisually(levels, 0, ranges, 0, runCount);

	int width = 0;

	for (int i = 0; i < runCount; i++) {
		final int index = ranges[i];
		width += layoutFont(text, bidi.getRunStart(index), bidi.getRunLimit(index), (bidi.getRunLevel(index) & 1));
	}
	return width;
}
 
開發者ID:ImpactDevelopment,項目名稱:ClientAPI,代碼行數:33,代碼來源:FontCache.java

示例5: main

import java.text.Bidi; //導入方法依賴的package包/類
public static void main(String[] args) {
    boolean err = false;
    String string = "\u05D0\u05D1\u05D2";
    Bidi bidi = new Bidi(string, Bidi.DIRECTION_LEFT_TO_RIGHT);

    int result = bidi.getRunCount();
    if (result != 1) {
        System.err.println("Incorrect run count: " + result);
        err = true;
    }

    result = bidi.getRunStart(0);
    if (result != 0) {
        System.err.println("Incorrect run start: " + result);
        err = true;
    }

    result = bidi.getRunLimit(0);
    if (result != 3) {
        System.err.println("Incorrect run limit: " + result);
        err = true;
    }

    result = bidi.getRunLevel(0);
    if (result != 1) {
        System.err.println("Incorrect run level: " + result);
        err = true;
    }

    if (err) {
        throw new RuntimeException("Failed.");
    }
}
 
開發者ID:lambdalab-mirror,項目名稱:jdk8u-jdk,代碼行數:34,代碼來源:Bug8005277.java

示例6: testBidi

import java.text.Bidi; //導入方法依賴的package包/類
void testBidi(String string, int rtlstart, int rtllength) {
    Bidi bidi = new Bidi(string, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
    for (int i = 0; i < bidi.getRunCount(); ++i) {
        if ((bidi.getRunLevel(i) & 1) != 0) {
            if (bidi.getRunStart(i) != rtlstart ||
                bidi.getRunLimit(i) != rtlstart + rtllength) {
                throw new RuntimeException("first rtl run didn't match " + rtlstart + ", " + rtllength);
            }
            break;
        }
    }
}
 
開發者ID:lambdalab-mirror,項目名稱:jdk8u-jdk,代碼行數:13,代碼來源:BidiSurrogateTest.java

示例7: bidiParseParagraph

import java.text.Bidi; //導入方法依賴的package包/類
private void bidiParseParagraph(final List<Element> added, final Element par,
                                final Segment text) {
    final int parStart = par.getStartOffset();
    final int parEnd   = par.getEndOffset();
    final int parLen   = parEnd - parStart;

    try {
        content.getChars(parStart, parLen, text);
    } catch (final BadLocationException e) { }

    Bidi bidi = new Bidi(text.array, text.offset, null, 0, text.count,
                         getDefaultDirection(par));

    final int runCount = bidi.getRunCount();
    for (int i = 0; i < runCount; i++) {
        int level = bidi.getRunLevel(i);

        if (i == 0 && added.size() > 0) {
            Element prevBidi = added.get(added.size() - 1);
            if (getBidiLevel(prevBidi) == level) {
                added.remove(added.size() - 1);
                added.add(new BidiElement(prevBidi.getAttributes(),
                                          prevBidi.getStartOffset(),
                                          parStart + bidi.getRunLimit(i)));
                continue;
            }
        }

        added.add(
            new BidiElement(context.addAttribute(context.getEmptySet(),
                                                 StyleConstants.BidiLevel,
                                                 new Integer(level)),
                            parStart + bidi.getRunStart(i),
                            parStart + bidi.getRunLimit(i)));
    }

}
 
開發者ID:shannah,項目名稱:cn1,代碼行數:38,代碼來源:AbstractDocument.java

示例8: testEachMethod

import java.text.Bidi; //導入方法依賴的package包/類
private void testEachMethod(Bidi bidi,
                            String text,
                            String expectedLevels,
                            boolean expectedBaseIsLTR,
                            boolean expectedIsLTR,
                            boolean expectedIsRTL
                           ) {
    /* Test baseIsLeftToRight() */
    boolean actualBoolean = bidi.baseIsLeftToRight();
    checkResult("baseIsLeftToRight()", expectedBaseIsLTR, actualBoolean);

    /* Test getBaseLevel() */
    int expectedInt = (expectedBaseIsLTR) ? 0 : 1;
    int actualInt = bidi.getBaseLevel();
    checkResult("getBaseLevel()", expectedInt, actualInt);

    /* Test getLength() */
    expectedInt = text.length();
    actualInt = bidi.getLength();
    checkResult("getLength()", expectedInt, actualInt);

    /* Test getLevelAt() */
    sb.setLength(0);
    for (int i = 0; i < text.length(); i++) {
        sb.append(bidi.getLevelAt(i));
    }
    checkResult("getLevelAt()", expectedLevels, sb.toString());

    /* Test getRunCount() */
    expectedInt = getRunCount(expectedLevels);
    actualInt = bidi.getRunCount();
    checkResult("getRunCount()", expectedInt, actualInt);

    /* Test getRunLevel(), getRunLimit() and getRunStart() */
    if (expectedInt == actualInt) {
        int runCount = expectedInt;
        int[] expectedRunLevels = getRunLevels_int(runCount, expectedLevels);
        int[] expectedRunLimits = getRunLimits(runCount, expectedLevels);
        int[] expectedRunStarts = getRunStarts(runCount, expectedLevels);
        int[] actualRunLevels = new int[runCount];
        int[] actualRunLimits = new int[runCount];
        int[] actualRunStarts = new int[runCount];

        for (int k = 0; k < runCount; k++) {
            actualRunLevels[k] = bidi.getRunLevel(k);
            actualRunLimits[k] = bidi.getRunLimit(k);
            actualRunStarts[k] = bidi.getRunStart(k);
        }

        checkResult("getRunLevel()", expectedRunLevels, actualRunLevels);
        checkResult("getRunStart()", expectedRunStarts, actualRunStarts);
        checkResult("getRunLimit()", expectedRunLimits, actualRunLimits);
    }

    /* Test isLeftToRight() */
    boolean expectedBoolean = expectedIsLTR;
    actualBoolean = bidi.isLeftToRight();
    checkResult("isLeftToRight()", expectedBoolean, actualBoolean);

    /* Test isMixed() */
    expectedBoolean = !(expectedIsLTR || expectedIsRTL);
    actualBoolean = bidi.isMixed();
    checkResult("isMixed()", expectedBoolean, actualBoolean);

    /* Test isRightToLeft() */
    expectedBoolean = expectedIsRTL;
    actualBoolean = bidi.isRightToLeft();
    checkResult("isRightToLeft()", expectedBoolean, actualBoolean);
}
 
開發者ID:lambdalab-mirror,項目名稱:jdk8u-jdk,代碼行數:70,代碼來源:BidiConformance.java

示例9: bidiReorder

import java.text.Bidi; //導入方法依賴的package包/類
/**
 * Apply Unicode Bidirectional Algorithm to string and return a new possibly
 * reordered string for visual rendering.
 */
private String bidiReorder(String par1Str)
{
    if (par1Str != null && Bidi.requiresBidi(par1Str.toCharArray(), 0, par1Str.length()))
    {
        Bidi bidi = new Bidi(par1Str, -2);
        byte[] abyte = new byte[bidi.getRunCount()];
        String[] astring = new String[abyte.length];
        int i;

        for (int j = 0; j < abyte.length; ++j)
        {
            int k = bidi.getRunStart(j);
            i = bidi.getRunLimit(j);
            int l = bidi.getRunLevel(j);
            String s1 = par1Str.substring(k, i);
            abyte[j] = (byte) l;
            astring[j] = s1;
        }

        String[] astring1 = astring.clone();
        Bidi.reorderVisually(abyte, 0, astring, 0, abyte.length);
        StringBuilder stringbuilder = new StringBuilder();
        i = 0;

        while (i < astring.length)
        {
            byte b0 = abyte[i];
            int i1 = 0;

            while (true)
            {
                if (i1 < astring1.length)
                {
                    if (!astring1[i1].equals(astring[i]))
                    {
                        ++i1;
                        continue;
                    }

                    b0 = abyte[i1];
                }

                if ((b0 & 1) == 0)
                {
                    stringbuilder.append(astring[i]);
                }
                else
                {
                    for (i1 = astring[i].length() - 1; i1 >= 0; --i1)
                    {
                        char c0 = astring[i].charAt(i1);

                        if (c0 == 40)
                        {
                            c0 = 41;
                        }
                        else if (c0 == 41)
                        {
                            c0 = 40;
                        }

                        stringbuilder.append(c0);
                    }
                }

                ++i;
                break;
            }
        }

        return stringbuilder.toString();
    }
    else
    {
        return par1Str;
    }
}
 
開發者ID:4Space,項目名稱:4Space-5,代碼行數:82,代碼來源:SmallFontRenderer.java

示例10: layoutBidiString

import java.text.Bidi; //導入方法依賴的package包/類
/**
     * Split a string into contiguous LTR or RTL sections by applying the Unicode Bidirectional Algorithm. Calls layoutString()
     * for each contiguous run to perform further analysis.
     *
     * @param glyphList will hold all new Glyph objects allocated by layoutFont()
     * @param text      the string to lay out
     * @param start     the offset into text at which to start the layout
     * @param limit     the (offset + length) at which to stop performing the layout
     * @return the total advance (horizontal distance) of this string
     */
    private int layoutBidiString(List<Glyph> glyphList, char text[], int start, int limit, ColorCode colors[])
    {
        int advance = 0;

        /* Avoid performing full bidirectional analysis if text has no "strong" right-to-left characters */
        if (Bidi.requiresBidi(text, start, limit))
        {
            /* Note that while requiresBidi() uses start/limit the Bidi constructor uses start/length */
            Bidi bidi = new Bidi(text, start, null, 0, limit - start, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);

            /* If text is entirely right-to-left, then insert an EntryText node for the entire string */
            if (bidi.isRightToLeft())
            {
                return layoutStyle(glyphList, text, start, limit, Font.LAYOUT_RIGHT_TO_LEFT, advance, colors);
            }

            /* Otherwise text has a mixture of LTR and RLT, and it requires full bidirectional analysis */
            else
            {
                int runCount = bidi.getRunCount();
                byte levels[] = new byte[runCount];
                Integer ranges[] = new Integer[runCount];

                /* Reorder contiguous runs of text into their display order from left to right */
                for (int index = 0; index < runCount; index++)
                {
                    levels[index] = (byte) bidi.getRunLevel(index);
                    ranges[index] = new Integer(index);
                }
                Bidi.reorderVisually(levels, 0, ranges, 0, runCount);

                /*
* Every GlyphVector must be created on a contiguous run of left-to-right or right-to-left text. Keep track of
* the horizontal advance between each run of text, so that the glyphs in each run can be assigned a position relative
* to the start of the entire string and not just relative to that run.
*/
                for (int visualIndex = 0; visualIndex < runCount; visualIndex++)
                {
                    int logicalIndex = ranges[visualIndex];

                    /* An odd numbered level indicates right-to-left ordering */
                    int layoutFlag = (bidi.getRunLevel(logicalIndex) & 1) == 1 ? Font.LAYOUT_RIGHT_TO_LEFT : Font.LAYOUT_LEFT_TO_RIGHT;
                    advance = layoutStyle(glyphList, text, start + bidi.getRunStart(logicalIndex), start + bidi.getRunLimit(logicalIndex),
                                          layoutFlag, advance, colors);
                }
            }

            return advance;
        }

        /* If text is entirely left-to-right, then insert an EntryText node for the entire string */
        else
        {
            return layoutStyle(glyphList, text, start, limit, Font.LAYOUT_LEFT_TO_RIGHT, advance, colors);
        }
    }
 
開發者ID:cubex2,項目名稱:BetterFonts,代碼行數:67,代碼來源:StringCache.java

示例11: bidiReorder

import java.text.Bidi; //導入方法依賴的package包/類
/**
 * Apply Unicode Bidirectional Algorithm to string and return a new possibly
 * reordered string for visual rendering.
 */
private String bidiReorder(String par1Str)
{
    if (par1Str != null && Bidi.requiresBidi(par1Str.toCharArray(), 0, par1Str.length())) {
        Bidi bidi = new Bidi(par1Str, -2);
        byte[] abyte = new byte[bidi.getRunCount()];
        String[] astring = new String[abyte.length];
        int i;

        for (int j = 0; j < abyte.length; ++j) {
            int k = bidi.getRunStart(j);
            i = bidi.getRunLimit(j);
            int l = bidi.getRunLevel(j);
            String s1 = par1Str.substring(k, i);
            abyte[j] = (byte) l;
            astring[j] = s1;
        }

        String[] astring1 = astring.clone();
        Bidi.reorderVisually(abyte, 0, astring, 0, abyte.length);
        StringBuilder stringbuilder = new StringBuilder();
        i = 0;

        while (i < astring.length) {
            byte b0 = abyte[i];
            int i1 = 0;

            while (true) {
                if (i1 < astring1.length) {
                    if (!astring1[i1].equals(astring[i])) {
                        ++i1;
                        continue;
                    }

                    b0 = abyte[i1];
                }

                if ((b0 & 1) == 0) {
                    stringbuilder.append(astring[i]);
                }
                else {
                    for (i1 = astring[i].length() - 1; i1 >= 0; --i1) {
                        char c0 = astring[i].charAt(i1);

                        if (c0 == 40) {
                            c0 = 41;
                        }
                        else if (c0 == 41) {
                            c0 = 40;
                        }

                        stringbuilder.append(c0);
                    }
                }

                ++i;
                break;
            }
        }

        return stringbuilder.toString();
    }
    else {
        return par1Str;
    }
}
 
開發者ID:BubbleTrouble14,項目名稱:ARKCraft,代碼行數:70,代碼來源:SmallFontRenderer.java

示例12: visualToLogical

import java.text.Bidi; //導入方法依賴的package包/類
/**
 * Handles the LTR and RTL direction of the given words. The whole implementation stands and falls with the given
 * word. If the word is a full line, the results will be the best. If the word contains of single words or
 * characters, the order of the characters in a word or words in a line may wrong, due to RTL and LTR marks and
 * characters!
 * 
 * Based on http://www.nesterovsky-bros.com/weblog/2013/07/28/VisualToLogicalConversionInJava.aspx
 * 
 * @param text The word that shall be processed
 * @return new word with the correct direction of the containing characters
 */
public static String visualToLogical(String text)
{
    if (!CharUtils.isBlank(text))
    {
        Bidi bidi = new Bidi(text, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
        if (!bidi.isLeftToRight())
        {
            // collect individual bidi information
            int runCount = bidi.getRunCount();
            byte[] levels = new byte[runCount];
            Integer[] runs = new Integer[runCount];

            for (int i = 0; i < runCount; i++)
            {
                levels[i] = (byte) bidi.getRunLevel(i);
                runs[i] = i;
            }

            // reorder individual parts based on their levels
            Bidi.reorderVisually(levels, 0, runs, 0, runCount);

            // collect the parts based on the direction within the run
            StringBuilder result = new StringBuilder();

            for (int i = 0; i < runCount; i++)
            {
                int index = runs[i];
                int start = bidi.getRunStart(index);
                int end = bidi.getRunLimit(index);
                int level = levels[index];

                if ((level & 1) != 0)
                {
                    while (--end >= start)
                    {
                        char character = text.charAt(end);
                        if (Character.isMirrored(text.codePointAt(end))
                                && MIRRORING_CHAR_MAP.containsKey(character))
                        {
                            result.append(MIRRORING_CHAR_MAP.get(character));
                        }
                        else
                        {
                            result.append(character);
                        }
                    }
                }
                else
                {
                    result.append(text, start, end);
                }
            }

            return result.toString();
        }
    }
    return text;
}
 
開發者ID:torakiki,項目名稱:sambox,代碼行數:70,代碼來源:BidiUtils.java

示例13: bidiReorder

import java.text.Bidi; //導入方法依賴的package包/類
/**
 * Apply Unicode Bidirectional Algorithm to string and return a new possibly reordered string for visual rendering.
 */
private String bidiReorder(String par1Str)
{
    if (par1Str != null && Bidi.requiresBidi(par1Str.toCharArray(), 0, par1Str.length()))
    {
        Bidi bidi = new Bidi(par1Str, -2);
        byte[] abyte = new byte[bidi.getRunCount()];
        String[] astring = new String[abyte.length];
        int i;

        for (int j = 0; j < abyte.length; ++j)
        {
            int k = bidi.getRunStart(j);
            i = bidi.getRunLimit(j);
            int l = bidi.getRunLevel(j);
            String s1 = par1Str.substring(k, i);
            abyte[j] = (byte) l;
            astring[j] = s1;
        }

        String[] astring1 = astring.clone();
        Bidi.reorderVisually(abyte, 0, astring, 0, abyte.length);
        StringBuilder stringbuilder = new StringBuilder();
        i = 0;

        while (i < astring.length)
        {
            byte b0 = abyte[i];
            int i1 = 0;

            while (true)
            {
                if (i1 < astring1.length)
                {
                    if (!astring1[i1].equals(astring[i]))
                    {
                        ++i1;
                        continue;
                    }

                    b0 = abyte[i1];
                }

                if ((b0 & 1) == 0)
                {
                    stringbuilder.append(astring[i]);
                }
                else
                {
                    for (i1 = astring[i].length() - 1; i1 >= 0; --i1)
                    {
                        char c0 = astring[i].charAt(i1);

                        if (c0 == 40)
                        {
                            c0 = 41;
                        }
                        else if (c0 == 41)
                        {
                            c0 = 40;
                        }

                        stringbuilder.append(c0);
                    }
                }

                ++i;
                break;
            }
        }

        return stringbuilder.toString();
    }
    else
    {
        return par1Str;
    }
}
 
開發者ID:Archiving,項目名稱:ARKCraft-Code,代碼行數:81,代碼來源:SmallFontRenderer.java

示例14: layoutBidiString

import java.text.Bidi; //導入方法依賴的package包/類
/**
 * Split a string into contiguous LTR or RTL sections by applying the Unicode Bidirectional Algorithm. Calls layoutString()
 * for each contiguous run to perform further analysis.
 *
 * @param glyphList will hold all new Glyph objects allocated by layoutFont()
 * @param text      the string to lay out
 * @param start     the offset into text at which to start the layout
 * @param limit     the (offset + length) at which to stop performing the layout
 * @return the total advance (horizontal distance) of this string
 */
private int layoutBidiString(List<Glyph> glyphList, char text[], int start, int limit, ColorCode colors[]) {
    int advance = 0;

    /* Avoid performing full bidirectional analysis if text has no "strong" right-to-left characters */
    if (Bidi.requiresBidi(text, start, limit)) {
        /* Note that while requiresBidi() uses start/limit the Bidi constructor uses start/length */
        Bidi bidi = new Bidi(text, start, null, 0, limit - start, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);

        /* If text is entirely right-to-left, then insert an EntryText node for the entire string */
        if (bidi.isRightToLeft()) {
            return layoutStyle(glyphList, text, start, limit, Font.LAYOUT_RIGHT_TO_LEFT, advance, colors);
        }

        /* Otherwise text has a mixture of LTR and RLT, and it requires full bidirectional analysis */
        else {
            int runCount = bidi.getRunCount();
            byte levels[] = new byte[runCount];
            Integer ranges[] = new Integer[runCount];

            /* Reorder contiguous runs of text into their display order from left to right */
            for (int index = 0; index < runCount; index++) {
                levels[index] = (byte) bidi.getRunLevel(index);
                ranges[index] = new Integer(index);
            }
            Bidi.reorderVisually(levels, 0, ranges, 0, runCount);

            /*
             * Every GlyphVector must be created on a contiguous run of left-to-right or right-to-left text. Keep track of
             * the horizontal advance between each run of text, so that the glyphs in each run can be assigned a position relative
             * to the start of the entire string and not just relative to that run.
             */
            for (int visualIndex = 0; visualIndex < runCount; visualIndex++) {
                int logicalIndex = ranges[visualIndex];

                /* An odd numbered level indicates right-to-left ordering */
                int layoutFlag = (bidi.getRunLevel(logicalIndex) & 1) == 1 ? Font.LAYOUT_RIGHT_TO_LEFT : Font.LAYOUT_LEFT_TO_RIGHT;
                advance = layoutStyle(glyphList, text, start + bidi.getRunStart(logicalIndex), start + bidi.getRunLimit(logicalIndex),
                        layoutFlag, advance, colors);
            }
        }

        return advance;
    }

    /* If text is entirely left-to-right, then insert an EntryText node for the entire string */
    else {
        return layoutStyle(glyphList, text, start, limit, Font.LAYOUT_LEFT_TO_RIGHT, advance, colors);
    }
}
 
開發者ID:chedim,項目名稱:minedriod,代碼行數:60,代碼來源:StringCache.java

示例15: bidiReorder

import java.text.Bidi; //導入方法依賴的package包/類
/**
 * Apply Unicode Bidirectional Algorithm to string and return a new possibly reordered string for visual rendering.
 */
private String bidiReorder(String par1Str)
{
    if (par1Str != null && Bidi.requiresBidi(par1Str.toCharArray(), 0, par1Str.length()))
    {
        Bidi bidi = new Bidi(par1Str, -2);
        byte[] abyte = new byte[bidi.getRunCount()];
        String[] astring = new String[abyte.length];
        int i;

        for (int j = 0; j < abyte.length; ++j)
        {
            int k = bidi.getRunStart(j);
            i = bidi.getRunLimit(j);
            int l = bidi.getRunLevel(j);
            String s1 = par1Str.substring(k, i);
            abyte[j] = (byte)l;
            astring[j] = s1;
        }

        String[] astring1 = (String[])astring.clone();
        Bidi.reorderVisually(abyte, 0, astring, 0, abyte.length);
        StringBuilder stringbuilder = new StringBuilder();
        i = 0;

        while (i < astring.length)
        {
            byte b0 = abyte[i];
            int i1 = 0;

            while (true)
            {
                if (i1 < astring1.length)
                {
                    if (!astring1[i1].equals(astring[i]))
                    {
                        ++i1;
                        continue;
                    }

                    b0 = abyte[i1];
                }

                if ((b0 & 1) == 0)
                {
                    stringbuilder.append(astring[i]);
                }
                else
                {
                    for (i1 = astring[i].length() - 1; i1 >= 0; --i1)
                    {
                        char c0 = astring[i].charAt(i1);

                        if (c0 == 40)
                        {
                            c0 = 41;
                        }
                        else if (c0 == 41)
                        {
                            c0 = 40;
                        }

                        stringbuilder.append(c0);
                    }
                }

                ++i;
                break;
            }
        }

        return stringbuilder.toString();
    }
    else
    {
        return par1Str;
    }
}
 
開發者ID:HATB0T,項目名稱:RuneCraftery,代碼行數:81,代碼來源:FontRenderer.java


注:本文中的java.text.Bidi.getRunLevel方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。