如何在 corona sdk 的文本换行中忽略 tashkeel 字符计数?

我正在使用 corona 进行文本换行(将长串分成几行)

function wrap(str, limit, indent, indent1)
  indent = indent or ""
  indent1 = indent1 or indent
  limit = limit or 72
  local here = 1-#indent1

  str = replacePartOfString(str,"*","\n")

  return indent1..str:gsub("(%s+)()(%S+)()",
                          function(sp, st, word, fi)
                            if fi-here > limit then
                              here = st - #indent
                              return "\n"..indent..word
                            end
                          end)
end

local someString = " 这是针对没有换行符的字符串的(即在重新排版文本并将其拆分成段落后的字符串)。这是针对没有换行符的字符串的(即在重新排版文本并将其拆分成段落后的字符串)。这是针对没有换行符的字符串的(即在重新排版文本并将其拆分成段落后的字符串)。这是针对没有换行符的字符串的(即在重新排版文本并将其拆分成段落后的字符串)。 "

print_r(string.split(wrap(someString,70,"",""),"\n"))

它适用于英语和阿拉伯语,但唯一的问题是它将阿拉伯语中的 tashkeel 作为字母计数,有什么忽略这些字符并不计算它们数量的最佳方法?我想保留它们,但不要在文本换行中计数。

image

点赞
用户107090
用户107090

string.gsub() 作用于字符串的 _字节_,而非其 _字符_。当字符串包含 Unicode 文本时,就会有所不同。 使用 utf8 库获取字符。

2016-09-17 12:39:25
用户11208345
用户11208345

阿拉伯语中 Taukeel 的 Unicode ID 是:

[\x{064B}-\x{0650}],[\x{0618}-\x{061A}],[\x{0652}-\x{0653}],[\x{0652}-\x{0653}]

你可以使用任何代码来删除它。

问候

2019-05-19 01:13:08