summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2000-11-12 21:16:39 +0000
committerOwen Taylor <otaylor@src.gnome.org>2000-11-12 21:16:39 +0000
commitf726b8d49d00e325314ee6f17cf1f7eaed1fd019 (patch)
tree6041b8551149c167352c65fda63c3e7aaeb88d9b
parent1ff8a34d8c98aa47438515abd16f531e838d7404 (diff)
downloadpango-f726b8d49d00e325314ee6f17cf1f7eaed1fd019.tar.gz
Include a stripped-down version of fribidi to avoid the extra dependency.
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.
-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;