summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog18
-rw-r--r--ChangeLog.pre-1-018
-rw-r--r--ChangeLog.pre-1-1018
-rw-r--r--ChangeLog.pre-1-218
-rw-r--r--ChangeLog.pre-1-418
-rw-r--r--ChangeLog.pre-1-618
-rw-r--r--ChangeLog.pre-1-818
-rw-r--r--README16
-rw-r--r--configure.in55
-rw-r--r--docs/tmpl/layout.sgml31
-rw-r--r--docs/tmpl/main.sgml4
-rw-r--r--docs/tmpl/text-attributes.sgml33
-rw-r--r--modules/basic/basic-ft2.c7
-rw-r--r--modules/basic/basic-win32.c6
-rw-r--r--modules/basic/basic-x.c6
-rw-r--r--modules/basic/basic.c6
-rw-r--r--modules/thai/thai-x.c1
-rw-r--r--modules/thai/thai.c1
-rw-r--r--pango/Makefile.am9
-rw-r--r--pango/itemize.c3
-rw-r--r--pango/mini-fribidi/.cvsignore6
-rw-r--r--pango/mini-fribidi/Makefile.am25
-rw-r--r--pango/mini-fribidi/README44
-rw-r--r--pango/mini-fribidi/fribidi-0.1.12.patch441
-rw-r--r--pango/mini-fribidi/fribidi.c514
-rw-r--r--pango/mini-fribidi/fribidi_get_type.c75
-rw-r--r--pango/mini-fribidi/fribidi_tables.i1052
-rw-r--r--pango/mini-fribidi/fribidi_types.h101
-rw-r--r--pango/pango-context.c15
-rw-r--r--pango/pango-utils.c31
-rw-r--r--pango/pango-utils.h10
-rw-r--r--pango/pangoft2.c8
-rw-r--r--pango/pangowin32.c7
-rw-r--r--pango/pangox.c7
34 files changed, 2512 insertions, 128 deletions
diff --git a/ChangeLog b/ChangeLog
index fbe25491..863e1bac 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,21 @@
+Sun Nov 12 16:07:06 2000 Owen Taylor <otaylor@redhat.com>
+
+ * configure.in pango/pango-utils.[ch] pango/Makefile.am
+ pango/mini-fribidi/*: Include a stripped-down version of fribidi
+ to avoid the extra dependency. No fribidi symbols are
+ exported so conflicts with the real fribidi should not
+ happen. Library can optionally be compiled with the
+ real libfribidi.
+
+ * pango/pango-utils.[ch]: Wrappers for
+ fribidi_ functions when compiling with fribiid.
+
+ * modules/basic/basic-ft2.c modules/basic/basic-win32.c
+ modules/basic/basic.c modules/thai/thai.c pango/Makefile.am
+ pango/itemize.c pango/pango-context.c pango/pangoft2.c
+ pango/pangowin32.c pango/pangox.c: Use pango_ versions of fribidi
+ functions.
+
2000-11-12 Robert Brady <robert@suse.co.uk>
* pango/pango-indic.c (pango_shift_vowels): Don't corrupt the
diff --git a/ChangeLog.pre-1-0 b/ChangeLog.pre-1-0
index fbe25491..863e1bac 100644
--- a/ChangeLog.pre-1-0
+++ b/ChangeLog.pre-1-0
@@ -1,3 +1,21 @@
+Sun Nov 12 16:07:06 2000 Owen Taylor <otaylor@redhat.com>
+
+ * configure.in pango/pango-utils.[ch] pango/Makefile.am
+ pango/mini-fribidi/*: Include a stripped-down version of fribidi
+ to avoid the extra dependency. No fribidi symbols are
+ exported so conflicts with the real fribidi should not
+ happen. Library can optionally be compiled with the
+ real libfribidi.
+
+ * pango/pango-utils.[ch]: Wrappers for
+ fribidi_ functions when compiling with fribiid.
+
+ * modules/basic/basic-ft2.c modules/basic/basic-win32.c
+ modules/basic/basic.c modules/thai/thai.c pango/Makefile.am
+ pango/itemize.c pango/pango-context.c pango/pangoft2.c
+ pango/pangowin32.c pango/pangox.c: Use pango_ versions of fribidi
+ functions.
+
2000-11-12 Robert Brady <robert@suse.co.uk>
* pango/pango-indic.c (pango_shift_vowels): Don't corrupt the
diff --git a/ChangeLog.pre-1-10 b/ChangeLog.pre-1-10
index fbe25491..863e1bac 100644
--- a/ChangeLog.pre-1-10
+++ b/ChangeLog.pre-1-10
@@ -1,3 +1,21 @@
+Sun Nov 12 16:07:06 2000 Owen Taylor <otaylor@redhat.com>
+
+ * configure.in pango/pango-utils.[ch] pango/Makefile.am
+ pango/mini-fribidi/*: Include a stripped-down version of fribidi
+ to avoid the extra dependency. No fribidi symbols are
+ exported so conflicts with the real fribidi should not
+ happen. Library can optionally be compiled with the
+ real libfribidi.
+
+ * pango/pango-utils.[ch]: Wrappers for
+ fribidi_ functions when compiling with fribiid.
+
+ * modules/basic/basic-ft2.c modules/basic/basic-win32.c
+ modules/basic/basic.c modules/thai/thai.c pango/Makefile.am
+ pango/itemize.c pango/pango-context.c pango/pangoft2.c
+ pango/pangowin32.c pango/pangox.c: Use pango_ versions of fribidi
+ functions.
+
2000-11-12 Robert Brady <robert@suse.co.uk>
* pango/pango-indic.c (pango_shift_vowels): Don't corrupt the
diff --git a/ChangeLog.pre-1-2 b/ChangeLog.pre-1-2
index fbe25491..863e1bac 100644
--- a/ChangeLog.pre-1-2
+++ b/ChangeLog.pre-1-2
@@ -1,3 +1,21 @@
+Sun Nov 12 16:07:06 2000 Owen Taylor <otaylor@redhat.com>
+
+ * configure.in pango/pango-utils.[ch] pango/Makefile.am
+ pango/mini-fribidi/*: Include a stripped-down version of fribidi
+ to avoid the extra dependency. No fribidi symbols are
+ exported so conflicts with the real fribidi should not
+ happen. Library can optionally be compiled with the
+ real libfribidi.
+
+ * pango/pango-utils.[ch]: Wrappers for
+ fribidi_ functions when compiling with fribiid.
+
+ * modules/basic/basic-ft2.c modules/basic/basic-win32.c
+ modules/basic/basic.c modules/thai/thai.c pango/Makefile.am
+ pango/itemize.c pango/pango-context.c pango/pangoft2.c
+ pango/pangowin32.c pango/pangox.c: Use pango_ versions of fribidi
+ functions.
+
2000-11-12 Robert Brady <robert@suse.co.uk>
* pango/pango-indic.c (pango_shift_vowels): Don't corrupt the
diff --git a/ChangeLog.pre-1-4 b/ChangeLog.pre-1-4
index fbe25491..863e1bac 100644
--- a/ChangeLog.pre-1-4
+++ b/ChangeLog.pre-1-4
@@ -1,3 +1,21 @@
+Sun Nov 12 16:07:06 2000 Owen Taylor <otaylor@redhat.com>
+
+ * configure.in pango/pango-utils.[ch] pango/Makefile.am
+ pango/mini-fribidi/*: Include a stripped-down version of fribidi
+ to avoid the extra dependency. No fribidi symbols are
+ exported so conflicts with the real fribidi should not
+ happen. Library can optionally be compiled with the
+ real libfribidi.
+
+ * pango/pango-utils.[ch]: Wrappers for
+ fribidi_ functions when compiling with fribiid.
+
+ * modules/basic/basic-ft2.c modules/basic/basic-win32.c
+ modules/basic/basic.c modules/thai/thai.c pango/Makefile.am
+ pango/itemize.c pango/pango-context.c pango/pangoft2.c
+ pango/pangowin32.c pango/pangox.c: Use pango_ versions of fribidi
+ functions.
+
2000-11-12 Robert Brady <robert@suse.co.uk>
* pango/pango-indic.c (pango_shift_vowels): Don't corrupt the
diff --git a/ChangeLog.pre-1-6 b/ChangeLog.pre-1-6
index fbe25491..863e1bac 100644
--- a/ChangeLog.pre-1-6
+++ b/ChangeLog.pre-1-6
@@ -1,3 +1,21 @@
+Sun Nov 12 16:07:06 2000 Owen Taylor <otaylor@redhat.com>
+
+ * configure.in pango/pango-utils.[ch] pango/Makefile.am
+ pango/mini-fribidi/*: Include a stripped-down version of fribidi
+ to avoid the extra dependency. No fribidi symbols are
+ exported so conflicts with the real fribidi should not
+ happen. Library can optionally be compiled with the
+ real libfribidi.
+
+ * pango/pango-utils.[ch]: Wrappers for
+ fribidi_ functions when compiling with fribiid.
+
+ * modules/basic/basic-ft2.c modules/basic/basic-win32.c
+ modules/basic/basic.c modules/thai/thai.c pango/Makefile.am
+ pango/itemize.c pango/pango-context.c pango/pangoft2.c
+ pango/pangowin32.c pango/pangox.c: Use pango_ versions of fribidi
+ functions.
+
2000-11-12 Robert Brady <robert@suse.co.uk>
* pango/pango-indic.c (pango_shift_vowels): Don't corrupt the
diff --git a/ChangeLog.pre-1-8 b/ChangeLog.pre-1-8
index fbe25491..863e1bac 100644
--- a/ChangeLog.pre-1-8
+++ b/ChangeLog.pre-1-8
@@ -1,3 +1,21 @@
+Sun Nov 12 16:07:06 2000 Owen Taylor <otaylor@redhat.com>
+
+ * configure.in pango/pango-utils.[ch] pango/Makefile.am
+ pango/mini-fribidi/*: Include a stripped-down version of fribidi
+ to avoid the extra dependency. No fribidi symbols are
+ exported so conflicts with the real fribidi should not
+ happen. Library can optionally be compiled with the
+ real libfribidi.
+
+ * pango/pango-utils.[ch]: Wrappers for
+ fribidi_ functions when compiling with fribiid.
+
+ * modules/basic/basic-ft2.c modules/basic/basic-win32.c
+ modules/basic/basic.c modules/thai/thai.c pango/Makefile.am
+ pango/itemize.c pango/pango-context.c pango/pangoft2.c
+ pango/pangowin32.c pango/pangox.c: Use pango_ versions of fribidi
+ functions.
+
2000-11-12 Robert Brady <robert@suse.co.uk>
* pango/pango-indic.c (pango_shift_vowels): Don't corrupt the
diff --git a/README b/README
index 9c5ff198..96c4a369 100644
--- a/README
+++ b/README
@@ -5,17 +5,21 @@ For more information about Pango, see:
http://www.labs.redhat.com/~otaylor/pango/index.html
-Requirements
+Dependencies
============
-You'll need Dov Grobgeld's FriBidi library. This
-is available frmo:
+You'll need a fairly capable implementation
+of iconv() - for instance the iconv from the
+GNU C library version 2.1
+
+Pango can optionally be compiled to use Dov Grobgeld's FriBidi
+library. This is available from:
http://imagic.weizmann.ac.il/~dov/freesw/FriBidi/
-You'll also need a fairly capable implementation
-of iconv() - for instance the iconv from the
-GNU C library version 2.1
+If the --with-fribidi option is not given to configure, then
+Pango will use internal copies of the FriBidi routines.
+No functionality will be lost by using the internal routines.
Notes
=====
diff --git a/configure.in b/configure.in
index 9494385c..ccc3ceaa 100644
--- a/configure.in
+++ b/configure.in
@@ -34,26 +34,6 @@ AM_PATH_GLIB_2_0(1.3.1,,
AC_MSG_ERROR([GLib 1.3.1 is required for building Pango]),
gmodule gobject)
-AC_PATH_PROG(FRIBIDI_CONFIG, fribidi-config, no)
-if test x$FRIBIDI_CONFIG = xno ; then
- AC_MSG_ERROR([*** fribidi-config not found])
-fi
-
-if $FRIBIDI_CONFIG --cflags | grep lib/glib/include > /dev/null ; then
- AC_MSG_ERROR([*** fribidi appears to be compiled against GLib-1.2.x.
-*** You must compile fribidi with GLib-1.3.1 or better.])
-fi
-
-FRIBIDI_CFLAGS="`$FRIBIDI_CONFIG --cflags`"
-CFLAGS="$CFLAGS $FRIBIDI_CFLAGS"
-FRIBIDI_LIBS="`$FRIBIDI_CONFIG --libs`"
-AC_SUBST(FRIBIDI_LIBS)
-AC_SUBST(FRIBIDI_CFLAGS)
-
-AC_CHECK_LIB(fribidi, fribidi_map_range, :,
- AC_MSG_ERROR([*** libfribidi not found.]), $FRIBIDI_LIBS)
-
-
AC_PATH_PROG(GLIB_CONFIG, glib-config-2.0, no)
if test x$GLIB_CONFIG = xno ; then
AC_MSG_ERROR([*** glib-config-2.0 not found])
@@ -64,6 +44,40 @@ GLIB_LIBS="`$GLIB_CONFIG --libs gmodule gobject`"
AC_SUBST(GLIB_LIBS)
AC_SUBST(GLIB_CFLAGS)
+#
+# Checks for fribidi
+#
+AC_ARG_WITH(fribidi, [ --with-fribidi Use external fribidi library ],,with_fribidi=no)
+
+FRIBIDI_LIBS=""
+FRIBIDI_CFLAGS=""
+have_fribidi=no
+
+if test "x$with_fribidi" = "xyes" ; then
+ AC_PATH_PROG(FRIBIDI_CONFIG, fribidi-config, no)
+ if test x$FRIBIDI_CONFIG = xno ; then
+ AC_MSG_ERROR([*** fribidi-config not found])
+ fi
+
+ if $FRIBIDI_CONFIG --cflags | grep lib/glib/include > /dev/null ; then
+ AC_MSG_ERROR([*** fribidi appears to be compiled against GLib-1.2.x.
+ *** You must compile fribidi with GLib-1.3.1 or better.])
+ fi
+
+ FRIBIDI_CFLAGS="`$FRIBIDI_CONFIG --cflags`"
+ CFLAGS="$CFLAGS $FRIBIDI_CFLAGS"
+ FRIBIDI_LIBS="`$FRIBIDI_CONFIG --libs`"
+
+ AC_CHECK_LIB(fribidi, fribidi_get_mirror_char, :,
+ AC_MSG_ERROR([*** libfribidi not found.]), $FRIBIDI_LIBS)
+
+ AC_DEFINE(HAVE_FRIBIDI)
+ have_fribidi=yes
+fi
+
+AC_SUBST(FRIBIDI_LIBS)
+AC_SUBST(FRIBIDI_CFLAGS)
+AM_CONDITIONAL(HAVE_FRIBIDI, test x$have_fribidi = xyes)
#
# Checks for iconv
@@ -258,6 +272,7 @@ AC_CHECK_HEADER(unistd.h, AC_DEFINE(HAVE_UNISTD_H))
AC_OUTPUT([
Makefile
pango/Makefile
+pango/mini-fribidi/Makefile
pango/makefile.mingw
pango/pango.rc
pango/pangoft2.rc
diff --git a/docs/tmpl/layout.sgml b/docs/tmpl/layout.sgml
index fca9db60..4cb4c9a9 100644
--- a/docs/tmpl/layout.sgml
+++ b/docs/tmpl/layout.sgml
@@ -84,28 +84,6 @@ fields.
@length:
-<!-- ##### FUNCTION pango_layout_set_markup ##### -->
-<para>
-
-</para>
-
-@layout:
-@markup:
-@length:
-
-
-<!-- ##### FUNCTION pango_layout_set_markup_with_accel ##### -->
-<para>
-
-</para>
-
-@layout:
-@markup:
-@length:
-@accel_marker:
-@accel_char:
-
-
<!-- ##### FUNCTION pango_layout_set_attributes ##### -->
<para>
@@ -115,15 +93,6 @@ fields.
@attrs:
-<!-- ##### FUNCTION pango_layout_get_attributes ##### -->
-<para>
-
-</para>
-
-@layout:
-@Returns:
-
-
<!-- ##### FUNCTION pango_layout_set_font_description ##### -->
<para>
diff --git a/docs/tmpl/main.sgml b/docs/tmpl/main.sgml
index 7e5c4068..7f97791e 100644
--- a/docs/tmpl/main.sgml
+++ b/docs/tmpl/main.sgml
@@ -171,12 +171,12 @@ for text.
@context:
@text:
-@start_index:
@length:
@attrs:
-@cached_iter:
@Returns:
<!-- # Unused Parameters # -->
+@start_index:
+@cached_iter:
@lang_info:
@n_langs:
diff --git a/docs/tmpl/text-attributes.sgml b/docs/tmpl/text-attributes.sgml
index 0682bad4..0bf3ea3b 100644
--- a/docs/tmpl/text-attributes.sgml
+++ b/docs/tmpl/text-attributes.sgml
@@ -41,7 +41,6 @@ attribute is listed in parentheses after the description.
@PANGO_ATTR_STRIKETHROUGH: whether the text is struck-through (#PangoAttrInt)
@PANGO_ATTR_RISE: baseline displacement (#PangoAttrInt)
@PANGO_ATTR_SHAPE:
-@PANGO_ATTR_SCALE:
<!-- ##### STRUCT PangoAttrClass ##### -->
<para>
@@ -99,14 +98,6 @@ a integer or enumeration value.
@attr: the common portion of the attribute
@value: the value of the attribute
-<!-- ##### STRUCT PangoAttrFloat ##### -->
-<para>
-
-</para>
-
-@attr:
-@value:
-
<!-- ##### STRUCT PangoAttrFontDesc ##### -->
<para>
The #PangoAttrFontDesc structure is used to store an attribute that
@@ -125,21 +116,6 @@ sets all aspects of the font description at once.
@ink_rect:
@logical_rect:
-<!-- ##### FUNCTION pango_parse_markup ##### -->
-<para>
-
-</para>
-
-@markup_text:
-@length:
-@accel_marker:
-@attr_list:
-@text:
-@accel_char:
-@error:
-@Returns:
-
-
<!-- ##### FUNCTION pango_attr_type_register ##### -->
<para>
@@ -298,15 +274,6 @@ sets all aspects of the font description at once.
@Returns:
-<!-- ##### FUNCTION pango_attr_scale_new ##### -->
-<para>
-
-</para>
-
-@scale_factor:
-@Returns:
-
-
<!-- ##### ENUM PangoUnderline ##### -->
<para>
the #PangoUnderline enumeration is used to specify
diff --git a/modules/basic/basic-ft2.c b/modules/basic/basic-ft2.c
index 2faa9788..973e8a43 100644
--- a/modules/basic/basic-ft2.c
+++ b/modules/basic/basic-ft2.c
@@ -23,8 +23,7 @@
#include "pango.h"
#include "pangoft2.h"
-
-#include <fribidi/fribidi.h>
+#include "pango-utils.h"
static PangoEngineRange basic_ranges[] = {
/* Basic Latin, Latin-1 Supplement, Latin Extended-A, Latin Extended-B,
@@ -240,13 +239,13 @@ basic_engine_shape (PangoFont *font,
for (i = 0; i < n_chars; i++)
{
gunichar wc;
- FriBidiChar mirrored_ch;
+ gunichar mirrored_ch;
PangoGlyph index;
wc = g_utf8_get_char (p);
if (analysis->level % 2)
- if (fribidi_get_mirror_char (wc, &mirrored_ch))
+ if (pango_get_mirror_char (wc, &mirrored_ch))
wc = mirrored_ch;
if (wc == 0x200B || wc == 0x200E || wc == 0x200F) /* Zero-width characters */
diff --git a/modules/basic/basic-win32.c b/modules/basic/basic-win32.c
index 66082ee8..a6a4b036 100644
--- a/modules/basic/basic-win32.c
+++ b/modules/basic/basic-win32.c
@@ -22,7 +22,7 @@
#include <glib.h>
#include "pango.h"
#include "pangowin32.h"
-#include <fribidi/fribidi.h>
+#include "pango-utils.h"
static PangoEngineRange basic_ranges[] = {
/* Language characters */
@@ -178,13 +178,13 @@ basic_engine_shape (PangoFont *font,
for (i = 0; i < n_chars; i++)
{
gunichar wc;
- FriBidiChar mirrored_ch;
+ gunichar mirrored_ch;
PangoGlyph index;
wc = g_utf8_get_char (p);
if (analysis->level % 2)
- if (fribidi_get_mirror_char (wc, &mirrored_ch))
+ if (pango_get_mirror_char (wc, &mirrored_ch))
wc = mirrored_ch;
if (wc == 0x200B || wc == 0x200E || wc == 0x200F) /* Zero-width characters */
diff --git a/modules/basic/basic-x.c b/modules/basic/basic-x.c
index 944ec41c..f044043b 100644
--- a/modules/basic/basic-x.c
+++ b/modules/basic/basic-x.c
@@ -24,7 +24,7 @@
#include <glib.h>
#include "pango.h"
#include "pangox.h"
-#include <fribidi/fribidi.h>
+#include "pango-utils.h"
typedef struct _CharRange CharRange;
typedef struct _Charset Charset;
@@ -376,7 +376,7 @@ basic_engine_shape (PangoFont *font,
for (i=0; i < n_chars; i++)
{
gunichar wc;
- FriBidiChar mirrored_ch;
+ gunichar mirrored_ch;
PangoGlyph index;
char buf[6];
const char *input;
@@ -385,7 +385,7 @@ basic_engine_shape (PangoFont *font,
input = p;
if (analysis->level % 2)
- if (fribidi_get_mirror_char (wc, &mirrored_ch))
+ if (pango_get_mirror_char (wc, &mirrored_ch))
{
wc = mirrored_ch;
diff --git a/modules/basic/basic.c b/modules/basic/basic.c
index 944ec41c..f044043b 100644
--- a/modules/basic/basic.c
+++ b/modules/basic/basic.c
@@ -24,7 +24,7 @@
#include <glib.h>
#include "pango.h"
#include "pangox.h"
-#include <fribidi/fribidi.h>
+#include "pango-utils.h"
typedef struct _CharRange CharRange;
typedef struct _Charset Charset;
@@ -376,7 +376,7 @@ basic_engine_shape (PangoFont *font,
for (i=0; i < n_chars; i++)
{
gunichar wc;
- FriBidiChar mirrored_ch;
+ gunichar mirrored_ch;
PangoGlyph index;
char buf[6];
const char *input;
@@ -385,7 +385,7 @@ basic_engine_shape (PangoFont *font,
input = p;
if (analysis->level % 2)
- if (fribidi_get_mirror_char (wc, &mirrored_ch))
+ if (pango_get_mirror_char (wc, &mirrored_ch))
{
wc = mirrored_ch;
diff --git a/modules/thai/thai-x.c b/modules/thai/thai-x.c
index 0b237d46..59364d7a 100644
--- a/modules/thai/thai-x.c
+++ b/modules/thai/thai-x.c
@@ -24,7 +24,6 @@
#include <glib.h>
#include "pango.h"
#include "pangox.h"
-#include <fribidi/fribidi.h>
/* We handle the range U+0e01 to U+0e5b exactly
*/
diff --git a/modules/thai/thai.c b/modules/thai/thai.c
index 0b237d46..59364d7a 100644
--- a/modules/thai/thai.c
+++ b/modules/thai/thai.c
@@ -24,7 +24,6 @@
#include <glib.h>
#include "pango.h"
#include "pangox.h"
-#include <fribidi/fribidi.h>
/* We handle the range U+0e01 to U+0e5b exactly
*/
diff --git a/pango/Makefile.am b/pango/Makefile.am
index f80c97c1..d5560523 100644
--- a/pango/Makefile.am
+++ b/pango/Makefile.am
@@ -1,5 +1,10 @@
## Process this file with automake to create Makefile.in.
+if HAVE_FRIBIDI
+else
+SUBDIRS = mini-fribidi
+endif
+
INCLUDES = \
-DSYSCONFDIR=\"$(sysconfdir)\" \
-DLIBDIR=\"$(libdir)\" \
@@ -42,6 +47,10 @@ libpangox_la_SOURCES = \
# scheme or the standard libtool scheme.
#
libpango_la_LDFLAGS = -release $(VERSION) $(GLIB_LIBS)
+if HAVE_FRIBIDI
+else
+libpango_la_LIBADD = mini-fribidi/libmini-fribidi.la
+endif
libpangox_la_LDFLAGS = -release $(VERSION)
libpangox_la_LIBADD = $(INCLUDED_MODULES)
diff --git a/pango/itemize.c b/pango/itemize.c
index da8b0fbc..7894aeba 100644
--- a/pango/itemize.c
+++ b/pango/itemize.c
@@ -19,7 +19,6 @@
* Boston, MA 02111-1307, USA.
*/
-#include <fribidi/fribidi.h>
#include "pango.h"
#include "iconv.h"
#include "modules.h"
@@ -98,7 +97,7 @@ pango_itemize (PangoContext *context,
shape_engines = g_new0 (PangoEngineInfo *, n_chars);
lang_engines = g_new0 (PangoEngineInfo *, n_chars);
- fribidi_log2vis_get_embedding_levels (text_ucs2, n_chars, &base_dir,
+ pango_log2vis_get_embedding_levels (text_ucs2, n_chars, &base_dir,
embedding_levels);
/* Now, make shaping-engine affilitations for characters in
diff --git a/pango/mini-fribidi/.cvsignore b/pango/mini-fribidi/.cvsignore
new file mode 100644
index 00000000..587e7b39
--- /dev/null
+++ b/pango/mini-fribidi/.cvsignore
@@ -0,0 +1,6 @@
+Makefile.in
+Makefile
+*.lo
+*.la
+.deps
+.libs
diff --git a/pango/mini-fribidi/Makefile.am b/pango/mini-fribidi/Makefile.am
new file mode 100644
index 00000000..50e9f86f
--- /dev/null
+++ b/pango/mini-fribidi/Makefile.am
@@ -0,0 +1,25 @@
+## Process this file with automake to produce Makefile.in
+
+INCLUDES = \
+ -DSYSCONFDIR=\"$(sysconfdir)\" \
+ -DLIBDIR=\"$(libdir)\" \
+ -I$(top_srcdir)
+
+LDADDS = @STRIP_BEGIN@ \
+ @x_ldflags@ \
+ @x_libs@ \
+ @GLIB_LIBS@ \
+ -lm \
+@STRIP_END@
+
+noinst_LTLIBRARIES = libmini-fribidi.la
+
+libmini_fribidi_la_SOURCES = \
+ fribidi_types.h \
+ fribidi_get_type.c \
+ fribidi.c
+
+EXTRA_DIST = \
+ README \
+ fribidi_tables.i \
+ fribidi-0.1.12.patch
diff --git a/pango/mini-fribidi/README b/pango/mini-fribidi/README
new file mode 100644
index 00000000..a3a81bdd
--- /dev/null
+++ b/pango/mini-fribidi/README
@@ -0,0 +1,44 @@
+This directory holds a stripped down version of Dov Grobgeld's FriBidi
+library. The files in here are taken from FriBidi 0.1.12, with the
+changes in fribidi-0.1.12.patch applied to them.
+
+Like Pango, FriBidi is licensed under the terms of the GNU Lesser
+General Public License - see the file COPYING in the toplevel
+directory of the Pango distribution.
+
+12 November 2000
+Owen Taylor
+
+
+From the README of Fribidi:
+
+
+This is is FriBidi, a Free Implementation of the Unicode BiDi algorithm.
+
+Background
+==========
+One of the missing links stopping the penetration of free software in
+Israel is the lack of support for Hebrew. In order to have proper
+Hebrew support, the BiDi algorithm must be implemented. It is my hope
+that this library will stimulate more Hebrew free software.
+
+Of course the BiDi algorithm is not limited to Hebrew, so I expect
+that our Arab neighbors will also find this software useful.
+
+Audience
+========
+
+It is my hope that this library will stimulate the implementation of
+Hebrew and Arabic in lots of free software. Here is a small list of
+projects that would benifit from the use of the FriBidi library, but
+of course there are many more: Wine, Mozilla, Gtk, Gnome, Qt, KDE,
+AbiWord, lynx.
+
+Downloading
+===========
+The latest version of FriBidi may be found at:
+
+ http://imagic.weizmann.ac.il/~dov/freesw/FriBidi
+
+
+
diff --git a/pango/mini-fribidi/fribidi-0.1.12.patch b/pango/mini-fribidi/fribidi-0.1.12.patch
new file mode 100644
index 00000000..b6f30428
--- /dev/null
+++ b/pango/mini-fribidi/fribidi-0.1.12.patch
@@ -0,0 +1,441 @@
+--- /home/otaylor/ftp/fribidi-0.1.12/fribidi.c Sat Jul 22 10:33:30 2000
++++ fribidi.c Sun Nov 12 15:12:09 2000
+@@ -17,8 +17,8 @@
+ * Boston, MA 02111-1307, USA.
+ */
+ #include <glib.h>
+-#include <stdio.h>
+-#include "fribidi.h"
++#include "pango/pango-utils.h"
++#include "fribidi_types.h"
+
+ /*======================================================================
+ // Typedef for the run-length list.
+@@ -39,47 +39,6 @@
+ FriBidiChar value;
+ } key_value_t;
+
+-/* Global variables */
+-gboolean fribidi_debug = FALSE;
+-
+-void fribidi_set_debug(gboolean debug)
+-{
+- fribidi_debug = debug;
+-}
+-
+-static int bidi_string_strlen(FriBidiChar *str)
+-{
+- int len = 0;
+-
+- while(*str++)
+- len++;
+-
+- return len;
+-}
+-
+-static void bidi_string_reverse(FriBidiChar *str, gint len)
+-{
+- int i;
+- for (i=0; i<len/2; i++)
+- {
+- FriBidiChar tmp = str[i];
+- str[i] = str[len-1-i];
+- str[len-1-i] = tmp;
+- }
+-}
+-
+-static void
+-int16_array_reverse(gint16 *arr, gint len)
+-{
+- int i;
+- for (i=0; i<len/2; i++)
+- {
+- gint tmp = arr[i];
+- arr[i] = arr[len-1-i];
+- arr[len-1-i] = tmp;
+- }
+-}
+-
+ static TypeLink *free_type_links = NULL;
+
+ static TypeLink *new_type_link()
+@@ -240,103 +199,6 @@
+ }
+
+ /*======================================================================
+-// For debugging, define some macros for printing the types and the
+-// levels.
+-//----------------------------------------------------------------------*/
+-static void print_types_re(TypeLink *pp)
+-{
+- while(pp)
+- {
+- printf("%d:%c(%d)[%d] ", RL_POS(pp), RL_TYPE(pp), RL_LEN(pp), RL_LEVEL(pp));
+- pp = pp->next;
+- }
+- printf("\n");
+-}
+-
+-static void print_resolved_levels(TypeLink *pp)
+-{
+- while(pp)
+- {
+- int i;
+- for (i=0; i<RL_LEN(pp); i++)
+- printf("%d", RL_LEVEL(pp));
+- pp = pp->next;
+- }
+- printf("\n");
+-}
+-
+-static void print_resolved_types(TypeLink *pp)
+-{
+- while(pp)
+- {
+- int i;
+- for (i=0; i<RL_LEN(pp); i++)
+- {
+- gchar ch;
+- FriBidiCharType type = RL_TYPE(pp);
+-
+- /* Convert the type to something readable */
+- if (type == FRIBIDI_TYPE_R)
+- ch = 'R';
+- else if (type == FRIBIDI_TYPE_L)
+- ch = 'L';
+- else if (type == FRIBIDI_TYPE_E)
+- ch = 'E';
+- else if (type == FRIBIDI_TYPE_EN)
+- ch = 'n';
+- else if (type == FRIBIDI_TYPE_N)
+- ch = 'N';
+- else
+- ch = '?';
+-
+- printf("%c", ch);
+- }
+- pp = pp->next;
+- }
+- printf("\n");
+-}
+-
+-static void print_bidi_string(FriBidiChar *str)
+-{
+- int i;
+- for (i=0; i<bidi_string_strlen(str); i++)
+- printf("%c", str[i]);
+- printf("\n");
+-}
+-
+-/*======================================================================
+-// search_rl_for strong searches the run length list in the direction
+-// indicated by dir for a strong directional. It returns a pointer to
+-// the found character or NULL if none is found. */
+-//----------------------------------------------------------------------*/
+-static TypeLink *
+-search_rl_for_strong(TypeLink *pos,
+- gint dir)
+-{
+- TypeLink *pp = pos;
+-
+- if (dir == -1)
+- {
+- for (pp = pos; pp; pp=pp->prev)
+- {
+- FriBidiCharType char_type = RL_TYPE(pp);
+- if (char_type == FRIBIDI_TYPE_R || char_type == FRIBIDI_TYPE_L)
+- return pp;
+- }
+- }
+- else
+- {
+- for (pp = pos; pp; pp=pp->next)
+- {
+- FriBidiCharType char_type = RL_TYPE(pp);
+- if (char_type == FRIBIDI_TYPE_R || char_type == FRIBIDI_TYPE_L)
+- return pp;
+- }
+- }
+- return NULL;
+-}
+-
+-/*======================================================================
+ // This function should follow the Unicode specification closely!
+ //
+ // It is still lacking the support for <RLO> and <LRO>.
+@@ -360,7 +222,7 @@
+ /* Determinate character types */
+ char_type = g_new(gint, len);
+ for (i=0; i<len; i++)
+- char_type[i] = fribidi_get_type(str[i]);
++ char_type[i] = _pango_fribidi_get_type (str[i]);
+
+ /* Run length encode the character types */
+ type_rl_list = run_length_encode_types(char_type, len);
+@@ -511,8 +373,6 @@
+ compact_list(type_rl_list);
+
+ /* 5. Resolving Neutral Types */
+- if (fribidi_debug)
+- fprintf(stderr,"Resolving neutral types.\n");
+
+ /* We can now collapse all separators and other neutral types to
+ plain neutrals */
+@@ -559,12 +419,8 @@
+ }
+
+ compact_list(type_rl_list);
+- if (fribidi_debug)
+- print_types_re(type_rl_list);
+
+ /* 6. Resolving Implicit levels */
+- if (fribidi_debug)
+- fprintf(stderr,"Resolving implicit levels.\n");
+ {
+ int level = base_level;
+ max_level = base_level;
+@@ -605,13 +461,6 @@
+
+ compact_list(type_rl_list);
+
+- if (fribidi_debug)
+- {
+- print_bidi_string(str);
+- print_resolved_levels(type_rl_list);
+- print_resolved_types(type_rl_list);
+- }
+-
+ *ptype_rl_list = type_rl_list;
+ *pmax_level = max_level;
+ *pbase_dir = base_dir;
+@@ -622,160 +471,26 @@
+ //----------------------------------------------------------------------*/
+
+ /*======================================================================
+-// fribidi_log2vis() calls the function_analyse_string() and then
+-// does reordering and fills in the output strings.
+-//----------------------------------------------------------------------*/
+-void fribidi_log2vis(/* input */
+- FriBidiChar *str,
+- gint len,
+- FriBidiCharType *pbase_dir,
+- /* output */
+- FriBidiChar *visual_str,
+- guint16 *position_L_to_V_list,
+- guint16 *position_V_to_L_list,
+- guint8 *embedding_level_list
+- )
+-{
+- TypeLink *type_rl_list, *pp = NULL;
+- int max_level;
+- gboolean private_L_to_V = FALSE;
+-
+- /* If v2l is to be calculated we must have l2v as well. If it is not
+- given by the caller, we have to make a private instance of it. */
+- if (position_V_to_L_list && !position_L_to_V_list)
+- {
+- private_L_to_V++;
+- position_L_to_V_list = g_new(guint16, len+1);
+- }
+-
+- if (len > (2L<<16)-1)
+- {
+- fprintf(stderr, "Fribidi can't handle strings > 65000 chars!\n");
+- return;
+- }
+- fribidi_analyse_string(str, len, pbase_dir,
+- /* output */
+- &type_rl_list,
+- &max_level);
+-
+- /* 7. Reordering resolved levels */
+- if (fribidi_debug)
+- fprintf(stderr, "Reordering.\n");
+-
+- {
+- int level_idx;
+- int i;
+-
+- /* Set up the ordering array to sorted order and copy the logical
+- string to the visual */
+- if (position_L_to_V_list)
+- for (i=0; i<len+1; i++)
+- position_L_to_V_list[i]=i;
+-
+- if (visual_str)
+- for (i=0; i<len+1; i++)
+- visual_str[i] = str[i];
+-
+- /* Assign the embedding level array */
+- if (embedding_level_list)
+- for (pp = type_rl_list->next; pp->next; pp = pp->next)
+- {
+- int i;
+- int pos = RL_POS(pp);
+- int len = RL_LEN(pp);
+- int level = RL_LEVEL(pp);
+- for (i=0; i<len; i++)
+- embedding_level_list[pos + i] = level;
+- }
+-
+- /* Reorder both the outstring and the order array*/
+- if (visual_str || position_L_to_V_list)
+- {
+-
+- if (visual_str)
+- /* Mirror all characters that are in odd levels and have mirrors */
+- for (pp = type_rl_list->next; pp->next; pp = pp->next)
+- {
+- if (RL_LEVEL(pp) % 2 == 1)
+- {
+- int i;
+- for (i=RL_POS(pp); i<RL_POS(pp)+RL_LEN(pp); i++)
+- {
+- FriBidiChar mirrored_ch;
+- if (fribidi_get_mirror_char(visual_str[i], &mirrored_ch))
+- visual_str[i] = mirrored_ch;
+- }
+- }
+- }
+-
+- /* Reorder */
+- for (level_idx = max_level; level_idx>0; level_idx--)
+- {
+- for (pp = type_rl_list->next; pp->next; pp = pp->next)
+- {
+- if (RL_LEVEL(pp) >= level_idx)
+- {
+- /* Find all stretches that are >= level_idx */
+- int len = RL_LEN(pp);
+- int pos = RL_POS(pp);
+- TypeLink *pp1 = pp->next;
+- while(pp1->next && RL_LEVEL(pp1) >= level_idx)
+- {
+- len+= RL_LEN(pp1);
+- pp1 = pp1->next;
+- }
+-
+- pp = pp1->prev;
+- if (visual_str)
+- bidi_string_reverse(visual_str+pos, len);
+- if (position_L_to_V_list)
+- int16_array_reverse(position_L_to_V_list+pos, len);
+-
+- }
+- }
+- }
+- }
+-
+- /* Convert the l2v list to v2l */
+- if (position_V_to_L_list && position_L_to_V_list)
+- for (i=0; i<len; i++)
+- position_V_to_L_list[position_L_to_V_list[i]] = i;
+- }
+-
+- /* Free up the rl_list */
+-
+- /* At this point, pp points to the last link or (rarely) might be NULL
+- */
+- if (!pp)
+- for (pp = type_rl_list->next; pp->next; pp = pp->next)
+- /* Nothing */;
+-
+- pp->next = free_type_links;
+- free_type_links = type_rl_list;
+-
+- /* Free up L_to_V if we allocated it */
+- if (private_L_to_V)
+- g_free(position_L_to_V_list);
+-
+-}
+-
+-/*======================================================================
+ // fribidi_embedding_levels() is used in order to just get the
+ // embedding levels.
+ //----------------------------------------------------------------------*/
+-void fribidi_log2vis_get_embedding_levels(
++void
++pango_log2vis_get_embedding_levels(
+ /* input */
+- FriBidiChar *str,
++ gunichar *str,
+ int len,
+- FriBidiCharType *pbase_dir,
++ PangoDirection *pbase_dir,
+ /* output */
+ guint8 *embedding_level_list
+ )
+ {
+ TypeLink *type_rl_list, *pp;
+ int max_level;
++ FriBidiCharType fribidi_base_dir;
++
++ fribidi_base_dir = (*pbase_dir == PANGO_DIRECTION_LTR) ? FRIBIDI_TYPE_L : FRIBIDI_TYPE_R;
+
+- fribidi_analyse_string(str, len, pbase_dir,
++ fribidi_analyse_string(str, len, &fribidi_base_dir,
+ /* output */
+ &type_rl_list,
+ &max_level);
+@@ -793,5 +508,7 @@
+ /* Free up the rl_list */
+ pp->next = free_type_links;
+ free_type_links = type_rl_list;
++
++ *pbase_dir = (fribidi_base_dir == FRIBIDI_TYPE_L) ? PANGO_DIRECTION_LTR : PANGO_DIRECTION_RTL;
+ }
+
+--- /home/otaylor/ftp/fribidi-0.1.12/fribidi_get_type.c Fri May 19 05:36:54 2000
++++ fribidi_get_type.c Sun Nov 12 14:42:56 2000
+@@ -18,13 +18,14 @@
+ */
+ #include <stdio.h>
+ #include <stdlib.h>
+-#include "fribidi.h"
++#include "pango/pango-utils.h"
++#include "fribidi_types.h"
+ #include "fribidi_tables.i"
+
+ /*======================================================================
+ // fribidi_get_type() returns the bidi type of a character.
+ //----------------------------------------------------------------------*/
+-FriBidiCharType fribidi_get_type(FriBidiChar uch)
++FriBidiCharType _pango_fribidi_get_type(FriBidiChar uch)
+ {
+ guchar *block = FriBidiPropertyBlocks[uch / 256];
+ if (block)
+@@ -34,10 +35,10 @@
+ }
+
+ gboolean
+-fribidi_get_mirror_char(/* Input */
+- FriBidiChar ch,
+- /* Output */
+- FriBidiChar *mirrored_ch)
++pango_get_mirror_char(/* Input */
++ gunichar ch,
++ /* Output */
++ gunichar *mirrored_ch)
+ {
+ int pos, step;
+ gboolean found = FALSE;
+--- /home/otaylor/ftp/fribidi-0.1.12/fribidi_tables.i Fri May 19 05:12:01 2000
++++ fribidi_tables.i Sun Nov 12 15:07:10 2000
+@@ -3,8 +3,6 @@
+ // by the perl script CreateGetType.pl.
+ //----------------------------------------------------------------------*/
+
+-#include "fribidi.h"
+-
+ #define LTR FRIBIDI_TYPE_LTR
+ #define RTL FRIBIDI_TYPE_RTL
+ #define EN FRIBIDI_TYPE_EN
+--- /home/otaylor/ftp/fribidi-0.1.12/fribidi_types.h Fri May 19 05:07:48 2000
++++ fribidi_types.h Sun Nov 12 14:40:58 2000
+@@ -96,4 +96,6 @@
+ void *attribute;
+ } FriBidiRunType;
+
++FriBidiCharType _pango_fribidi_get_type(FriBidiChar uch);
++
+ #endif
diff --git a/pango/mini-fribidi/fribidi.c b/pango/mini-fribidi/fribidi.c
new file mode 100644
index 00000000..e4d7efce
--- /dev/null
+++ b/pango/mini-fribidi/fribidi.c
@@ -0,0 +1,514 @@
+/* FriBidi - Library of BiDi algorithm
+ * Copyright (C) 1999 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#include <glib.h>
+#include "pango/pango-utils.h"
+#include "fribidi_types.h"
+
+/*======================================================================
+// Typedef for the run-length list.
+//----------------------------------------------------------------------*/
+typedef struct _TypeLink TypeLink;
+
+struct _TypeLink {
+ TypeLink *prev;
+ TypeLink *next;
+ FriBidiCharType type;
+ int pos;
+ int len;
+ int level;
+};
+
+typedef struct {
+ FriBidiChar key;
+ FriBidiChar value;
+} key_value_t;
+
+static TypeLink *free_type_links = NULL;
+
+static TypeLink *new_type_link()
+{
+ TypeLink *link;
+
+ if (free_type_links)
+ {
+ link = free_type_links;
+ free_type_links = free_type_links->next;
+ }
+ else
+ {
+ static GMemChunk *mem_chunk = NULL;
+
+ if (!mem_chunk)
+ mem_chunk = g_mem_chunk_new ("TypeLinkList",
+ sizeof (TypeLink),
+ sizeof (TypeLink) * 128,
+ G_ALLOC_ONLY);
+
+ link = g_chunk_new (TypeLink, mem_chunk);
+ }
+
+ link->len = 0;
+ link->pos = 0;
+ link->level = 0;
+ link->next = NULL;
+ link->prev = NULL;
+ return link;
+}
+
+static void free_type_link(TypeLink *link)
+{
+ link->next = free_type_links;
+ free_type_links = link;
+}
+
+static TypeLink *run_length_encode_types(int *char_type, int type_len)
+{
+ TypeLink *list = NULL;
+ TypeLink *last;
+ TypeLink *link;
+ FriBidiCharType type;
+ int len, pos, i;
+
+ /* Add the starting link */
+ list = new_type_link();
+ list->type = FRIBIDI_TYPE_SOT;
+ list->len = 0;
+ list->pos = 0;
+ last = list;
+
+ /* Sweep over the string_types */
+ type = -1;
+ len = 0;
+ pos = -1;
+ for (i=0; i<=type_len; i++)
+ {
+ if (i==type_len || char_type[i] != type)
+ {
+ if (pos>=0)
+ {
+ link = new_type_link();
+ link->type = type;
+ link->pos = pos;
+ link->len = len;
+ last->next = link;
+ link->prev = last;
+ last = last->next;
+ }
+ if (i==type_len)
+ break;
+ len = 0;
+ pos = i;
+ }
+ type =char_type[i];
+ len++;
+ }
+
+ /* Add the ending link */
+ link = new_type_link();
+ link->type = FRIBIDI_TYPE_EOT;
+ link->len = 0;
+ link->pos = type_len;
+ last->next = link;
+ link->prev = last;
+
+ return list;
+}
+
+/* Some convenience macros */
+#define RL_TYPE(list) (list)->type
+#define RL_LEN(list) (list)->len
+#define RL_POS(list) (list)->pos
+#define RL_LEVEL(list) (list)->level
+
+static void compact_list(TypeLink *list)
+{
+ while(list)
+ {
+ if (list->prev
+ && RL_TYPE(list->prev) == RL_TYPE(list))
+ {
+ TypeLink *next = list->next;
+ list->prev->next = list->next;
+ list->next->prev = list->prev;
+ RL_LEN(list->prev) = RL_LEN(list->prev) + RL_LEN(list);
+ free_type_link(list);
+ list = next;
+ }
+ else
+ list = list->next;
+ }
+}
+
+/* Define a rule macro */
+
+/* Rules for overriding current type */
+#define TYPE_RULE1(old_this, \
+ new_this) \
+ if (this_type == TYPE_ ## old_this) \
+ RL_TYPE(pp) = FRIBIDI_TYPE_ ## new_this; \
+
+/* Rules for current and previous type */
+#define TYPE_RULE2(old_prev, old_this, \
+ new_prev, new_this) \
+ if ( prev_type == FRIBIDI_TYPE_ ## old_prev \
+ && this_type == FRIBIDI_TYPE_ ## old_this) \
+ { \
+ RL_TYPE(pp->prev) = FRIBIDI_TYPE_ ## new_prev; \
+ RL_TYPE(pp) = FRIBIDI_TYPE_ ## new_this; \
+ continue; \
+ }
+
+/* A full rule that assigns all three types */
+#define TYPE_RULE(old_prev, old_this, old_next, \
+ new_prev, new_this, new_next) \
+ if ( prev_type == FRIBIDI_TYPE_ ## old_prev \
+ && this_type == FRIBIDI_TYPE_ ## old_this \
+ && next_type == FRIBIDI_TYPE_ ## old_next) \
+ { \
+ RL_TYPE(pp->prev) = FRIBIDI_TYPE_ ## new_prev; \
+ RL_TYPE(pp) = FRIBIDI_TYPE_ ## new_this; \
+ RL_TYPE(pp->next) = FRIBIDI_TYPE_ ## new_next; \
+ continue; \
+ }
+
+/* For optimization the following macro only assigns the center type */
+#define TYPE_RULE_C(old_prev, old_this, old_next, \
+ new_this) \
+ if ( prev_type == FRIBIDI_TYPE_ ## old_prev \
+ && this_type == FRIBIDI_TYPE_ ## old_this \
+ && next_type == FRIBIDI_TYPE_ ## old_next) \
+ { \
+ RL_TYPE(pp) = FRIBIDI_TYPE_ ## new_this; \
+ continue; \
+ }
+
+/*======================================================================
+// This function should follow the Unicode specification closely!
+//
+// It is still lacking the support for <RLO> and <LRO>.
+//----------------------------------------------------------------------*/
+static void
+fribidi_analyse_string(/* input */
+ FriBidiChar *str,
+ int len,
+ FriBidiCharType *pbase_dir,
+ /* output */
+ TypeLink **ptype_rl_list,
+ gint *pmax_level)
+{
+ int base_level, base_dir;
+ int max_level;
+ int i;
+ int *char_type;
+ int prev_last_strong, last_strong;
+ TypeLink *type_rl_list, *pp;
+
+ /* Determinate character types */
+ char_type = g_new(gint, len);
+ for (i=0; i<len; i++)
+ char_type[i] = _pango_fribidi_get_type (str[i]);
+
+ /* Run length encode the character types */
+ type_rl_list = run_length_encode_types(char_type, len);
+ g_free(char_type);
+
+ /* Find the base level */
+ if (*pbase_dir == FRIBIDI_TYPE_L)
+ {
+ base_dir = FRIBIDI_TYPE_L;
+ base_level = 0;
+ }
+ else if (*pbase_dir == FRIBIDI_TYPE_R)
+ {
+ base_dir = FRIBIDI_TYPE_R;
+ base_level = 1;
+ }
+
+ /* Search for first strong character and use its direction as base
+ direciton */
+ else
+ {
+ base_level = 0; /* Default */
+ base_dir = FRIBIDI_TYPE_N;
+ for (pp = type_rl_list; pp; pp = pp->next)
+ {
+ if (RL_TYPE(pp) == FRIBIDI_TYPE_R)
+ {
+ base_level = 1;
+ base_dir = FRIBIDI_TYPE_R;
+ break;
+ }
+ else if (RL_TYPE(pp) == FRIBIDI_TYPE_L)
+ {
+ base_level = 0;
+ base_dir = FRIBIDI_TYPE_L;
+ break;
+ }
+ }
+
+ /* If no strong base_dir was found, resort to the weak direction
+ * that was passed on input.
+ */
+ if (base_dir == FRIBIDI_TYPE_N)
+ {
+ if (*pbase_dir == FRIBIDI_TYPE_WR)
+ {
+ base_dir = FRIBIDI_TYPE_RTL;
+ base_level = 1;
+ }
+ else if (*pbase_dir == FRIBIDI_TYPE_WL)
+ {
+ base_dir = FRIBIDI_TYPE_LTR;
+ base_level = 0;
+ }
+ }
+ }
+
+ /* 1. Explicit Levels and Directions. TBD! */
+ compact_list(type_rl_list);
+
+ /* 2. Explicit Overrides. TBD! */
+ compact_list(type_rl_list);
+
+ /* 3. Terminating Embeddings and overrides. TBD! */
+ compact_list(type_rl_list);
+
+ /* 4. Resolving weak types */
+ last_strong = base_dir;
+ for (pp = type_rl_list->next; pp->next; pp = pp->next)
+ {
+ int prev_type = RL_TYPE(pp->prev);
+ int this_type = RL_TYPE(pp);
+ int next_type = RL_TYPE(pp->next);
+
+ /* Remember the last strong character */
+ if (prev_type == FRIBIDI_TYPE_AL
+ || prev_type == FRIBIDI_TYPE_R
+ || prev_type == FRIBIDI_TYPE_L)
+ last_strong = prev_type;
+
+ /* W1. NSM */
+ if (this_type == FRIBIDI_TYPE_NSM)
+ {
+ if (prev_type == FRIBIDI_TYPE_SOT)
+ RL_TYPE(pp) = FRIBIDI_TYPE_N; /* Will be resolved to base dir */
+ else
+ RL_TYPE(pp) = prev_type;
+ }
+
+ /* W2: European numbers */
+ if (this_type == FRIBIDI_TYPE_N
+ && last_strong == FRIBIDI_TYPE_AL)
+ RL_TYPE(pp) = FRIBIDI_TYPE_AN;
+
+ /* W3: Change ALs to R
+ We have to do this for prev character as we would otherwise
+ interfer with the next last_strong which is FRIBIDI_TYPE_AL.
+ */
+ if (prev_type == FRIBIDI_TYPE_AL)
+ RL_TYPE(pp->prev) = FRIBIDI_TYPE_R;
+
+ /* W4. A single european separator changes to a european number.
+ A single common separator between two numbers of the same type
+ changes to that type.
+ */
+ if (RL_LEN(pp) == 1)
+ {
+ TYPE_RULE_C(EN,ES,EN, EN);
+ TYPE_RULE_C(EN,CS,EN, EN);
+ TYPE_RULE_C(AN,CS,AN, AN);
+ }
+
+ /* W5. A sequence of European terminators adjacent to European
+ numbers changes to All European numbers.
+ */
+ if (this_type == FRIBIDI_TYPE_ET)
+ {
+ if (next_type == FRIBIDI_TYPE_EN
+ || prev_type == FRIBIDI_TYPE_EN) {
+ RL_TYPE(pp) = FRIBIDI_TYPE_EN;
+ }
+ }
+
+ /* This type may have been overriden */
+ this_type = RL_TYPE(pp);
+
+ /* W6. Otherwise change separators and terminators to other neutral */
+ if (this_type == FRIBIDI_TYPE_ET
+ || this_type == FRIBIDI_TYPE_CS
+ || this_type == FRIBIDI_TYPE_ES)
+ RL_TYPE(pp) = FRIBIDI_TYPE_ON;
+
+ /* W7. Change european numbers to L. */
+ if (prev_type == FRIBIDI_TYPE_EN
+ && last_strong == FRIBIDI_TYPE_L)
+ RL_TYPE(pp->prev) = FRIBIDI_TYPE_L;
+ }
+
+ /* Handle the two rules that effect pp->prev for the last element */
+
+ if (RL_TYPE (pp->prev) == FRIBIDI_TYPE_AL) /* W3 */
+ RL_TYPE(pp->prev) = FRIBIDI_TYPE_R;
+ if (RL_TYPE (pp->prev) == FRIBIDI_TYPE_EN /* W7 */
+ && last_strong == FRIBIDI_TYPE_L)
+ RL_TYPE(pp->prev) = FRIBIDI_TYPE_L;
+
+
+ compact_list(type_rl_list);
+
+ /* 5. Resolving Neutral Types */
+
+ /* We can now collapse all separators and other neutral types to
+ plain neutrals */
+ for (pp = type_rl_list->next; pp->next; pp = pp->next)
+ {
+ int this_type = RL_TYPE(pp);
+
+ if ( this_type == FRIBIDI_TYPE_WS
+ || this_type == FRIBIDI_TYPE_ON
+ || this_type == FRIBIDI_TYPE_ES
+ || this_type == FRIBIDI_TYPE_ET
+ || this_type == FRIBIDI_TYPE_CS
+ || this_type == FRIBIDI_TYPE_BN)
+ RL_TYPE(pp) = FRIBIDI_TYPE_N;
+ }
+
+ compact_list(type_rl_list);
+
+ for (pp = type_rl_list->next; pp->next; pp = pp->next)
+ {
+ int prev_type = RL_TYPE(pp->prev);
+ int this_type = RL_TYPE(pp);
+ int next_type = RL_TYPE(pp->next);
+
+ if (this_type == FRIBIDI_TYPE_N) /* optimization! */
+ {
+ /* "European and arabic numbers are treated
+ as though they were R" */
+
+ if (prev_type == FRIBIDI_TYPE_EN || prev_type == FRIBIDI_TYPE_AN)
+ prev_type = FRIBIDI_TYPE_R;
+
+ if (next_type == FRIBIDI_TYPE_EN || next_type == FRIBIDI_TYPE_AN)
+ next_type = FRIBIDI_TYPE_R;
+
+ /* N1. */
+ TYPE_RULE_C(R,N,R, R);
+ TYPE_RULE_C(L,N,L, L);
+
+ /* N2. Any remaining neutrals takes the embedding direction */
+ if (RL_TYPE(pp) == FRIBIDI_TYPE_N)
+ RL_TYPE(pp) = FRIBIDI_TYPE_E;
+ }
+ }
+
+ compact_list(type_rl_list);
+
+ /* 6. Resolving Implicit levels */
+ {
+ int level = base_level;
+ max_level = base_level;
+
+ for (pp = type_rl_list->next; pp->next; pp = pp->next)
+ {
+ int this_type = RL_TYPE(pp);
+
+ /* This code should be expanded to handle explicit directions! */
+
+ /* Even */
+ if (level % 2 == 0)
+ {
+ if (this_type == FRIBIDI_TYPE_R)
+ RL_LEVEL(pp) = level + 1;
+ else if (this_type == FRIBIDI_TYPE_AN)
+ RL_LEVEL(pp) = level + 2;
+ else if (RL_TYPE(pp->prev) != FRIBIDI_TYPE_L && this_type == FRIBIDI_TYPE_EN)
+ RL_LEVEL(pp) = level + 2;
+ else
+ RL_LEVEL(pp) = level;
+ }
+ /* Odd */
+ else
+ {
+ if ( this_type == FRIBIDI_TYPE_L
+ || this_type == FRIBIDI_TYPE_AN
+ || this_type == FRIBIDI_TYPE_EN)
+ RL_LEVEL(pp) = level+1;
+ else
+ RL_LEVEL(pp) = level;
+ }
+
+ if (RL_LEVEL(pp) > max_level)
+ max_level = RL_LEVEL(pp);
+ }
+ }
+
+ compact_list(type_rl_list);
+
+ *ptype_rl_list = type_rl_list;
+ *pmax_level = max_level;
+ *pbase_dir = base_dir;
+}
+
+/*======================================================================
+// Here starts the exposed front end functions.
+//----------------------------------------------------------------------*/
+
+/*======================================================================
+// fribidi_embedding_levels() is used in order to just get the
+// embedding levels.
+//----------------------------------------------------------------------*/
+void
+pango_log2vis_get_embedding_levels(
+ /* input */
+ gunichar *str,
+ int len,
+ PangoDirection *pbase_dir,
+ /* output */
+ guint8 *embedding_level_list
+ )
+{
+ TypeLink *type_rl_list, *pp;
+ int max_level;
+ FriBidiCharType fribidi_base_dir;
+
+ fribidi_base_dir = (*pbase_dir == PANGO_DIRECTION_LTR) ? FRIBIDI_TYPE_L : FRIBIDI_TYPE_R;
+
+ fribidi_analyse_string(str, len, &fribidi_base_dir,
+ /* output */
+ &type_rl_list,
+ &max_level);
+
+ for (pp = type_rl_list->next; pp->next; pp = pp->next)
+ {
+ int i;
+ int pos = RL_POS(pp);
+ int len = RL_LEN(pp);
+ int level = RL_LEVEL(pp);
+ for (i=0; i<len; i++)
+ embedding_level_list[pos + i] = level;
+ }
+
+ /* Free up the rl_list */
+ pp->next = free_type_links;
+ free_type_links = type_rl_list;
+
+ *pbase_dir = (fribidi_base_dir == FRIBIDI_TYPE_L) ? PANGO_DIRECTION_LTR : PANGO_DIRECTION_RTL;
+}
+
diff --git a/pango/mini-fribidi/fribidi_get_type.c b/pango/mini-fribidi/fribidi_get_type.c
new file mode 100644
index 00000000..3daad57b
--- /dev/null
+++ b/pango/mini-fribidi/fribidi_get_type.c
@@ -0,0 +1,75 @@
+/* FriBidi - Library of BiDi algorithm
+ * Copyright (C) 1999 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include "pango/pango-utils.h"
+#include "fribidi_types.h"
+#include "fribidi_tables.i"
+
+/*======================================================================
+// fribidi_get_type() returns the bidi type of a character.
+//----------------------------------------------------------------------*/
+FriBidiCharType _pango_fribidi_get_type(FriBidiChar uch)
+{
+ guchar *block = FriBidiPropertyBlocks[uch / 256];
+ if (block)
+ return block[uch % 256];
+ else
+ return 0;
+}
+
+gboolean
+pango_get_mirror_char(/* Input */
+ gunichar ch,
+ /* Output */
+ gunichar *mirrored_ch)
+{
+ int pos, step;
+ gboolean found = FALSE;
+
+ pos = step = (nFriBidiMirroredChars/2)+1;
+
+ while(step > 1)
+ {
+ FriBidiChar cmp_ch = FriBidiMirroredChars[pos].ch;
+ step = (step+1)/2;
+
+ if (cmp_ch < ch)
+ {
+ pos += step;
+ if (pos>nFriBidiMirroredChars-1)
+ pos = nFriBidiMirroredChars-1;
+ }
+ else if (cmp_ch > ch)
+ {
+ pos -= step;
+ if (pos<0)
+ pos=0;
+ }
+ else
+ break;
+ }
+ if (FriBidiMirroredChars[pos].ch == ch)
+ {
+ *mirrored_ch = FriBidiMirroredChars[pos].mirrored_ch;
+ found = TRUE;
+ }
+ return found;
+}
+
diff --git a/pango/mini-fribidi/fribidi_tables.i b/pango/mini-fribidi/fribidi_tables.i
new file mode 100644
index 00000000..754ce66a
--- /dev/null
+++ b/pango/mini-fribidi/fribidi_tables.i
@@ -0,0 +1,1052 @@
+/*======================================================================
+// This file was automatically created from PropList-3.0.txt
+// by the perl script CreateGetType.pl.
+//----------------------------------------------------------------------*/
+
+#define LTR FRIBIDI_TYPE_LTR
+#define RTL FRIBIDI_TYPE_RTL
+#define EN FRIBIDI_TYPE_EN
+#define ES FRIBIDI_TYPE_ES
+#define ET FRIBIDI_TYPE_ET
+#define AN FRIBIDI_TYPE_AN
+#define CS FRIBIDI_TYPE_CS
+#define BS FRIBIDI_TYPE_BS
+#define SS FRIBIDI_TYPE_SS
+#define CTL FRIBIDI_TYPE_CTL
+#define LRE FRIBIDI_TYPE_LRE
+#define RLE FRIBIDI_TYPE_RLE
+#define LRO FRIBIDI_TYPE_LRO
+#define RLO FRIBIDI_TYPE_RLO
+#define WS FRIBIDI_TYPE_WS
+#define ON FRIBIDI_TYPE_ON
+#define AL FRIBIDI_TYPE_AL
+#define NSM FRIBIDI_TYPE_NSM
+#define BN FRIBIDI_TYPE_BN
+#define PDF FRIBIDI_TYPE_PDF
+#define EO FRIBIDI_TYPE_EO
+
+
+guchar FriBidiPropertyBlock0000[256] = {
+ BN ,BN ,BN ,BN ,BN ,BN ,BN ,BN ,BN ,SS ,BS ,SS ,WS ,BS ,BN ,BN ,
+ BN ,BN ,BN ,BN ,BN ,BN ,BN ,BN ,BN ,BN ,BN ,BN ,BS ,BS ,BS ,SS ,
+ WS ,ON ,ON ,ET ,ET ,ET ,ON ,ON ,ON ,ON ,ON ,ET ,CS ,ET ,CS ,ES ,
+ EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,CS ,ON ,ON ,ON ,ON ,ON ,
+ ON ,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,ON ,ON ,ON ,ON ,ON ,
+ ON ,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,ON ,ON ,ON ,ON ,BN ,
+ BN ,BN ,BN ,BN ,BN ,BS ,BN ,BN ,BN ,BN ,BN ,BN ,BN ,BN ,BN ,BN ,
+ BN ,BN ,BN ,BN ,BN ,BN ,BN ,BN ,BN ,BN ,BN ,BN ,BN ,BN ,BN ,BN ,
+ CS ,ON ,ET ,ET ,ET ,ET ,ON ,ON ,ON ,ON ,LTR,ON ,ON ,ON ,ON ,ON ,
+ ET ,ET ,EN ,EN ,ON ,LTR,ON ,ON ,ON ,EN ,LTR,ON ,ON ,ON ,ON ,ON ,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,ON ,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,ON ,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+};
+
+guchar FriBidiPropertyBlock0100[256] = {
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+};
+
+guchar FriBidiPropertyBlock0200[256] = {
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,ON ,ON ,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ LTR,LTR,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ LTR,LTR,LTR,LTR,LTR,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+};
+
+guchar FriBidiPropertyBlock0300[256] = {
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,ON ,ON ,ON ,ON ,ON ,ON ,LTR,LTR,LTR,LTR,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,LTR,ON ,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+};
+
+guchar FriBidiPropertyBlock0400[256] = {
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+};
+
+guchar FriBidiPropertyBlock0500[256] = {
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,RTL,NSM,
+ RTL,NSM,NSM,RTL,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+ RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+ RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+};
+
+guchar FriBidiPropertyBlock0600[256] = {
+ CS ,CS ,CS ,CS ,CS ,CS ,CS ,CS ,CS ,CS ,CS ,CS ,CS ,CS ,CS ,CS ,
+ CS ,CS ,CS ,CS ,CS ,CS ,CS ,CS ,CS ,CS ,CS ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ AN ,AN ,AN ,AN ,AN ,AN ,AN ,AN ,AN ,AN ,ET ,AN ,AN ,AL ,AL ,AL ,
+ NSM,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,AL ,AL ,NSM,NSM,ON ,NSM,NSM,NSM,NSM,NSM,NSM,
+ EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,AL ,AL ,AL ,AL ,AL ,AL ,
+};
+
+guchar FriBidiPropertyBlock0700[256] = {
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,BN ,
+ AL ,NSM,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+};
+
+guchar FriBidiPropertyBlock0900[256] = {
+ NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,LTR,
+ LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,NSM,NSM,NSM,
+ LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,LTR,LTR,
+ LTR,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,ET ,ET ,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+};
+
+guchar FriBidiPropertyBlock0a00[256] = {
+ NSM,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,LTR,LTR,
+ LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,LTR,
+ LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,NSM,NSM,NSM,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+};
+
+guchar FriBidiPropertyBlock0b00[256] = {
+ NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,NSM,
+ LTR,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+};
+
+guchar FriBidiPropertyBlock0c00[256] = {
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,
+ NSM,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,
+ LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+};
+
+guchar FriBidiPropertyBlock0d00[256] = {
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,NSM,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,NSM,NSM,LTR,
+ LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+};
+
+guchar FriBidiPropertyBlock0e00[256] = {
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,NSM,LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,ET ,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,NSM,LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+};
+
+guchar FriBidiPropertyBlock0f00[256] = {
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,NSM,LTR,NSM,LTR,NSM,ON ,ON ,ON ,ON ,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,
+ NSM,NSM,NSM,NSM,NSM,LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+};
+
+guchar FriBidiPropertyBlock1000[256] = {
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,
+ NSM,LTR,NSM,NSM,NSM,NSM,NSM,NSM,LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+};
+
+guchar FriBidiPropertyBlock1600[256] = {
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ WS ,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,ON ,ON ,ON ,ON ,ON ,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+};
+
+guchar FriBidiPropertyBlock1700[256] = {
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,ET ,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+};
+
+guchar FriBidiPropertyBlock1800[256] = {
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,BN ,BN ,BN ,BN ,BN ,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+};
+
+guchar FriBidiPropertyBlock1f00[256] = {
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,ON ,LTR,ON ,
+ ON ,ON ,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,ON ,ON ,ON ,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,ON ,ON ,ON ,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,ON ,ON ,ON ,
+ ON ,ON ,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,ON ,ON ,ON ,
+};
+
+guchar FriBidiPropertyBlock2000[256] = {
+ WS ,WS ,WS ,WS ,WS ,WS ,WS ,WS ,WS ,WS ,WS ,BN ,BN ,BN ,LTR,RTL,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,WS ,BS ,LRE,RLE,PDF,LRO,RLO,WS ,
+ ET ,ET ,ET ,ET ,ET ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,BN ,BN ,BN ,BN ,BN ,BN ,
+ EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,ET ,ET ,ON ,ON ,ON ,LTR,
+ EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,ET ,ET ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,
+ ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,
+ ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,ET ,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+};
+
+guchar FriBidiPropertyBlock2100[256] = {
+ ON ,ON ,LTR,ON ,ON ,ON ,ON ,LTR,ON ,ON ,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,ON ,LTR,ON ,ON ,ON ,LTR,LTR,LTR,LTR,LTR,ON ,ON ,
+ ON ,ON ,ON ,ON ,LTR,ON ,LTR,ON ,LTR,ON ,LTR,LTR,LTR,LTR,ET ,LTR,
+ LTR,LTR,ON ,LTR,LTR,LTR,LTR,LTR,LTR,LTR,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+};
+
+guchar FriBidiPropertyBlock2200[256] = {
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ET ,ET ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+};
+
+guchar FriBidiPropertyBlock2300[256] = {
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,LTR,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+};
+
+guchar FriBidiPropertyBlock2400[256] = {
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,
+ EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,
+ EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,
+ EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,EN ,EN ,EN ,EN ,EN ,EN ,
+ EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,
+};
+
+guchar FriBidiPropertyBlock2500[256] = {
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+};
+
+guchar FriBidiPropertyBlock3000[256] = {
+ WS ,ON ,ON ,ON ,ON ,LTR,LTR,LTR,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,
+ ON ,LTR,LTR,LTR,LTR,LTR,ON ,ON ,LTR,LTR,LTR,LTR,LTR,LTR,ON ,ON ,
+ ON ,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,ON ,ON ,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,ON ,LTR,LTR,LTR,LTR,
+};
+
+guchar FriBidiPropertyBlocka400[256] = {
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+};
+
+guchar FriBidiPropertyBlockf800[256] = {
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+};
+
+guchar FriBidiPropertyBlockfb00[256] = {
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,RTL,NSM,RTL,
+ RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,ET ,RTL,RTL,RTL,RTL,RTL,RTL,
+ RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+ RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+};
+
+guchar FriBidiPropertyBlockfc00[256] = {
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+};
+
+guchar FriBidiPropertyBlockfd00[256] = {
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+};
+
+guchar FriBidiPropertyBlockfe00[256] = {
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ CS ,ON ,CS ,CS ,ON ,CS ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ET ,
+ ON ,ON ,ET ,ET ,ON ,ON ,ON ,ON ,ON ,ET ,ET ,ON ,ON ,ON ,ON ,ON ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,
+ AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,AL ,BN ,
+};
+
+guchar FriBidiPropertyBlockff00[256] = {
+ ON ,ON ,ON ,ET ,ET ,ET ,ON ,ON ,ON ,ON ,ON ,ET ,CS ,ET ,CS ,ES ,
+ EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,EN ,CS ,ON ,ON ,ON ,ON ,ON ,
+ ON ,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,ON ,ON ,ON ,ON ,ON ,
+ ON ,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ ET ,ET ,ON ,ON ,ON ,ET ,ET ,ET ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,
+ ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,ON ,BN ,BN ,BN ,ON ,ON ,ON ,ON ,
+};
+
+/* 34 blocks defined */
+
+guchar *FriBidiPropertyBlocks[256] = {
+ FriBidiPropertyBlock0000,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0200,
+ FriBidiPropertyBlock0300,
+ FriBidiPropertyBlock0400,
+ FriBidiPropertyBlock0500,
+ FriBidiPropertyBlock0600,
+ FriBidiPropertyBlock0700,
+ NULL,
+ FriBidiPropertyBlock0900,
+ FriBidiPropertyBlock0a00,
+ FriBidiPropertyBlock0b00,
+ FriBidiPropertyBlock0c00,
+ FriBidiPropertyBlock0d00,
+ FriBidiPropertyBlock0e00,
+ FriBidiPropertyBlock0f00,
+ FriBidiPropertyBlock1000,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock1600,
+ FriBidiPropertyBlock1700,
+ FriBidiPropertyBlock1800,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock1f00,
+ FriBidiPropertyBlock2000,
+ FriBidiPropertyBlock2100,
+ FriBidiPropertyBlock2200,
+ FriBidiPropertyBlock2300,
+ FriBidiPropertyBlock2400,
+ FriBidiPropertyBlock2500,
+ FriBidiPropertyBlock2500,
+ FriBidiPropertyBlock2500,
+ FriBidiPropertyBlock2500,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ FriBidiPropertyBlock2500,
+ FriBidiPropertyBlock2500,
+ FriBidiPropertyBlock3000,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlocka400,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlockf800,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlock0100,
+ FriBidiPropertyBlockfb00,
+ FriBidiPropertyBlockfc00,
+ FriBidiPropertyBlockfd00,
+ FriBidiPropertyBlockfe00,
+ FriBidiPropertyBlockff00,
+};
+
+#undef LTR
+#undef RTL
+#undef EN
+#undef ES
+#undef ET
+#undef AN
+#undef CS
+#undef BS
+#undef SS
+#undef CTL
+#undef LRE
+#undef RLE
+#undef LRO
+#undef RLO
+#undef WS
+#undef ON
+#undef AL
+#undef NSM
+#undef BN
+#undef PDF
+#undef EO
+
+
+/*======================================================================
+// Mirrored characters include all the characters in the Unicode list
+// that have been declared as being mirrored and that have a mirrored
+// equivalent.
+//
+// There are lots of characters that are designed as being mirrored
+// but do not have any mirrored glyph, e.g. the sign for there exist.
+// Are these used in Arabic? That is are all the mathematical signs
+// that are assigned to be mirrorable actually mirrored in Arabic?
+// If that is the case, I'll change the below code to include also
+// characters that mirror to themself. It will then be the responsibility
+// of the display engine to actually mirror these.
+//----------------------------------------------------------------------*/
+
+struct {
+ FriBidiChar ch, mirrored_ch;
+} FriBidiMirroredChars[] = {
+ {0x0028, 0x0029},
+ {0x0029, 0x0028},
+ {0x003C, 0x003E},
+ {0x003E, 0x003C},
+ {0x005B, 0x005D},
+ {0x005D, 0x005B},
+ {0x007B, 0x007D},
+ {0x007D, 0x007B},
+ {0x00AB, 0x00BB},
+ {0x00BB, 0x00AB},
+ {0x2039, 0x203A},
+ {0x203A, 0x2039},
+ {0x2045, 0x2046},
+ {0x2046, 0x2045},
+ {0x207D, 0x207E},
+ {0x207E, 0x207D},
+ {0x208D, 0x208E},
+ {0x208E, 0x208D},
+ {0x2264, 0x2265},
+ {0x2265, 0x2264},
+ {0x2266, 0x2267},
+ {0x2267, 0x2266},
+ {0x2268, 0x2269},
+ {0x2269, 0x2268},
+ {0x226A, 0x226B},
+ {0x226B, 0x226A},
+ {0x226E, 0x226F},
+ {0x226F, 0x226E},
+ {0x2270, 0x2271},
+ {0x2271, 0x2270},
+ {0x2272, 0x2273},
+ {0x2273, 0x2272},
+ {0x2274, 0x2275},
+ {0x2275, 0x2274},
+ {0x22A2, 0x22A3},
+ {0x22A3, 0x22A2},
+ {0x22C9, 0x22CA},
+ {0x22CA, 0x22C9},
+ {0x22CB, 0x22CC},
+ {0x22CC, 0x22CB},
+ {0x22D6, 0x22D7},
+ {0x22D7, 0x22D6},
+ {0x22D8, 0x22D9},
+ {0x22D9, 0x22D8},
+ {0x22DC, 0x22DD},
+ {0x22DD, 0x22DC},
+ {0x22E6, 0x22E7},
+ {0x22E7, 0x22E6},
+ {0x22F0, 0x22F1},
+ {0x22F1, 0x22F0},
+ {0x2308, 0x2309},
+ {0x2309, 0x2308},
+ {0x230A, 0x230B},
+ {0x230B, 0x230A},
+ {0x2329, 0x232A},
+ {0x232A, 0x2329},
+ {0x3008, 0x3009},
+ {0x3009, 0x3008},
+ {0x300A, 0x300B},
+ {0x300B, 0x300A},
+ {0x300C, 0x300D},
+ {0x300D, 0x300C},
+ {0x300E, 0x300F},
+ {0x300F, 0x300E},
+ {0x3010, 0x3011},
+ {0x3011, 0x3010},
+ {0x3014, 0x3015},
+ {0x3015, 0x3014},
+ {0x3016, 0x3017},
+ {0x3017, 0x3016},
+ {0x3018, 0x3019},
+ {0x3019, 0x3018},
+ {0x301A, 0x301B},
+ {0x301B, 0x301A}
+};
+
+gint nFriBidiMirroredChars = 74;
diff --git a/pango/mini-fribidi/fribidi_types.h b/pango/mini-fribidi/fribidi_types.h
new file mode 100644
index 00000000..edb9637e
--- /dev/null
+++ b/pango/mini-fribidi/fribidi_types.h
@@ -0,0 +1,101 @@
+/* FriBidi - Library of BiDi algorithm
+ * Copyright (C) 1999 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#ifndef FRIBIDI_TYPES_H
+#define FRIBIDI_TYPES_H
+
+#include <glib.h>
+
+typedef guint32 FriBidiChar;
+
+#if 0
+/* Classifications of the various Bidi properties */
+typedef enum
+{
+ FRIBIDI_TYPE_LTR = 0x01000000, /* Strong left to right */
+ FRIBIDI_TYPE_RTL = 0x02000000, /* Strong right to left */
+ FRIBIDI_TYPE_WL = 0x01000001, /* Weak left to right */
+ FRIBIDI_TYPE_WR = 0x02000002, /* Weak right to left */
+ FRIBIDI_TYPE_EN = 0x03000000, /* European digit */
+ FRIBIDI_TYPE_ES = 0x04000000, /* European number separator */
+ FRIBIDI_TYPE_ET = 0x05000000, /* European number terminator */
+ FRIBIDI_TYPE_AN = 0x06000000, /* Arabic digit */
+ FRIBIDI_TYPE_CS = 0x07000000, /* Common Separator */
+ FRIBIDI_TYPE_BS = 0x08000000, /* Block separator */
+ FRIBIDI_TYPE_SS = 0x09000000, /* Segment separator */
+ FRIBIDI_TYPE_WS = 0x0A000000, /* Whitespace */
+ FRIBIDI_TYPE_CTL = 0x10000090, /* Control units */
+ FRIBIDI_TYPE_ON = 0x80000009, /* Other Neutral */
+
+ /* The following are only used internally */
+ FRIBIDI_TYPE_L = 0x01000000,
+ FRIBIDI_TYPE_R = 0x02000000,
+ FRIBIDI_TYPE_BN = 0xF1000000,
+ FRIBIDI_TYPE_CM = 0xF2000000,
+ FRIBIDI_TYPE_SOT = 0xF3000000,
+ FRIBIDI_TYPE_EOT = 0xF4000000,
+ FRIBIDI_TYPE_N = 0xF5000000,
+ FRIBIDI_TYPE_E = 0xF6000000,
+} FriBidiCharType;
+#endif
+
+typedef enum
+{
+ FRIBIDI_TYPE_LTR , /* Strong left to right */
+ FRIBIDI_TYPE_RTL , /* Right to left characters */
+ FRIBIDI_TYPE_WL , /* Weak left to right */
+ FRIBIDI_TYPE_WR , /* Weak right to left */
+ FRIBIDI_TYPE_EN , /* European digit */
+ FRIBIDI_TYPE_ES , /* European number separator */
+ FRIBIDI_TYPE_ET , /* European number terminator */
+ FRIBIDI_TYPE_AN , /* Arabic digit */
+ FRIBIDI_TYPE_CS , /* Common Separator */
+ FRIBIDI_TYPE_BS , /* Block separator */
+ FRIBIDI_TYPE_SS , /* Segment separator */
+ FRIBIDI_TYPE_WS , /* Whitespace */
+ FRIBIDI_TYPE_AL , /* Arabic characters */
+ FRIBIDI_TYPE_NSM , /* Non spacing mark */
+ FRIBIDI_TYPE_LRE , /* Left-To-Right embedding */
+ FRIBIDI_TYPE_RLE , /* Right-To-Left embedding */
+ FRIBIDI_TYPE_LRO , /* Left-To-Right override */
+ FRIBIDI_TYPE_RLO , /* Right-To-Left override */
+ FRIBIDI_TYPE_PDF , /* Pop directional override */
+ FRIBIDI_TYPE_ON , /* Other Neutral */
+
+ /* The following are only used internally */
+ FRIBIDI_TYPE_L = FRIBIDI_TYPE_LTR,
+ FRIBIDI_TYPE_R = FRIBIDI_TYPE_RTL,
+ FRIBIDI_TYPE_BN = FRIBIDI_TYPE_ON + 2,
+ FRIBIDI_TYPE_CM ,
+ FRIBIDI_TYPE_SOT ,
+ FRIBIDI_TYPE_EOT ,
+ FRIBIDI_TYPE_N ,
+ FRIBIDI_TYPE_E ,
+ FRIBIDI_TYPE_CTL , /* Control units */
+ FRIBIDI_TYPE_EO , /* Control units */
+} FriBidiCharType;
+
+/* The following type is used by fribidi_utils */
+typedef struct {
+ int length;
+ void *attribute;
+} FriBidiRunType;
+
+FriBidiCharType _pango_fribidi_get_type(FriBidiChar uch);
+
+#endif
diff --git a/pango/pango-context.c b/pango/pango-context.c
index fb4bc55e..dbdb5801 100644
--- a/pango/pango-context.c
+++ b/pango/pango-context.c
@@ -22,8 +22,8 @@
#include <string.h>
#include <stdlib.h>
-#include <fribidi/fribidi.h>
-#include <pango/pango-context.h>
+#include "pango/pango-context.h"
+#include "pango/pango-utils.h"
#include "iconv.h"
#include "pango-modules.h"
@@ -531,7 +531,7 @@ pango_itemize (PangoContext *context,
gunichar *text_ucs4;
int n_chars, i;
guint8 *embedding_levels;
- FriBidiCharType base_dir;
+ PangoDirection base_dir;
PangoItem *item;
const char *p;
const char *next;
@@ -550,11 +550,8 @@ pango_itemize (PangoContext *context,
if (length == 0)
return NULL;
- if (context->base_dir == PANGO_DIRECTION_RTL)
- base_dir = FRIBIDI_TYPE_RTL;
- else
- base_dir = FRIBIDI_TYPE_LTR;
-
+ base_dir = context->base_dir;
+
if (length == 0)
return NULL;
@@ -568,7 +565,7 @@ pango_itemize (PangoContext *context,
n_chars = g_utf8_strlen (text + start_index, length);
embedding_levels = g_new (guint8, n_chars);
- fribidi_log2vis_get_embedding_levels (text_ucs4, n_chars, &base_dir,
+ pango_log2vis_get_embedding_levels (text_ucs4, n_chars, &base_dir,
embedding_levels);
/* Storing these as ranges would be a lot more efficient,
diff --git a/pango/pango-utils.c b/pango/pango-utils.c
index 12c8d0a7..b8ce0d58 100644
--- a/pango/pango-utils.c
+++ b/pango/pango-utils.c
@@ -29,6 +29,10 @@
#include "pango-font.h"
#include "pango-utils.h"
+#ifdef HAVE_FRIBIDI
+#include <fribidi/fribidi.h>
+#endif
+
#ifndef HAVE_FLOCKFILE
# define flockfile(f) (void)1
# define funlockfile(f) (void)1
@@ -895,3 +899,30 @@ pango_parse_stretch (const char *str,
return FALSE;
}
+#ifdef HAVE_FRIBIDI
+
+void
+pango_log2vis_get_embedding_levels (gunichar *str,
+ int len,
+ PangoDirection *pbase_dir,
+ guint8 *embedding_level_list)
+{
+ FriBidiCharType fribidi_base_dir;
+
+ fribidi_base_dir = (*pbase_dir == PANGO_DIRECTION_LTR) ? FRIBIDI_TYPE_L : FRIBIDI_TYPE_R;
+
+ fribidi_log2vis_get_embedding_levels (str, len, &fribidi_base_dir,
+ embedding_level_list);
+
+ *pbase_dir = (fribidi_base_dir == FRIBIDI_TYPE_L) ? PANGO_DIRECTION_LTR : PANGO_DIRECTION_RTL;
+}
+
+
+gboolean
+pango_get_mirror_char (gunichar ch,
+ gunichar *mirrored_ch)
+{
+ return fribidi_get_mirror_char (ch, mirrored_ch);
+}
+
+#endif /* HAVE_FRIBIDI */
diff --git a/pango/pango-utils.h b/pango/pango-utils.h
index 44cbdeec..35ef8127 100644
--- a/pango/pango-utils.h
+++ b/pango/pango-utils.h
@@ -73,3 +73,13 @@ char * pango_get_sysconf_subdirectory (void);
*/
char * pango_get_lib_subdirectory (void);
+
+/* A couple of routines from fribidi that we either wrap or
+ * provide ourselves.
+ */
+void pango_log2vis_get_embedding_levels (gunichar *str,
+ int len,
+ PangoDirection *pbase_dir,
+ guint8 *embedding_level_list);
+gboolean pango_get_mirror_char (gunichar ch,
+ gunichar *mirrored_ch);
diff --git a/pango/pangoft2.c b/pango/pangoft2.c
index 589e8826..8f9e4133 100644
--- a/pango/pangoft2.c
+++ b/pango/pangoft2.c
@@ -28,8 +28,8 @@
#include <glib.h>
#include <freetype/freetype.h>
-#include <fribidi/fribidi.h>
+#include "pango-utils.h"
#include "pangoft2.h"
#include "pangoft2-private.h"
@@ -543,7 +543,7 @@ get_font_metrics_from_string (PangoFont *font,
gunichar *text_ucs4;
int n_chars, i;
guint8 *embedding_levels;
- FriBidiCharType base_dir = PANGO_DIRECTION_LTR;
+ PangoDirection base_dir = PANGO_DIRECTION_LTR;
GSList *subfonts = NULL;
n_chars = g_utf8_strlen (str, -1);
@@ -553,8 +553,8 @@ get_font_metrics_from_string (PangoFont *font,
return;
embedding_levels = g_new (guint8, n_chars);
- fribidi_log2vis_get_embedding_levels (text_ucs4, n_chars, &base_dir,
- embedding_levels);
+ pango_log2vis_get_embedding_levels (text_ucs4, n_chars, &base_dir,
+ embedding_levels);
g_free (text_ucs4);
last_shaper = NULL;
diff --git a/pango/pangowin32.c b/pango/pangowin32.c
index c1ae86bf..cd61124a 100644
--- a/pango/pangowin32.c
+++ b/pango/pangowin32.c
@@ -27,6 +27,7 @@
#include <fribidi/fribidi.h>
+#include "pango-utils.h"
#include "pangowin32.h"
#include "pangowin32-private.h"
@@ -673,7 +674,7 @@ get_font_metrics_from_string (PangoFont *font,
gunichar *text_ucs4;
int n_chars, i;
guint8 *embedding_levels;
- FriBidiCharType base_dir = PANGO_DIRECTION_LTR;
+ PangoDirection base_dir = PANGO_DIRECTION_LTR;
GSList *subfonts = NULL;
n_chars = g_utf8_strlen (str, -1);
@@ -683,8 +684,8 @@ get_font_metrics_from_string (PangoFont *font,
return;
embedding_levels = g_new (guint8, n_chars);
- fribidi_log2vis_get_embedding_levels (text_ucs4, n_chars, &base_dir,
- embedding_levels);
+ pango_log2vis_get_embedding_levels (text_ucs4, n_chars, &base_dir,
+ embedding_levels);
g_free (text_ucs4);
last_shaper = NULL;
diff --git a/pango/pangox.c b/pango/pangox.c
index 4a4233fa..5d9965a6 100644
--- a/pango/pangox.c
+++ b/pango/pangox.c
@@ -27,6 +27,7 @@
#include <X11/Xlib.h>
#include <fribidi/fribidi.h>
#include "pangox.h"
+#include "pango-utils.h"
#include "pangox-private.h"
#include "pango-intset.h"
@@ -573,7 +574,7 @@ get_font_metrics_from_string (PangoFont *font,
gunichar *text_ucs4;
int n_chars, i;
guint8 *embedding_levels;
- FriBidiCharType base_dir = PANGO_DIRECTION_LTR;
+ PangoDirection base_dir = PANGO_DIRECTION_LTR;
GSList *subfonts = NULL;
n_chars = g_utf8_strlen (str, -1);
@@ -583,8 +584,8 @@ get_font_metrics_from_string (PangoFont *font,
return;
embedding_levels = g_new (guint8, n_chars);
- fribidi_log2vis_get_embedding_levels (text_ucs4, n_chars, &base_dir,
- embedding_levels);
+ pango_log2vis_get_embedding_levels (text_ucs4, n_chars, &base_dir,
+ embedding_levels);
g_free (text_ucs4);
last_shaper = NULL;