--- src/yfontxft.cc.old 2009-09-25 00:07:51.000000000 +0300 +++ src/yfontxft.cc 2009-09-25 00:18:09.000000000 +0300 @@ -6,6 +6,11 @@ #include "ypaint.h" #include "yxapp.h" #include "intl.h" +#include + +#ifdef CONFIG_FRIBIDI + #include +#endif /******************************************************************************/ @@ -68,10 +73,45 @@ char_t * str, size_t len) { XftColor *c = *g.color(); + +#ifdef CONFIG_FRIBIDI + +#define STATIS_STRING_SIZE 256 + + // Based around upstream (1.3.2) patch with some optimization + // on my end. (reduce unnecessary memory allocation) + // - Gilboa + + char_t static_str[STATIS_STRING_SIZE]; + char_t *vis_str = static_str; + + if (len >= STATIS_STRING_SIZE) + { + vis_str = new char_t[len+1]; + if (!vis_str) + return; + } + + FriBidiCharType pbase_dir = FRIBIDI_TYPE_N; + fribidi_log2vis(str, len, &pbase_dir, //input + vis_str, // output + NULL, NULL, NULL // "statistics" that we don't need + ); + str = vis_str; +#endif + XftDrawString(g.handleXft(), c, font, x - g.xorigin(), y - g.yorigin(), str, len); + +#ifdef CONFIG_FRIBIDI + + if (vis_str != static_str) + delete[] str; + +#endif + } static void textExtents(XftFont * font, char_t * str, size_t len, --- configure.in.old 2009-09-25 00:05:08.000000000 +0300 +++ configure.in 2009-09-25 00:07:14.000000000 +0300 @@ -307,6 +307,20 @@ features="${features} i18n" fi +dnl =================================================== Right to left support === +dnl +AC_ARG_ENABLE(fribidi, + [ --disable-fribidi Disable right to left support]) + +if test "$enable_fribidi" != "no" && test "$enable_i18n" != "no"; then + PKG_CHECK_MODULES(FRIBIDI, fribidi) + + AC_DEFINE(CONFIG_FRIBIDI,1, [Define to enable fribidi support]) + + CORE_CFLAGS="${CORE_CFLAGS} ${FRIBIDI_CFLAGS}" + CORE_LIBS="${CORE_LIBS} ${FRIBIDI_LIBS}" +fi + dnl ============================================================ NLS Support === dnl AC_ARG_ENABLE(nls,