Skip to content

Commit 59a3e2c

Browse files
committed
[lib] Added work around for backward shaping mode
1 parent 6c82b3b commit 59a3e2c

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

tehreer-android/src/main/java/com/mta/tehreer/internal/layout/ShapeResolver.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import android.text.style.ReplacementSpan;
2222

2323
import com.mta.tehreer.graphics.Typeface;
24+
import com.mta.tehreer.sfnt.SfntTag;
2425
import com.mta.tehreer.sfnt.ShapingEngine;
2526
import com.mta.tehreer.sfnt.ShapingResult;
2627
import com.mta.tehreer.sfnt.WritingDirection;
@@ -62,6 +63,16 @@ public static void fillRuns(String text, Spanned spanned, List<Object> defaultSp
6263
int scriptTag = Script.getOpenTypeTag(scriptRun.script);
6364
WritingDirection writingDirection = ShapingEngine.getScriptDirection(scriptTag);
6465

66+
boolean isOddLevel = ((bidiRun.embeddingLevel & 1) == 1);
67+
boolean isBackward = (isOddLevel && writingDirection == WritingDirection.LEFT_TO_RIGHT)
68+
| (!isOddLevel && writingDirection == WritingDirection.RIGHT_TO_LEFT);
69+
70+
// FIXME: Add support for backward mode and disable overriding.
71+
if (isBackward) {
72+
scriptTag = SfntTag.make(isOddLevel ? "arab" : "latn");
73+
writingDirection = (isOddLevel ? WritingDirection.RIGHT_TO_LEFT : WritingDirection.LEFT_TO_RIGHT);
74+
}
75+
6576
locator.reset(scriptRun.charStart, scriptRun.charEnd);
6677

6778
shapingEngine.setScriptTag(scriptTag);

0 commit comments

Comments
 (0)