bidirectional text - visual to logical

975 views Asked by At

I'm drawing texts on the screen letter by letter.

In English it is very simple, because the text is LTR so the letters are saved in the String in the same order they're shown.

When drawing RTL text than I need to switch the direction of the printing. but when there are letters and numbers and English and some RTL language.. than the mess starts.

For Ex.

ex.1: שלום לכם

ש- is the first letter in the string - but as we can see that it shown the last

ex.2: שלום to all ש- is the first letter in the string- but as we can see that it is shown in the middle, before the English starts.

It is getting more complicated when numbers and math signs are getting into the picture, and special characters like '(', ')' that needed to be flipped...

Found many Bidi algorithm online that changes the logical order of the letters in the string to visual one. So when i run from left to right on the converted string i'm sure that the string will print properly.

BUT, They are never perfect. There are cases that they are not working properly. None of them considering the direction of the text as well (means when we press the right Ctrl+Shift on the keyboard than the visualization is changed again)

My questions are

  1. does anybody know some bulletproof Bidi algorithm i can use to change the string from what it saved in the memory to visual order?
  2. Is there a simpler way to solve my problem ? maybe somehow get the browser algorithm for it..
1

There are 1 answers

0
Raziza O On BEST ANSWER

After searching for long time,

I've found that DOJO (and luckily it is the tool kit that i'm using), has has a BIDI engine for drawing it's own UI controls, that gets few layout parameters to handle some cases of RTL, LRT, and contextual directions as well.

If this is helping someone - http://bill.dojotoolkit.org/api/1.9/dojox/string/BidiEngine

Found another link that might help to a none DOJO developers -https://github.com/ibm-js/dbidi, but I have not check it yet