biditext.so is a shared library that replaces the XDrawString(3) , XDrawImageString(3) , XDrawString16(3) and XDrawImageString16(3) functions from the libX11 library, with ones that support bidirectional printing. It will perform reversing only on fonts with Hebrew encodings (iso8859-8, microsoft-cp1255 and iso10646-1). biditext is a convenience script which sets the LD_PRELOAD environment variable to include biditext.so and then runs the original program.
The behaviour of those functions is changed only when a file .rev in your home directory exists, so when it does not exist, it behaves exactly like the normal function from libX11.so. Creating or removing this file takes effect immediately, so it can be used when using Netscape to browse like the normal function from libX11.so. Creating or removing this file takes affect immediately, so it can be used when using Netscape to browse Hebrew sites, and moving between pages that use Visual / Logical Hebrew.
If you want to use another name (instead of $HOME/.rev) set the environment variable BIDITEXT_FILENAME to that file name before running biditext. e.g. (works with bash):
See http://linuxclub.il.eu.org/R2L/ for some programs that provide simple graphical interfaces for this feature.
This version also allows you to set the base directionality. See: http://www.mail-archive.com/lin-club%40vipe.technion.ac.il/msg00323.html for the exact details, and http://www.mail-archive.com/lin-club%40vipe.technion.ac.il/msg00327.html for some demostrations.
r2llib also provides a simple r2l(1) command line program to query and set the r2l state and biditext base state.
Note that the approach used by biditext has some inherent limitations. The program is not aware of the logical->visual conversion and thus:
May draw parts of the line in seperate XDrawString calls (e.g: when editing a text, or when selecting it)
When you decide to create (or delete) the .rev file, the program's window will not be updated immediately. The change will take effect only once the text will be redrawn (e.g.: by refreshing the whole window, or if refreshd (see below) is running)
It seems that the standard text box of qt2 programs does not suffer from the first limitation, and editing text with QT2 programs (like kedit and licq) works well, if you have got past the fonts problem.
The hooks in the clients is a shared object ( refreshd_hook.so ) that is loaded in the same way as biditext.so .
r2llib Biditext requires r2llib (version >= 0.32) which should have been already supplied with it. If not, it is available from http://linuxclub.il.eu.org/R2L/
biditext is not a complete replacement for complete support of bidirectional Hebrew in programs. This approach has some obvious limitations, that were mentioned above.
May have problems with programs that do some manipulations with the loader, e.g.: licq
0.9 added recognition of the character set, and reverses only Hebrew
strings. Thus if you use netscape 4 with web fonts, it won't reverse
your text (because it is not exactly Hebrew). Apply the Turkish patch
to netscape. Alternatively, set
If the program that you want to run under biditext uses some component archteture (KDE's KParts, or GNOME's bonobo) then there may be parts of that application that are presented by other processes that were not even spwned by your original process. Thus those parts may not run with biditext support. See http://plasma-gate.weizmann.ac.il/Linux/maillists/01/12/msg00504.html
Regarding the changes of 0.9 and the Elmar fonts: See http://plasma-gate.weizmann.ac.il/Linux/maillists/01/07/msg00242.html
There is another function similar to XDrawString that is used for anti-aliased text (XftDrawString). This function is currently not handled by biditext.
Ilya Konstantinov (email@example.com)
Tzafrir Cohen (firstname.lastname@example.org)