diff --git a/org.eclipse.draw2d/src/org/eclipse/draw2d/text/BidiProcessor.java b/org.eclipse.draw2d/src/org/eclipse/draw2d/text/BidiProcessor.java index 801bc6f..a6b21ca 100644 --- a/org.eclipse.draw2d/src/org/eclipse/draw2d/text/BidiProcessor.java +++ b/org.eclipse.draw2d/src/org/eclipse/draw2d/text/BidiProcessor.java @@ -14,6 +14,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Locale; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.TextLayout; @@ -117,6 +118,7 @@ BidiEntry prevEntry = null, entry = null; BidiInfo prevInfo = null, info = null; int end = 2, start = 0; + for (int i = 0; i < list.size(); i++) { entry = (BidiEntry) list.get(i); info = new BidiInfo(); @@ -199,7 +201,6 @@ return; char[] chars = new char[bidiText.length()]; bidiText.getChars(0, bidiText.length(), chars, 0); - if (orientation != SWT.RIGHT_TO_LEFT && !Bidi.requiresBidi(chars, 0, chars.length - 1)) return; @@ -210,8 +211,20 @@ layout.setOrientation(orientation); layout.setText(bidiText.toString()); int j = 0, offset, prevLevel = -1; + for (offset = 0; offset < chars.length; offset++) { int newLevel = layout.getLevel(offset); + // Added to fix bug Bug 274567 + if (Locale.getDefault().toString().toLowerCase() + .contains("ar_") + && Character.isDigit(chars[offset]) + && newLevel == Bidi.MIXED + && (((orientation == SWT.LEFT_TO_RIGHT)) || (orientation == SWT.RIGHT_TO_LEFT && (Character + .getDirectionality(chars[offset]) != Character.DIRECTIONALITY_LEFT_TO_RIGHT && (prevLevel == Bidi.RTL || prevLevel == 6))))) { + newLevel = prevLevel == Bidi.RTL ? Character.DIRECTIONALITY_ARABIC_NUMBER + : prevLevel; + } + if (newLevel != prevLevel) { if (j + 3 > levels.length) { int temp[] = levels;