kam*_*mbi 3 c++ unicode bidi right-to-left
我需要在打印前知道文本的方向.
我正在使用Unicode字符.
我怎么能用C++做到这一点?
如果您不想使用ICU,您始终可以手动解析unicode数据库(.eg,使用python脚本).它是一个以分号分隔的文本文件,每行代表一个字符代码点.查找每行中的第五条记录 - 这是字符类.如果是R或者AL,你有一个RTL字符,'L'是一个LTR字符.其他类是弱或中性类型(如数字),我猜你想忽略.使用该信息,您可以生成所有RTL字符的查找表,然后在C++代码中使用它.如果您真的关心代码大小,可以通过使用范围(而不是每个字符的条目)来最小化查找表在代码中占用的大小,因为大多数字符都是BiDi类的块.
现在,定义一个函数,通过检查查找表GetCharDirection(wchar_t ch)来返回枚举值(例如:Dir_LTR,Dir_RTL或Dir_Neutral).
现在,您可以定义一个函数GetStringDirection(const wchar_t*),该函数遍历字符串中的所有字符,直到遇到不是Dir_Neutral的字符.字符串中的第一个非中性字符应设置该字符串的基本方向.或者至少这就是ICU的工作方式.
您可以使用ICU库,它具有该功能(ubidi_getDirection ubidi_getBaseDirection).
通过重新编译数据库(通常大约15MB)可以减小ICU的大小,仅包括项目所需的转换器/本地.
减少ICU数据大小的部分:网站http://userguide.icu-project.org/icudata的转换表,包含有关如何减小数据库大小的信息.
如果只需要支持最常见的编码(US-ASCII,ISO-8859-1,UTF-7/8/16/32,SCSU,BOCU-1,CESU-8),则无论如何都不需要数据库.
| 归档时间: |
|
| 查看次数: |
3332 次 |
| 最近记录: |