双向文本 - 视觉到逻辑

bidirectional text - visual to logical

我正在屏幕上一个字母一个字母地绘制文本。

在英语中它非常简单,因为文本是 LTR,所以字母按照它们显示的相同顺序保存在字符串中。

当绘制 RTL 文本时,我需要切换打印方向。但是当有字母和数字以及英语和一些 RTL 语言时.. 混乱开始了。

例如

ex.1: שלום לכם

ש- 是字符串中的第一个字母 - 但我们可以看到它显示了最后一个

ex.2: 给所有人 ש- 是字符串中的第一个字母- 但我们可以看到它显示在中间,在英文开始之前。

当数字和数学符号进入画面时,情况会变得更加复杂,并且需要翻转特殊字符,如“(”、“)”...

网上找了很多比迪算法,把字符串中字母的逻辑顺序改成视觉顺序。因此,当我 运行 从左到右处理转换后的字符串时,我确定该字符串将正确打印。

但是, 他们从来都不是完美的。在某些情况下,它们无法正常工作。 None 其中还考虑了文本的方向(意味着当我们在键盘上按下右侧的 Ctrl+Shift 时,可视化再次发生变化)

我的问题是

  1. 有人知道我可以用来将字符串从它保存在内存中的内容更改为视觉顺序的防弹 Bidi 算法吗?
  2. 有没有更简单的方法来解决我的问题?也许以某种方式获得浏览器算法..

找了半天,

我发现了 DOJO(幸运的是,它是我正在使用的工具包), 有一个用于绘制自己的 UI 控件的 BIDI 引擎,它获取很少的布局参数来处理某些 RTL、LRT 和上下文方向的情况。

如果这对某人有帮助- http://bill.dojotoolkit.org/api/1.9/dojox/string/BidiEngine

找到另一个 link 可能对 none DOJO 开发人员有帮助 -https://github.com/ibm-js/dbidi,但我还没有检查它