使用 arabic-reshaper 和 python-bidi(在多行情况下)时如何修复反向行?
how to fix the reversed Lines when using arabic-reshaper and python-bidi (in multiple lines situation)?
当我使用 arabic-reshaper 和 python-bidi 时,我遇到了一个糟糕的结果,即这些行从最后一行开始呈现。
我做了一个函数来解决这个问题,因为没有办法用其他方式解决它,bidi 正在反转字符以将第一个放在最后等等,那是因为阿拉伯语从右开始向左,这样 bidi 会伪造结果以正确的形状出现,但是当文本必须进入多行时,在末尾显示第一个单词是错误的!所以我必须让它这样做然后我这次必须将结果反转为反转线,具体取决于该行可以包含多少个单词,我通过传递两个参数来计算,w_w 用于小部件的宽度(或其他地方)文本将出现的位置和 (f_w) 表示所用字体的字符宽度。
然后把每一行累加之后,我把行的呈现倒过来,就这样!这是我创建的函数:
import arabic_reshaper
import bidi.algorithm
def getAR(arWord, w_w=0, f_w=0):
arWord = arWord.strip()
if len(arWord) <= 0: return ''
startList0 = bidi.algorithm.get_display(arabic_reshaper.reshape(arWord))
if (not w_w) or (not f_w):
return startList0
else:
# return startList0
startList = startList0.split(' ')[::-1]
if len(startList) == 0: return ''
if len(startList) == 1: return str(startList[0])
n = floor( w_w / f_w )
for i in startList:
if len(i) > n: return startList0
tempS = ''
resultList = []
for i in range(0, len(startList)):
if (tempS != ''): tempS = ' ' + tempS
if (len(tempS) + (len(startList[i])) > n):
tempS = tempS + "\n"
resultList.append(tempS)
tempS = startList[i]
else:
tempS = startList[i] + tempS
if i == (len(startList)-1):
resultList.append(tempS)
return ''.join(resultList)
你会像这样使用它:
w_w = ... # calculat it yourself, the width of where you will put the text.
f_w = ... # calculat it yourself, the width of the character in the font you are using.
paragraph = "... ..."
widget.text = getAr(paragraph, w_w=w_w, f_w=f_w)
当我使用 arabic-reshaper 和 python-bidi 时,我遇到了一个糟糕的结果,即这些行从最后一行开始呈现。
我做了一个函数来解决这个问题,因为没有办法用其他方式解决它,bidi 正在反转字符以将第一个放在最后等等,那是因为阿拉伯语从右开始向左,这样 bidi 会伪造结果以正确的形状出现,但是当文本必须进入多行时,在末尾显示第一个单词是错误的!所以我必须让它这样做然后我这次必须将结果反转为反转线,具体取决于该行可以包含多少个单词,我通过传递两个参数来计算,w_w 用于小部件的宽度(或其他地方)文本将出现的位置和 (f_w) 表示所用字体的字符宽度。
然后把每一行累加之后,我把行的呈现倒过来,就这样!这是我创建的函数:
import arabic_reshaper
import bidi.algorithm
def getAR(arWord, w_w=0, f_w=0):
arWord = arWord.strip()
if len(arWord) <= 0: return ''
startList0 = bidi.algorithm.get_display(arabic_reshaper.reshape(arWord))
if (not w_w) or (not f_w):
return startList0
else:
# return startList0
startList = startList0.split(' ')[::-1]
if len(startList) == 0: return ''
if len(startList) == 1: return str(startList[0])
n = floor( w_w / f_w )
for i in startList:
if len(i) > n: return startList0
tempS = ''
resultList = []
for i in range(0, len(startList)):
if (tempS != ''): tempS = ' ' + tempS
if (len(tempS) + (len(startList[i])) > n):
tempS = tempS + "\n"
resultList.append(tempS)
tempS = startList[i]
else:
tempS = startList[i] + tempS
if i == (len(startList)-1):
resultList.append(tempS)
return ''.join(resultList)
你会像这样使用它:
w_w = ... # calculat it yourself, the width of where you will put the text.
f_w = ... # calculat it yourself, the width of the character in the font you are using.
paragraph = "... ..."
widget.text = getAr(paragraph, w_w=w_w, f_w=f_w)