2

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

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

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

对于前。

例 1:שלום לכם

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

例 2:所有 ש- 的 שלום 是字符串中的第一个字母 - 但我们可以看到它显示在中间,在英语开始之前。

当数字和数学符号出现在图片中时,情况变得更加复杂,并且需要翻转特殊字符,如“(”,“)”......

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

但是,它们从来都不是完美的。在某些情况下,它们无法正常工作。他们都没有考虑文本的方向(意味着当我们在键盘上按下右 Ctrl+Shift 时,可视化会再次更改)

我的问题是

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

1 回答 1

1

找了很久,

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

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

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

于 2015-06-28T11:37:34.777 回答