我正在逐个字母地在屏幕上绘制文本。
在英文中,这非常简单,因为文本是LTR,所以字母按照显示的顺序保存在字符串中。
在绘制RTL文本时,我需要切换打印方向。但是,当有字母和数字,英语和一些RTL语言..时,混乱就开始了。
对于前
例1:שלוםלכם
ש-是字符串中的第一个字母-但是我们可以看到它显示了最后一个字母
例2:所有人
ש-是字符串中的第一个字母,但是我们可以看到它显示在英语开始之前的中间。
当数字和数学符号出现在图片中以及需要翻转的特殊字符如'(',')'时,情况变得越来越复杂...
在线上找到了许多Bidi算法,可以将字符串中字母的逻辑顺序更改为可视顺序。因此,当我从左到右运行转换后的字符串时,我确定该字符串将正确打印。
但,
他们从来都不是完美的。在某些情况下,它们无法正常工作。
他们都没有考虑文本的方向(意味着当我们在键盘上按右Ctrl + Shift而不是可视化被更改时)
我的问题是
有人知道我可以使用一些防弹Bidi算法将字符串从存储在内存中的字符串更改为可视顺序吗?
有没有更简单的方法来解决我的问题?也许以某种方式获得浏览器算法。
最佳答案
经过长时间的搜寻
我发现了DOJO(幸运的是,这是我正在使用的工具包),
有一个用于绘制自己的UI控件的BIDI引擎,该引擎几乎没有布局参数来处理RTL,LRT和上下文方向的某些情况。
如果这对某人有帮助-
http://bill.dojotoolkit.org/api/1.9/dojox/string/BidiEngine
找到了另一个可能对没有DOJO开发人员有用的链接-https://github.com/ibm-js/dbidi,但是我还没有检查它