Забавно, через 5 лет и с большой помощью @Nasser Al-Wohaibi я понял, как это сделать:
Требуется реверсирование текста по алгоритму BIDI.
# -*- coding: utf-8 -*-
from bidi.algorithm import get_display
import PIL.Image, PIL.ImageFont, PIL.ImageDraw
img= PIL.Image.new("L", (400, 200))
draw = PIL.ImageDraw.Draw(img)
font = PIL.ImageFont.truetype( r"c:\windows\fonts\arial.ttf", 30)
t1 = u'סֶפֶר ספר!'
draw.text( (10,10), 'before BiDi :' + t1, fill=255, font=font)
t2 = get_display(t1) # <--- here's the magic <---
draw.text( (10,50), 'after BiDi: ' + t2, fill=220, font=font)
img.save( 'bidi-test.png')
@ Ответ Насера имеет дополнительное значение, которое, вероятно, относится только к арабским текстам (буквы в арабском языке изменяют форму и связность, основанные на их соседних буквах, на иврите все буквы разделены), поэтому для этого была важна только часть биди вопрос.
в результате выборки,
2-я строка - правильная форма и правильное расположение меток вокализации.
спасибо @tzot за помощь + фрагменты кода
а-ргороз:
образцы поведения различных шрифтов с ивритским "никудом". Не все шрифты ведут себя одинаково: