summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.cvsignore19
-rw-r--r--.indent.pro19
-rw-r--r--AUTHORS1
-rw-r--r--COPYING504
-rw-r--r--HACKING7
-rw-r--r--HISTORY34
-rw-r--r--Makefile.am54
-rw-r--r--NEWS18
-rw-r--r--README152
-rw-r--r--THANKS33
-rw-r--r--TODO13
-rw-r--r--bin/Makefile.am25
-rw-r--r--bin/fribidi-benchmark.c278
-rw-r--r--bin/fribidi-main.c597
-rw-r--r--bin/getopt.c1268
-rw-r--r--bin/getopt.h187
-rw-r--r--bin/getopt1.c213
-rw-r--r--bin/getopt_int.h145
-rwxr-xr-xbootstrap110
-rw-r--r--charset/Headers.mk9
-rw-r--r--charset/Makefile.am48
-rw-r--r--charset/fribidi-char-sets-cap-rtl.c336
-rw-r--r--charset/fribidi-char-sets-cap-rtl.h70
-rw-r--r--charset/fribidi-char-sets-cp1255.c106
-rw-r--r--charset/fribidi-char-sets-cp1255.h62
-rw-r--r--charset/fribidi-char-sets-cp1256.c223
-rw-r--r--charset/fribidi-char-sets-cp1256.h62
-rw-r--r--charset/fribidi-char-sets-iso8859-6.c81
-rw-r--r--charset/fribidi-char-sets-iso8859-6.h62
-rw-r--r--charset/fribidi-char-sets-iso8859-8.c120
-rw-r--r--charset/fribidi-char-sets-iso8859-8.h62
-rw-r--r--charset/fribidi-char-sets-list.h56
-rw-r--r--charset/fribidi-char-sets-utf8.c126
-rw-r--r--charset/fribidi-char-sets-utf8.h66
-rw-r--r--charset/fribidi-char-sets.c230
-rw-r--r--charset/fribidi-char-sets.h125
-rw-r--r--configure.ac208
-rw-r--r--doc/Makefile.am27
-rw-r--r--fribidi.pc.in13
-rw-r--r--fribidi.spec.in145
-rw-r--r--gen.tab/Makefile.am0
-rw-r--r--gen.tab/gen-bidi-type-tab.c267
-rw-r--r--gen.tab/gen-mirroring-tab.c152
-rw-r--r--gen.tab/packtab.c364
-rw-r--r--gen.tab/packtab.h49
-rw-r--r--gen.tab/unidata/BidiMirroring.txt525
-rw-r--r--gen.tab/unidata/ReadMe.txt40
-rw-r--r--gen.tab/unidata/extracted/DerivedBidiClass.txt1299
-rw-r--r--gen.tab/unidata/extracted/DerivedDecompositionType.txt933
-rw-r--r--gen.tab/unidata/extracted/DerivedJoiningType.txt215
-rw-r--r--lib/Headers.mk14
-rw-r--r--lib/Makefile.am75
-rw-r--r--lib/bidi-type-table.i5228
-rw-r--r--lib/bidi-types-list.h69
-rw-r--r--lib/bidi-types.h78
-rw-r--r--lib/common.h110
-rw-r--r--lib/debug.h87
-rw-r--r--lib/fribidi-begindecls.h1
-rw-r--r--lib/fribidi-bidi-type.c79
-rw-r--r--lib/fribidi-bidi-type.h74
-rw-r--r--lib/fribidi-bidi-types.c76
-rw-r--r--lib/fribidi-bidi-types.h278
-rw-r--r--lib/fribidi-bidi.c1424
-rw-r--r--lib/fribidi-bidi.h112
-rw-r--r--lib/fribidi-common.h83
-rw-r--r--lib/fribidi-config.h.in22
-rw-r--r--lib/fribidi-enddecls.h1
-rw-r--r--lib/fribidi-env.c107
-rw-r--r--lib/fribidi-env.h125
-rw-r--r--lib/fribidi-mem.c94
-rw-r--r--lib/fribidi-mirroring.c90
-rw-r--r--lib/fribidi-mirroring.h67
-rw-r--r--lib/fribidi-types.h143
-rw-r--r--lib/fribidi-unicode-version.h4
-rw-r--r--lib/fribidi-unicode.h101
-rw-r--r--lib/fribidi.c68
-rw-r--r--lib/fribidi.h48
-rw-r--r--lib/mem.h90
-rw-r--r--lib/mirroring-table.i358
-rw-r--r--test/Makefile.am33
-rwxr-xr-xtest/run.tests74
-rw-r--r--test/test_CapRTL_explicit.input13
-rw-r--r--test/test_CapRTL_explicit.reference13
-rw-r--r--test/test_CapRTL_implicit.input26
-rw-r--r--test/test_CapRTL_implicit.reference26
-rw-r--r--test/test_ISO8859-8_hebrew.input17
-rw-r--r--test/test_ISO8859-8_hebrew.reference17
-rw-r--r--test/test_UTF-8_persian.input14
-rw-r--r--test/test_UTF-8_persian.reference14
-rw-r--r--test/test_UTF-8_reordernsm.input7
-rw-r--r--test/test_UTF-8_reordernsm.reference7
91 files changed, 19125 insertions, 0 deletions
diff --git a/.cvsignore b/.cvsignore
new file mode 100644
index 0000000..ce21673
--- /dev/null
+++ b/.cvsignore
@@ -0,0 +1,19 @@
+ChangeLog.bak
+INSTALL
+aclocal.m4
+autom4te.cache
+fribidi.pc
+fribidi.spec
+config.guess
+config.h
+config.h.in
+config.log
+config.status
+config.sub
+configure
+depcomp
+install-sh
+libtool
+ltmain.sh
+missing
+stamp-h1
diff --git a/.indent.pro b/.indent.pro
new file mode 100644
index 0000000..35a5cb6
--- /dev/null
+++ b/.indent.pro
@@ -0,0 +1,19 @@
+-gnu
+-bfda
+-bfde
+-T TypeLink
+-T LevelInfo
+-T FriBidiChar
+-T FriBidiStrIndex
+-T FriBidiMaskType
+-T FriBidiCharType
+-T FriBidiPropCharType
+-T FriBidiLevel
+-T FriBidiCharSet
+-T FriBidiCharSetHandler
+-T FriBidiMemChunk
+-T FriBidiEnv
+-T fribidi_uint8
+-T fribidi_uint16
+-T fribidi_uint32
+-T fribidi_boolean
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..56e66e8
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1 @@
+behdad: Behdad Esfahbod <behdad@gnu.org>
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..b1e3f5a
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,504 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser 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
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/HACKING b/HACKING
new file mode 100644
index 0000000..05a0c41
--- /dev/null
+++ b/HACKING
@@ -0,0 +1,7 @@
+
+The GIMP uses GNU Libtool in order to build shared libraries on a
+variety of systems. While this is very nice for making usable
+binaries, it can be a pain when trying to debug a program. For that
+reason, compilation of shared libraries can be turned off by
+specifying the `--disable-shared' option to `configure'.
+
diff --git a/HISTORY b/HISTORY
new file mode 100644
index 0000000..034003a
--- /dev/null
+++ b/HISTORY
@@ -0,0 +1,34 @@
+FriBidi was first developed by Dov Grobgeld of the Ivrix project, a few
+releases happened there, up to 0.1.15. This was late 2000.
+
+Behdad Esfahbod of the FarsiWeb project started reading and hacking FriBidi
+in the same days. As per request of Roozbeh Pournader from the FarsiWeb
+project, FriBidi development was moved to SourceForge (http://www.sf.net/),
+under the same name (http://fribidi.sf.net/).
+
+Behdad started applying patches in early 2001, and became the new
+maintainer. He first aimed for full compliance of the standard, and then
+applied the GNU Coding Standards. The effort was then released in the
+Iranian New Year celebrations on 2001-03-29 as FriBidi 0.9.0.
+
+Since then, FriBidi has been quite stable. A few other releases were made,
+to fix bugs, code cleanup, etc which all led to the release of FriBidi
+0.10.4 on 2002-05-19. It turned out to be quite stable, and is shipped by
+several distributions these days (~2003).
+
+Behdad promised a major redesign of the interface and the code to code, but
+it almost never happened, at least not before Iranian New Years of March
+2004. In the mean time, FriBidi was dubbed as a GNU package by Richard
+Stallman. The first time was in 2002, and he mis-spelled it as "FreeBidi".
+Next time in 2003 he addressed the correct name "FriBidi", but the
+transition to gnu.org (http://www.gnu.org/) never happened, due to long
+down-times of gnu.org due to several administrative problems.
+
+GNU FriBidi was finally moved to the FreeDesktop project
+(http://www.freedesktop.org), which it lives a peaceful life these days
+(http://www.freedesktop.org/Software/FriBidi). Major cleanup made to the
+build system, and was reimported from scratch in the FreeDesktop CVS. The
+old CVS repository is still available under the "fribidi-sf.net" module.
+
+You can find more details in the file ChangeLog.old in the GNU FriBidi CVS
+repository.
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..2565fed
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,54 @@
+##############################################################################
+## $Id: Makefile.am,v 1.1 2004-04-25 18:47:57 behdad Exp $
+## $Author: behdad $
+## $Date: 2004-04-25 18:47:57 $
+## $Revision: 1.1 $
+## $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/Makefile.am,v $
+##############################################################################
+## -*- Automake -*-
+## Process this file with automake to produce Makefile.in
+
+## The order of subdirs is important, don't change without a reason.
+SUBDIRS = tablegen charset lib bin doc test
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = @PACKAGE@.pc
+
+MAINTAINERCLEANFILES = \
+ $(srcdir)/INSTALL \
+ $(srcdir)/aclocal.m4 \
+ $(srcdir)/autoscan.log \
+ $(srcdir)/compile \
+ $(srcdir)/config.guess \
+ $(srcdir)/config.h.in \
+ $(srcdir)/config.sub \
+ $(srcdir)/configure \
+ $(srcdir)/configure.scan \
+ $(srcdir)/depcomp \
+ $(srcdir)/install-sh \
+ $(srcdir)/ltmain.sh \
+ $(srcdir)/missing \
+ `find "$(srcdir)" -type f -name Makefile.in -print` \
+ `find "$(srcdir)" -type f -name "*~" -print`
+
+# Indent all C source and header files
+
+.PHONY: indent
+
+indent: $(srcdir)/.indent.pro
+ cd "$(srcdir)" && \
+ find . -type f -mindepth 2 -name "*.[ch]" -print | \
+ xargs ./missing --run indent
+
+
+# Creating ChangeLog from CVS log, with cvs2cl:
+
+MAINTAINERCLEANFILES += ChangeLog ChangeLog.bak
+
+EXTRA_DIST = ChangeLog
+
+ChangeLog:
+ if test -d "$(srcdir)/CVS"; then \
+ cd "$(srcdir)" && \
+ ./missing --run cvs2cl --stdout --utc --FSF -U AUTHORS; \
+ fi > $@
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..49eac46
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,18 @@
+Overview of changes between 0.10.4 and 0.19.0
+=============================================
+* Unicode 4.0.1 data files used.
+* Has been dubbed GNU FriBidi by Richard Stallman
+* Restructured.
+
+Overview of changes between 0.10.2 and 0.10.4
+=============================================
+* Unicode 3.2 data files used.
+
+Overview of changes between 0.10.1 and 0.10.2
+=============================================
+* Rule L3 of UAX#9 implemented. Now fribidi implements the whole Unicode
+ BiDi Algorithm.
+* The autogenerated table files now contain much fewer symbols, which reduces
+ the relocation time of the library.
+
+See ChangeLog for more descriptive list of changes.
diff --git a/README b/README
new file mode 100644
index 0000000..d3b8554
--- /dev/null
+++ b/README
@@ -0,0 +1,152 @@
+This is GNU FriBidi
+The Free Implementation of the Unicode Bidirectional Algorithm.
+
+Background
+==========
+
+One of the missing links stopping the penetration of free software in Middle
+East is the lack of support for the Arabic and Hebrew alphabets. In order to
+have proper Arabic and Hebrew support, the BiDi algorithm should have been
+implemented. It is our hope that this library will stimulate more free
+software in the Middle Eastern countries.
+
+Audience
+========
+
+It is our 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 benefit from the use of the GNU FriBidi library, but of course there are
+many more: Wine, Mozilla, Qt, KDE, lynx, OpenOffice.
+
+GNU FriBidi is already being used in projects like Pango (resulting in GTK+
+and GNOME using GNU FriBidi), AbiWord, MLTerm, MPlayer, and BiCon.
+
+Dependencies
+============
+
+Currently GNU FriBidi does not depend on any other library. It uses GNU Build
+System for build and installation on POSIX systems. There are some files to
+assist you creating a w32 DLL in the w32/ folder.
+
+Downloading
+===========
+
+The latest version of GNU FriBidi may be found at:
+
+ http://www.freedesktop.org/Software/FriBidi
+
+Building
+========
+
+See INSTALL for a description of how to build and install this library.
+
+License
+=========
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 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
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this library, in a file named COPYING; if not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+Boston, MA 02111-1307 USA
+
+Implementation
+==============
+
+The library implements the algorithm described in the "Unicode Standard
+Annex #9, The Bidirectional Algorithm", available at
+http://www.unicode.org/unicode/reports/tr9/. GNU Fribidi has been tested
+exhaustively against the Unicode Reference Code, and to the best of our
+knowledge, it completely conforms to the specification, always producing
+the same result as the Reference Code.
+
+The library uses Unicode (UTF32) entirely. The character properties are
+automatically extracted from the Unicode data files, available from:
+
+ http://www.unicode.org/Public/UNIDATA/
+
+This means that every Unicode character is treated in strict accordance
+with the Unicode specification.
+
+There is a limited support for character set conversion from/to the UTF32
+encoding. Data in these character sets must be converted into UTF32 before
+the library may be used. iconv(3) can always do a better job on that, so you
+may find that the character sets conversion code is typically turned off on
+POSIX machines.
+
+The reordering of characters is typically done through the function:
+
+ fribidi_boolean
+ fribidi_log2vis(/* input */
+ FriBidiChar *str,
+ FriBidiStrIndex len,
+ FriBidiCharType *pbase_dir,
+ /* output */
+ FriBidiChar *visual_str,
+ FriBidiStrIndex *position_L_to_V_list,
+ FriBidiStrIndex *position_V_to_L_list,
+ FriBidiLevel *embedding_level_list
+ )
+
+
+where
+ str is the Unicode input string
+ len is the length of the unicode string
+ pbase_dir is the input and output base direction. If
+ base == FRIBIDI_TYPE_ON then fribidi_log2vis
+ calculates the base direction on its own
+ according to the BiDi algorithm.
+ visual_str The reordered output unicode string.
+ position_L_to_V_list Maps the positions in the logical string to
+ positions in the visual string.
+ position_V_to_L_list Maps the positions in the visual string to
+ the positions in the logical string.
+ embedding_level_list Returns the classification of each character. Even
+ levels indicate LTR characters, and odd levels
+ indicate RTL characters. The main use of this
+ list is in interactive applications when the
+ embedding e.g. level determines cursor display.
+
+In any of the output pointers == NULL, then that information is not
+calculated.
+
+How it looks like
+=================
+
+Have a look at tests directory, to see some input and outputs, which
+CapRTL charset means that CAPITAL letters are right to left, and digits
+6, 7, 8, 9 are Arabic digits, try 'fribidi --charsetdesc CapRTL' for the
+full description.
+
+Executable
+==========
+
+There is also a command-line utilitity called fribidi that loops over
+the text of a file and performs the BiDi algorithm on each line, also
+used for testing the algorithm. Run fribidi with the --help option to
+learn about usage. The command-line utility is known to have problems
+with line-breaking and ltov/vtol lists.
+
+Bugs and comments
+=================
+
+Report GNU FriBidi bugs at:
+
+ http://freedesktop.org/cgi-bin/bugzilla/enter_bug.cgi?product=FriBidi
+
+And send your comments to:
+
+ fribidi-discuss@lists.sourceforge.net
+
+
+Behdad Esfahbod
+behdad@gnu.org
+10 April 2004
diff --git a/THANKS b/THANKS
new file mode 100644
index 0000000..2aedf76
--- /dev/null
+++ b/THANKS
@@ -0,0 +1,33 @@
+Thanks to:
+
+
+Members of the Linux-il and Arabeyes communities
+ * For the feedbacks.
+ * For the constant pressure on keep the wheel rolling.
+
+Mark Davis
+ * For writing the Unicode Standard Annex #9.
+
+
+
+And for the previous versions of FriBidi (up to 2002), thanks to:
+
+
+Dov Grobgeld <dov@imagic.weizmann.ac.il>
+ * Initial author, and maintainer before the 0.9 releases.
+
+Franck Portaneri
+ * For the Mozilla BiDi languges support document;
+
+Owen Tayler <otaylor@redhat.com>
+ * Contributed very important memory leak and speed patches.
+
+Pablo Saratxaga <pablo@mandrakesoft.com>
+ * Contributed several arabic charset converters.
+
+Omer Zak <omerz@actcom.co.il>
+ * Contributed several bug fixes, and several considerations for
+ embedded systems.
+
+Roozbeh Pournader <roozbeh@sharif.edu>
+ * Fixed small things here and there.
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..559b30d
--- /dev/null
+++ b/TODO
@@ -0,0 +1,13 @@
+Implementation issues:
+
+* BidiTypes enum in manual.
+
+* Update CapRTL with new Unicode reference code.
+
+* Revise reorder API, in fribidi_main.c reorder after link break.
+
+* Add an option to fribidi_main.c to assume two consecutive returns as
+ paragraph separators.
+
+* Design better apis to do reorder based on available levels, remove
+ explicit marks then calculate position maps, ....
diff --git a/bin/Makefile.am b/bin/Makefile.am
new file mode 100644
index 0000000..6d8209a
--- /dev/null
+++ b/bin/Makefile.am
@@ -0,0 +1,25 @@
+bin_PROGRAMS = fribidi
+
+noinst_PROGRAMS = fribidi-benchmark
+
+getopt_SOURCES = getopt.c getopt1.c getopt_int.h getopt.h
+
+fribidi_SOURCES = fribidi-main.c $(getopt_SOURCES)
+
+fribidi_benchmark_SOURCES = fribidi-benchmark.c $(getopt_SOURCES)
+
+AM_CPPFLAGS = \
+ -I$(top_builddir)/lib \
+ -I$(top_srcdir)/lib \
+ -I$(top_srcdir)/charset \
+ $(GLIB_CFLAGS)
+
+LDADD = $(top_builddir)/lib/libfribidi.la $(GLIB_LIBS)
+
+if FRIBIDI_CHARSETS
+else # !FRIBIDI_CHARSETS
+LDADD += $(top_builddir)/charset/libfribidi-char-sets.la
+endif # !FRIBIDI_CHARSETS
+
+$(top_builddir)/lib/libfribidi.la:
+ cd $(top_builddir)/lib && $(MAKE) $(AM_MAKEFLAGS) libfribidi.la
diff --git a/bin/fribidi-benchmark.c b/bin/fribidi-benchmark.c
new file mode 100644
index 0000000..9fd015c
--- /dev/null
+++ b/bin/fribidi-benchmark.c
@@ -0,0 +1,278 @@
+/* FriBidi
+ * fribidi-benchmark.c - command line benchmark tool for libfribidi
+ *
+ * $Id: fribidi-benchmark.c,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/bin/fribidi-benchmark.c,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ * Dov Grobgeld, 1999, 2000
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ * Copyright (C) 1999,2000 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+
+#include <fribidi.h>
+
+#include <common.h>
+
+#include <stdio.h>
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_SYS_TIMES_H
+# include <sys/times.h>
+#endif
+
+#include "getopt.h"
+
+#define appname "fribidi_benchmark"
+
+#define MAX_STR_LEN 1000
+
+static void
+die2 (
+ const char *fmt,
+ const char *arg
+)
+{
+ fprintf (stderr, "%s: ", appname);
+ if (fmt)
+ fprintf (stderr, fmt, arg);
+ fprintf (stderr, "Try `%s --help' for more information.\n", appname);
+ exit (-1);
+}
+
+#define TEST_STRING \
+ "a THE QUICK -123,456 (FOX JUMPS ) DOG the quick !1@7#4&5^ over the dog " \
+ "123,456 OVER THE 5%+ 4.0 LAZY"
+#define TEST_STRING_EXPLICIT \
+ "this is _LJUST_o a _lsimple _Rte%ST_o th_oat HAS A _LPDF missing" \
+ "AnD hOw_L AbOuT, 123,987 tHiS_o a GO_oOD - _L_oTE_oST. " \
+ "here_L is_o_o_o _R a good one_o And _r 123,987_LT_oHE_R next_o oNE:" \
+ "_R_r and the last _LONE_o IS THE _rbest _lONE and" \
+ "a _L_L_L_LL_L_L_L_L_L_L_L_L_Rbug_o_o_o_o_o_o" \
+ "_R_r and the last _LONE_o IS THE _rbest _lONE and" \
+ "A REAL BIG_l_o BUG! _L _l_r_R_L_laslaj siw_o_Rlkj sslk" \
+ "a _L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_Rbug" \
+ "here_L is_o_o_o _R ab one_o _r 123,987_LT_oHE_R t_o oNE:" \
+
+int niter;
+
+static void
+help (
+ void
+)
+{
+ printf
+ ("Usage: " appname " [OPTION]...\n"
+ "A program for benchmarking the speed of the " FRIBIDI_NAME
+ " library.\n" "\n"
+ " -h, --help Display this information and exit\n"
+ " -V, --version Display version information and exit\n"
+ " -n, --niter N Number of iterations. Default is %d.\n"
+ "\nReport bugs online at\n<" FRIBIDI_BUGREPORT ">.\n", niter);
+ exit (0);
+}
+
+static void
+version (
+ void
+)
+{
+ printf (appname " %s", fribidi_version_info);
+ exit (0);
+}
+
+static double
+utime (
+ void
+)
+{
+ struct tms tb;
+ times (&tb);
+ return 0.01 * tb.tms_utime;
+}
+
+static void
+benchmark (
+ char *S_,
+ int niter
+)
+{
+ int len, i;
+ FriBidiChar us[MAX_STR_LEN], out_us[MAX_STR_LEN];
+ FriBidiStrIndex positionLtoV[MAX_STR_LEN], positionVtoL[MAX_STR_LEN];
+ FriBidiLevel embedding_list[MAX_STR_LEN];
+ FriBidiCharType base;
+ double time0, time1;
+
+ {
+ int j;
+ len = strlen (S_);
+ for (i = 0, j = 0; i < len; i++)
+ {
+ if (S_[i] == '_')
+ switch (S_[++i])
+ {
+ case '>':
+ us[j++] = FRIBIDI_CHAR_LRM;
+ break;
+ case '<':
+ us[j++] = FRIBIDI_CHAR_RLM;
+ break;
+ case 'l':
+ us[j++] = FRIBIDI_CHAR_LRE;
+ break;
+ case 'r':
+ us[j++] = FRIBIDI_CHAR_RLE;
+ break;
+ case 'L':
+ us[j++] = FRIBIDI_CHAR_LRO;
+ break;
+ case 'R':
+ us[j++] = FRIBIDI_CHAR_RLO;
+ break;
+ case 'o':
+ us[j++] = FRIBIDI_CHAR_PDF;
+ break;
+ case '_':
+ us[j++] = '_';
+ break;
+ default:
+ us[j++] = '_';
+ i--;
+ break;
+ }
+ else
+ us[j++] = S_[i];
+ if (us[j] >= 'A' && us[j] <= 'F')
+ us[j] += FRIBIDI_CHAR_ARABIC_ALEF - 'A';
+ else if (us[j] >= 'G' && us[j] <= 'Z')
+ us[j] += FRIBIDI_CHAR_HEBREW_ALEF - 'G';
+ else if (us[j] >= '6' && us[j] <= '9')
+ us[j] += FRIBIDI_CHAR_ARABIC_ZERO - '0';
+ }
+ len = j;
+ }
+
+ /* Start timer */
+ time0 = utime ();
+
+ for (i = 0; i < niter; i++)
+ {
+ /* Create a bidi string */
+ base = FRIBIDI_TYPE_ON;
+ fribidi_log2vis (us, len, &base,
+ /* output */
+ out_us, positionVtoL, positionLtoV, embedding_list);
+ }
+
+ /* stop timer */
+ time1 = utime ();
+
+ /* output result */
+ printf ("Length = %d\n", len);
+ printf ("Iterations = %d\n", niter);
+ printf ("%d len*iterations in %f seconds\n", len * niter, time1 - time0);
+ printf ("= %.0f kilo.length.iterations/second\n",
+ 1.0 * len * niter / 1000 / (time1 - time0));
+
+ return;
+}
+
+int
+main (
+ int argc,
+ char *argv[]
+)
+{
+ niter = 2000;
+
+ /* Parse the command line */
+ argv[0] = appname;
+ while (1)
+ {
+ int option_index = 0, c;
+ static struct option long_options[] = {
+ {"help", 0, 0, 'h'},
+ {"version", 0, 0, 'V'},
+ {"niter", 0, 0, 'n'},
+ {0, 0, 0, 0}
+ };
+
+ c = getopt_long (argc, argv, "hVn:", long_options, &option_index);
+ if (c == -1)
+ break;
+
+ switch (c)
+ {
+ case 0:
+ break;
+ case 'h':
+ help ();
+ break;
+ case 'V':
+ version ();
+ break;
+ case 'n':
+ niter = atoi (optarg);
+ if (niter <= 0)
+ die2 ("invalid number of iterations `%s'\n", optarg);
+ break;
+ case ':':
+ case '?':
+ die2 (NULL, NULL);
+ break;
+ default:
+ break;
+ }
+ }
+
+ printf ("* Without explicit marks:\n");
+ benchmark (TEST_STRING, niter);
+ printf ("\n");
+ printf ("* With explicit marks:\n");
+ benchmark (TEST_STRING_EXPLICIT, niter);
+
+ return 0;
+}
+
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/bin/fribidi-main.c b/bin/fribidi-main.c
new file mode 100644
index 0000000..60d8fbf
--- /dev/null
+++ b/bin/fribidi-main.c
@@ -0,0 +1,597 @@
+/* FriBidi
+ * fribidi-main.c - command line program for libfribidi
+ *
+ * $Id: fribidi-main.c,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/bin/fribidi-main.c,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ * Dov Grobgeld, 1999, 2000
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ * Copyright (C) 1999,2000 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+
+#include <fribidi.h>
+#if !FRIBIDI_CHARSETS
+# if FRIBIDI_MAIN_USE_ICONV_H
+# include <iconv.h>
+# else /* !FRIBIDI_MAIN_USE_ICONV_H */
+# include <fribidi-char-sets.h>
+# endif /* FRIBIDI_MAIN_USE_ICONV_H */
+#endif /* !FRIBIDI_CHARSETS */
+
+#include <common.h>
+
+#include <stdio.h>
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_SYS_TIMES_H
+# include <sys/times.h>
+#endif
+
+#include "getopt.h"
+
+#define appname "fribidi"
+
+#define MAX_STR_LEN 65000
+
+
+#define ALLOCATE(tp,ln) ((tp *) malloc (sizeof (tp) * (ln)))
+
+static void
+die2 (
+ const char *fmt,
+ const char *arg
+)
+{
+ fprintf (stderr, "%s: ", appname);
+ if (fmt)
+ fprintf (stderr, fmt, arg);
+ fprintf (stderr, "Try `%s --help' for more information.\n", appname);
+ exit (-1);
+}
+
+#define die1(msg) die2("%s", msg)
+
+fribidi_boolean do_break, do_pad, do_mirror, do_reorder_nsm, do_clean;
+fribidi_boolean show_input, show_visual, show_basedir;
+fribidi_boolean show_ltov, show_vtol, show_levels;
+int text_width;
+char *char_set;
+char *bol_text, *eol_text;
+FriBidiCharType input_base_direction;
+#if FRIBIDI_MAIN_USE_ICONV_H
+iconv_t to_ucs4, from_ucs4;
+#else /* !FRIBIDI_MAIN_USE_ICONV_H */
+int char_set_num;
+#endif /* !FRIBIDI_MAIN_USE_ICONV_H */
+
+static void
+help (
+ void
+)
+{
+ /* Break help string into little ones, to assure ISO C89 conformance */
+ printf ("Usage: " appname " [OPTION]... [FILE]...\n"
+ "A command line interface for the " FRIBIDI_NAME " library.\n"
+ "Convert a logical string to visual.\n"
+ "\n"
+ " -h, --help Display this information and exit\n"
+ " -V, --version Display version information and exit\n"
+ " -v, --verbose Verbose mode, same as --basedir --ltov --vtol\n"
+ " --levels --changes\n");
+ printf (" -d, --debug Output debug information\n"
+ " -t, --test Test " FRIBIDI_NAME
+ ", same as --clean --nobreak\n"
+ " --showinput --reordernsm\n");
+#if FRIBIDI_MAIN_USE_ICONV_H
+ printf (" -c, --charset CS Specify character set, default is %s.\n"
+ " CS should be a valid iconv character set name\n",
+ char_set);
+#else /* !FRIBIDI_MAIN_USE_ICONV_H */
+ printf (" -c, --charset CS Specify character set, default is %s\n"
+ " --charsetdesc CS Show descriptions for character set CS and exit\n"
+ " --caprtl Old style: set character set to CapRTL\n",
+ char_set);
+#endif /* !FRIBIDI_MAIN_USE_ICONV_H */
+ printf (" --showinput Output the input string too\n"
+ " --nopad Do not right justify RTL lines\n"
+ " --nobreak Do not break long lines\n"
+ " -w, --width W Screen width for padding, default is %d, but if\n"
+ " enviroment variable COLUMNS is defined, its value\n"
+ " will be used, --width overrides both of them.\n",
+ text_width);
+ printf
+ (" -B, --bol BOL Output string BOL before the visual string\n"
+ " -E, --eol EOL Output string EOL after the visual string\n"
+ " --rtl Force base direction to RTL\n"
+ " --ltr Force base direction to LTR\n"
+ " --wrtl Set base direction to RTL if no strong character found\n");
+ printf
+ (" --wltr Set base direction to LTR if no strong character found\n"
+ " (default)\n"
+ " --nomirror Turn mirroring off, to do it later\n"
+ " --reordernsm Reorder NSM sequences to follow their base character\n"
+ " --clean Remove explicit format codes in visual string\n"
+ " output, currently does not affect other outputs\n"
+ " --basedir Output Base Direction\n");
+ printf (" --ltov Output Logical to Visual position map\n"
+ " --vtol Output Visual to Logical position map\n"
+ " --levels Output Embedding Levels\n"
+ " --novisual Do not output the visual string, to be used with\n"
+ " --basedir, --ltov, --vtol, --levels, --changes\n");
+ printf (" All string indexes are zero based\n" "\n" "Output:\n"
+ " For each line of input, output something like this:\n"
+ " [input-str` => '][BOL][[padding space]visual-str][EOL]\n"
+ " [\\n base-dir][\\n ltov-map][\\n vtol-map][\\n levels][\\n changes]\n");
+
+#if !FRIBIDI_MAIN_USE_ICONV_H
+ {
+ int i;
+ printf ("\n" "Available character sets:\n");
+ for (i = 1; i <= FRIBIDI_CHAR_SETS_NUM; i++)
+ printf (" * %-10s: %-25s%1s\n",
+ fribidi_char_set_name (i), fribidi_char_set_title (i),
+ (fribidi_char_set_desc (i) ? "X" : ""));
+ printf
+ (" X: Character set has descriptions, use --charsetdesc to see\n");
+ }
+#endif /* !FRIBIDI_MAIN_USE_ICONV_H */
+
+ printf ("\nReport bugs online at\n<" FRIBIDI_BUGREPORT ">.\n");
+ exit (0);
+}
+
+static void
+version (
+ void
+)
+{
+ printf (appname " %s", fribidi_version_info);
+ exit (0);
+}
+
+int
+main (
+ int argc,
+ char *argv[]
+)
+{
+ int exit_val;
+ fribidi_boolean file_found;
+ char *s;
+ FILE *IN;
+
+ text_width = 80;
+ do_break = TRUE;
+ do_pad = TRUE;
+ do_mirror = TRUE;
+ do_clean = FALSE;
+ do_reorder_nsm = FALSE;
+ show_input = FALSE;
+ show_visual = TRUE;
+ show_basedir = FALSE;
+ show_ltov = FALSE;
+ show_vtol = FALSE;
+ show_levels = FALSE;
+ char_set = "UTF-8";
+ bol_text = NULL;
+ eol_text = NULL;
+ input_base_direction = FRIBIDI_TYPE_ON;
+
+ if ((s = getenv ("COLUMNS")))
+ {
+ int i;
+
+ i = atoi (s);
+ if (i > 0)
+ text_width = i;
+ }
+
+#define CHARSETDESC 257
+#define CAPRTL 258
+
+ /* Parse the command line with getopt library */
+ /* Must set argv[0], getopt uses it to generate error messages */
+ argv[0] = appname;
+ while (1)
+ {
+ int option_index = 0, c;
+ static struct option long_options[] = {
+ {"help", 0, 0, 'h'},
+ {"version", 0, 0, 'V'},
+ {"verbose", 0, 0, 'v'},
+ {"debug", 0, 0, 'd'},
+ {"test", 0, 0, 't'},
+ {"charset", 1, 0, 'c'},
+#if !FRIBIDI_MAIN_USE_ICONV_H
+ {"charsetdesc", 1, 0, CHARSETDESC},
+ {"caprtl", 0, 0, CAPRTL},
+#endif /* FRIBIDI_MAIN_USE_ICONV_H */
+ {"showinput", 0, &show_input, TRUE},
+ {"nopad", 0, &do_pad, FALSE},
+ {"nobreak", 0, &do_break, FALSE},
+ {"width", 1, 0, 'w'},
+ {"bol", 1, 0, 'B'},
+ {"eol", 1, 0, 'E'},
+ {"nomirror", 0, &do_mirror, FALSE},
+ {"reordernsm", 0, &do_reorder_nsm, TRUE},
+ {"clean", 0, &do_clean, TRUE},
+ {"ltr", 0, (int *) (void *) &input_base_direction, FRIBIDI_TYPE_L},
+ {"rtl", 0, (int *) (void *) &input_base_direction, FRIBIDI_TYPE_R},
+ {"wltr", 0, (int *) (void *) &input_base_direction, FRIBIDI_TYPE_WL},
+ {"wrtl", 0, (int *) (void *) &input_base_direction, FRIBIDI_TYPE_WR},
+ {"basedir", 0, &show_basedir, TRUE},
+ {"ltov", 0, &show_ltov, TRUE},
+ {"vtol", 0, &show_vtol, TRUE},
+ {"levels", 0, &show_levels, TRUE},
+ {"novisual", 0, &show_visual, FALSE},
+ {0, 0, 0, 0}
+ };
+
+ c =
+ getopt_long (argc, argv, "hVvdtc:w:B:E:", long_options,
+ &option_index);
+ if (c == -1)
+ break;
+
+ switch (c)
+ {
+ case 0:
+ break;
+ case 'h':
+ help ();
+ break;
+ case 'V':
+ version ();
+ break;
+ case 'v':
+ show_basedir = show_ltov = show_vtol = show_levels = TRUE;
+ break;
+ case 'w':
+ text_width = atoi (optarg);
+ if (text_width <= 0)
+ die2 ("invalid screen width `%s'\n", optarg);
+ break;
+ case 'B':
+ bol_text = optarg;
+ break;
+ case 'E':
+ eol_text = optarg;
+ break;
+ case 'd':
+ if (!fribidi_set_debug (TRUE))
+ die1
+ ("lib" FRIBIDI
+ " must be compiled with DEBUG option to enable\nturn debug info on.\n");
+ break;
+ case 't':
+ do_clean = show_input = do_reorder_nsm = TRUE;
+ do_break = FALSE;
+ break;
+ case 'c':
+ char_set = strdup (optarg);
+ break;
+#if !FRIBIDI_MAIN_USE_ICONV_H
+ case CAPRTL:
+ char_set = "CapRTL";
+ break;
+ case CHARSETDESC:
+ char_set = strdup (optarg);
+ char_set_num = fribidi_parse_charset (char_set);
+ if (!char_set_num)
+ die2 ("unrecognized character set `%s'\n", char_set);
+ if (!fribidi_char_set_desc (char_set_num))
+ die2 ("no description available for character set `%s'\n",
+ fribidi_char_set_name (char_set_num));
+ else
+ printf ("Descriptions for character set %s:\n"
+ "\n" "%s", fribidi_char_set_title (char_set_num),
+ fribidi_char_set_desc (char_set_num));
+ exit (0);
+ break;
+#endif /* !FRIBIDI_MAIN_USE_ICONV_H */
+ case ':':
+ case '?':
+ die2 (NULL, NULL);
+ break;
+ default:
+ break;
+ }
+ }
+
+#if FRIBIDI_MAIN_USE_ICONV_H
+ to_ucs4 = iconv_open ("WCHAR_T", char_set);
+ from_ucs4 = iconv_open (char_set, "WCHAR_T");
+#else /* !FRIBIDI_MAIN_USE_ICONV_H */
+ char_set_num = fribidi_parse_charset (char_set);
+#endif /* !FRIBIDI_MAIN_USE_ICONV_H */
+
+#if FRIBIDI_MAIN_USE_ICONV_H
+ if (to_ucs4 == (iconv_t) (-1) || from_ucs4 == (iconv_t) (-1))
+#else /* !FRIBIDI_MAIN_USE_ICONV_H */
+ if (!char_set_num)
+#endif /* !FRIBIDI_MAIN_USE_ICONV_H */
+ die2 ("unrecognized character set `%s'\n", char_set);
+
+ fribidi_set_mirroring (do_mirror);
+ fribidi_set_reorder_nsm (do_reorder_nsm);
+ exit_val = 0;
+ file_found = FALSE;
+ while (optind < argc || !file_found)
+ {
+ char *S_;
+
+ S_ = optind < argc ? argv[optind++] : "-";
+ file_found = TRUE;
+
+ /* Open the infile for reading */
+ if (S_[0] == '-' && !S_[1])
+ {
+ IN = stdin;
+ }
+ else
+ {
+ IN = fopen (S_, "r");
+ if (!IN)
+ {
+ fprintf (stderr, "%s: %s: no such file or directory\n",
+ appname, S_);
+ exit_val = 1;
+ continue;
+ }
+ }
+
+ /* Read and process input one line at a time */
+ {
+ char S_[MAX_STR_LEN];
+ int padding_width, break_width;
+
+ padding_width = show_input ? (text_width - 10) / 2 : text_width;
+ break_width = do_break ? padding_width : 3 * MAX_STR_LEN;
+
+ while (fgets (S_, sizeof (S_) - 1, IN))
+ {
+ char *new_line, *nl_found;
+ FriBidiChar logical[MAX_STR_LEN];
+ char outstring[MAX_STR_LEN];
+ FriBidiCharType base;
+ FriBidiStrIndex len;
+
+ nl_found = "";
+ S_[sizeof (S_) - 1] = 0;
+ len = strlen (S_);
+ /* chop */
+ if (S_[len - 1] == '\n')
+ {
+ len--;
+ S_[len] = '\0';
+ new_line = "\n";
+ }
+ else
+ new_line = "";
+
+#if FRIBIDI_MAIN_USE_ICONV_H
+ {
+ char *st = S_, *ust = (char *) logical;
+ int in_len = (int) len;
+ len = sizeof logical;
+ iconv (to_ucs4, &st, &in_len, &ust, (int *) &len);
+ len = (FriBidiChar *) ust - logical;
+ }
+#else /* !FRIBIDI_MAIN_USE_ICONV_H */
+ len = fribidi_charset_to_unicode (char_set_num, S_, len, logical);
+#endif /* !FRIBIDI_MAIN_USE_ICONV_H */
+
+ {
+ FriBidiChar *visual;
+ FriBidiStrIndex *ltov, *vtol;
+ FriBidiLevel *levels;
+ FriBidiStrIndex new_len;
+ fribidi_boolean log2vis;
+
+ visual = show_visual ? ALLOCATE (FriBidiChar,
+ len + 1
+ ) : NULL;
+ ltov = show_ltov ? ALLOCATE (FriBidiStrIndex,
+ len + 1
+ ) : NULL;
+ vtol = show_vtol ? ALLOCATE (FriBidiStrIndex,
+ len + 1
+ ) : NULL;
+ levels = show_levels ? ALLOCATE (FriBidiLevel,
+ len + 1
+ ) : NULL;
+
+ /* Create a bidi string. */
+ base = input_base_direction;
+ log2vis = fribidi_log2vis (logical, len, &base,
+ /* output */
+ visual, ltov, vtol, levels);
+ if (log2vis)
+ {
+
+ if (show_input)
+ printf ("%-*s => ", padding_width, S_);
+
+ new_len = len;
+
+ /* Remove explicit marks, if asked for. */
+ if (do_clean)
+ len =
+ fribidi_remove_bidi_marks (visual, len, ltov, vtol,
+ levels);
+
+ if (show_visual)
+ {
+ printf (nl_found);
+
+ if (bol_text)
+ printf ("%s", bol_text);
+
+ /* Convert it to input charset and print. */
+ {
+ FriBidiStrIndex idx, st;
+ for (idx = 0; idx < len;)
+ {
+ FriBidiStrIndex wid, inlen;
+
+ wid = break_width;
+ st = idx;
+#if !FRIBIDI_MAIN_USE_ICONV_H
+ if (char_set_num != FRIBIDI_CHAR_SET_CAP_RTL)
+#endif /* !FRIBIDI_MAIN_USE_ICONV_H */
+ while (wid > 0 && idx < len)
+ {
+ wid -=
+ fribidi_get_type (visual[idx]) &
+ (FRIBIDI_MASK_BN | FRIBIDI_MASK_NSM) ? 0 :
+ 1;
+ idx++;
+ }
+#if !FRIBIDI_MAIN_USE_ICONV_H
+ else
+ while (wid > 0 && idx < len)
+ {
+ wid--;
+ idx++;
+ }
+#endif /* !FRIBIDI_MAIN_USE_ICONV_H */
+ if (wid < 0 && idx > st + 1)
+ idx--;
+ inlen = idx - st;
+
+#if FRIBIDI_MAIN_USE_ICONV_H
+ {
+ char *str = outstring, *ust =
+ (char *) (visual + st);
+ int in_len = inlen * sizeof visual[0];
+ new_len = sizeof outstring;
+ iconv (from_ucs4, &ust, &in_len, &str,
+ (int *) &new_len);
+ *str = '\0';
+ new_len = str - outstring;
+ }
+#else /* !FRIBIDI_MAIN_USE_ICONV_H */
+ new_len =
+ fribidi_unicode_to_charset (char_set_num,
+ visual + st, inlen,
+ outstring);
+#endif /* !FRIBIDI_MAIN_USE_ICONV_H */
+ if (FRIBIDI_IS_RTL (base))
+ printf ("%*s",
+ (int) (do_pad ? (padding_width +
+ strlen (outstring) -
+ (break_width -
+ wid)) : 0),
+ outstring);
+ else
+ printf ("%s", outstring);
+ if (idx < len)
+ printf ("\n");
+ }
+ }
+ if (eol_text)
+ printf ("%s", eol_text);
+
+ nl_found = "\n";
+ }
+ if (show_basedir)
+ {
+ printf (nl_found);
+ printf ("Base direction: %s",
+ (FRIBIDI_DIR_TO_LEVEL (base) ? "R" : "L"));
+ nl_found = "\n";
+ }
+ if (show_ltov)
+ {
+ FriBidiStrIndex i;
+
+ printf (nl_found);
+ for (i = 0; i < len; i++)
+ printf ("%ld ", (long) ltov[i]);
+ nl_found = "\n";
+ }
+ if (show_vtol)
+ {
+ FriBidiStrIndex i;
+
+ printf (nl_found);
+ for (i = 0; i < len; i++)
+ printf ("%ld ", (long) vtol[i]);
+ nl_found = "\n";
+ }
+ if (show_levels)
+ {
+ FriBidiStrIndex i;
+
+ printf (nl_found);
+ for (i = 0; i < len; i++)
+ printf ("%d ", (int) levels[i]);
+ nl_found = "\n";
+ }
+ }
+ else
+ {
+ exit_val = 2;
+ }
+
+ if (show_visual)
+ free (visual);
+ if (show_ltov)
+ free (ltov);
+ if (show_vtol)
+ free (vtol);
+ if (show_levels)
+ free (levels);
+ }
+
+ if (*nl_found)
+ printf (new_line);
+ }
+ }
+ }
+
+ return exit_val;
+}
+
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/bin/getopt.c b/bin/getopt.c
new file mode 100644
index 0000000..74330fa
--- /dev/null
+++ b/bin/getopt.c
@@ -0,0 +1,1268 @@
+/* Getopt for GNU.
+ NOTE: getopt is now part of the C library, so if you don't know what
+ "Keep this file name-space clean" means, talk to drepper@gnu.org
+ before changing it!
+ Copyright (C) 1987,88,89,90,91,92,93,94,95,96,98,99,2000,2001,2002,2003,2004
+ Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
+ Ditto for AIX 3.2 and <stdlib.h>. */
+#ifndef _NO_PROTO
+# define _NO_PROTO
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+
+/* Comment out all this code if we are using the GNU C Library, and are not
+ actually compiling the library itself. This code is part of the GNU C
+ Library, but also included in many other GNU distributions. Compiling
+ and linking in this code is a waste when using the GNU C library
+ (especially if it is a shared library). Rather than having every GNU
+ program understand `configure --with-gnu-libc' and omit the object files,
+ it is simpler to just do this in the source for each such file. */
+
+#define GETOPT_INTERFACE_VERSION 2
+#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
+# include <gnu-versions.h>
+# if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
+# define ELIDE_CODE
+# endif
+#endif
+
+#ifndef ELIDE_CODE
+
+
+/* This needs to come after some library #include
+ to get __GNU_LIBRARY__ defined. */
+#ifdef __GNU_LIBRARY__
+/* Don't include stdlib.h for non-GNU C libraries because some of them
+ contain conflicting prototypes for getopt. */
+# include <stdlib.h>
+# include <unistd.h>
+#endif /* GNU C library. */
+
+#include <string.h>
+
+#ifdef VMS
+# include <unixlib.h>
+#endif
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "gettext.h"
+# define _(msgid) gettext (msgid)
+#endif
+
+#if defined _LIBC && defined USE_IN_LIBIO
+# include <wchar.h>
+#endif
+
+#ifndef attribute_hidden
+# define attribute_hidden
+#endif
+
+/* This version of `getopt' appears to the caller like standard Unix `getopt'
+ but it behaves differently for the user, since it allows the user
+ to intersperse the options with the other arguments.
+
+ As `getopt' works, it permutes the elements of ARGV so that,
+ when it is done, all the options precede everything else. Thus
+ all application programs are extended to handle flexible argument order.
+
+ Setting the environment variable POSIXLY_CORRECT disables permutation.
+ Then the behavior is completely standard.
+
+ GNU application programs can use a third alternative mode in which
+ they can distinguish the relative order of options and other arguments. */
+
+#include "getopt.h"
+#include "getopt_int.h"
+
+/* For communication from `getopt' to the caller.
+ When `getopt' finds an option that takes an argument,
+ the argument value is returned here.
+ Also, when `ordering' is RETURN_IN_ORDER,
+ each non-option ARGV-element is returned here. */
+
+char *optarg;
+
+/* Index in ARGV of the next element to be scanned.
+ This is used for communication to and from the caller
+ and for communication between successive calls to `getopt'.
+
+ On entry to `getopt', zero means this is the first call; initialize.
+
+ When `getopt' returns -1, this is the index of the first of the
+ non-option elements that the caller should itself scan.
+
+ Otherwise, `optind' communicates from one call to the next
+ how much of ARGV has been scanned so far. */
+
+/* 1003.2 says this must be 1 before any call. */
+int optind = 1;
+
+/* Callers store zero here to inhibit the error message
+ for unrecognized options. */
+
+int opterr = 1;
+
+/* Set to an option character which was unrecognized.
+ This must be initialized on some systems to avoid linking in the
+ system's own getopt implementation. */
+
+int optopt = '?';
+
+/* Keep a global copy of all internal members of getopt_data. */
+
+static struct _getopt_data getopt_data;
+
+
+#ifndef __GNU_LIBRARY__
+
+/* Avoid depending on library functions or files
+ whose names are inconsistent. */
+
+#ifndef getenv
+extern char *getenv (
+);
+#endif
+
+#endif /* not __GNU_LIBRARY__ */
+
+#ifdef _LIBC
+/* Stored original parameters.
+ XXX This is no good solution. We should rather copy the args so
+ that we can compare them later. But we must not use malloc(3). */
+extern int __libc_argc;
+extern char **__libc_argv;
+
+/* Bash 2.0 gives us an environment variable containing flags
+ indicating ARGV elements that should not be considered arguments. */
+
+# ifdef USE_NONOPTION_FLAGS
+/* Defined in getopt_init.c */
+extern char *__getopt_nonoption_flags;
+# endif
+
+# ifdef USE_NONOPTION_FLAGS
+# define SWAP_FLAGS(ch1, ch2) \
+ if (d->__nonoption_flags_len > 0) \
+ { \
+ char __tmp = __getopt_nonoption_flags[ch1]; \
+ __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \
+ __getopt_nonoption_flags[ch2] = __tmp; \
+ }
+# else
+# define SWAP_FLAGS(ch1, ch2)
+# endif
+#else /* !_LIBC */
+# define SWAP_FLAGS(ch1, ch2)
+#endif /* _LIBC */
+
+/* Exchange two adjacent subsequences of ARGV.
+ One subsequence is elements [first_nonopt,last_nonopt)
+ which contains all the non-options that have been skipped so far.
+ The other is elements [last_nonopt,optind), which contains all
+ the options processed since those non-options were skipped.
+
+ `first_nonopt' and `last_nonopt' are relocated so that they describe
+ the new indices of the non-options in ARGV after they are moved. */
+
+static void
+exchange (
+ char **argv,
+ struct _getopt_data *d
+)
+{
+ int bottom = d->__first_nonopt;
+ int middle = d->__last_nonopt;
+ int top = d->optind;
+ char *tem;
+
+ /* Exchange the shorter segment with the far end of the longer segment.
+ That puts the shorter segment into the right place.
+ It leaves the longer segment in the right place overall,
+ but it consists of two parts that need to be swapped next. */
+
+#if defined _LIBC && defined USE_NONOPTION_FLAGS
+ /* First make sure the handling of the `__getopt_nonoption_flags'
+ string can work normally. Our top argument must be in the range
+ of the string. */
+ if (d->__nonoption_flags_len > 0 && top >= d->__nonoption_flags_max_len)
+ {
+ /* We must extend the array. The user plays games with us and
+ presents new arguments. */
+ char *new_str = malloc (top + 1);
+ if (new_str == NULL)
+ d->__nonoption_flags_len = d->__nonoption_flags_max_len = 0;
+ else
+ {
+ memset (__mempcpy (new_str, __getopt_nonoption_flags,
+ d->__nonoption_flags_max_len),
+ '\0', top + 1 - d->__nonoption_flags_max_len);
+ d->__nonoption_flags_max_len = top + 1;
+ __getopt_nonoption_flags = new_str;
+ }
+ }
+#endif
+
+ while (top > middle && middle > bottom)
+ {
+ if (top - middle > middle - bottom)
+ {
+ /* Bottom segment is the short one. */
+ int len = middle - bottom;
+ register int i;
+
+ /* Swap it with the top part of the top segment. */
+ for (i = 0; i < len; i++)
+ {
+ tem = argv[bottom + i];
+ argv[bottom + i] = argv[top - (middle - bottom) + i];
+ argv[top - (middle - bottom) + i] = tem;
+ SWAP_FLAGS (bottom + i, top - (middle - bottom) + i);
+ }
+ /* Exclude the moved bottom segment from further swapping. */
+ top -= len;
+ }
+ else
+ {
+ /* Top segment is the short one. */
+ int len = top - middle;
+ register int i;
+
+ /* Swap it with the bottom part of the bottom segment. */
+ for (i = 0; i < len; i++)
+ {
+ tem = argv[bottom + i];
+ argv[bottom + i] = argv[middle + i];
+ argv[middle + i] = tem;
+ SWAP_FLAGS (bottom + i, middle + i);
+ }
+ /* Exclude the moved top segment from further swapping. */
+ bottom += len;
+ }
+ }
+
+ /* Update records for the slots the non-options now occupy. */
+
+ d->__first_nonopt += (d->optind - d->__last_nonopt);
+ d->__last_nonopt = d->optind;
+}
+
+/* Initialize the internal data when the first call is made. */
+
+static const char *
+_getopt_initialize (
+ int argc,
+ char *const *argv,
+ const char *optstring,
+ struct _getopt_data *d
+)
+{
+ /* Start processing options with ARGV-element 1 (since ARGV-element 0
+ is the program name); the sequence of previously skipped
+ non-option ARGV-elements is empty. */
+
+ d->__first_nonopt = d->__last_nonopt = d->optind;
+
+ d->__nextchar = NULL;
+
+ d->__posixly_correct = !!getenv ("POSIXLY_CORRECT");
+
+ /* Determine how to handle the ordering of options and nonoptions. */
+
+ if (optstring[0] == '-')
+ {
+ d->__ordering = RETURN_IN_ORDER;
+ ++optstring;
+ }
+ else if (optstring[0] == '+')
+ {
+ d->__ordering = REQUIRE_ORDER;
+ ++optstring;
+ }
+ else if (d->__posixly_correct)
+ d->__ordering = REQUIRE_ORDER;
+ else
+ d->__ordering = PERMUTE;
+
+#if defined _LIBC && defined USE_NONOPTION_FLAGS
+ if (!d->__posixly_correct && argc == __libc_argc && argv == __libc_argv)
+ {
+ if (d->__nonoption_flags_max_len == 0)
+ {
+ if (__getopt_nonoption_flags == NULL
+ || __getopt_nonoption_flags[0] == '\0')
+ d->__nonoption_flags_max_len = -1;
+ else
+ {
+ const char *orig_str = __getopt_nonoption_flags;
+ int len = d->__nonoption_flags_max_len = strlen (orig_str);
+ if (d->__nonoption_flags_max_len < argc)
+ d->__nonoption_flags_max_len = argc;
+ __getopt_nonoption_flags =
+ (char *) malloc (d->__nonoption_flags_max_len);
+ if (__getopt_nonoption_flags == NULL)
+ d->__nonoption_flags_max_len = -1;
+ else
+ memset (__mempcpy (__getopt_nonoption_flags, orig_str, len),
+ '\0', d->__nonoption_flags_max_len - len);
+ }
+ }
+ d->__nonoption_flags_len = d->__nonoption_flags_max_len;
+ }
+ else
+ d->__nonoption_flags_len = 0;
+#endif
+
+ return optstring;
+}
+
+/* Scan elements of ARGV (whose length is ARGC) for option characters
+ given in OPTSTRING.
+
+ If an element of ARGV starts with '-', and is not exactly "-" or "--",
+ then it is an option element. The characters of this element
+ (aside from the initial '-') are option characters. If `getopt'
+ is called repeatedly, it returns successively each of the option characters
+ from each of the option elements.
+
+ If `getopt' finds another option character, it returns that character,
+ updating `optind' and `nextchar' so that the next call to `getopt' can
+ resume the scan with the following option character or ARGV-element.
+
+ If there are no more option characters, `getopt' returns -1.
+ Then `optind' is the index in ARGV of the first ARGV-element
+ that is not an option. (The ARGV-elements have been permuted
+ so that those that are not options now come last.)
+
+ OPTSTRING is a string containing the legitimate option characters.
+ If an option character is seen that is not listed in OPTSTRING,
+ return '?' after printing an error message. If you set `opterr' to
+ zero, the error message is suppressed but we still return '?'.
+
+ If a char in OPTSTRING is followed by a colon, that means it wants an arg,
+ so the following text in the same ARGV-element, or the text of the following
+ ARGV-element, is returned in `optarg'. Two colons mean an option that
+ wants an optional arg; if there is text in the current ARGV-element,
+ it is returned in `optarg', otherwise `optarg' is set to zero.
+
+ If OPTSTRING starts with `-' or `+', it requests different methods of
+ handling the non-option ARGV-elements.
+ See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
+
+ Long-named options begin with `--' instead of `-'.
+ Their names may be abbreviated as long as the abbreviation is unique
+ or is an exact match for some defined option. If they have an
+ argument, it follows the option name in the same ARGV-element, separated
+ from the option name by a `=', or else the in next ARGV-element.
+ When `getopt' finds a long-named option, it returns 0 if that option's
+ `flag' field is nonzero, the value of the option's `val' field
+ if the `flag' field is zero.
+
+ The elements of ARGV aren't really const, because we permute them.
+ But we pretend they're const in the prototype to be compatible
+ with other systems.
+
+ LONGOPTS is a vector of `struct option' terminated by an
+ element containing a name which is zero.
+
+ LONGIND returns the index in LONGOPT of the long-named option found.
+ It is only valid when a long-named option has been found by the most
+ recent call.
+
+ If LONG_ONLY is nonzero, '-' as well as '--' can introduce
+ long-named options. */
+
+int
+_getopt_internal_r (
+ int argc,
+ char *const *argv,
+ const char *optstring,
+ const struct option *longopts,
+ int *longind,
+ int long_only,
+ struct _getopt_data *d
+)
+{
+ int print_errors = d->opterr;
+ if (optstring[0] == ':')
+ print_errors = 0;
+
+ if (argc < 1)
+ return -1;
+
+ d->optarg = NULL;
+
+ if (d->optind == 0 || !d->__initialized)
+ {
+ if (d->optind == 0)
+ d->optind = 1; /* Don't scan ARGV[0], the program name. */
+ optstring = _getopt_initialize (argc, argv, optstring, d);
+ d->__initialized = 1;
+ }
+
+ /* Test whether ARGV[optind] points to a non-option argument.
+ Either it does not have option syntax, or there is an environment flag
+ from the shell indicating it is not an option. The later information
+ is only used when the used in the GNU libc. */
+#if defined _LIBC && defined USE_NONOPTION_FLAGS
+# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0' \
+ || (d->optind < d->__nonoption_flags_len \
+ && __getopt_nonoption_flags[d->optind] == '1'))
+#else
+# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0')
+#endif
+
+ if (d->__nextchar == NULL || *d->__nextchar == '\0')
+ {
+ /* Advance to the next ARGV-element. */
+
+ /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been
+ moved back by the user (who may also have changed the arguments). */
+ if (d->__last_nonopt > d->optind)
+ d->__last_nonopt = d->optind;
+ if (d->__first_nonopt > d->optind)
+ d->__first_nonopt = d->optind;
+
+ if (d->__ordering == PERMUTE)
+ {
+ /* If we have just processed some options following some non-options,
+ exchange them so that the options come first. */
+
+ if (d->__first_nonopt != d->__last_nonopt
+ && d->__last_nonopt != d->optind)
+ exchange ((char **) argv, d);
+ else if (d->__last_nonopt != d->optind)
+ d->__first_nonopt = d->optind;
+
+ /* Skip any additional non-options
+ and extend the range of non-options previously skipped. */
+
+ while (d->optind < argc && NONOPTION_P)
+ d->optind++;
+ d->__last_nonopt = d->optind;
+ }
+
+ /* The special ARGV-element `--' means premature end of options.
+ Skip it like a null option,
+ then exchange with previous non-options as if it were an option,
+ then skip everything else like a non-option. */
+
+ if (d->optind != argc && !strcmp (argv[d->optind], "--"))
+ {
+ d->optind++;
+
+ if (d->__first_nonopt != d->__last_nonopt
+ && d->__last_nonopt != d->optind)
+ exchange ((char **) argv, d);
+ else if (d->__first_nonopt == d->__last_nonopt)
+ d->__first_nonopt = d->optind;
+ d->__last_nonopt = argc;
+
+ d->optind = argc;
+ }
+
+ /* If we have done all the ARGV-elements, stop the scan
+ and back over any non-options that we skipped and permuted. */
+
+ if (d->optind == argc)
+ {
+ /* Set the next-arg-index to point at the non-options
+ that we previously skipped, so the caller will digest them. */
+ if (d->__first_nonopt != d->__last_nonopt)
+ d->optind = d->__first_nonopt;
+ return -1;
+ }
+
+ /* If we have come to a non-option and did not permute it,
+ either stop the scan or describe it to the caller and pass it by. */
+
+ if (NONOPTION_P)
+ {
+ if (d->__ordering == REQUIRE_ORDER)
+ return -1;
+ d->optarg = argv[d->optind++];
+ return 1;
+ }
+
+ /* We have found another option-ARGV-element.
+ Skip the initial punctuation. */
+
+ d->__nextchar = (argv[d->optind] + 1
+ + (longopts != NULL && argv[d->optind][1] == '-'));
+ }
+
+ /* Decode the current option-ARGV-element. */
+
+ /* Check whether the ARGV-element is a long option.
+
+ If long_only and the ARGV-element has the form "-f", where f is
+ a valid short option, don't consider it an abbreviated form of
+ a long option that starts with f. Otherwise there would be no
+ way to give the -f short option.
+
+ On the other hand, if there's a long option "fubar" and
+ the ARGV-element is "-fu", do consider that an abbreviation of
+ the long option, just like "--fu", and not "-f" with arg "u".
+
+ This distinction seems to be the most useful approach. */
+
+ if (longopts != NULL
+ && (argv[d->optind][1] == '-'
+ || (long_only && (argv[d->optind][2]
+ || !strchr (optstring, argv[d->optind][1])))))
+ {
+ char *nameend;
+ const struct option *p;
+ const struct option *pfound = NULL;
+ int exact = 0;
+ int ambig = 0;
+ int indfound = -1;
+ int option_index;
+
+ for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++)
+ /* Do nothing. */ ;
+
+ /* Test all long options for either exact match
+ or abbreviated matches. */
+ for (p = longopts, option_index = 0; p->name; p++, option_index++)
+ if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar))
+ {
+ if ((unsigned int) (nameend - d->__nextchar)
+ == (unsigned int) strlen (p->name))
+ {
+ /* Exact match found. */
+ pfound = p;
+ indfound = option_index;
+ exact = 1;
+ break;
+ }
+ else if (pfound == NULL)
+ {
+ /* First nonexact match found. */
+ pfound = p;
+ indfound = option_index;
+ }
+ else if (long_only
+ || pfound->has_arg != p->has_arg
+ || pfound->flag != p->flag || pfound->val != p->val)
+ /* Second or later nonexact match found. */
+ ambig = 1;
+ }
+
+ if (ambig && !exact)
+ {
+ if (print_errors)
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+
+ if (__asprintf (&buf, _("%s: option `%s' is ambiguous\n"),
+ argv[0], argv[d->optind]) >= 0)
+ {
+ _IO_flockfile (stderr);
+
+ int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+ ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+ _IO_funlockfile (stderr);
+
+ free (buf);
+ }
+#else
+ fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
+ argv[0], argv[d->optind]);
+#endif
+ }
+ d->__nextchar += strlen (d->__nextchar);
+ d->optind++;
+ d->optopt = 0;
+ return '?';
+ }
+
+ if (pfound != NULL)
+ {
+ option_index = indfound;
+ d->optind++;
+ if (*nameend)
+ {
+ /* Don't test has_arg with >, because some C compilers don't
+ allow it to be used on enums. */
+ if (pfound->has_arg)
+ d->optarg = nameend + 1;
+ else
+ {
+ if (print_errors)
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+ int n;
+#endif
+
+ if (argv[d->optind - 1][1] == '-')
+ {
+ /* --option */
+#if defined _LIBC && defined USE_IN_LIBIO
+ n = __asprintf (&buf, _("\
+%s: option `--%s' doesn't allow an argument\n"), argv[0], pfound->name);
+#else
+ fprintf (stderr, _("\
+%s: option `--%s' doesn't allow an argument\n"), argv[0], pfound->name);
+#endif
+ }
+ else
+ {
+ /* +option or -option */
+#if defined _LIBC && defined USE_IN_LIBIO
+ n = __asprintf (&buf, _("\
+%s: option `%c%s' doesn't allow an argument\n"), argv[0], argv[d->optind - 1][0], pfound->name);
+#else
+ fprintf (stderr, _("\
+%s: option `%c%s' doesn't allow an argument\n"), argv[0], argv[d->optind - 1][0], pfound->name);
+#endif
+ }
+
+#if defined _LIBC && defined USE_IN_LIBIO
+ if (n >= 0)
+ {
+ _IO_flockfile (stderr);
+
+ int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+ ((_IO_FILE *) stderr)->_flags2
+ |= _IO_FLAGS2_NOTCANCEL;
+
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+ _IO_funlockfile (stderr);
+
+ free (buf);
+ }
+#endif
+ }
+
+ d->__nextchar += strlen (d->__nextchar);
+
+ d->optopt = pfound->val;
+ return '?';
+ }
+ }
+ else if (pfound->has_arg == 1)
+ {
+ if (d->optind < argc)
+ d->optarg = argv[d->optind++];
+ else
+ {
+ if (print_errors)
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+
+ if (__asprintf (&buf, _("\
+%s: option `%s' requires an argument\n"), argv[0], argv[d->optind - 1]) >= 0)
+ {
+ _IO_flockfile (stderr);
+
+ int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+ ((_IO_FILE *) stderr)->_flags2
+ |= _IO_FLAGS2_NOTCANCEL;
+
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+ _IO_funlockfile (stderr);
+
+ free (buf);
+ }
+#else
+ fprintf (stderr,
+ _("%s: option `%s' requires an argument\n"),
+ argv[0], argv[d->optind - 1]);
+#endif
+ }
+ d->__nextchar += strlen (d->__nextchar);
+ d->optopt = pfound->val;
+ return optstring[0] == ':' ? ':' : '?';
+ }
+ }
+ d->__nextchar += strlen (d->__nextchar);
+ if (longind != NULL)
+ *longind = option_index;
+ if (pfound->flag)
+ {
+ *(pfound->flag) = pfound->val;
+ return 0;
+ }
+ return pfound->val;
+ }
+
+ /* Can't find it as a long option. If this is not getopt_long_only,
+ or the option starts with '--' or is not a valid short
+ option, then it's an error.
+ Otherwise interpret it as a short option. */
+ if (!long_only || argv[d->optind][1] == '-'
+ || strchr (optstring, *d->__nextchar) == NULL)
+ {
+ if (print_errors)
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+ int n;
+#endif
+
+ if (argv[d->optind][1] == '-')
+ {
+ /* --option */
+#if defined _LIBC && defined USE_IN_LIBIO
+ n = __asprintf (&buf, _("%s: unrecognized option `--%s'\n"),
+ argv[0], d->__nextchar);
+#else
+ fprintf (stderr, _("%s: unrecognized option `--%s'\n"),
+ argv[0], d->__nextchar);
+#endif
+ }
+ else
+ {
+ /* +option or -option */
+#if defined _LIBC && defined USE_IN_LIBIO
+ n = __asprintf (&buf, _("%s: unrecognized option `%c%s'\n"),
+ argv[0], argv[d->optind][0], d->__nextchar);
+#else
+ fprintf (stderr, _("%s: unrecognized option `%c%s'\n"),
+ argv[0], argv[d->optind][0], d->__nextchar);
+#endif
+ }
+
+#if defined _LIBC && defined USE_IN_LIBIO
+ if (n >= 0)
+ {
+ _IO_flockfile (stderr);
+
+ int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+ ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+ _IO_funlockfile (stderr);
+
+ free (buf);
+ }
+#endif
+ }
+ d->__nextchar = (char *) "";
+ d->optind++;
+ d->optopt = 0;
+ return '?';
+ }
+ }
+
+ /* Look at and handle the next short option-character. */
+
+ {
+ char c = *d->__nextchar++;
+ char *temp = strchr (optstring, c);
+
+ /* Increment `optind' when we start to process its last character. */
+ if (*d->__nextchar == '\0')
+ ++d->optind;
+
+ if (temp == NULL || c == ':')
+ {
+ if (print_errors)
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+ int n;
+#endif
+
+ if (d->__posixly_correct)
+ {
+ /* 1003.2 specifies the format of this message. */
+#if defined _LIBC && defined USE_IN_LIBIO
+ n = __asprintf (&buf, _("%s: illegal option -- %c\n"),
+ argv[0], c);
+#else
+ fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c);
+#endif
+ }
+ else
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ n = __asprintf (&buf, _("%s: invalid option -- %c\n"),
+ argv[0], c);
+#else
+ fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c);
+#endif
+ }
+
+#if defined _LIBC && defined USE_IN_LIBIO
+ if (n >= 0)
+ {
+ _IO_flockfile (stderr);
+
+ int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+ ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+ _IO_funlockfile (stderr);
+
+ free (buf);
+ }
+#endif
+ }
+ d->optopt = c;
+ return '?';
+ }
+ /* Convenience. Treat POSIX -W foo same as long option --foo */
+ if (temp[0] == 'W' && temp[1] == ';')
+ {
+ char *nameend;
+ const struct option *p;
+ const struct option *pfound = NULL;
+ int exact = 0;
+ int ambig = 0;
+ int indfound = 0;
+ int option_index;
+
+ /* This is an option that requires an argument. */
+ if (*d->__nextchar != '\0')
+ {
+ d->optarg = d->__nextchar;
+ /* If we end this ARGV-element by taking the rest as an arg,
+ we must advance to the next element now. */
+ d->optind++;
+ }
+ else if (d->optind == argc)
+ {
+ if (print_errors)
+ {
+ /* 1003.2 specifies the format of this message. */
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+
+ if (__asprintf (&buf,
+ _("%s: option requires an argument -- %c\n"),
+ argv[0], c) >= 0)
+ {
+ _IO_flockfile (stderr);
+
+ int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+ ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+ _IO_funlockfile (stderr);
+
+ free (buf);
+ }
+#else
+ fprintf (stderr, _("%s: option requires an argument -- %c\n"),
+ argv[0], c);
+#endif
+ }
+ d->optopt = c;
+ if (optstring[0] == ':')
+ c = ':';
+ else
+ c = '?';
+ return c;
+ }
+ else
+ /* We already incremented `d->optind' once;
+ increment it again when taking next ARGV-elt as argument. */
+ d->optarg = argv[d->optind++];
+
+ /* optarg is now the argument, see if it's in the
+ table of longopts. */
+
+ for (d->__nextchar = nameend = d->optarg; *nameend && *nameend != '=';
+ nameend++)
+ /* Do nothing. */ ;
+
+ /* Test all long options for either exact match
+ or abbreviated matches. */
+ for (p = longopts, option_index = 0; p->name; p++, option_index++)
+ if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar))
+ {
+ if ((unsigned int) (nameend - d->__nextchar) ==
+ strlen (p->name))
+ {
+ /* Exact match found. */
+ pfound = p;
+ indfound = option_index;
+ exact = 1;
+ break;
+ }
+ else if (pfound == NULL)
+ {
+ /* First nonexact match found. */
+ pfound = p;
+ indfound = option_index;
+ }
+ else
+ /* Second or later nonexact match found. */
+ ambig = 1;
+ }
+ if (ambig && !exact)
+ {
+ if (print_errors)
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+
+ if (__asprintf (&buf, _("%s: option `-W %s' is ambiguous\n"),
+ argv[0], argv[d->optind]) >= 0)
+ {
+ _IO_flockfile (stderr);
+
+ int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+ ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+ _IO_funlockfile (stderr);
+
+ free (buf);
+ }
+#else
+ fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
+ argv[0], argv[d->optind]);
+#endif
+ }
+ d->__nextchar += strlen (d->__nextchar);
+ d->optind++;
+ return '?';
+ }
+ if (pfound != NULL)
+ {
+ option_index = indfound;
+ if (*nameend)
+ {
+ /* Don't test has_arg with >, because some C compilers don't
+ allow it to be used on enums. */
+ if (pfound->has_arg)
+ d->optarg = nameend + 1;
+ else
+ {
+ if (print_errors)
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+
+ if (__asprintf (&buf, _("\
+%s: option `-W %s' doesn't allow an argument\n"), argv[0], pfound->name) >= 0)
+ {
+ _IO_flockfile (stderr);
+
+ int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+ ((_IO_FILE *) stderr)->_flags2
+ |= _IO_FLAGS2_NOTCANCEL;
+
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+ _IO_funlockfile (stderr);
+
+ free (buf);
+ }
+#else
+ fprintf (stderr, _("\
+%s: option `-W %s' doesn't allow an argument\n"), argv[0], pfound->name);
+#endif
+ }
+
+ d->__nextchar += strlen (d->__nextchar);
+ return '?';
+ }
+ }
+ else if (pfound->has_arg == 1)
+ {
+ if (d->optind < argc)
+ d->optarg = argv[d->optind++];
+ else
+ {
+ if (print_errors)
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+
+ if (__asprintf (&buf, _("\
+%s: option `%s' requires an argument\n"), argv[0], argv[d->optind - 1]) >= 0)
+ {
+ _IO_flockfile (stderr);
+
+ int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+ ((_IO_FILE *) stderr)->_flags2
+ |= _IO_FLAGS2_NOTCANCEL;
+
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+ _IO_funlockfile (stderr);
+
+ free (buf);
+ }
+#else
+ fprintf (stderr,
+ _("%s: option `%s' requires an argument\n"),
+ argv[0], argv[d->optind - 1]);
+#endif
+ }
+ d->__nextchar += strlen (d->__nextchar);
+ return optstring[0] == ':' ? ':' : '?';
+ }
+ }
+ d->__nextchar += strlen (d->__nextchar);
+ if (longind != NULL)
+ *longind = option_index;
+ if (pfound->flag)
+ {
+ *(pfound->flag) = pfound->val;
+ return 0;
+ }
+ return pfound->val;
+ }
+ d->__nextchar = NULL;
+ return 'W'; /* Let the application handle it. */
+ }
+ if (temp[1] == ':')
+ {
+ if (temp[2] == ':')
+ {
+ /* This is an option that accepts an argument optionally. */
+ if (*d->__nextchar != '\0')
+ {
+ d->optarg = d->__nextchar;
+ d->optind++;
+ }
+ else
+ d->optarg = NULL;
+ d->__nextchar = NULL;
+ }
+ else
+ {
+ /* This is an option that requires an argument. */
+ if (*d->__nextchar != '\0')
+ {
+ d->optarg = d->__nextchar;
+ /* If we end this ARGV-element by taking the rest as an arg,
+ we must advance to the next element now. */
+ d->optind++;
+ }
+ else if (d->optind == argc)
+ {
+ if (print_errors)
+ {
+ /* 1003.2 specifies the format of this message. */
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+
+ if (__asprintf (&buf, _("\
+%s: option requires an argument -- %c\n"), argv[0], c) >= 0)
+ {
+ _IO_flockfile (stderr);
+
+ int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+ ((_IO_FILE *) stderr)->_flags2 |=
+ _IO_FLAGS2_NOTCANCEL;
+
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+ _IO_funlockfile (stderr);
+
+ free (buf);
+ }
+#else
+ fprintf (stderr,
+ _("%s: option requires an argument -- %c\n"),
+ argv[0], c);
+#endif
+ }
+ d->optopt = c;
+ if (optstring[0] == ':')
+ c = ':';
+ else
+ c = '?';
+ }
+ else
+ /* We already incremented `optind' once;
+ increment it again when taking next ARGV-elt as argument. */
+ d->optarg = argv[d->optind++];
+ d->__nextchar = NULL;
+ }
+ }
+ return c;
+ }
+}
+
+int
+_getopt_internal (
+ int argc,
+ char *const *argv,
+ const char *optstring,
+ const struct option *longopts,
+ int *longind,
+ int long_only
+)
+{
+ int result;
+
+ getopt_data.optind = optind;
+ getopt_data.opterr = opterr;
+
+ result = _getopt_internal_r (argc, argv, optstring, longopts,
+ longind, long_only, &getopt_data);
+
+ optind = getopt_data.optind;
+ optarg = getopt_data.optarg;
+ optopt = getopt_data.optopt;
+
+ return result;
+}
+
+int
+getopt (
+ int argc,
+ char *const *argv,
+ const char *optstring
+)
+{
+ return _getopt_internal (argc, argv, optstring,
+ (const struct option *) 0, (int *) 0, 0);
+}
+
+#endif /* Not ELIDE_CODE. */
+
+#ifdef TEST
+
+/* Compile with -DTEST to make an executable for use in testing
+ the above definition of `getopt'. */
+
+int
+main (
+ int argc,
+ char **argv
+)
+{
+ int c;
+ int digit_optind = 0;
+
+ while (1)
+ {
+ int this_option_optind = optind ? optind : 1;
+
+ c = getopt (argc, argv, "abc:d:0123456789");
+ if (c == -1)
+ break;
+
+ switch (c)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ if (digit_optind != 0 && digit_optind != this_option_optind)
+ printf ("digits occur in two different argv-elements.\n");
+ digit_optind = this_option_optind;
+ printf ("option %c\n", c);
+ break;
+
+ case 'a':
+ printf ("option a\n");
+ break;
+
+ case 'b':
+ printf ("option b\n");
+ break;
+
+ case 'c':
+ printf ("option c with value `%s'\n", optarg);
+ break;
+
+ case '?':
+ break;
+
+ default:
+ printf ("?? getopt returned character code 0%o ??\n", c);
+ }
+ }
+
+ if (optind < argc)
+ {
+ printf ("non-option ARGV-elements: ");
+ while (optind < argc)
+ printf ("%s ", argv[optind++]);
+ printf ("\n");
+ }
+
+ exit (0);
+}
+
+#endif /* TEST */
diff --git a/bin/getopt.h b/bin/getopt.h
new file mode 100644
index 0000000..48ccab4
--- /dev/null
+++ b/bin/getopt.h
@@ -0,0 +1,187 @@
+/* Declarations for getopt.
+ Copyright (C) 1989-1994,1996-1999,2001,2003,2004
+ Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#ifndef _GETOPT_H
+
+#ifndef __need_getopt
+# define _GETOPT_H 1
+#endif
+
+/* If __GNU_LIBRARY__ is not already defined, either we are being used
+ standalone, or this is the first header included in the source file.
+ If we are being used with glibc, we need to include <features.h>, but
+ that does not exist if we are standalone. So: if __GNU_LIBRARY__ is
+ not defined, include <ctype.h>, which will pull in <features.h> for us
+ if it's from glibc. (Why ctype.h? It's guaranteed to exist and it
+ doesn't flood the namespace with stuff the way some other headers do.) */
+#if !defined __GNU_LIBRARY__
+# include <ctype.h>
+#endif
+
+#ifndef __THROW
+# ifndef __GNUC_PREREQ
+# define __GNUC_PREREQ(maj, min) (0)
+# endif
+# if defined __cplusplus && __GNUC_PREREQ (2,8)
+# define __THROW throw ()
+# else
+# define __THROW
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* For communication from `getopt' to the caller.
+ When `getopt' finds an option that takes an argument,
+ the argument value is returned here.
+ Also, when `ordering' is RETURN_IN_ORDER,
+ each non-option ARGV-element is returned here. */
+
+ extern char *optarg;
+
+/* Index in ARGV of the next element to be scanned.
+ This is used for communication to and from the caller
+ and for communication between successive calls to `getopt'.
+
+ On entry to `getopt', zero means this is the first call; initialize.
+
+ When `getopt' returns -1, this is the index of the first of the
+ non-option elements that the caller should itself scan.
+
+ Otherwise, `optind' communicates from one call to the next
+ how much of ARGV has been scanned so far. */
+
+ extern int optind;
+
+/* Callers store zero here to inhibit the error message `getopt' prints
+ for unrecognized options. */
+
+ extern int opterr;
+
+/* Set to an option character which was unrecognized. */
+
+ extern int optopt;
+
+#ifndef __need_getopt
+/* Describe the long-named options requested by the application.
+ The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
+ of `struct option' terminated by an element containing a name which is
+ zero.
+
+ The field `has_arg' is:
+ no_argument (or 0) if the option does not take an argument,
+ required_argument (or 1) if the option requires an argument,
+ optional_argument (or 2) if the option takes an optional argument.
+
+ If the field `flag' is not NULL, it points to a variable that is set
+ to the value given in the field `val' when the option is found, but
+ left unchanged if the option is not found.
+
+ To have a long-named option do something other than set an `int' to
+ a compiled-in constant, such as set a value from `optarg', set the
+ option's `flag' field to zero and its `val' field to a nonzero
+ value (the equivalent single-letter option character, if there is
+ one). For long options that have a zero `flag' field, `getopt'
+ returns the contents of the `val' field. */
+
+ struct option
+ {
+ const char *name;
+ /* has_arg can't be an enum because some compilers complain about
+ type mismatches in all the code that assumes it is an int. */
+ int has_arg;
+ int *flag;
+ int val;
+ };
+
+/* Names for the values of the `has_arg' field of `struct option'. */
+
+# define no_argument 0
+# define required_argument 1
+# define optional_argument 2
+#endif /* need getopt */
+
+
+/* Get definitions and prototypes for functions to process the
+ arguments in ARGV (ARGC of them, minus the program name) for
+ options given in OPTS.
+
+ Return the option character from OPTS just read. Return -1 when
+ there are no more options. For unrecognized options, or options
+ missing arguments, `optopt' is set to the option letter, and '?' is
+ returned.
+
+ The OPTS string is a list of characters which are recognized option
+ letters, optionally followed by colons, specifying that that letter
+ takes an argument, to be placed in `optarg'.
+
+ If a letter in OPTS is followed by two colons, its argument is
+ optional. This behavior is specific to the GNU `getopt'.
+
+ The argument `--' causes premature termination of argument
+ scanning, explicitly telling `getopt' that there are no more
+ options.
+
+ If OPTS begins with `--', then non-option arguments are treated as
+ arguments to the option '\0'. This behavior is specific to the GNU
+ `getopt'. */
+
+#ifdef __GNU_LIBRARY__
+/* Many other libraries have conflicting prototypes for getopt, with
+ differences in the consts, in stdlib.h. To avoid compilation
+ errors, only prototype getopt for the GNU C library. */
+ extern int getopt (
+ int ___argc,
+ char *const *___argv,
+ const char *__shortopts
+ ) __THROW;
+#else /* not __GNU_LIBRARY__ */
+ extern int getopt (
+ );
+#endif /* __GNU_LIBRARY__ */
+
+#ifndef __need_getopt
+ extern int getopt_long (
+ int ___argc,
+ char *const *___argv,
+ const char *__shortopts,
+ const struct option *__longopts,
+ int *__longind
+ ) __THROW;
+ extern int getopt_long_only (
+ int ___argc,
+ char *const *___argv,
+ const char *__shortopts,
+ const struct option *__longopts,
+ int *__longind
+ ) __THROW;
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+/* Make sure we later can get all the definitions and declarations. */
+#undef __need_getopt
+
+#endif /* getopt.h */
diff --git a/bin/getopt1.c b/bin/getopt1.c
new file mode 100644
index 0000000..656d556
--- /dev/null
+++ b/bin/getopt1.c
@@ -0,0 +1,213 @@
+/* getopt_long and getopt_long_only entry points for GNU getopt.
+ Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98,2004
+ Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef _LIBC
+# include <getopt.h>
+#else
+# include "getopt.h"
+#endif
+#include "getopt_int.h"
+
+#include <stdio.h>
+
+/* Comment out all this code if we are using the GNU C Library, and are not
+ actually compiling the library itself. This code is part of the GNU C
+ Library, but also included in many other GNU distributions. Compiling
+ and linking in this code is a waste when using the GNU C library
+ (especially if it is a shared library). Rather than having every GNU
+ program understand `configure --with-gnu-libc' and omit the object files,
+ it is simpler to just do this in the source for each such file. */
+
+#define GETOPT_INTERFACE_VERSION 2
+#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
+#include <gnu-versions.h>
+#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
+#define ELIDE_CODE
+#endif
+#endif
+
+#ifndef ELIDE_CODE
+
+
+/* This needs to come after some library #include
+ to get __GNU_LIBRARY__ defined. */
+#ifdef __GNU_LIBRARY__
+#include <stdlib.h>
+#endif
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+int
+getopt_long (
+ int argc,
+ char *const *argv,
+ const char *options,
+ const struct option *long_options,
+ int *opt_index
+)
+{
+ return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
+}
+
+int
+_getopt_long_r (
+ int argc,
+ char *const *argv,
+ const char *options,
+ const struct option *long_options,
+ int *opt_index,
+ struct _getopt_data *d
+)
+{
+ return _getopt_internal_r (argc, argv, options, long_options, opt_index,
+ 0, d);
+}
+
+/* Like getopt_long, but '-' as well as '--' can indicate a long option.
+ If an option that starts with '-' (not '--') doesn't match a long option,
+ but does match a short option, it is parsed as a short option
+ instead. */
+
+int
+getopt_long_only (
+ int argc,
+ char *const *argv,
+ const char *options,
+ const struct option *long_options,
+ int *opt_index
+)
+{
+ return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
+}
+
+int
+_getopt_long_only_r (
+ int argc,
+ char *const *argv,
+ const char *options,
+ const struct option *long_options,
+ int *opt_index,
+ struct _getopt_data *d
+)
+{
+ return _getopt_internal_r (argc, argv, options, long_options, opt_index,
+ 1, d);
+}
+
+#endif /* Not ELIDE_CODE. */
+
+#ifdef TEST
+
+#include <stdio.h>
+
+int
+main (
+ int argc,
+ char **argv
+)
+{
+ int c;
+ int digit_optind = 0;
+
+ while (1)
+ {
+ int this_option_optind = optind ? optind : 1;
+ int option_index = 0;
+ static struct option long_options[] = {
+ {"add", 1, 0, 0},
+ {"append", 0, 0, 0},
+ {"delete", 1, 0, 0},
+ {"verbose", 0, 0, 0},
+ {"create", 0, 0, 0},
+ {"file", 1, 0, 0},
+ {0, 0, 0, 0}
+ };
+
+ c = getopt_long (argc, argv, "abc:d:0123456789",
+ long_options, &option_index);
+ if (c == -1)
+ break;
+
+ switch (c)
+ {
+ case 0:
+ printf ("option %s", long_options[option_index].name);
+ if (optarg)
+ printf (" with arg %s", optarg);
+ printf ("\n");
+ break;
+
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ if (digit_optind != 0 && digit_optind != this_option_optind)
+ printf ("digits occur in two different argv-elements.\n");
+ digit_optind = this_option_optind;
+ printf ("option %c\n", c);
+ break;
+
+ case 'a':
+ printf ("option a\n");
+ break;
+
+ case 'b':
+ printf ("option b\n");
+ break;
+
+ case 'c':
+ printf ("option c with value `%s'\n", optarg);
+ break;
+
+ case 'd':
+ printf ("option d with value `%s'\n", optarg);
+ break;
+
+ case '?':
+ break;
+
+ default:
+ printf ("?? getopt returned character code 0%o ??\n", c);
+ }
+ }
+
+ if (optind < argc)
+ {
+ printf ("non-option ARGV-elements: ");
+ while (optind < argc)
+ printf ("%s ", argv[optind++]);
+ printf ("\n");
+ }
+
+ exit (0);
+}
+
+#endif /* TEST */
diff --git a/bin/getopt_int.h b/bin/getopt_int.h
new file mode 100644
index 0000000..d3da519
--- /dev/null
+++ b/bin/getopt_int.h
@@ -0,0 +1,145 @@
+/* Internal declarations for getopt.
+ Copyright (C) 1989-1994,1996-1999,2001,2003,2004
+ Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#ifndef _GETOPT_INT_H
+#define _GETOPT_INT_H 1
+
+extern int _getopt_internal (
+ int ___argc,
+ char *const *___argv,
+ const char *__shortopts,
+ const struct option *__longopts,
+ int *__longind,
+ int __long_only
+);
+
+
+/* Reentrant versions which can handle parsing multiple argument
+ vectors at the same time. */
+
+/* Data type for reentrant functions. */
+struct _getopt_data
+{
+ /* These have exactly the same meaning as the corresponding global
+ variables, except that they are used for the reentrant
+ versions of getopt. */
+ int optind;
+ int opterr;
+ int optopt;
+ char *optarg;
+
+ /* Internal members. */
+
+ /* True if the internal members have been initialized. */
+ int __initialized;
+
+ /* The next char to be scanned in the option-element
+ in which the last option character we returned was found.
+ This allows us to pick up the scan where we left off.
+
+ If this is zero, or a null string, it means resume the scan
+ by advancing to the next ARGV-element. */
+ char *__nextchar;
+
+ /* Describe how to deal with options that follow non-option ARGV-elements.
+
+ If the caller did not specify anything,
+ the default is REQUIRE_ORDER if the environment variable
+ POSIXLY_CORRECT is defined, PERMUTE otherwise.
+
+ REQUIRE_ORDER means don't recognize them as options;
+ stop option processing when the first non-option is seen.
+ This is what Unix does.
+ This mode of operation is selected by either setting the environment
+ variable POSIXLY_CORRECT, or using `+' as the first character
+ of the list of option characters.
+
+ PERMUTE is the default. We permute the contents of ARGV as we
+ scan, so that eventually all the non-options are at the end.
+ This allows options to be given in any order, even with programs
+ that were not written to expect this.
+
+ RETURN_IN_ORDER is an option available to programs that were
+ written to expect options and other ARGV-elements in any order
+ and that care about the ordering of the two. We describe each
+ non-option ARGV-element as if it were the argument of an option
+ with character code 1. Using `-' as the first character of the
+ list of option characters selects this mode of operation.
+
+ The special argument `--' forces an end of option-scanning regardless
+ of the value of `ordering'. In the case of RETURN_IN_ORDER, only
+ `--' can cause `getopt' to return -1 with `optind' != ARGC. */
+
+ enum
+ {
+ REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
+ } __ordering;
+
+ /* If the POSIXLY_CORRECT environment variable is set. */
+ int __posixly_correct;
+
+
+ /* Handle permutation of arguments. */
+
+ /* Describe the part of ARGV that contains non-options that have
+ been skipped. `first_nonopt' is the index in ARGV of the first
+ of them; `last_nonopt' is the index after the last of them. */
+
+ int __first_nonopt;
+ int __last_nonopt;
+
+#if defined _LIBC && defined USE_NONOPTION_FLAGS
+ int __nonoption_flags_max_len;
+ int __nonoption_flags_len;
+# endif
+};
+
+/* The initializer is necessary to set OPTIND and OPTERR to their
+ default values and to clear the initialization flag. */
+#define _GETOPT_DATA_INITIALIZER { 1, 1 }
+
+extern int _getopt_internal_r (
+ int ___argc,
+ char *const *___argv,
+ const char *__shortopts,
+ const struct option *__longopts,
+ int *__longind,
+ int __long_only,
+ struct _getopt_data *__data
+);
+
+extern int _getopt_long_r (
+ int ___argc,
+ char *const *___argv,
+ const char *__shortopts,
+ const struct option *__longopts,
+ int *__longind,
+ struct _getopt_data *__data
+);
+
+extern int _getopt_long_only_r (
+ int ___argc,
+ char *const *___argv,
+ const char *__shortopts,
+ const struct option *__longopts,
+ int *__longind,
+ struct _getopt_data *__data
+);
+
+#endif /* getopt_int.h */
diff --git a/bootstrap b/bootstrap
new file mode 100755
index 0000000..698da99
--- /dev/null
+++ b/bootstrap
@@ -0,0 +1,110 @@
+#! /bin/sh
+##############################################################################
+# $Id: bootstrap,v 1.1 2004-04-25 18:47:56 behdad Exp $
+# $Author: behdad
+# $Date: 2004-04-25 18:47:56 $
+# $Revision: 1.1 $
+# $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/bootstrap,v $
+##############################################################################
+# -*- Bootstrap -*-
+# Run this file to produce a configure script.
+
+DEFAULTARGS="--force --install --autoreconf=auto"
+
+for arg in $DEFAULTARGS $*
+do
+ case $arg in
+ -h | --help)
+ HELP=--help ;;
+ -V | --version)
+ VERSION=--version ;;
+ -v | --verbose)
+ VERBOSE=--verbose ;;
+ -d | --debug)
+ DEBUG=--debug ;;
+ -W | --warning | --warnings=yes)
+ WARNINGS=--warnings=all ;;
+ --no-warning | --warnings=no)
+ WARNINGS= ;;
+ --warning=*)
+ WARNINGS=$arg ;;
+ -f | --force | --force=yes | --force-missing)
+ FORCE=--force ;;
+ --no-force | --force=no)
+ FORCE=--no-force ;;
+ -i | --install | --install=yes | -a | --add-missing)
+ INSTALL=--install ;;
+ --no-install | --install=no)
+ INSTALL= ;;
+ -s | --symlink | --symlink=yes | --no-copy | --copy=no)
+ SYMLINK=--symlink ;;
+ --no-symlink | --symlink=no | --copy | --copy=yes)
+ SYMLINK= ;;
+ -m | --make | --make=yes)
+ MAKE=--make ;;
+ --no-make | --make=no)
+ MAKE= ;;
+ -n | --dry-run)
+ DRYRUN=echo ;;
+ --autoreconf=auto)
+ AUTORECONF=auto ;;
+ --autoreconf | --autoreconf=yes)
+ AUTORECONF=yes ;;
+ --no-autoreconf | --autoreconf=no)
+ AUTORECONF= ;;
+ *)
+ echo Ignoring unknown parameter $arg
+ esac
+done
+
+test -z "$SYMLINK" && COPY=--copy
+test -n "$INSTALL" && ADDMISSING=--add-missing
+
+# use autoreconf if possible, just check for version 2+
+if test "$AUTORECONF" = auto; then
+ case `autoreconf --version 2>/dev/null` in
+ *"autoreconf (GNU Autoconf) 2."* )
+ echo Usable autoreconf found, running
+ ;;
+ *)
+ AUTORECONF=
+ ;;
+ esac
+fi
+
+if test -n "$AUTORECONF"; then
+ $DRYRUN autoreconf $HELP $VERSION $VERBOSE $DEBUG $FORCE $INSTALL $SYMLINK $MAKE $WARNINGS
+ exit $?
+fi
+
+# add files 'config.guess', 'config.sub', 'ltconfig', 'ltmain.sh'
+$DRYRUN libtoolize $HELP $VERSION --automake $COPY $DEBUG $FORCE || exit 1
+
+# generate 'aclocal.m4'
+if test -f configure.ac -o configure.in; then
+ $DRYRUN aclocal $HELP $VERSION $VERBOSE $FORCE || exit 1
+fi
+
+# generate 'config.h.in'
+if test -f configure.ac -o configure.in; then
+ $DRYRUN autoheader $HELP $VERSION $VERBOSE $DEBUG $FORCE $WARNINGS || exit 1
+fi
+
+# generate Makefile.in's from Makefile.am's
+if test -f Makefile.am; then
+ $DRYRUN automake $HELP $VERSION $VERBOSE $ADDMISSING $COPY $FORCE $WARNINGS || exit 1
+fi
+
+# generate configure from configure.ac
+if test -f configure.ac -o -f configure.in; then
+ $DRYRUN autoconf $HELP $VERSION $VERBOSE $DEBUG $FORCE $WARNINGS || exit 1
+fi
+
+if test -n "$MAKE"; then
+ if test -f ./configure; then
+ $DRYRUN ./configure $HELP $VERSION || exit 1
+ fi
+ if test -f Makefile; then
+ $DRYRUN make || exit 1
+ fi
+fi
diff --git a/charset/Headers.mk b/charset/Headers.mk
new file mode 100644
index 0000000..2f6fb29
--- /dev/null
+++ b/charset/Headers.mk
@@ -0,0 +1,9 @@
+libfribidi_char_sets_la_headers = \
+ fribidi-char-sets-cap-rtl.h \
+ fribidi-char-sets-cp1255.h \
+ fribidi-char-sets-cp1256.h \
+ fribidi-char-sets.h \
+ fribidi-char-sets-iso8859-6.h \
+ fribidi-char-sets-iso8859-8.h \
+ fribidi-char-sets-list.h \
+ fribidi-char-sets-utf8.h
diff --git a/charset/Makefile.am b/charset/Makefile.am
new file mode 100644
index 0000000..0c7004f
--- /dev/null
+++ b/charset/Makefile.am
@@ -0,0 +1,48 @@
+noinst_LTLIBRARIES = libfribidi-char-sets.la
+
+AM_CPPFLAGS = \
+ -I$(top_builddir)/lib \
+ -I$(top_srcdir)/lib \
+ $(GLIB_CFLAGS)
+
+pkginclude_HEADERS =
+
+libfribidi_char_sets_la_LDFLAGS =
+libfribidi_char_sets_la_LIBADD =
+
+if FRIBIDI_CHARSETS
+
+if PLATFORM_WIN32
+no_undefined = -no-undefined
+endif # PLATFORM_WIN32
+
+libfribidi_char_sets_la_LDFLAGS += $(no_undefined)
+libfribidi_char_sets_la_LIBADD += $(GLIB_LIBS)
+
+if OS_WIN32
+libfribidi_char_sets_la_LDFLAGS += -export-symbols
+endif # OS_WIN32
+
+include Headers.mk
+pkginclude_HEADERS += $(libfribidi_char_sets_la_headers)
+
+else # !FRIBIDI_CHARSETS
+
+libfribidi_char_sets_la_LDFLAGS += -static
+
+endif # !FRIBIDI_CHARSETS
+
+libfribidi_char_sets_la_SOURCES = \
+ fribidi-char-sets-cap-rtl.c \
+ fribidi-char-sets-cp1255.c \
+ fribidi-char-sets-cp1256.c \
+ fribidi-char-sets.c \
+ fribidi-char-sets-iso8859-6.c \
+ fribidi-char-sets-iso8859-8.c \
+ fribidi-char-sets-utf8.c
+
+$(top_builddir)/config.h: $(top_srcdir)/config.h.in
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) config.h
+
+$(top_builddir)/lib/fribidi-config.h: $(top_srcdir)/lib/fribidi-config.h.in
+ cd $(top_builddir)/lib && $(MAKE) $(AM_MAKEFLAGS) fribidi-config.h
diff --git a/charset/fribidi-char-sets-cap-rtl.c b/charset/fribidi-char-sets-cap-rtl.c
new file mode 100644
index 0000000..9fb46ea
--- /dev/null
+++ b/charset/fribidi-char-sets-cap-rtl.c
@@ -0,0 +1,336 @@
+/* FriBidi
+ * fribidi-char-sets-cap-rtl.c - CapRTL character set conversion routines
+ *
+ * $Id: fribidi-char-sets-cap-rtl.c,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/charset/fribidi-char-sets-cap-rtl.c,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ * Dov Grobgeld, 1999, 2000
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ * Copyright (C) 1999,2000 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+
+#include <fribidi-char-sets-cap-rtl.h>
+
+#include <fribidi-unicode.h>
+#include <fribidi-mirroring.h>
+#include <fribidi-bidi-type.h>
+
+#include <common.h>
+#include <bidi-types.h>
+
+#include <stdio.h>
+
+#define WS FRIBIDI_PROP_TYPE_WS
+#define BS FRIBIDI_PROP_TYPE_BS
+#define EO FRIBIDI_PROP_TYPE_EO
+#define CTL FRIBIDI_PROP_TYPE_CTL
+#define LRE FRIBIDI_PROP_TYPE_LRE
+#define RLE FRIBIDI_PROP_TYPE_RLE
+#define ES FRIBIDI_PROP_TYPE_ES
+#define LRO FRIBIDI_PROP_TYPE_LRO
+#define RLO FRIBIDI_PROP_TYPE_RLO
+#define AL FRIBIDI_PROP_TYPE_AL
+#define SS FRIBIDI_PROP_TYPE_SS
+#define ET FRIBIDI_PROP_TYPE_ET
+#define NSM FRIBIDI_PROP_TYPE_NSM
+#define LTR FRIBIDI_PROP_TYPE_LTR
+#define ON FRIBIDI_PROP_TYPE_ON
+#define AN FRIBIDI_PROP_TYPE_AN
+#define BN FRIBIDI_PROP_TYPE_BN
+#define RTL FRIBIDI_PROP_TYPE_RTL
+#define CS FRIBIDI_PROP_TYPE_CS
+#define PDF FRIBIDI_PROP_TYPE_PDF
+#define EN FRIBIDI_PROP_TYPE_EN
+
+static FriBidiPropCharType CapRTLCharTypes[] = {
+/* *INDENT-OFF* */
+ ON, ON, ON, ON, LTR,RTL,ON, ON, ON, ON, ON, ON, ON, BS, RLO,RLE, /* 00-0f */
+ LRO,LRE,PDF,WS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, /* 10-1f */
+ WS, ON, ON, ON, ET, ON, ON, ON, ON, ON, ON, ET, CS, ON, ES, ES, /* 20-2f */
+ EN, EN, EN, EN, EN, EN, AN, AN, AN, AN, CS, ON, ON, ON, ON, ON, /* 30-3f */
+ RTL,AL, AL, AL, AL, AL, AL, RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL, /* 40-4f */
+ RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,ON, BS, ON, ON, ON, /* 50-5f */
+ NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, /* 60-6f */
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,ON, SS, ON, WS, ON, /* 70-7f */
+/* *INDENT-ON* */
+};
+
+#undef WS
+#undef BS
+#undef EO
+#undef CTL
+#undef LRE
+#undef RLE
+#undef ES
+#undef LRO
+#undef RLO
+#undef AL
+#undef SS
+#undef ET
+#undef NSM
+#undef LTR
+#undef ON
+#undef AN
+#undef BN
+#undef RTL
+#undef CS
+#undef PDF
+#undef EN
+
+#define CAPRTL_CHARS (sizeof CapRTLCharTypes / sizeof CapRTLCharTypes[0])
+
+static FriBidiChar *caprtl_to_unicode = NULL;
+
+static void
+init_cap_rtl (
+ void
+)
+{
+ int request[_FRIBIDI_PROP_TYPES_COUNT + 1];
+ int i, count;
+
+ caprtl_to_unicode =
+ (FriBidiChar *) fribidi_malloc (CAPRTL_CHARS *
+ sizeof caprtl_to_unicode[0]);
+ for (i = 0; i < _FRIBIDI_PROP_TYPES_COUNT; i++)
+ request[i] = 0;
+ for (i = 0; i < CAPRTL_CHARS; i++)
+ if (fribidi_get_mirror_char (i, NULL))
+ caprtl_to_unicode[i] = i;
+ for (count = 0, i = 0; i < CAPRTL_CHARS; i++)
+ if (caprtl_to_unicode[i] == 0)
+ {
+ request[(unsigned char) CapRTLCharTypes[i]]++;
+ count++;
+ }
+ for (i = 1; i < 0x10000 && count; i++) /* Assign BMP chars to CapRTL entries */
+ if (!fribidi_get_mirror_char (i, NULL))
+ {
+ int j, k;
+ for (j = 0; j < _FRIBIDI_PROP_TYPES_COUNT; j++)
+ if (fribidi_prop_to_type_[j] == fribidi_get_bidi_type (i))
+ break;
+ if (!request[j]) /* Do not need this type */
+ continue;
+ for (k = 0; k < CAPRTL_CHARS; k++)
+ if (!caprtl_to_unicode[k] && j == CapRTLCharTypes[k])
+ break;
+ if (k < CAPRTL_CHARS)
+ {
+ request[j]--;
+ count--;
+ caprtl_to_unicode[k] = i;
+ }
+ }
+}
+
+static char
+fribidi_unicode_to_cap_rtl_c (
+ /* input */
+ FriBidiChar uch
+)
+{
+ int i;
+
+ if (!caprtl_to_unicode)
+ init_cap_rtl ();
+
+ for (i = 0; i < CAPRTL_CHARS; i++)
+ if (uch == caprtl_to_unicode[i])
+ return (char) i;
+ return '?';
+}
+
+FriBidiStrIndex
+fribidi_cap_rtl_to_unicode (
+ /* input */
+ const char *s,
+ FriBidiStrIndex len,
+ /* output */
+ FriBidiChar *us
+)
+{
+ FriBidiStrIndex i, j;
+
+ if (!caprtl_to_unicode)
+ init_cap_rtl ();
+
+ j = 0;
+ for (i = 0; i < len; i++)
+ {
+ char ch;
+
+ ch = s[i];
+ if (ch == '_')
+ {
+ switch (ch = s[++i])
+ {
+ case '>':
+ us[j++] = FRIBIDI_CHAR_LRM;
+ break;
+ case '<':
+ us[j++] = FRIBIDI_CHAR_RLM;
+ break;
+ case 'l':
+ us[j++] = FRIBIDI_CHAR_LRE;
+ break;
+ case 'r':
+ us[j++] = FRIBIDI_CHAR_RLE;
+ break;
+ case 'o':
+ us[j++] = FRIBIDI_CHAR_PDF;
+ break;
+ case 'L':
+ us[j++] = FRIBIDI_CHAR_LRO;
+ break;
+ case 'R':
+ us[j++] = FRIBIDI_CHAR_RLO;
+ break;
+ case '_':
+ us[j++] = '_';
+ break;
+ default:
+ us[j++] = '_';
+ i--;
+ break;
+ }
+ }
+ else
+ us[j++] = caprtl_to_unicode[(int) s[i]];
+ }
+
+ return j;
+}
+
+FriBidiStrIndex
+fribidi_unicode_to_cap_rtl (
+ /* input */
+ const FriBidiChar *us,
+ int len,
+ /* output */
+ char *s
+)
+{
+ int i, j;
+
+ j = 0;
+ for (i = 0; i < len; i++)
+ {
+ FriBidiChar ch = us[i];
+ if (!FRIBIDI_IS_EXPLICIT (fribidi_get_type (ch)) && ch != '_'
+ && ch != FRIBIDI_CHAR_LRM && ch != FRIBIDI_CHAR_RLM)
+ s[j++] = fribidi_unicode_to_cap_rtl_c (ch);
+ else
+ {
+ s[j++] = '_';
+ switch (ch)
+ {
+ case FRIBIDI_CHAR_LRM:
+ s[j++] = '>';
+ break;
+ case FRIBIDI_CHAR_RLM:
+ s[j++] = '<';
+ break;
+ case FRIBIDI_CHAR_LRE:
+ s[j++] = 'l';
+ break;
+ case FRIBIDI_CHAR_RLE:
+ s[j++] = 'r';
+ break;
+ case FRIBIDI_CHAR_PDF:
+ s[j++] = 'o';
+ break;
+ case FRIBIDI_CHAR_LRO:
+ s[j++] = 'L';
+ break;
+ case FRIBIDI_CHAR_RLO:
+ s[j++] = 'R';
+ break;
+ case '_':
+ s[j++] = '_';
+ break;
+ default:
+ j--;
+ if (ch < 256)
+ s[j++] = fribidi_unicode_to_cap_rtl_c (ch);
+ else
+ s[j++] = '?';
+ break;
+ }
+ }
+ }
+ s[j] = 0;
+
+ return j;
+}
+
+const char *
+fribidi_char_set_desc_cap_rtl (
+ void
+)
+{
+ static char *s = 0;
+ int l, i, j;
+
+ if (s)
+ return s;
+
+ l = 10000;
+ s = (char *) fribidi_malloc (l);
+ i = 0;
+ i += sprintf (s + i, /*l - i, */
+ "CapRTL is a character set for testing with the reference\n"
+ "implementation, with explicit marks escape strings, and\n"
+ "the property that contains all unicode character types in\n"
+ "ASCII range 1-127.\n"
+ "\n"
+ "Warning: CapRTL character types are subject to change.\n"
+ "\n" "CapRTL's character types:\n");
+ for (j = 0; j < CAPRTL_CHARS; j++)
+ {
+ if (j % 4 == 0)
+ s[i++] = '\n';
+ i += sprintf (s + i, /*l - i, */ " * 0x%02x %c%c %-3s ", j,
+ j < 0x20 ? '^' : ' ',
+ j < 0x20 ? j + '@' : j < 0x7f ? j : ' ',
+ fribidi_type_name (fribidi_prop_to_type_
+ [(unsigned char) CapRTLCharTypes[j]]));
+ }
+ i += sprintf (s + i, /*l - i, */
+ "\n\n"
+ "Escape sequences:\n"
+ " Character `_' is used to escape explicit marks. The list is:\n"
+ " * _> LRM\n" " * _< RLM\n"
+ " * _l LRE\n" " * _r RLE\n"
+ " * _L LRO\n" " * _R RLO\n"
+ " * _o PDF\n" " * __ `_' itself\n" "\n");
+ return s;
+}
+
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/charset/fribidi-char-sets-cap-rtl.h b/charset/fribidi-char-sets-cap-rtl.h
new file mode 100644
index 0000000..ebcae45
--- /dev/null
+++ b/charset/fribidi-char-sets-cap-rtl.h
@@ -0,0 +1,70 @@
+/* FriBidi
+ * fribidi-char-sets-cap-rtl.h - CapRTL character set conversion routines
+ *
+ * $Id: fribidi-char-sets-cap-rtl.h,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/charset/fribidi-char-sets-cap-rtl.h,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ * Dov Grobgeld, 1999, 2000
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ * Copyright (C) 1999,2000 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+
+#ifndef _FRIBIDI_CHAR_SETS_CAP_RTL_H
+#define _FRIBIDI_CHAR_SETS_CAP_RTL_H
+
+#include "fribidi-common.h"
+
+#include "fribidi-types.h"
+
+#define fribidi_char_set_name_cap_rtl "CapRTL"
+#define fribidi_char_set_title_cap_rtl "CapRTL (Test)"
+
+#define fribidi_char_set_desc_cap_rtl FRIBIDI_NAMESPACE(char_set_desc_cap_rtl)
+const char *fribidi_char_set_desc_cap_rtl (
+ void
+);
+
+#define fribidi_cap_rtl_to_unicode FRIBIDI_NAMESPACE(cap_rtl_to_unicode)
+FriBidiStrIndex fribidi_cap_rtl_to_unicode (
+ const char *s,
+ FriBidiStrIndex length,
+ FriBidiChar *us
+);
+
+#define fribidi_unicode_to_cap_rtl FRIBIDI_NAMESPACE(unicode_to_cap_rtl)
+FriBidiStrIndex fribidi_unicode_to_cap_rtl (
+ const FriBidiChar *us,
+ FriBidiStrIndex length,
+ char *s
+);
+
+#include "fribidi-enddecls.h"
+
+#endif /* !_FRIBIDI_CHAR_SETS_CAP_RTL_H */
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/charset/fribidi-char-sets-cp1255.c b/charset/fribidi-char-sets-cp1255.c
new file mode 100644
index 0000000..02a72ba
--- /dev/null
+++ b/charset/fribidi-char-sets-cp1255.c
@@ -0,0 +1,106 @@
+/* FriBidi
+ * fribidi-char-sets-cp1255.c - CP1255 character set conversion routines
+ *
+ * $Id: fribidi-char-sets-cp1255.c,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/charset/fribidi-char-sets-cp1255.c,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ * Dov Grobgeld, 1999, 2000
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ * Copyright (C) 1999,2000 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+
+#include <fribidi-char-sets-cp1255.h>
+
+#include <common.h>
+
+#define ISO_ALEF 0xE0
+#define ISO_TAV 0xFA
+#define CP1255_SHEVA 0xC0
+#define CP1255_SOF_PASUQ 0xD3
+#define CP1255_DOUBLE_VAV 0xD4
+#define CP1255_GERSHAYIM 0xD8
+
+#define UNI_ALEF 0x05D0
+#define UNI_TAV 0x05EA
+#define UNI_SHEVA 0x05B0
+#define UNI_SOF_PASUQ 0x05C3
+#define UNI_DOUBLE_VAV 0x05F0
+#define UNI_GERSHAYIM 0x05F4
+
+static FriBidiChar fribidi_cp1255_to_unicode_tab[] = { /* 0x80-0xBF */
+ 0x20AC, 0x0081, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
+ 0x02C6, 0x2030, 0x008a, 0x2039, 0x008c, 0x008d, 0x008e, 0x008f,
+ 0x0090, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
+ 0x02DC, 0x2122, 0x009a, 0x203A, 0x009c, 0x009d, 0x009e, 0x009f,
+ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AA, 0x00A5, 0x00A6, 0x00A7,
+ 0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
+ 0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF
+};
+
+FriBidiChar
+fribidi_cp1255_to_unicode_c (
+ /* input */
+ char sch
+)
+{
+ register unsigned char ch = (unsigned char) sch;
+ if (ch >= ISO_ALEF && ch <= ISO_TAV)
+ return ch - ISO_ALEF + UNI_ALEF;
+ else if (ch >= CP1255_SHEVA && ch <= CP1255_SOF_PASUQ)
+ return ch - CP1255_SHEVA + UNI_SHEVA;
+ else if (ch >= CP1255_DOUBLE_VAV && ch <= CP1255_GERSHAYIM)
+ return ch - CP1255_DOUBLE_VAV + UNI_DOUBLE_VAV;
+ /* cp1256 specific chars */
+ else if (ch >= 0x80 && ch <= 0xbf)
+ return fribidi_cp1255_to_unicode_tab[ch - 0x80];
+ else
+ return ch;
+}
+
+char
+fribidi_unicode_to_cp1255_c (
+ /* input */
+ FriBidiChar uch
+)
+{
+ if (uch >= UNI_ALEF && uch <= UNI_TAV)
+ return (char) (uch - UNI_ALEF + ISO_ALEF);
+ if (uch >= UNI_SHEVA && uch <= UNI_SOF_PASUQ)
+ return (char) (uch - UNI_SHEVA + CP1255_SHEVA);
+ if (uch >= UNI_DOUBLE_VAV && uch <= UNI_GERSHAYIM)
+ return (char) (uch - UNI_DOUBLE_VAV + CP1255_DOUBLE_VAV);
+ /* TODO: handle pre-composed and presentation chars */
+ else if (uch < 256)
+ return (char) uch;
+ else
+ return '?';
+}
+
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/charset/fribidi-char-sets-cp1255.h b/charset/fribidi-char-sets-cp1255.h
new file mode 100644
index 0000000..011c913
--- /dev/null
+++ b/charset/fribidi-char-sets-cp1255.h
@@ -0,0 +1,62 @@
+/* FriBidi
+ * fribidi-char-sets-cp1255.h - CP1255 character set conversion routines
+ *
+ * $Id: fribidi-char-sets-cp1255.h,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/charset/fribidi-char-sets-cp1255.h,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ * Dov Grobgeld, 1999, 2000
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ * Copyright (C) 1999,2000 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+
+#ifndef _FRIBIDI_CHAR_SETS_CP1255_H
+#define _FRIBIDI_CHAR_SETS_CP1255_H
+
+#include "fribidi-common.h"
+
+#include "fribidi-types.h"
+
+#define fribidi_char_set_name_cp1255 "CP1255"
+#define fribidi_char_set_title_cp1255 "CP1255 (MS Hebrew/Yiddish)"
+#define fribidi_char_set_desc_cp1255 NULL
+
+#define fribidi_cp1255_to_unicode_c FRIBIDI_NAMESPACE(cp1255_to_unicode_c)
+FriBidiChar fribidi_cp1255_to_unicode_c (
+ char ch
+);
+
+#define fribidi_unicode_to_cp1255_c FRIBIDI_NAMESPACE(unicode_to_cp1255_c)
+char fribidi_unicode_to_cp1255_c (
+ FriBidiChar uch
+);
+
+#include "fribidi-enddecls.h"
+
+#endif /* !_FRIBIDI_CHAR_SETS_CP1255_H */
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/charset/fribidi-char-sets-cp1256.c b/charset/fribidi-char-sets-cp1256.c
new file mode 100644
index 0000000..1470da3
--- /dev/null
+++ b/charset/fribidi-char-sets-cp1256.c
@@ -0,0 +1,223 @@
+/* FriBidi
+ * fribidi-char-sets-cp1256.c - CP1256 character set conversion routines
+ *
+ * $Id: fribidi-char-sets-cp1256.c,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/charset/fribidi-char-sets-cp1256.c,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ * Dov Grobgeld, 1999, 2000
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ * Copyright (C) 1999,2000 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+
+#include <fribidi-char-sets-cp1256.h>
+
+#include <common.h>
+
+#define ISO_HAMZA 0xc1
+#define CP1256_DAD 0xD6
+
+#define UNI_HAMZA 0x0621
+#define UNI_DAD 0x0636
+
+static FriBidiChar fribidi_cp1256_to_unicode_tab[] = { /* 0x80-0xFF */
+ 0x20AC, 0x067E, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
+ 0x02C6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688,
+ 0x06AF, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
+ 0x06A9, 0x2122, 0x0691, 0x203A, 0x0153, 0x200C, 0x200D, 0x06BA,
+ 0x00A0, 0x060C, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
+ 0x00A8, 0x00A9, 0x06BE, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
+ 0x00B8, 0x00B9, 0x061B, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x061F,
+ 0x06C1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
+ 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F,
+ 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00D7,
+ 0x0637, 0x0638, 0x0639, 0x063A, 0x0640, 0x0641, 0x0642, 0x0643,
+ 0x00E0, 0x0644, 0x00E2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00E7,
+ 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0649, 0x064A, 0x00EE, 0x00EF,
+ 0x064B, 0x064C, 0x064D, 0x064E, 0x00F4, 0x064F, 0x0650, 0x00F7,
+ 0x0651, 0x00F9, 0x0652, 0x00FB, 0x00FC, 0x200E, 0x200F, 0x00ff
+};
+
+FriBidiChar
+fribidi_cp1256_to_unicode_c (
+ /* input */
+ char sch
+)
+{
+ register unsigned char ch = (unsigned char) sch;
+ if (ch >= 0x80)
+ return fribidi_cp1256_to_unicode_tab[ch - 0x80];
+ else
+ return ch;
+}
+
+char
+fribidi_unicode_to_cp1256_c (
+ /* input */
+ FriBidiChar uch
+)
+{
+ if (uch < 256)
+ return (char) uch;
+ if (uch >= UNI_HAMZA && uch <= UNI_DAD)
+ return (char) (uch - UNI_HAMZA + ISO_HAMZA);
+ else
+ switch (uch)
+ {
+ case 0x0152:
+ return (char) 0x8c;
+ case 0x0153:
+ return (char) 0x9c;
+ case 0x0192:
+ return (char) 0x83;
+ case 0x02C6:
+ return (char) 0x88;
+ case 0x060C:
+ return (char) 0xA1;
+ case 0x061B:
+ return (char) 0xBA;
+ case 0x061F:
+ return (char) 0xBF;
+ case 0x0637:
+ return (char) 0xD8;
+ case 0x0638:
+ return (char) 0xD9;
+ case 0x0639:
+ return (char) 0xDA;
+ case 0x063A:
+ return (char) 0xDB;
+ case 0x0640:
+ return (char) 0xDC;
+ case 0x0641:
+ return (char) 0xDD;
+ case 0x0642:
+ return (char) 0xDE;
+ case 0x0643:
+ return (char) 0xDF;
+ case 0x0644:
+ return (char) 0xE1;
+ case 0x0645:
+ return (char) 0xE3;
+ case 0x0646:
+ return (char) 0xE4;
+ case 0x0647:
+ return (char) 0xE5;
+ case 0x0648:
+ return (char) 0xE6;
+ case 0x0649:
+ return (char) 0xEC;
+ case 0x064A:
+ return (char) 0xED;
+ case 0x064B:
+ return (char) 0xF0;
+ case 0x064C:
+ return (char) 0xF1;
+ case 0x064D:
+ return (char) 0xF2;
+ case 0x064E:
+ return (char) 0xF3;
+ case 0x064F:
+ return (char) 0xF5;
+ case 0x0650:
+ return (char) 0xF6;
+ case 0x0651:
+ return (char) 0xF8;
+ case 0x0652:
+ return (char) 0xFA;
+ case 0x0679:
+ return (char) 0x8A;
+ case 0x067E:
+ return (char) 0x81;
+ case 0x0686:
+ return (char) 0x8D;
+ case 0x0688:
+ return (char) 0x8F;
+ case 0x0691:
+ return (char) 0x9A;
+ case 0x0698:
+ return (char) 0x8E;
+ case 0x06A9:
+ return (char) 0x98;
+ case 0x06AF:
+ return (char) 0x90;
+ case 0x06BA:
+ return (char) 0x9F;
+ case 0x06BE:
+ return (char) 0xAA;
+ case 0x06C1:
+ return (char) 0xC0;
+ case 0x200C:
+ return (char) 0x9D;
+ case 0x200D:
+ return (char) 0x9E;
+ case 0x200E:
+ return (char) 0xFD;
+ case 0x200F:
+ return (char) 0xFE;
+ case 0x2013:
+ return (char) 0x96;
+ case 0x2014:
+ return (char) 0x97;
+ case 0x2018:
+ return (char) 0x91;
+ case 0x2019:
+ return (char) 0x92;
+ case 0x201A:
+ return (char) 0x82;
+ case 0x201C:
+ return (char) 0x93;
+ case 0x201D:
+ return (char) 0x94;
+ case 0x201E:
+ return (char) 0x84;
+ case 0x2020:
+ return (char) 0x86;
+ case 0x2021:
+ return (char) 0x87;
+ case 0x2022:
+ return (char) 0x95;
+ case 0x2026:
+ return (char) 0x85;
+ case 0x2030:
+ return (char) 0x89;
+ case 0x2039:
+ return (char) 0x8B;
+ case 0x203A:
+ return (char) 0x9B;
+ case 0x20AC:
+ return (char) 0x80;
+ case 0x2122:
+ return (char) 0x99;
+
+ default:
+ return '?';
+ }
+}
+
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/charset/fribidi-char-sets-cp1256.h b/charset/fribidi-char-sets-cp1256.h
new file mode 100644
index 0000000..ecf2605
--- /dev/null
+++ b/charset/fribidi-char-sets-cp1256.h
@@ -0,0 +1,62 @@
+/* FriBidi
+ * fribidi-char-sets-cp1256.h - CP1256 character set conversion routines
+ *
+ * $Id: fribidi-char-sets-cp1256.h,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/charset/fribidi-char-sets-cp1256.h,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ * Dov Grobgeld, 1999, 2000
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ * Copyright (C) 1999,2000 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+
+#ifndef _FRIBIDI_CHAR_SETS_CP1256_H
+#define _FRIBIDI_CHAR_SETS_CP1256_H
+
+#include "fribidi-common.h"
+
+#include "fribidi-types.h"
+
+#define fribidi_char_set_name_cp1256 "CP1256"
+#define fribidi_char_set_title_cp1256 "CP1256 (MS Arabic)"
+#define fribidi_char_set_desc_cp1256 NULL
+
+#define fribidi_cp1256_to_unicode_c FRIBIDI_NAMESPACE(cp1256_to_unicode_c)
+FriBidiChar fribidi_cp1256_to_unicode_c (
+ char ch
+);
+
+#define fribidi_unicode_to_cp1256_c FRIBIDI_NAMESPACE(unicode_to_cp1256_c)
+char fribidi_unicode_to_cp1256_c (
+ FriBidiChar uch
+);
+
+#include "fribidi-enddecls.h"
+
+#endif /* !_FRIBIDI_CHAR_SETS_CP1256_H */
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/charset/fribidi-char-sets-iso8859-6.c b/charset/fribidi-char-sets-iso8859-6.c
new file mode 100644
index 0000000..e238a4b
--- /dev/null
+++ b/charset/fribidi-char-sets-iso8859-6.c
@@ -0,0 +1,81 @@
+/* FriBidi
+ * fribidi-char-sets-iso8859-6.c - ISO8859-6 character set conversion routines
+ *
+ * $Id: fribidi-char-sets-iso8859-6.c,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/charset/fribidi-char-sets-iso8859-6.c,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ * Dov Grobgeld, 1999, 2000
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ * Copyright (C) 1999,2000 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+
+#include <fribidi-char-sets-iso8859-6.h>
+
+#include <common.h>
+
+#define ISO_HAMZA 0xc1
+#define ISO_SUKUN 0xf2
+
+#define UNI_HAMZA 0x0621
+#define UNI_SUKUN 0x0652
+
+FriBidiChar
+fribidi_iso8859_6_to_unicode_c (
+ /* input */
+ char sch
+)
+{
+ register unsigned char ch = (unsigned char) sch;
+ if (ch >= ISO_HAMZA && ch <= ISO_SUKUN)
+ return ch - ISO_HAMZA + UNI_HAMZA;
+ else
+ return ch;
+}
+
+char
+fribidi_unicode_to_iso8859_6_c (
+ /* input */
+ FriBidiChar uch
+)
+{
+ if (uch >= UNI_HAMZA && uch <= UNI_SUKUN)
+ return (char) (uch - UNI_HAMZA + ISO_HAMZA);
+ else if (uch < 256)
+ return (char) uch;
+ else if (uch == 0x060c)
+ return (char) 0xac;
+ else if (uch == 0x061b)
+ return (char) 0xbb;
+ else if (uch == 0x061f)
+ return (char) 0xbf;
+ else
+ return '?';
+}
+
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/charset/fribidi-char-sets-iso8859-6.h b/charset/fribidi-char-sets-iso8859-6.h
new file mode 100644
index 0000000..159ccbd
--- /dev/null
+++ b/charset/fribidi-char-sets-iso8859-6.h
@@ -0,0 +1,62 @@
+/* FriBidi
+ * fribidi-char-sets-iso8859-6.h - ISO8859-6 character set conversion routines
+ *
+ * $Id: fribidi-char-sets-iso8859-6.h,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/charset/fribidi-char-sets-iso8859-6.h,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ * Dov Grobgeld, 1999, 2000
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ * Copyright (C) 1999,2000 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+
+#ifndef _FRIBIDI_CHAR_SETS_ISO8859_6_H
+#define _FRIBIDI_CHAR_SETS_ISO8859_6_H
+
+#include "fribidi-common.h"
+
+#include "fribidi-types.h"
+
+#define fribidi_char_set_name_iso8859_6 "ISO8859-6"
+#define fribidi_char_set_title_iso8859_6 "ISO8859-6 (Arabic)"
+#define fribidi_char_set_desc_iso8859_6 NULL
+
+#define fribidi_iso8859_6_to_unicode_c FRIBIDI_NAMESPACE(iso8859_6_to_unicode_c)
+FriBidiChar fribidi_iso8859_6_to_unicode_c (
+ char ch
+);
+
+#define fribidi_unicode_to_iso8859_6_c FRIBIDI_NAMESPACE(unicode_to_iso8859_6_c)
+char fribidi_unicode_to_iso8859_6_c (
+ FriBidiChar uch
+);
+
+#include "fribidi-enddecls.h"
+
+#endif /* !_FRIBIDI_CHAR_SETS_ISO8859_6_H */
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/charset/fribidi-char-sets-iso8859-8.c b/charset/fribidi-char-sets-iso8859-8.c
new file mode 100644
index 0000000..4b86b94
--- /dev/null
+++ b/charset/fribidi-char-sets-iso8859-8.c
@@ -0,0 +1,120 @@
+/* FriBidi
+ * fribidi-char-sets-iso8859-8.c - ISO8859-8 character set conversion routines
+ *
+ * $Id: fribidi-char-sets-iso8859-8.c,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/charset/fribidi-char-sets-iso8859-8.c,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ * Dov Grobgeld, 1999, 2000
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ * Copyright (C) 1999,2000 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+
+#include <fribidi-char-sets-iso8859-8.h>
+
+#include <fribidi-unicode.h>
+
+#include <common.h>
+
+/* The following are proposed extensions to ISO8859-8. */
+#define ISO_8859_8_LRM 0xFD
+#define ISO_8859_8_RLM 0xFE
+#define ISO_8859_8_LRE 0xFB
+#define ISO_8859_8_RLE 0xFC
+#define ISO_8859_8_PDF 0xDD
+#define ISO_8859_8_LRO 0xDB
+#define ISO_8859_8_RLO 0xDC
+#define ISO_ALEF 0xE0
+#define ISO_TAV 0xFA
+
+#define UNI_ALEF 0x05D0
+#define UNI_TAV 0x05EA
+
+FriBidiChar
+fribidi_iso8859_8_to_unicode_c (
+ /* input */
+ char sch
+)
+{
+ register unsigned char ch = (unsigned char) sch;
+ if (ch < ISO_8859_8_LRO)
+ return ch;
+ else if (ch >= ISO_ALEF && ch <= ISO_TAV)
+ return ch - ISO_ALEF + UNI_ALEF;
+ switch (ch)
+ {
+ case ISO_8859_8_RLM:
+ return FRIBIDI_CHAR_RLM;
+ case ISO_8859_8_LRM:
+ return FRIBIDI_CHAR_LRM;
+ case ISO_8859_8_RLO:
+ return FRIBIDI_CHAR_RLO;
+ case ISO_8859_8_LRO:
+ return FRIBIDI_CHAR_LRO;
+ case ISO_8859_8_RLE:
+ return FRIBIDI_CHAR_RLE;
+ case ISO_8859_8_LRE:
+ return FRIBIDI_CHAR_LRE;
+ case ISO_8859_8_PDF:
+ return FRIBIDI_CHAR_PDF;
+ default:
+ return '?';
+ }
+}
+
+char
+fribidi_unicode_to_iso8859_8_c (
+ /* input */
+ FriBidiChar uch
+)
+{
+ if (uch < 128)
+ return (char) uch;
+ if (uch >= UNI_ALEF && uch <= UNI_TAV)
+ return (char) (uch - UNI_ALEF + ISO_ALEF);
+ switch (uch)
+ {
+ case FRIBIDI_CHAR_RLM:
+ return (char) ISO_8859_8_RLM;
+ case FRIBIDI_CHAR_LRM:
+ return (char) ISO_8859_8_LRM;
+ case FRIBIDI_CHAR_RLO:
+ return (char) ISO_8859_8_RLO;
+ case FRIBIDI_CHAR_LRO:
+ return (char) ISO_8859_8_LRO;
+ case FRIBIDI_CHAR_RLE:
+ return (char) ISO_8859_8_RLE;
+ case FRIBIDI_CHAR_LRE:
+ return (char) ISO_8859_8_LRE;
+ case FRIBIDI_CHAR_PDF:
+ return (char) ISO_8859_8_PDF;
+ }
+ return '?';
+}
+
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/charset/fribidi-char-sets-iso8859-8.h b/charset/fribidi-char-sets-iso8859-8.h
new file mode 100644
index 0000000..ccc7b16
--- /dev/null
+++ b/charset/fribidi-char-sets-iso8859-8.h
@@ -0,0 +1,62 @@
+/* FriBidi
+ * fribidi-char-sets-iso8859-8.h - ISO8859-8 character set conversion routines
+ *
+ * $Id: fribidi-char-sets-iso8859-8.h,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/charset/fribidi-char-sets-iso8859-8.h,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ * Dov Grobgeld, 1999, 2000
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ * Copyright (C) 1999,2000 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+
+#ifndef _FRIBIDI_CHAR_SETS_ISO8859_8_H
+#define _FRIBIDI_CHAR_SETS_ISO8859_8_H
+
+#include "fribidi-common.h"
+
+#include "fribidi-types.h"
+
+#define fribidi_char_set_name_iso8859_8 "ISO8859-8"
+#define fribidi_char_set_title_iso8859_8 "ISO8859-8 (Hebrew)"
+#define fribidi_char_set_desc_iso8859_8 NULL
+
+#define fribidi_iso8859_8_to_unicode_c FRIBIDI_NAMESPACE(iso8859_8_to_unicode_c)
+FriBidiChar fribidi_iso8859_8_to_unicode_c (
+ char ch
+);
+
+#define fribidi_unicode_to_iso8859_8_c FRIBIDI_NAMESPACE(unicode_to_iso8859_8_c)
+char fribidi_unicode_to_iso8859_8_c (
+ FriBidiChar uch
+);
+
+#include "fribidi-enddecls.h"
+
+#endif /* !_FRIBIDI_CHAR_SETS_ISO8859_8_H */
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/charset/fribidi-char-sets-list.h b/charset/fribidi-char-sets-list.h
new file mode 100644
index 0000000..c5df751
--- /dev/null
+++ b/charset/fribidi-char-sets-list.h
@@ -0,0 +1,56 @@
+#ifndef __C2MAN__
+/* FriBidi
+ * fribidi-char-sets-list.h - list of supported character sets
+ *
+ * $Id: fribidi-char-sets-list.h,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/charset/fribidi-char-sets-list.h,v $
+ *
+ * Author:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc.
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+/* *INDENT-OFF* */
+
+/* The order of types in this list should not be important at compile time,
+ * but apparently it should not be changed after compilation! */
+#endif /* !__C2MAN__ */
+#ifdef _FRIBIDI_ADD_CHAR_SET
+# define _FRIBIDI_ADD_CHAR_SET_OTHERS _FRIBIDI_ADD_CHAR_SET
+# define _FRIBIDI_ADD_CHAR_SET_ONE2ONE _FRIBIDI_ADD_CHAR_SET
+#endif /* _FRIBIDI_ADD_CHAR_SET */
+_FRIBIDI_ADD_CHAR_SET_OTHERS (UTF8, utf8) /* UTF-8 (Unicode) */
+_FRIBIDI_ADD_CHAR_SET_OTHERS (CAP_RTL, cap_rtl) /* CapRTL (Test) */
+_FRIBIDI_ADD_CHAR_SET_ONE2ONE (ISO8859_6, iso8859_6) /* ISO8859-6 (Arabic) */
+_FRIBIDI_ADD_CHAR_SET_ONE2ONE (ISO8859_8, iso8859_8) /* ISO8859-8 (Hebrew) */
+_FRIBIDI_ADD_CHAR_SET_ONE2ONE (CP1255, cp1255) /* CP1255 (MS Hebrew/Yiddish) */
+_FRIBIDI_ADD_CHAR_SET_ONE2ONE (CP1256, cp1256) /* CP1256 (MS Arabic) */
+#ifdef _FRIBIDI_ADD_CHAR_SET
+# undef _FRIBIDI_ADD_CHAR_SET_OTHERS
+# undef _FRIBIDI_ADD_CHAR_SET_ONE2ONE
+#endif /* _FRIBIDI_ADD_CHAR_SET */
+
+#ifndef __C2MAN__
+/* *INDENT-ON* */
+#endif /* !__C2MAN__ */
diff --git a/charset/fribidi-char-sets-utf8.c b/charset/fribidi-char-sets-utf8.c
new file mode 100644
index 0000000..79d1ab9
--- /dev/null
+++ b/charset/fribidi-char-sets-utf8.c
@@ -0,0 +1,126 @@
+/* FriBidi
+ * fribidi-char-sets-utf8.c - UTF-8 character set conversion routines
+ *
+ * $Id: fribidi-char-sets-utf8.c,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/charset/fribidi-char-sets-utf8.c,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ * Dov Grobgeld, 1999, 2000
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ * Copyright (C) 1999,2000 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+
+#include <fribidi-char-sets-utf8.h>
+
+#include <fribidi-unicode.h>
+
+#include <common.h>
+
+FriBidiStrIndex
+fribidi_utf8_to_unicode (
+ /* input */
+ const char *ss,
+ FriBidiStrIndex len,
+ /* output */
+ FriBidiChar *us
+)
+{
+ FriBidiStrIndex length;
+ const unsigned char *s = (unsigned char *) ss;
+ const unsigned char *t = s;
+
+ length = 0;
+ while (s - t < len)
+ {
+ register unsigned char ch = *s;
+ if (ch <= 0x7f) /* one byte */
+ {
+ *us++ = *s++;
+ }
+ else if (ch <= 0xdf) /* 2 byte */
+ {
+ *us++ = ((*s & 0x1f) << 6) + (*(s + 1) & 0x3f);
+ s += 2;
+ }
+ else /* 3 byte */
+ {
+ *us++ =
+ ((int) (*s & 0x0f) << 12) +
+ ((*(s + 1) & 0x3f) << 6) + (*(s + 2) & 0x3f);
+ s += 3;
+ }
+ length++;
+ }
+ return (length);
+}
+
+FriBidiStrIndex
+fribidi_unicode_to_utf8 (
+ /* input */
+ const FriBidiChar *us,
+ FriBidiStrIndex len,
+ /* output */
+ char *ss
+)
+{
+ int i;
+ unsigned char *s = (unsigned char *) ss;
+ unsigned char *t = s;
+
+ for (i = 0; i < len; i++)
+ {
+ FriBidiChar mychar = us[i];
+ if (mychar <= 0x7F)
+ { /* 7 sig bits */
+ *t++ = mychar;
+ }
+ else if (mychar <= 0x7FF)
+ { /* 11 sig bits */
+ *t++ = 0xC0 | (unsigned char) (mychar >> 6); /* upper 5 bits */
+ *t++ = 0x80 | (unsigned char) (mychar & 0x3F); /* lower 6 bits */
+ }
+ else if (mychar <= 0xFFFF)
+ { /* 16 sig bits */
+ *t++ = 0xE0 | (unsigned char) (mychar >> 12); /* upper 4 bits */
+ *t++ = 0x80 | (unsigned char) ((mychar >> 6) & 0x3F); /* next 6 bits */
+ *t++ = 0x80 | (unsigned char) (mychar & 0x3F); /* lowest 6 bits */
+ }
+ else if (mychar < FRIBIDI_UNICODE_CHARS)
+ { /* 21 sig bits */
+ *t++ = 0xF0 | (unsigned char) ((mychar >> 18) & 0x07); /* upper 3 bits */
+ *t++ = 0x80 | (unsigned char) ((mychar >> 12) & 0x3F); /* next 6 bits */
+ *t++ = 0x80 | (unsigned char) ((mychar >> 6) & 0x3F); /* next 6 bits */
+ *t++ = 0x80 | (unsigned char) (mychar & 0x3F); /* lowest 6 bits */
+ }
+ }
+ *t = 0;
+
+ return (t - s);
+}
+
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/charset/fribidi-char-sets-utf8.h b/charset/fribidi-char-sets-utf8.h
new file mode 100644
index 0000000..aaf9a53
--- /dev/null
+++ b/charset/fribidi-char-sets-utf8.h
@@ -0,0 +1,66 @@
+/* FriBidi
+ * fribidi-char-sets-utf8.h - UTF-8 character set conversion routines
+ *
+ * $Id: fribidi-char-sets-utf8.h,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/charset/fribidi-char-sets-utf8.h,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ * Dov Grobgeld, 1999, 2000
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ * Copyright (C) 1999,2000 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+
+#ifndef _FRIBIDI_CHAR_SETS_UTF8_H
+#define _FRIBIDI_CHAR_SETS_UTF8_H
+
+#include "fribidi-common.h"
+
+#include "fribidi-types.h"
+
+#define fribidi_char_set_name_utf8 "UTF-8"
+#define fribidi_char_set_title_utf8 "UTF-8 (Unicode)"
+#define fribidi_char_set_desc_utf8 NULL
+
+#define fribidi_utf8_to_unicode FRIBIDI_NAMESPACE(utf8_to_unicode)
+FriBidiStrIndex fribidi_utf8_to_unicode (
+ const char *s,
+ FriBidiStrIndex length,
+ FriBidiChar *us
+);
+
+#define fribidi_unicode_to_utf8 FRIBIDI_NAMESPACE(unicode_to_utf8)
+FriBidiStrIndex fribidi_unicode_to_utf8 (
+ const FriBidiChar *us,
+ FriBidiStrIndex length,
+ char *s
+);
+
+#include "fribidi-enddecls.h"
+
+#endif /* !_FRIBIDI_CHAR_SETS_UTF8_H */
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/charset/fribidi-char-sets.c b/charset/fribidi-char-sets.c
new file mode 100644
index 0000000..8ef5482
--- /dev/null
+++ b/charset/fribidi-char-sets.c
@@ -0,0 +1,230 @@
+/* FriBidi
+ * fribidi-char-sets.c - character set conversion routines
+ *
+ * $Id: fribidi-char-sets.c,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/charset/fribidi-char-sets.c,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ * Dov Grobgeld, 1999, 2000
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ * Copyright (C) 1999,2000 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+
+#include <fribidi-char-sets.h>
+
+#include <common.h>
+
+typedef struct
+{
+ FriBidiChar (
+ *charset_to_unicode_c
+ ) (
+ char ch
+ );
+
+ FriBidiStrIndex (
+ *charset_to_unicode
+ ) (
+ const char *s,
+ FriBidiStrIndex len,
+ FriBidiChar *us
+ );
+
+ char (
+ *unicode_to_charset_c
+ ) (
+ FriBidiChar uch
+ );
+
+ FriBidiStrIndex (
+ *unicode_to_charset
+ ) (
+ const FriBidiChar *us,
+ FriBidiStrIndex len,
+ char *s
+ );
+
+ const char *name;
+
+ const char *title;
+
+ const char *(
+ *desc
+ ) (
+ void
+ );
+}
+FriBidiCharSetHandler;
+
+static FriBidiCharSetHandler char_sets[FRIBIDI_CHAR_SETS_NUM + 1] = {
+ {NULL, NULL, NULL, NULL, "N/A", "Character set not available", NULL},
+# define _FRIBIDI_ADD_CHAR_SET_ONE2ONE(CHAR_SET, char_set) \
+ { \
+ fribidi_##char_set##_to_unicode_c, \
+ NULL, \
+ fribidi_unicode_to_##char_set##_c, \
+ NULL, \
+ fribidi_char_set_name_##char_set, \
+ fribidi_char_set_title_##char_set, \
+ fribidi_char_set_desc_##char_set \
+ },
+# define _FRIBIDI_ADD_CHAR_SET_OTHERS(CHAR_SET, char_set) \
+ { \
+ NULL, \
+ fribidi_##char_set##_to_unicode, \
+ NULL, \
+ fribidi_unicode_to_##char_set, \
+ fribidi_char_set_name_##char_set, \
+ fribidi_char_set_title_##char_set, \
+ fribidi_char_set_desc_##char_set \
+ },
+# include <fribidi-char-sets-list.h>
+# undef _FRIBIDI_ADD_CHAR_SET_OTHERS
+# undef _FRIBIDI_ADD_CHAR_SET_ONE2ONE
+};
+
+#if !FRIBIDI_USE_GLIB
+static char
+toupper (
+ /* input */
+ char c
+)
+{
+ return c < 'a' || c > 'z' ? c : c + 'A' - 'a';
+}
+
+static int
+fribidi_strcasecmp (
+ /* input */
+ const char *s1,
+ const char *s2
+)
+{
+ while (*s1 && toupper (*s1) == toupper (*s2))
+ {
+ s1++;
+ s2++;
+ }
+ return *s1 - *s2;
+}
+#else /* FRIBIDI_USE_GLIB */
+# include <glib/gstrfuncs.h>
+# define fribidi_strcasecmp g_ascii_strcasecmp
+#endif /* FRIBIDI_USE_GLIB */
+
+FRIBIDI_ENTRY FriBidiCharSet
+fribidi_parse_charset (
+ /* input */
+ const char *s
+)
+{
+ int i;
+
+ for (i = FRIBIDI_CHAR_SETS_NUM; i; i--)
+ if (fribidi_strcasecmp (s, char_sets[i].name) == 0)
+ return i;
+
+ return FRIBIDI_CHAR_SET_NOT_FOUND;
+}
+
+FRIBIDI_ENTRY FriBidiStrIndex
+fribidi_charset_to_unicode (
+ /* input */
+ FriBidiCharSet char_set,
+ const char *s,
+ FriBidiStrIndex len,
+ /* output */
+ FriBidiChar *us
+)
+{
+ if (char_sets[char_set].charset_to_unicode)
+ return (*char_sets[char_set].charset_to_unicode) (s, len, us);
+ else if (char_sets[char_set].charset_to_unicode_c)
+ {
+ register FriBidiStrIndex l;
+ for (l = len; l; l--)
+ *us++ = (*char_sets[char_set].charset_to_unicode_c) (*s++);
+ return len;
+ }
+ else
+ return 0;
+}
+
+FRIBIDI_ENTRY FriBidiStrIndex
+fribidi_unicode_to_charset (
+ /* input */
+ FriBidiCharSet char_set,
+ const FriBidiChar *us,
+ FriBidiStrIndex len,
+ /* output */
+ char *s
+)
+{
+ if (char_sets[char_set].unicode_to_charset)
+ return (*char_sets[char_set].unicode_to_charset) (us, len, s);
+ else if (char_sets[char_set].unicode_to_charset_c)
+ {
+ register FriBidiStrIndex l;
+ for (l = len; l; l--)
+ *s++ = (*char_sets[char_set].unicode_to_charset_c) (*us++);
+ *s = '\0';
+ return len;
+ }
+ else
+ return 0;
+}
+
+FRIBIDI_ENTRY const char *
+fribidi_char_set_name (
+ /* input */
+ FriBidiCharSet char_set
+)
+{
+ return char_sets[char_set].name ? char_sets[char_set].name : "";
+}
+
+FRIBIDI_ENTRY const char *
+fribidi_char_set_title (
+ /* input */
+ FriBidiCharSet char_set
+)
+{
+ return char_sets[char_set].title ? char_sets[char_set].
+ title : fribidi_char_set_name (char_set);
+}
+
+FRIBIDI_ENTRY const char *
+fribidi_char_set_desc (
+ /* input */
+ FriBidiCharSet char_set
+)
+{
+ return char_sets[char_set].desc ? char_sets[char_set].desc () : NULL;
+}
+
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/charset/fribidi-char-sets.h b/charset/fribidi-char-sets.h
new file mode 100644
index 0000000..5508da9
--- /dev/null
+++ b/charset/fribidi-char-sets.h
@@ -0,0 +1,125 @@
+/* FriBidi
+ * fribidi-char-sets.h - character set conversion routines
+ *
+ * $Id: fribidi-char-sets.h,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/charset/fribidi-char-sets.h,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ * Dov Grobgeld, 1999, 2000
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ * Copyright (C) 1999,2000 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+#ifndef _FRIBIDI_CHAR_SETS_H
+#define _FRIBIDI_CHAR_SETS_H
+
+#include "fribidi-common.h"
+
+#include "fribidi-types.h"
+
+#include "fribidi-char-sets-cap-rtl.h"
+#include "fribidi-char-sets-utf8.h"
+#include "fribidi-char-sets-iso8859-6.h"
+#include "fribidi-char-sets-cp1256.h"
+#include "fribidi-char-sets-iso8859-8.h"
+#include "fribidi-char-sets-cp1255.h"
+
+#include "fribidi-begindecls.h"
+
+typedef enum
+{
+ _FRIBIDI_CHAR_SET_NOT_FOUND,
+# define _FRIBIDI_ADD_CHAR_SET(CHAR_SET, char_set) FRIBIDI_CHAR_SET_##CHAR_SET,
+# include "fribidi-char-sets-list.h"
+# undef _FRIBIDI_ADD_CHAR_SET
+ _FRIBIDI_CHAR_SETS_NUM_PLUS_ONE
+}
+FriBidiCharSet;
+
+#define FRIBIDI_CHAR_SET_NOT_FOUND _FRIBIDI_CHAR_SET_NOT_FOUND
+#define FRIBIDI_CHAR_SETS_NUM (_FRIBIDI_CHAR_SETS_NUM_PLUS_ONE - 1)
+
+
+#define fribidi_charset_to_unicode FRIBIDI_NAMESPACE(charset_to_unicode)
+/* fribidi_charset_to_unicode - convert string to Unicode
+ *
+ * This function converts an string from a character set, to a Unicode string.
+ *
+ * Returns: The length of the new string.
+ */
+FRIBIDI_ENTRY FriBidiStrIndex fribidi_charset_to_unicode (
+ FriBidiCharSet char_set, /* character set to convert from */
+ const char *s, /* input string encoded in char_set */
+ FriBidiStrIndex len, /* input string length */
+ FriBidiChar *us /* output Unicode string */
+);
+
+#define fribidi_unicode_to_charset FRIBIDI_NAMESPACE(unicode_to_charset)
+/* fribidi_unicode_to_charset - convert string from Unicode
+ *
+ * This function converts a Unicode string to an string in another character
+ * set. It also zero-terminates the output string.
+ *
+ * Returns: The length of the new string.
+ */
+FRIBIDI_ENTRY FriBidiStrIndex fribidi_unicode_to_charset (
+ FriBidiCharSet char_set, /* character set to conver to */
+ const FriBidiChar *us, /* input Unicode string */
+ FriBidiStrIndex len, /* input string length */
+ char *s /* output string encoded in char_set */
+);
+
+#define fribidi_parse_charset FRIBIDI_NAMESPACE(parse_charset)
+/* fribidi_parse_charset - parse character set name
+ *
+ * Returns: The character set named s, or FRIBIDI_CHAR_SET_NOT_FOUND if the
+ * character set is not available.
+ */
+FRIBIDI_ENTRY FriBidiCharSet fribidi_parse_charset (
+ const char *s /* input name of the character set */
+);
+
+
+#define fribidi_char_set_name FRIBIDI_NAMESPACE(char_set_name)
+FRIBIDI_ENTRY const char *fribidi_char_set_name (
+ FriBidiCharSet char_set
+);
+
+#define fribidi_char_set_title FRIBIDI_NAMESPACE(char_set_title)
+FRIBIDI_ENTRY const char *fribidi_char_set_title (
+ FriBidiCharSet char_set
+);
+
+#define fribidi_char_set_desc FRIBIDI_NAMESPACE(char_set_desc)
+FRIBIDI_ENTRY const char *fribidi_char_set_desc (
+ FriBidiCharSet char_set
+);
+
+#include "fribidi-enddecls.h"
+
+#endif /* !_FRIBIDI_CHAR_SETS_H */
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..6790762
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,208 @@
+##############################################################################
+## $Id: configure.ac,v 1.1 2004-04-25 18:47:56 behdad Exp $
+## $Auther: behdad $
+## $Date: 2004-04-25 18:47:56 $
+## $Revision: 1.1 $
+## $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/configure.ac,v $
+##############################################################################
+## -*- Autoconf -*-
+## Process this file with autoconf to produce a configure script.
+## Use autoupdate to update this file for newer versions of autoconf.
+## Use autoscan to check if you need to add something to this file.
+
+AC_PREREQ(2.59)
+
+dnl Define different version variables.
+dnl
+dnl Making releases:
+dnl FRIBIDI_MICRO_VERSION++;
+dnl FRIBIDI_INTERFACE_AGE++;
+dnl FRIBIDI_RPM_RELEASE = 1;
+dnl
+dnl If any functions have been added:
+dnl FRIBIDI_INTERFACE_AGE = 0;
+dnl FRIBIDI_INTERFACE_VERSION++;
+dnl FRIBIDI_BINARY_AGE++;
+dnl
+dnl If binary backwards compatibility has been broken:
+dnl FRIBIDI_BINARY_AGE = FRIBIDI_INTERFACE_AGE = 0;
+dnl
+dnl Building RPMs:
+dnl FRIBIDI_RPM_RELEASE++;
+dnl
+m4_define(fribidi_major_version, 0)dnl
+m4_define(fribidi_minor_version, 19)dnl
+m4_define(fribidi_micro_version, 0)dnl
+m4_define(fribidi_version,fribidi_major_version.fribidi_minor_version.fribidi_micro_version)dnl
+m4_define(fribidi_interface_version, 3)dnl
+m4_define(fribidi_interface_age, 0)dnl
+m4_define(fribidi_binary_age, 3)dnl
+m4_define(fribidi_rpm_release, 1)dnl
+dnl
+
+AC_INIT([GNU FriBidi],fribidi_version(),[http://freedesktop.org/cgi-bin/bugzilla/enter_bug.cgi?product=FriBidi])
+AC_REVISION([$Id: configure.ac,v 1.1 2004-04-25 18:47:56 behdad Exp $])
+AC_CONFIG_SRCDIR(lib/fribidi.h)
+AC_CONFIG_HEADERS(config.h)
+AM_INIT_AUTOMAKE([gnits])
+
+FRIBIDI_MAJOR_VERSION=fribidi_major_version()
+FRIBIDI_MINOR_VERSION=fribidi_minor_version()
+FRIBIDI_MICRO_VERSION=fribidi_micro_version()
+FRIBIDI_VERSION=fribidi_version()
+FRIBIDI_INTERFACE_VERSION=fribidi_interface_version()
+FRIBIDI_INTERFACE_AGE=fribidi_interface_age()
+FRIBIDI_BINARY_AGE=fribidi_binary_age()
+FRIBIDI_RPM_RELEASE=fribidi_rpm_release
+
+AC_SUBST(FRIBIDI_MAJOR_VERSION)
+AC_SUBST(FRIBIDI_MINOR_VERSION)
+AC_SUBST(FRIBIDI_MICRO_VERSION)
+AC_SUBST(FRIBIDI_VERSION)
+AC_SUBST(FRIBIDI_INTERFACE_VERSION)
+AC_SUBST(FRIBIDI_INTERFACE_AGE)
+AC_SUBST(FRIBIDI_BINARY_AGE)
+AC_SUBST(FRIBIDI_RPM_RELEASE)
+
+dnl libtool versioning.
+m4_define(lt_current, fribidi_interface_version())dnl
+m4_define(lt_revision, fribidi_interface_age())dnl
+m4_define(lt_age, fribidi_binary_age())dnl
+LT_VERSION_INFO=lt_current():lt_revision():lt_age()
+LT_CURRENT_MINUS_AGE=m4_eval(lt_current - lt_age)
+
+AC_SUBST(LT_VERSION_INFO)
+AC_SUBST(LT_CURRENT_MINUS_AGE)
+
+dnl ==========================================================================
+
+# Checks for Win32.
+AC_MSG_CHECKING([for native Win32])
+ case "$host" in
+ *-*-mingw*) os_win32=yes ;;
+ *) pango_os_win32=no ;;
+ esac
+AC_MSG_RESULT([$os_win32])
+AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes")
+AC_MSG_CHECKING([for some Win32 platform])
+ case "$host" in
+ *-*-mingw*|*-*-cygwin*) platform_win32=yes ;;
+ *) platform_win32=no ;;
+ esac
+AC_MSG_RESULT([$platform_win32])
+AM_CONDITIONAL(PLATFORM_WIN32, test "$platform_win32" = "yes")
+
+# Checks for programs.
+AC_PROG_CC
+AC_PROG_INSTALL
+AC_LIBTOOL_WIN32_DLL
+AC_PROG_LIBTOOL
+
+# Checks for header files.
+AC_HEADER_STDC
+AC_HEADER_TIME
+AC_CHECK_HEADERS([stdlib.h string.h strings.h inttypes.h stdbool.h wchar.h sys/times.h])
+
+# Checks for typedefs and structures.
+AC_C_CONST
+AC_C_INLINE
+AC_CHECK_SIZEOF(int)
+AC_CHECK_SIZEOF(short)
+AC_CHECK_SIZEOF(void *)
+AC_CHECK_SIZEOF(wchar_t)
+
+# Checks for compiler characteristics.
+changequote(,)dnl
+if test "x$GCC" = "xyes"; then
+ case " $CFLAGS " in
+ *[\ \ ]-Wall[\ \ ]*) ;;
+ *) CFLAGS="$CFLAGS -Wall " ;;
+ esac
+ case " $CFLAGS " in
+ *[\ \ ]-pedantic[\ \ ]*) ;;
+ *) CFLAGS="$CFLAGS -pedantic " ;;
+ esac
+fi
+changequote([,])dnl
+
+# Checks for library functions.
+AC_CHECK_FUNCS([memmove memset strdup])
+AC_TYPE_SIGNAL
+
+# Checks for configure options
+
+m4_define(debug_default,
+ m4_if(m4_eval(fribidi_minor_version() % 2),1,yes,minimum))
+
+# --enable-debug
+AC_ARG_ENABLE(debug,
+ AS_HELP_STRING([--enable-debug],
+ [turn on debugging @<:@default=debug_default()@:>@]),,
+ enableval=debug_default())
+if test x$enableval = xyes; then
+ AC_DEFINE(DEBUG,1,
+ [Define to 1 if you want to include debug code in the library])
+fi
+
+# --enable-malloc
+AC_ARG_ENABLE(debug,
+ AS_HELP_STRING([--enable-malloc],
+ [use simple malloc instead of memory chunks]))
+if test x$enable_glib = xyes; then
+ AC_DEFINE(USE_SIMPLE_MALLOC,1,
+ [Define to 1 if you want to use simple mallocs instead of memory chunks])
+fi
+
+# --disable-charsets
+AC_ARG_ENABLE(charsets,
+ AS_HELP_STRING([--disable-charsets],
+ [exclude charset conversion codes from the library]))
+if test x$enable_charsets = xno; then
+ FRIBIDI_CHARSETS=0
+else
+ FRIBIDI_CHARSETS=1
+fi
+AC_SUBST(FRIBIDI_CHARSETS)
+AM_CONDITIONAL(FRIBIDI_CHARSETS, test x$FRIBIDI_CHARSETS = x1)
+
+# --without-glib
+AC_ARG_WITH(glib,
+ AS_HELP_STRING([--without-glib],
+ [do not use Glib]))
+GLIB_PACKAGE=glib-2.0
+GLIB_LIBS=
+GLIB_CFLAGS=
+if test x$with_glib = xyes; then
+ PKG_CHECK_MODULES(GLIB,$GLIB_PACKAGE)
+ FRIBIDI_USE_GLIB=1
+else
+if test x$with_glib = xno; then
+ FRIBIDI_USE_GLIB=0
+else
+ PKG_CHECK_MODULES(GLIB,$GLIB_PACKAGE,
+ FRIBIDI_USE_GLIB=1,
+ FRIBIDI_USE_GLIB=0)
+fi
+fi
+if test x$FRIBIDI_USER_GLIB = x0; then
+ GLIB_PACKAGE=
+fi
+AC_SUBST(GLIB_PACKAGE)
+AC_SUBST(GLIB_LIBS)
+AC_SUBST(GLIB_CFLAGS)
+AC_SUBST(FRIBIDI_USE_GLIB)
+AM_CONDITIONAL(FRIBIDI_USE_GLIB, test "$FRIBIDI_USE_GLIB" = 1)
+
+# Generate output
+AC_CONFIG_FILES([fribidi.pc
+ fribidi.spec
+ lib/fribidi-config.h
+ Makefile
+ tablegen/Makefile
+ tablegen/unidata/Makefile
+ charset/Makefile
+ lib/Makefile
+ bin/Makefile
+ doc/Makefile
+ test/Makefile])
+AC_OUTPUT
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644
index 0000000..c1db3d6
--- /dev/null
+++ b/doc/Makefile.am
@@ -0,0 +1,27 @@
+
+libfribidi_mans = \
+ fribidi_get_bidi_type.3
+ fribidi_get_bidi_types.3
+ fribidi_log2vis.3
+ fribidi_log2vis_get_embedding_levels.3
+ fribidi_remove_bidi_marks.3
+ fribidi_get_mirror_char.3
+ fribidi_debug_status.3
+ fribidi_set_debug.3
+ fribidi_mirroring_status.3
+ fribidi_set_mirroring.3
+ fribidi_reorder_nsm_status.3
+ fribidi_set_reorder_nsm.3
+
+
+if FRIBIDI_CHARSETS
+
+
+endif
+
+headers =
+include $(top_srcdir)/charset/Headers.mk
+headers += $(libfribidi_char_sets_la_headers)
+include $(top_srcdir)/lib/Headers.mk
+headers += $(libfribidi_la_headers)
+
diff --git a/fribidi.pc.in b/fribidi.pc.in
new file mode 100644
index 0000000..5db6e50
--- /dev/null
+++ b/fribidi.pc.in
@@ -0,0 +1,13 @@
+# @configure_input@
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: @PACKAGE_NAME@
+Description: Unicode Bidirectional Algorithm Library
+Requires: @GLIB_PACKAGE@
+Version: @VERSION@
+Libs: -L${libdir} -lfribidi
+Cflags: -I${includedir}/@PACKAGE@
diff --git a/fribidi.spec.in b/fribidi.spec.in
new file mode 100644
index 0000000..056a7ff
--- /dev/null
+++ b/fribidi.spec.in
@@ -0,0 +1,145 @@
+# This spec file creates three packages:
+#
+# Everything:
+# (this is equivalent to two others together)
+# @PACKAGE@N-version-release-arch.rpm
+# Runtime material: Shared library and command line tool
+# lib@PACKAGE@N-version-release-arch.rpm
+# Development material: Static library and header files
+# (requires lib@PACKAGE@N)
+# lib@PACKAGE@N-devel-version-release-arch.rpm
+# Where N is the major version number.
+
+%define name @PACKAGE@
+%define ver @FRIBIDI_VERSION@
+%define major @FRIBIDI_MAJOR_VERSION@
+%define minor @FRIBIDI_MINOR_VERSION@
+%define micro @FRIBIDI_MICRO_VERSION@
+%define apiver @FRIBIDI_INTERFACE_VERSION@
+%define rel @FRIBIDI_RPM_RELEASE@
+%define prefix %{_prefix}
+
+Name: %{name}
+Version: %{ver}
+Release: %{rel}
+Serial: %{apiver}
+License: LGPL
+Source: http://prdownloads.sourceforge.net/%{name}/%{name}-%{ver}.tar.gz
+URL: http://%{name}.sourceforge.net/
+BuildRoot: %{_tmppath}/%{name}
+Summary: Library implementing the Unicode Bidirectional Algorithm
+Group: System/Libraries
+%description
+A library to handle bidirectional scripts (eg. hebrew, arabic), so that
+the display is done in the proper way; while the text data itself is
+always written in logical order.
+
+%package -n %{name}%{major}
+Summary: Library implementing the Unicode Bidirectional Algorithm
+Group: System/Libraries
+Provides: lib%{name}%{major}
+Provides: lib%{name}%{major}-devel
+%description -n %{name}%{major}
+A library to handle bidirectional scripts (eg. hebrew, arabic), so that
+the display is done in the proper way; while the text data itself is
+always written in logical order.
+
+Install %{name}%{major} if you want to run or develop programs that use %{name}.
+
+
+%package -n lib%{name}%{major}
+Summary: Library implementing the Unicode Bidirectional Algorithm
+Group: System/Libraries
+Conflicts: %{name}%{major}
+%description -n lib%{name}%{major}
+The lib%{name}%{major} package includes the shared libraries for the %{name}%{major} package.
+
+Install lib%{name}%{major} if you want to run programs which use %{name}.
+
+
+%package -n lib%{name}%{major}-devel
+Summary: Library implementing the Unicode Bidirectional Algorithm
+Group: Development/C
+Requires: lib%{name}%{major} = %{ver}
+Conflicts: %{name}%{major}
+%description -n lib%{name}%{major}-devel
+The lib%{name}%{major}-devel package includes the static libraries and header files
+for the %{name}%{major} package.
+
+Install lib%{name}%{major}-devel if you want to develop programs which will use
+%{name}.
+
+
+%prep
+%setup
+
+%build
+if [ ! -x ./configure ];then
+./bootstrap
+fi
+
+./configure %{_target_platform} \
+ --prefix=%{_prefix} --exec-prefix=%{_exec_prefix} \
+ --bindir=%{_bindir} --sbindir=%{_sbindir} \
+ --sysconfdir=%{_sysconfdir} --datadir=%{_datadir} \
+ --includedir=%{_includedir} \
+ --libdir=%{_libdir} --libexecdir=%{_libexecdir} \
+ --mandir=%{_mandir} --infodir=%{_infodir} \
+ --localstatedir=%{_localstatedir} --sharedstatedir=%{_sharedstatedir}
+
+make OPT_CFLAGS="$RPM_OPT_FLAGS"
+
+%install
+rm -rf "$RPM_BUILD_ROOT"
+mkdir -p "$RPM_BUILD_ROOT%{prefix}"
+make DESTDIR="$RPM_BUILD_ROOT" install
+
+
+%clean
+rm -rf "$RPM_BUILD_ROOT"
+
+%post -n %{name}%{major} -p /sbin/ldconfig
+%postun -n %{name}%{major} -p /sbin/ldconfig
+
+%post -n lib%{name}%{major} -p /sbin/ldconfig
+%postun -n lib%{name}%{major} -p /sbin/ldconfig
+
+%files -n %{name}%{major}
+%defattr(-,root,root)
+%doc README AUTHORS COPYING ChangeLog TODO THANKS NEWS
+%{_bindir}/%{name}
+%{_bindir}/%{name}-config
+%{_libdir}/*.so.*
+%{_libdir}/pkgconfig/%{name}.pc
+%{_libdir}/*.a
+%{_libdir}/*.la
+%{_libdir}/*.so
+%{_includedir}/*
+
+%files -n lib%{name}%{major}
+%defattr(-, root, root)
+%doc README AUTHORS COPYING ChangeLog TODO THANKS NEWS
+%{_bindir}/%{name}
+%{_bindir}/%{name}-config
+%{_libdir}/*.so.*
+
+%files -n lib%{name}%{major}-devel
+%defattr(-, root, root)
+%{_libdir}/*.a
+%{_libdir}/*.la
+%{_libdir}/*.so
+%{_includedir}/*
+%{_libdir}/pkgconfig/%{name}.pc
+
+
+%changelog
+
+* Tue Mar 12 2002 Behdad Esfahbod <behdad@bamdad.org>
+- Use License instead of Copyright
+- Moved pkgconfig to devel package instead of lib package.
+
+* Sat Jan 26 2002 Behdad Esfahbod <behdad@bamdad.org>
+- CFLAGS changed to OPT_CFLAGS.
+
+* Wed Jan 9 2002 Behdad Esfahbod <behdad@bamdad.org>
+- First spec released.
diff --git a/gen.tab/Makefile.am b/gen.tab/Makefile.am
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/gen.tab/Makefile.am
diff --git a/gen.tab/gen-bidi-type-tab.c b/gen.tab/gen-bidi-type-tab.c
new file mode 100644
index 0000000..dbfa590
--- /dev/null
+++ b/gen.tab/gen-bidi-type-tab.c
@@ -0,0 +1,267 @@
+/* FriBidi - Library of BiDi algorithm
+ * Copyright (C) 2001,2002 Behdad Esfahbod.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <fwpg@sharif.edu>.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "packtab.h"
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "fribidi_unicode.h"
+
+#ifndef SIZEOF_CHAR
+#define SIZEOF_CHAR sizeof (char)
+#endif
+
+static void
+err (
+ char *msg
+)
+{
+ fprintf (stderr, "fribidi_create_char_types: %s\n", msg);
+ exit (1);
+}
+
+static void
+err2 (
+ char *fmt,
+ char *p
+)
+{
+ fprintf (stderr, "fribidi_create_char_types: ");
+ fprintf (stderr, fmt, p);
+ fprintf (stderr, "\n");
+ exit (1);
+}
+
+/* *INDENT-OFF* */
+struct
+{
+ char *name;
+ int key;
+}
+type_names[] =
+{
+ {"LTR", 0}, {"L", 0},
+ {"RTL", 1}, {"R", 1},
+ {"AL", 2},
+ {"ON", 3},
+ {"BN", 4},
+ {"AN", 5},
+ {"BS", 6}, {"B", 6},
+ {"CS", 7},
+ {"EN", 8},
+ {"ES", 9},
+ {"ET", 10},
+ {"LRE", 11},
+ {"LRO", 12},
+ {"NSM", 13},
+ {"PDF", 14},
+ {"RLE", 15},
+ {"RLO", 16},
+ {"SS", 17}, {"S", 17},
+ {"WS", 18},
+};
+/* *INDENT-ON* */
+
+#define type_names_count (sizeof (type_names) / sizeof (type_names[0]))
+
+static char *names[type_names_count];
+
+static char *unidata_file;
+
+static char
+get_type (
+ char *s
+)
+{
+ int i;
+
+ for (i = 0; i < type_names_count; i++)
+ if (!strcmp (s, type_names[i].name))
+ return type_names[i].key;
+ err2 ("type name `%s' not found", s);
+ return 0;
+}
+
+#define table_name "FriBidiPropertyBlock"
+#define key_type_name "FriBidiPropCharType"
+#define macro_name "FRIBIDI_GET_TYPE"
+#define function_name "fribidi_get_type_internal"
+#define char_type_name "FriBidiCharType"
+#define char_name "FriBidiChar"
+#define prop_to_type_name "fribidi_prop_to_type"
+#define default_type "LTR"
+#define export_api "FRIBIDI_API"
+
+static int table[FRIBIDI_UNICODE_CHARS];
+
+static void
+init_table (
+)
+{
+ int i;
+ int deftype = get_type (default_type),
+ RTL = get_type ("RTL"), AL = get_type ("AL");
+
+ for (i = 0; i < type_names_count; i++)
+ names[i] = 0;
+ for (i = type_names_count - 1; i >= 0; i--)
+ names[type_names[i].key] = type_names[i].name;
+
+ /* initialize table */
+ for (i = 0; i < FRIBIDI_UNICODE_CHARS; i++)
+ table[i] = deftype;
+ for (i = 0x590; i < 0x600; i++)
+ table[i] = RTL;
+ for (i = 0xFB1D; i < 0xFB50; i++)
+ table[i] = RTL;
+ for (i = 0x600; i < 0x7C0; i++)
+ table[i] = AL;
+ for (i = 0xFB50; i < 0xFE00; i++)
+ table[i] = AL;
+ for (i = 0xFE70; i < 0xFF00; i++)
+ table[i] = AL;
+}
+
+static void
+read_unicode_data (
+)
+{
+ char s[500], tp[10];
+ unsigned int i;
+ FILE *f;
+
+ printf ("Reading `UnicodeData.txt'\n");
+ if (!(f = fopen (unidata_file, "rt")))
+ err2 ("error: cannot open `%s' for reading", unidata_file);
+ while (fgets (s, sizeof s, f))
+ {
+ sscanf (s, "%x;%*[^;];%*[^;];%*[^;];%[^;]", &i, tp);
+ table[i] = get_type (tp);
+ }
+ fclose (f);
+}
+
+static char *
+headermacro (
+ char *file
+)
+{
+ char *t = strdup (file);
+ char *p = t;
+ while (*p)
+ {
+ if (*p >= 'a' && *p <= 'z')
+ *p += 'A' - 'a';
+ else if ((*p < 'A' || *p > 'Z') && (*p < '0' || *p > '9'))
+ *p = '_';
+ p++;
+ }
+ return t;
+}
+
+static void
+write_char_type (
+ char *file,
+ int max_depth
+)
+{
+ int i;
+ FILE *f;
+ char *FILENAME = headermacro (file);
+
+ printf ("Writing `%s', it may take a few minutes\n", file);
+ if (!(f = fopen (file, "wt")))
+ err2 ("error: cannot open `%s' for writing", file);
+ fprintf (f, "/*\n"
+ " This file was automatically created from UnicodeData.txt version %s\n"
+ " by fribidi_create_char_types\n*/\n\n", FRIBIDI_UNICODE_VERSION);
+
+ fprintf (f, "#ifndef %s\n#define %s\n\n#include \"fribidi.h\"\n\n",
+ FILENAME, FILENAME);
+
+ for (i = 0; i < type_names_count; i++)
+ if (names[i])
+ fprintf (f, "#define %s FRIBIDI_PROP_TYPE_%s\n", names[i], names[i]);
+ fprintf (f, "\n");
+
+ fprintf (f, "#define PACKTAB_UINT8 fribidi_uint8\n");
+ fprintf (f, "#define PACKTAB_UINT16 fribidi_uint16\n");
+ fprintf (f, "#define PACKTAB_UINT32 fribidi_uint32\n");
+
+ if (!pack_table
+ (table, FRIBIDI_UNICODE_CHARS, SIZEOF_CHAR, max_depth, 3, names,
+ key_type_name, table_name, macro_name, f))
+ err ("error: insufficient memory, decrease max_depth");
+
+ for (i = type_names_count - 1; i >= 0; i--)
+ if (names[i])
+ fprintf (f, "#undef %s\n", names[i]);
+
+ fprintf (f,
+ "/*======================================================================\n"
+ " * %s() returns the bidi type of a character.\n"
+ " *----------------------------------------------------------------------*/\n"
+ "%s %s\n"
+ "%s (%s uch)\n"
+ "{\n"
+ " if (uch < 0x%x)\n"
+ " return %s[(unsigned char)%s (uch)];\n"
+ " else\n"
+ " return FRIBIDI_TYPE_%s;\n"
+ " /* Non-Unicode chars */\n"
+ "}\n"
+ "\n",
+ function_name, export_api, char_type_name, function_name,
+ char_name, FRIBIDI_UNICODE_CHARS, prop_to_type_name, macro_name,
+ default_type);
+ fprintf (f, "\n#endif /* %s */\n", FILENAME);
+
+ fclose (f);
+}
+
+int
+main (
+ int argc,
+ char **argv
+)
+{
+ int max_depth;
+ char file[50], *p;
+ if (argc < 2)
+ err ("usage: fribidi_create_char_types max_depth [UnicodeData.txt path]");
+ p = (argc >= 3) ? argv[2] : "unidata";
+ unidata_file = malloc (50 + strlen (p));
+ sprintf (unidata_file, "%s/UnicodeData.txt", p);
+ max_depth = atoi (argv[1]);
+ if (!max_depth)
+ err ("invalid depth");
+ if (max_depth < 2 || max_depth > 9)
+ err2 ("invalid max_depth `%s', max_depth should be between 2 and 9",
+ argv[1]);
+ sprintf (file, "fribidi_tab_char_type_%d.i", max_depth);
+ init_table ();
+ read_unicode_data ();
+ write_char_type (file, max_depth);
+ return 0;
+}
diff --git a/gen.tab/gen-mirroring-tab.c b/gen.tab/gen-mirroring-tab.c
new file mode 100644
index 0000000..611b1b4
--- /dev/null
+++ b/gen.tab/gen-mirroring-tab.c
@@ -0,0 +1,152 @@
+/* FriBidi - Library of BiDi algorithm
+ * Copyright (C) 2001,2002 Behdad Esfahbod.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <fwpg@sharif.edu>.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include "fribidi_unicode.h"
+
+static void
+err2 (
+ char *fmt,
+ char *p
+)
+{
+ fprintf (stderr, "fribidi_create_mirroring: error: ");
+ fprintf (stderr, fmt, p);
+ fprintf (stderr, "\n");
+ exit (1);
+}
+
+static int table[0x110000];
+static char *bidi_mirroring_file;
+
+static int mirroring_count;
+
+static void
+read_bidi_mirroring (
+)
+{
+ char s[500];
+ unsigned int i, j;
+ FILE *f;
+
+ for (i = 0; i < 0x110000; i++)
+ table[i] = 0;
+ mirroring_count = 0;
+ printf ("Reading `BidiMirroring.txt'\n");
+ if (!(f = fopen (bidi_mirroring_file, "rt")))
+ err2 ("cannot open `%s' for reading", bidi_mirroring_file);
+/* fgets (s, sizeof s, f);
+ sscanf (s, "# BidiMirroring-%s.txt", bidi_mirroring_version = malloc (20));*/
+ while (fgets (s, sizeof s, f))
+ {
+ if (s[0] == '#' || s[0] == '\0' || s[0] == '\n')
+ continue;
+ sscanf (s, "%x; %x", &i, &j);
+ table[i] = j;
+ table[j] = i;
+ mirroring_count++;
+ }
+ fclose (f);
+}
+
+static char *
+headermacro (
+ char *file
+)
+{
+ char *t = strdup (file);
+ char *p = t;
+ while (*p)
+ {
+ if (*p >= 'a' && *p <= 'z')
+ *p += 'A' - 'a';
+ else if ((*p < 'A' || *p > 'Z') && (*p < '0' || *p > '9'))
+ *p = '_';
+ p++;
+ }
+ return t;
+}
+
+static void
+write_mirror (
+ char *file
+)
+{
+ int i;
+ FILE *f;
+ char *FILENAME = headermacro (file);
+
+ printf ("Writing `%s'\n", file);
+ if (!(f = fopen (file, "wt")))
+ err2 ("cannot open `%s' for writing", file);
+ fprintf (f, "/*\n"
+ " This file was automatically created from BidiMirroring.txt, version %s\n"
+ " by fribidi_create_mirroring\n*/\n\n", FRIBIDI_UNICODE_VERSION);
+ fprintf (f, "#ifndef %s\n#define %s\n\n#include \"fribidi.h\"\n\n",
+ FILENAME, FILENAME);
+ fprintf (f, "/*\n"
+ " Mirrored characters include all the characters in the Unicode list\n"
+ " that have been declared as being mirrored and that have a mirrored\n"
+ " equivalent.\n"
+ "\n"
+ " There are lots of characters that are designed as being mirrored\n"
+ " but do not have any mirrored glyph, e.g. the sign for there exist.\n");
+ fprintf (f,
+ " Are these used in Arabic? That is are all the mathematical signs\n"
+ " that are assigned to be mirrorable actually mirrored in Arabic?\n"
+ " If that is the case, we'll change the below code to include also\n"
+ " characters that mirror to themself. It will then be the responsibility\n"
+ " of the display engine to actually mirror these.\n" "*/\n\n");
+ fprintf (f, "/* *INDENT-OFF" "* */\n\n");
+ fprintf (f, "static const struct\n"
+ "{\n"
+ " FriBidiChar ch, mirrored_ch;\n"
+ "}\n" "FriBidiMirroredChars[] =\n" "{\n");
+ for (i = 0; i < 0x110000; i++)
+ if (table[i])
+ fprintf (f, " {0x%04X, 0x%04X},\n", i, table[i]);
+ fprintf (f, "} ;\n\n");
+ fprintf (f, "/* *INDE" "NT-ON* */\n\n");
+ fprintf (f, "const int nFriBidiMirroredChars = %d;\n\n", mirroring_count);
+ fprintf (f, "\n#endif /* %s */\n", FILENAME);
+ fclose (f);
+}
+
+int
+main (
+ int argc,
+ char **argv
+)
+{
+ char *p;
+
+ p = (argc >= 2) ? argv[1] : "unidata";
+ bidi_mirroring_file = malloc (50 + strlen (p));
+ sprintf (bidi_mirroring_file, "%s/BidiMirroring.txt", p);
+ read_bidi_mirroring ();
+ write_mirror ("fribidi_tab_mirroring.i");
+ return 0;
+}
diff --git a/gen.tab/packtab.c b/gen.tab/packtab.c
new file mode 100644
index 0000000..311090a
--- /dev/null
+++ b/gen.tab/packtab.c
@@ -0,0 +1,364 @@
+/* PackTab - Pack a static table
+ * Copyright (C) 2001 Behdad Esfahbod.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <fwpg@sharif.edu>.
+ */
+
+/*
+ 8 <= N <= 2^21
+ int key
+ 1 <= max_depth <= 21
+*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "packtab.h"
+
+typedef int uni_table[1024 * 1024 * 2];
+static int n, a, max_depth, N, digits, tab_width, per_row;
+static uni_table temp, x, perm, *tab;
+static int pow[22], cluster, cmpcluster;
+static char **name, *key_type_name, *table_name, *macro_name;
+static FILE *f;
+
+static void
+init (
+ int *base
+)
+{
+ int i;
+ pow[0] = 1;
+ for (i = 1; i <= 21; i++)
+ pow[i] = pow[i - 1] * 2;
+ for (n = 21; pow[n] > N || N % pow[n]; n--)
+ ;
+ digits = (n + 3) / 4;
+ for (i = 6; i; i--)
+ if (pow[i] * (tab_width + 1) < 80)
+ break;
+ per_row = pow[i];
+}
+
+static int
+compare (
+ const void *r,
+ const void *s
+)
+{
+ int i;
+ for (i = 0; i < cmpcluster; i++)
+ if (((int *) r)[i] != ((int *) s)[i])
+ return ((int *) r)[i] - ((int *) s)[i];
+ return 0;
+}
+
+static int lev, p[22], t[22], c[22], clusters[22], s, nn;
+static int best_lev, best_p[22], best_t[22], best_c[22], best_cluster[22],
+ best_s;
+
+static void
+found (
+ void
+)
+{
+ int i;
+
+ if (s < best_s)
+ {
+ best_s = s;
+ best_lev = lev;
+ for (i = 0; i <= lev; i++)
+ {
+ best_p[i] = p[i];
+ best_c[i] = c[i];
+ best_t[i] = t[i];
+ best_cluster[i] = clusters[i];
+ }
+ }
+}
+
+static void
+bt (
+ int node_size
+)
+{
+ int i, j, k, y, sbak, key_bytes;
+
+ if (t[lev] == 1)
+ {
+ found ();
+ return;
+ }
+ if (lev == max_depth)
+ return;
+
+ for (i = 1 - t[lev] % 2; i <= nn + (t[lev] >> nn) % 2; i++)
+ {
+ nn -= (p[lev] = i);
+ clusters[lev] = cluster = (i && nn >= 0) ? pow[i] : t[lev];
+ cmpcluster = cluster + 1;
+
+ t[lev + 1] = (t[lev] - 1) / cluster + 1;
+ for (j = 0; j < t[lev + 1]; j++)
+ {
+ memmove (temp + j * cmpcluster, tab[lev] + j * cluster,
+ cluster * sizeof (tab[lev][0]));
+ temp[j * cmpcluster + cluster] = j;
+ }
+ qsort (temp, t[lev + 1], cmpcluster * sizeof (temp[0]), compare);
+ for (j = 0; j < t[lev + 1]; j++)
+ {
+ perm[j] = temp[j * cmpcluster + cluster];
+ temp[j * cmpcluster + cluster] = 0;
+ }
+ k = 1;
+ y = 0;
+ tab[lev + 1][perm[0]] = perm[0];
+ for (j = 1; j < t[lev + 1]; j++)
+ {
+ if (compare (temp + y, temp + y + cmpcluster))
+ {
+ k++;
+ tab[lev + 1][perm[j]] = perm[j];
+ }
+ else
+ tab[lev + 1][perm[j]] = tab[lev + 1][perm[j - 1]];
+ y += cmpcluster;
+ }
+ sbak = s;
+ s += k * node_size * cluster;
+ c[lev] = k;
+
+ if (s >= best_s)
+ {
+ s = sbak;
+ nn += i;
+ return;
+ }
+
+ key_bytes = k * cluster;
+ key_bytes = key_bytes < 0xff ? 1 : key_bytes < 0xffff ? 2 : 4;
+ lev++;
+ bt (key_bytes);
+ lev--;
+
+ s = sbak;
+ nn += i;
+ }
+}
+
+static void
+solve (
+ void
+)
+{
+ best_lev = max_depth + 2;
+ best_s = N * a * 2;
+ lev = 0;
+ s = 0;
+ nn = n;
+ t[0] = N;
+ bt (a);
+}
+
+static void
+write_array (
+ int max_key
+)
+{
+ int i, j, k, y, ii, ofs;
+ char *key_type;
+
+ if (best_t[lev] == 1)
+ return;
+
+ nn -= (i = best_p[lev]);
+ cluster = best_cluster[lev];
+ cmpcluster = cluster + 1;
+
+ t[lev + 1] = best_t[lev + 1];
+ for (j = 0; j < t[lev + 1]; j++)
+ {
+ memmove (temp + j * cmpcluster, tab[lev] + j * cluster,
+ cluster * sizeof (tab[lev][0]));
+ temp[j * cmpcluster + cluster] = j;
+ }
+ qsort (temp, t[lev + 1], cmpcluster * sizeof (temp[0]), compare);
+ for (j = 0; j < t[lev + 1]; j++)
+ {
+ perm[j] = temp[j * cmpcluster + cluster];
+ temp[j * cmpcluster + cluster] = 0;
+ }
+ k = 1;
+ y = 0;
+ tab[lev + 1][perm[0]] = x[0] = perm[0];
+ for (j = 1; j < t[lev + 1]; j++)
+ {
+ if (compare (temp + y, temp + y + cmpcluster))
+ {
+ x[k] = perm[j];
+ tab[lev + 1][perm[j]] = x[k];
+ k++;
+ }
+ else
+ tab[lev + 1][perm[j]] = tab[lev + 1][perm[j - 1]];
+ y += cmpcluster;
+ }
+
+ i = 0;
+ for (ii = 1; ii < k; ii++)
+ if (x[ii] < x[i])
+ i = ii;
+
+ key_type = !lev ? key_type_name :
+ max_key <= 0xff ? "PACKTAB_UINT8" :
+ max_key <= 0xffff ? "PACKTAB_UINT16" : "PACKTAB_UINT32";
+ fprintf (f, "static const %s %sLevel%d[%d*%d] = {", key_type, table_name,
+ best_lev - lev - 1, cluster, k);
+ ofs = 0;
+ for (ii = 0; ii < k; ii++)
+ {
+ int kk, jj;
+ fprintf (f, "\n\n#define %sLevel%d_%0*X 0x%0X\n", table_name,
+ best_lev - lev - 1, digits, x[i] * pow[n - nn], ofs);
+ kk = x[i] * cluster;
+ if (!lev)
+ if (name)
+ for (j = 0; j < cluster; j++)
+ {
+ if (!(j % per_row) && j != cluster - 1)
+ fprintf (f, "\n ");
+ fprintf (f, "%*s,", tab_width, name[tab[lev][kk++]]);
+ }
+ else
+ for (j = 0; j < cluster; j++)
+ {
+ if (!(j % per_row) && j != cluster - 1)
+ fprintf (f, "\n ");
+ fprintf (f, "%*d,", tab_width, tab[lev][kk++]);
+ }
+ else
+ for (j = 0; j < cluster; j++, kk++)
+ fprintf (f, "\n %sLevel%d_%0*X, /* %0*X..%0*X */", table_name,
+ best_lev - lev, digits,
+ tab[lev][kk] * pow[n - nn - best_p[lev]], digits,
+ x[i] * pow[n - nn] + j * pow[n - nn - best_p[lev]], digits,
+ x[i] * pow[n - nn] + (j + 1) * pow[n - nn - best_p[lev]] -
+ 1);
+ ofs += cluster;
+ jj = i;
+ for (j = 0; j < k; j++)
+ if (x[j] > x[i] && (x[j] < x[jj] || jj == i))
+ jj = j;
+ i = jj;
+ }
+ fprintf (f, "\n};\n\n");
+ lev++;
+ write_array (cluster * k);
+ lev--;
+}
+
+static void
+write_source (
+ void
+)
+{
+ int i, j;
+
+ lev = 0;
+ s = 0;
+ nn = n;
+ t[0] = N;
+ fprintf (f, "\n" "/* *INDENT-OFF* */\n\n");
+ write_array (0);
+ fprintf (f, "/* *INDENT-ON* */\n\n");
+
+ fprintf (f, "#define %s(x)", macro_name);
+ j = 1;
+ for (i = best_lev - 1; i >= 0; i--)
+ {
+ fprintf (f, "\t\\\n\t%sLevel%d[(x)", table_name, i);
+ if (j != 1)
+ fprintf (f, "/%d", j);
+ if (i)
+ fprintf (f, "%%%d +", pow[best_p[best_lev - 1 - i]]);
+ j *= best_cluster[best_lev - 1 - i];
+ }
+ for (i = 0; i < best_lev; i++)
+ fprintf (f, "]");
+ fprintf (f, "\n\n");
+}
+
+static void
+write_out (
+)
+{
+ int i;
+ fprintf (f, "/*\n"
+ " Automatically generated by packtab.c version %d\n\n"
+ " just use %s(key)\n\n"
+ " assumed sizeof(%s) == %d\n"
+ " required memory: %d\n"
+ " lookups: %d\n"
+ " partition shape: %s",
+ packtab_version, macro_name, key_type_name, a, best_s, best_lev,
+ table_name);
+ for (i = best_lev - 1; i >= 0; i--)
+ fprintf (f, "[%d]", best_cluster[i]);
+ fprintf (f, "\n" " different table entries:");
+ for (i = best_lev - 1; i >= 0; i--)
+ fprintf (f, " %d", best_c[i]);
+ fprintf (f, "\n*/\n");
+ write_source ();
+}
+
+int
+pack_table (
+ int *base,
+ int key_num,
+ int key_size,
+ int p_max_depth,
+ int p_tab_width,
+ char **p_name,
+ char *p_key_type_name,
+ char *p_table_name,
+ char *p_macro_name,
+ FILE * out
+)
+{
+ N = key_num;
+ a = key_size;
+ max_depth = p_max_depth;
+ tab_width = p_tab_width;
+ name = p_name;
+ key_type_name = p_key_type_name;
+ table_name = p_table_name;
+ macro_name = p_macro_name;
+ f = out;
+ init (base);
+ if (!(tab = malloc ((n + 1) * sizeof (tab[0]))))
+ return 0;
+ memmove (tab[0], base, key_num * sizeof (int));
+ solve ();
+ write_out ();
+ free (tab);
+ return 1;
+}
+
+/* End of packtab.c */
diff --git a/gen.tab/packtab.h b/gen.tab/packtab.h
new file mode 100644
index 0000000..6a80e13
--- /dev/null
+++ b/gen.tab/packtab.h
@@ -0,0 +1,49 @@
+/* PackTab - Pack a static table
+ * Copyright (C) 2001 Behdad Esfahbod.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <fwpg@sharif.edu>.
+ */
+
+#ifndef PACKTAB_H
+#define PACKTAB_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#define packtab_version 2
+
+ int pack_table (
+ int *base,
+ int key_num,
+ int key_size,
+ int max_depth,
+ int tab_width,
+ char **name,
+ char *key_type_name,
+ char *table_name,
+ char *macro_name,
+ FILE * out
+ );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* PACKTAB_H */
diff --git a/gen.tab/unidata/BidiMirroring.txt b/gen.tab/unidata/BidiMirroring.txt
new file mode 100644
index 0000000..f799da1
--- /dev/null
+++ b/gen.tab/unidata/BidiMirroring.txt
@@ -0,0 +1,525 @@
+# BidiMirroring-4.0.0.txt
+#
+# This file is an informative supplement to the UnicodeData file. It
+# lists characters that have the mirrored property
+# where there is another Unicode character that typically has a glyph
+# that is the mirror image of the original character's glyph.
+# The repertoire covered by the file is Unicode 4.0.0.
+#
+# The file contains a list of lines with mappings from one code point
+# to another one for character-based mirroring.
+# Note that for "real" mirroring, a rendering engine needs to select
+# appropriate alternative glyphs, and that many Unicode characters do not
+# have a mirror-image Unicode character.
+#
+# Each mapping line contains two fields, separated by a semicolon (';').
+# Each of the two fields contains a code point represented as a
+# variable-length hexadecimal value with 4 to 6 digits.
+# A comment indicates where the characters are "BEST FIT" mirroring.
+#
+# Code points with the "mirrored" property but no appropriate mirrors are
+# listed as comments at the end of the file.
+#
+# For information on bidi mirroring, see UAX #9: Bidirectional Algorithm,
+# at http://www.unicode.org/unicode/reports/tr9/
+#
+# This file was originally created by Markus Scherer.
+# Extended for Unicode 3.2 and 4.0 by Ken Whistler.
+#
+# ############################################################
+
+0028; 0029 # LEFT PARENTHESIS
+0029; 0028 # RIGHT PARENTHESIS
+003C; 003E # LESS-THAN SIGN
+003E; 003C # GREATER-THAN SIGN
+005B; 005D # LEFT SQUARE BRACKET
+005D; 005B # RIGHT SQUARE BRACKET
+007B; 007D # LEFT CURLY BRACKET
+007D; 007B # RIGHT CURLY BRACKET
+00AB; 00BB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BB; 00AB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+2039; 203A # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A; 2039 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+2045; 2046 # LEFT SQUARE BRACKET WITH QUILL
+2046; 2045 # RIGHT SQUARE BRACKET WITH QUILL
+207D; 207E # SUPERSCRIPT LEFT PARENTHESIS
+207E; 207D # SUPERSCRIPT RIGHT PARENTHESIS
+208D; 208E # SUBSCRIPT LEFT PARENTHESIS
+208E; 208D # SUBSCRIPT RIGHT PARENTHESIS
+2208; 220B # ELEMENT OF
+2209; 220C # NOT AN ELEMENT OF
+220A; 220D # SMALL ELEMENT OF
+220B; 2208 # CONTAINS AS MEMBER
+220C; 2209 # DOES NOT CONTAIN AS MEMBER
+220D; 220A # SMALL CONTAINS AS MEMBER
+2215; 29F5 # DIVISION SLASH
+223C; 223D # TILDE OPERATOR
+223D; 223C # REVERSED TILDE
+2243; 22CD # ASYMPTOTICALLY EQUAL TO
+2252; 2253 # APPROXIMATELY EQUAL TO OR THE IMAGE OF
+2253; 2252 # IMAGE OF OR APPROXIMATELY EQUAL TO
+2254; 2255 # COLON EQUALS
+2255; 2254 # EQUALS COLON
+2264; 2265 # LESS-THAN OR EQUAL TO
+2265; 2264 # GREATER-THAN OR EQUAL TO
+2266; 2267 # LESS-THAN OVER EQUAL TO
+2267; 2266 # GREATER-THAN OVER EQUAL TO
+2268; 2269 # [BEST FIT] LESS-THAN BUT NOT EQUAL TO
+2269; 2268 # [BEST FIT] GREATER-THAN BUT NOT EQUAL TO
+226A; 226B # MUCH LESS-THAN
+226B; 226A # MUCH GREATER-THAN
+226E; 226F # [BEST FIT] NOT LESS-THAN
+226F; 226E # [BEST FIT] NOT GREATER-THAN
+2270; 2271 # [BEST FIT] NEITHER LESS-THAN NOR EQUAL TO
+2271; 2270 # [BEST FIT] NEITHER GREATER-THAN NOR EQUAL TO
+2272; 2273 # [BEST FIT] LESS-THAN OR EQUIVALENT TO
+2273; 2272 # [BEST FIT] GREATER-THAN OR EQUIVALENT TO
+2274; 2275 # [BEST FIT] NEITHER LESS-THAN NOR EQUIVALENT TO
+2275; 2274 # [BEST FIT] NEITHER GREATER-THAN NOR EQUIVALENT TO
+2276; 2277 # LESS-THAN OR GREATER-THAN
+2277; 2276 # GREATER-THAN OR LESS-THAN
+2278; 2279 # NEITHER LESS-THAN NOR GREATER-THAN
+2279; 2278 # NEITHER GREATER-THAN NOR LESS-THAN
+227A; 227B # PRECEDES
+227B; 227A # SUCCEEDS
+227C; 227D # PRECEDES OR EQUAL TO
+227D; 227C # SUCCEEDS OR EQUAL TO
+227E; 227F # [BEST FIT] PRECEDES OR EQUIVALENT TO
+227F; 227E # [BEST FIT] SUCCEEDS OR EQUIVALENT TO
+2280; 2281 # [BEST FIT] DOES NOT PRECEDE
+2281; 2280 # [BEST FIT] DOES NOT SUCCEED
+2282; 2283 # SUBSET OF
+2283; 2282 # SUPERSET OF
+2284; 2285 # [BEST FIT] NOT A SUBSET OF
+2285; 2284 # [BEST FIT] NOT A SUPERSET OF
+2286; 2287 # SUBSET OF OR EQUAL TO
+2287; 2286 # SUPERSET OF OR EQUAL TO
+2288; 2289 # [BEST FIT] NEITHER A SUBSET OF NOR EQUAL TO
+2289; 2288 # [BEST FIT] NEITHER A SUPERSET OF NOR EQUAL TO
+228A; 228B # [BEST FIT] SUBSET OF WITH NOT EQUAL TO
+228B; 228A # [BEST FIT] SUPERSET OF WITH NOT EQUAL TO
+228F; 2290 # SQUARE IMAGE OF
+2290; 228F # SQUARE ORIGINAL OF
+2291; 2292 # SQUARE IMAGE OF OR EQUAL TO
+2292; 2291 # SQUARE ORIGINAL OF OR EQUAL TO
+2298; 29B8 # CIRCLED DIVISION SLASH
+22A2; 22A3 # RIGHT TACK
+22A3; 22A2 # LEFT TACK
+22A6; 2ADE # ASSERTION
+22A8; 2AE4 # TRUE
+22A9; 2AE3 # FORCES
+22AB; 2AE5 # DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+22B0; 22B1 # PRECEDES UNDER RELATION
+22B1; 22B0 # SUCCEEDS UNDER RELATION
+22B2; 22B3 # NORMAL SUBGROUP OF
+22B3; 22B2 # CONTAINS AS NORMAL SUBGROUP
+22B4; 22B5 # NORMAL SUBGROUP OF OR EQUAL TO
+22B5; 22B4 # CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
+22B6; 22B7 # ORIGINAL OF
+22B7; 22B6 # IMAGE OF
+22C9; 22CA # LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
+22CA; 22C9 # RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
+22CB; 22CC # LEFT SEMIDIRECT PRODUCT
+22CC; 22CB # RIGHT SEMIDIRECT PRODUCT
+22CD; 2243 # REVERSED TILDE EQUALS
+22D0; 22D1 # DOUBLE SUBSET
+22D1; 22D0 # DOUBLE SUPERSET
+22D6; 22D7 # LESS-THAN WITH DOT
+22D7; 22D6 # GREATER-THAN WITH DOT
+22D8; 22D9 # VERY MUCH LESS-THAN
+22D9; 22D8 # VERY MUCH GREATER-THAN
+22DA; 22DB # LESS-THAN EQUAL TO OR GREATER-THAN
+22DB; 22DA # GREATER-THAN EQUAL TO OR LESS-THAN
+22DC; 22DD # EQUAL TO OR LESS-THAN
+22DD; 22DC # EQUAL TO OR GREATER-THAN
+22DE; 22DF # EQUAL TO OR PRECEDES
+22DF; 22DE # EQUAL TO OR SUCCEEDS
+22E0; 22E1 # [BEST FIT] DOES NOT PRECEDE OR EQUAL
+22E1; 22E0 # [BEST FIT] DOES NOT SUCCEED OR EQUAL
+22E2; 22E3 # [BEST FIT] NOT SQUARE IMAGE OF OR EQUAL TO
+22E3; 22E2 # [BEST FIT] NOT SQUARE ORIGINAL OF OR EQUAL TO
+22E4; 22E5 # [BEST FIT] SQUARE IMAGE OF OR NOT EQUAL TO
+22E5; 22E4 # [BEST FIT] SQUARE ORIGINAL OF OR NOT EQUAL TO
+22E6; 22E7 # [BEST FIT] LESS-THAN BUT NOT EQUIVALENT TO
+22E7; 22E6 # [BEST FIT] GREATER-THAN BUT NOT EQUIVALENT TO
+22E8; 22E9 # [BEST FIT] PRECEDES BUT NOT EQUIVALENT TO
+22E9; 22E8 # [BEST FIT] SUCCEEDS BUT NOT EQUIVALENT TO
+22EA; 22EB # [BEST FIT] NOT NORMAL SUBGROUP OF
+22EB; 22EA # [BEST FIT] DOES NOT CONTAIN AS NORMAL SUBGROUP
+22EC; 22ED # [BEST FIT] NOT NORMAL SUBGROUP OF OR EQUAL TO
+22ED; 22EC # [BEST FIT] DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
+22F0; 22F1 # UP RIGHT DIAGONAL ELLIPSIS
+22F1; 22F0 # DOWN RIGHT DIAGONAL ELLIPSIS
+22F2; 22FA # ELEMENT OF WITH LONG HORIZONTAL STROKE
+22F3; 22FB # ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22F4; 22FC # SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22F6; 22FD # ELEMENT OF WITH OVERBAR
+22F7; 22FE # SMALL ELEMENT OF WITH OVERBAR
+22FA; 22F2 # CONTAINS WITH LONG HORIZONTAL STROKE
+22FB; 22F3 # CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22FC; 22F4 # SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22FD; 22F6 # CONTAINS WITH OVERBAR
+22FE; 22F7 # SMALL CONTAINS WITH OVERBAR
+2308; 2309 # LEFT CEILING
+2309; 2308 # RIGHT CEILING
+230A; 230B # LEFT FLOOR
+230B; 230A # RIGHT FLOOR
+2329; 232A # LEFT-POINTING ANGLE BRACKET
+232A; 2329 # RIGHT-POINTING ANGLE BRACKET
+2768; 2769 # MEDIUM LEFT PARENTHESIS ORNAMENT
+2769; 2768 # MEDIUM RIGHT PARENTHESIS ORNAMENT
+276A; 276B # MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+276B; 276A # MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+276C; 276D # MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+276D; 276C # MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+276E; 276F # HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+276F; 276E # HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+2770; 2771 # HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+2771; 2770 # HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+2772; 2773 # LIGHT LEFT TORTOISE SHELL BRACKET
+2773; 2772 # LIGHT RIGHT TORTOISE SHELL BRACKET
+2774; 2775 # MEDIUM LEFT CURLY BRACKET ORNAMENT
+2775; 2774 # MEDIUM RIGHT CURLY BRACKET ORNAMENT
+27D5; 27D6 # LEFT OUTER JOIN
+27D6; 27D5 # RIGHT OUTER JOIN
+27DD; 27DE # LONG RIGHT TACK
+27DE; 27DD # LONG LEFT TACK
+27E2; 27E3 # WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK
+27E3; 27E2 # WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK
+27E4; 27E5 # WHITE SQUARE WITH LEFTWARDS TICK
+27E5; 27E4 # WHITE SQUARE WITH RIGHTWARDS TICK
+27E6; 27E7 # MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7; 27E6 # MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8; 27E9 # MATHEMATICAL LEFT ANGLE BRACKET
+27E9; 27E8 # MATHEMATICAL RIGHT ANGLE BRACKET
+27EA; 27EB # MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB; 27EA # MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+2983; 2984 # LEFT WHITE CURLY BRACKET
+2984; 2983 # RIGHT WHITE CURLY BRACKET
+2985; 2986 # LEFT WHITE PARENTHESIS
+2986; 2985 # RIGHT WHITE PARENTHESIS
+2987; 2988 # Z NOTATION LEFT IMAGE BRACKET
+2988; 2987 # Z NOTATION RIGHT IMAGE BRACKET
+2989; 298A # Z NOTATION LEFT BINDING BRACKET
+298A; 2989 # Z NOTATION RIGHT BINDING BRACKET
+298B; 298C # LEFT SQUARE BRACKET WITH UNDERBAR
+298C; 298B # RIGHT SQUARE BRACKET WITH UNDERBAR
+298D; 2990 # LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E; 298F # RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F; 298E # LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990; 298D # RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991; 2992 # LEFT ANGLE BRACKET WITH DOT
+2992; 2991 # RIGHT ANGLE BRACKET WITH DOT
+2993; 2994 # LEFT ARC LESS-THAN BRACKET
+2994; 2993 # RIGHT ARC GREATER-THAN BRACKET
+2995; 2996 # DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996; 2995 # DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997; 2998 # LEFT BLACK TORTOISE SHELL BRACKET
+2998; 2997 # RIGHT BLACK TORTOISE SHELL BRACKET
+29B8; 2298 # CIRCLED REVERSE SOLIDUS
+29C0; 29C1 # CIRCLED LESS-THAN
+29C1; 29C0 # CIRCLED GREATER-THAN
+29C4; 29C5 # SQUARED RISING DIAGONAL SLASH
+29C5; 29C4 # SQUARED FALLING DIAGONAL SLASH
+29CF; 29D0 # LEFT TRIANGLE BESIDE VERTICAL BAR
+29D0; 29CF # VERTICAL BAR BESIDE RIGHT TRIANGLE
+29D1; 29D2 # BOWTIE WITH LEFT HALF BLACK
+29D2; 29D1 # BOWTIE WITH RIGHT HALF BLACK
+29D4; 29D5 # TIMES WITH LEFT HALF BLACK
+29D5; 29D4 # TIMES WITH RIGHT HALF BLACK
+29D8; 29D9 # LEFT WIGGLY FENCE
+29D9; 29D8 # RIGHT WIGGLY FENCE
+29DA; 29DB # LEFT DOUBLE WIGGLY FENCE
+29DB; 29DA # RIGHT DOUBLE WIGGLY FENCE
+29F5; 2215 # REVERSE SOLIDUS OPERATOR
+29F8; 29F9 # BIG SOLIDUS
+29F9; 29F8 # BIG REVERSE SOLIDUS
+29FC; 29FD # LEFT-POINTING CURVED ANGLE BRACKET
+29FD; 29FC # RIGHT-POINTING CURVED ANGLE BRACKET
+2A2B; 2A2C # MINUS SIGN WITH FALLING DOTS
+2A2C; 2A2B # MINUS SIGN WITH RISING DOTS
+2A2D; 2A2C # PLUS SIGN IN LEFT HALF CIRCLE
+2A2E; 2A2D # PLUS SIGN IN RIGHT HALF CIRCLE
+2A34; 2A35 # MULTIPLICATION SIGN IN LEFT HALF CIRCLE
+2A35; 2A34 # MULTIPLICATION SIGN IN RIGHT HALF CIRCLE
+2A3C; 2A3D # INTERIOR PRODUCT
+2A3D; 2A3C # RIGHTHAND INTERIOR PRODUCT
+2A64; 2A65 # Z NOTATION DOMAIN ANTIRESTRICTION
+2A65; 2A64 # Z NOTATION RANGE ANTIRESTRICTION
+2A79; 2A7A # LESS-THAN WITH CIRCLE INSIDE
+2A7A; 2A79 # GREATER-THAN WITH CIRCLE INSIDE
+2A7D; 2A7E # LESS-THAN OR SLANTED EQUAL TO
+2A7E; 2A7D # GREATER-THAN OR SLANTED EQUAL TO
+2A7F; 2A80 # LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+2A80; 2A7F # GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+2A81; 2A82 # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+2A82; 2A81 # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+2A83; 2A84 # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT
+2A84; 2A83 # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT
+2A8B; 2A8C # LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN
+2A8C; 2A8B # GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN
+2A91; 2A92 # LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL
+2A92; 2A91 # GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL
+2A93; 2A94 # LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL
+2A94; 2A93 # GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL
+2A95; 2A96 # SLANTED EQUAL TO OR LESS-THAN
+2A96; 2A95 # SLANTED EQUAL TO OR GREATER-THAN
+2A97; 2A98 # SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE
+2A98; 2A97 # SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE
+2A99; 2A9A # DOUBLE-LINE EQUAL TO OR LESS-THAN
+2A9A; 2A99 # DOUBLE-LINE EQUAL TO OR GREATER-THAN
+2A9B; 2A9C # DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN
+2A9C; 2A9B # DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN
+2AA1; 2AA2 # DOUBLE NESTED LESS-THAN
+2AA2; 2AA1 # DOUBLE NESTED GREATER-THAN
+2AA6; 2AA7 # LESS-THAN CLOSED BY CURVE
+2AA7; 2AA6 # GREATER-THAN CLOSED BY CURVE
+2AA8; 2AA9 # LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+2AA9; 2AA8 # GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+2AAA; 2AAB # SMALLER THAN
+2AAB; 2AAA # LARGER THAN
+2AAC; 2AAD # SMALLER THAN OR EQUAL TO
+2AAD; 2AAC # LARGER THAN OR EQUAL TO
+2AAF; 2AB0 # PRECEDES ABOVE SINGLE-LINE EQUALS SIGN
+2AB0; 2AAF # SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
+2AB3; 2AB4 # PRECEDES ABOVE EQUALS SIGN
+2AB4; 2AB3 # SUCCEEDS ABOVE EQUALS SIGN
+2ABB; 2ABC # DOUBLE PRECEDES
+2ABC; 2ABB # DOUBLE SUCCEEDS
+2ABD; 2ABE # SUBSET WITH DOT
+2ABE; 2ABD # SUPERSET WITH DOT
+2ABF; 2AC0 # SUBSET WITH PLUS SIGN BELOW
+2AC0; 2ABF # SUPERSET WITH PLUS SIGN BELOW
+2AC1; 2AC2 # SUBSET WITH MULTIPLICATION SIGN BELOW
+2AC2; 2AC1 # SUPERSET WITH MULTIPLICATION SIGN BELOW
+2AC3; 2AC4 # SUBSET OF OR EQUAL TO WITH DOT ABOVE
+2AC4; 2AC3 # SUPERSET OF OR EQUAL TO WITH DOT ABOVE
+2AC5; 2AC6 # SUBSET OF ABOVE EQUALS SIGN
+2AC6; 2AC5 # SUPERSET OF ABOVE EQUALS SIGN
+2ACD; 2ACE # SQUARE LEFT OPEN BOX OPERATOR
+2ACE; 2ACD # SQUARE RIGHT OPEN BOX OPERATOR
+2ACF; 2AD0 # CLOSED SUBSET
+2AD0; 2ACF # CLOSED SUPERSET
+2AD1; 2AD2 # CLOSED SUBSET OR EQUAL TO
+2AD2; 2AD1 # CLOSED SUPERSET OR EQUAL TO
+2AD3; 2AD4 # SUBSET ABOVE SUPERSET
+2AD4; 2AD3 # SUPERSET ABOVE SUBSET
+2AD5; 2AD6 # SUBSET ABOVE SUBSET
+2AD6; 2AD5 # SUPERSET ABOVE SUPERSET
+2ADE; 22A6 # SHORT LEFT TACK
+2AE3; 22A9 # DOUBLE VERTICAL BAR LEFT TURNSTILE
+2AE4; 22A8 # VERTICAL BAR DOUBLE LEFT TURNSTILE
+2AE5; 22AB # DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE
+2AEC; 2AED # DOUBLE STROKE NOT SIGN
+2AED; 2AEC # REVERSED DOUBLE STROKE NOT SIGN
+2AF7; 2AF8 # TRIPLE NESTED LESS-THAN
+2AF8; 2AF7 # TRIPLE NESTED GREATER-THAN
+2AF9; 2AFA # DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO
+2AFA; 2AF9 # DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO
+3008; 3009 # LEFT ANGLE BRACKET
+3009; 3008 # RIGHT ANGLE BRACKET
+300A; 300B # LEFT DOUBLE ANGLE BRACKET
+300B; 300A # RIGHT DOUBLE ANGLE BRACKET
+300C; 300D # [BEST FIT] LEFT CORNER BRACKET
+300D; 300C # [BEST FIT] RIGHT CORNER BRACKET
+300E; 300F # [BEST FIT] LEFT WHITE CORNER BRACKET
+300F; 300E # [BEST FIT] RIGHT WHITE CORNER BRACKET
+3010; 3011 # LEFT BLACK LENTICULAR BRACKET
+3011; 3010 # RIGHT BLACK LENTICULAR BRACKET
+3014; 3015 # LEFT TORTOISE SHELL BRACKET
+3015; 3014 # RIGHT TORTOISE SHELL BRACKET
+3016; 3017 # LEFT WHITE LENTICULAR BRACKET
+3017; 3016 # RIGHT WHITE LENTICULAR BRACKET
+3018; 3019 # LEFT WHITE TORTOISE SHELL BRACKET
+3019; 3018 # RIGHT WHITE TORTOISE SHELL BRACKET
+301A; 301B # LEFT WHITE SQUARE BRACKET
+301B; 301A # RIGHT WHITE SQUARE BRACKET
+FF08; FF09 # FULLWIDTH LEFT PARENTHESIS
+FF09; FF08 # FULLWIDTH RIGHT PARENTHESIS
+FF1C; FF1E # FULLWIDTH LESS-THAN SIGN
+FF1E; FF1C # FULLWIDTH GREATER-THAN SIGN
+FF3B; FF3D # FULLWIDTH LEFT SQUARE BRACKET
+FF3D; FF3B # FULLWIDTH RIGHT SQUARE BRACKET
+FF5B; FF5D # FULLWIDTH LEFT CURLY BRACKET
+FF5D; FF5B # FULLWIDTH RIGHT CURLY BRACKET
+FF5F; FF60 # FULLWIDTH LEFT WHITE PARENTHESIS
+FF60; FF5F # FULLWIDTH RIGHT WHITE PARENTHESIS
+FF62; FF63 # [BEST FIT] HALFWIDTH LEFT CORNER BRACKET
+FF63; FF62 # [BEST FIT] HALFWIDTH RIGHT CORNER BRACKET
+
+# The following characters have no appropriate mirroring character
+
+# 2140; DOUBLE-STRUCK N-ARY SUMMATION
+# 2201; COMPLEMENT
+# 2202; PARTIAL DIFFERENTIAL
+# 2203; THERE EXISTS
+# 2204; THERE DOES NOT EXIST
+# 2211; N-ARY SUMMATION
+# 2216; SET MINUS
+# 221A; SQUARE ROOT
+# 221B; CUBE ROOT
+# 221C; FOURTH ROOT
+# 221D; PROPORTIONAL TO
+# 221F; RIGHT ANGLE
+# 2220; ANGLE
+# 2221; MEASURED ANGLE
+# 2222; SPHERICAL ANGLE
+# 2224; DOES NOT DIVIDE
+# 2226; NOT PARALLEL TO
+# 222B; INTEGRAL
+# 222C; DOUBLE INTEGRAL
+# 222D; TRIPLE INTEGRAL
+# 222E; CONTOUR INTEGRAL
+# 222F; SURFACE INTEGRAL
+# 2230; VOLUME INTEGRAL
+# 2231; CLOCKWISE INTEGRAL
+# 2232; CLOCKWISE CONTOUR INTEGRAL
+# 2233; ANTICLOCKWISE CONTOUR INTEGRAL
+# 2239; EXCESS
+# 223B; HOMOTHETIC
+# 223E; INVERTED LAZY S
+# 223F; SINE WAVE
+# 2240; WREATH PRODUCT
+# 2241; NOT TILDE
+# 2242; MINUS TILDE
+# 2244; NOT ASYMPTOTICALLY EQUAL TO
+# 2245; APPROXIMATELY EQUAL TO
+# 2246; APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
+# 2247; NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
+# 2248; ALMOST EQUAL TO
+# 2249; NOT ALMOST EQUAL TO
+# 224A; ALMOST EQUAL OR EQUAL TO
+# 224B; TRIPLE TILDE
+# 224C; ALL EQUAL TO
+# 225F; QUESTIONED EQUAL TO
+# 2260; NOT EQUAL TO
+# 2262; NOT IDENTICAL TO
+# 228C; MULTISET
+# 22A7; MODELS
+# 22AA; TRIPLE VERTICAL BAR RIGHT TURNSTILE
+# 22AC; DOES NOT PROVE
+# 22AD; NOT TRUE
+# 22AE; DOES NOT FORCE
+# 22AF; NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+# 22B8; MULTIMAP
+# 22BE; RIGHT ANGLE WITH ARC
+# 22BF; RIGHT TRIANGLE
+# 22F5; ELEMENT OF WITH DOT ABOVE
+# 22F8; ELEMENT OF WITH UNDERBAR
+# 22F9; ELEMENT OF WITH TWO HORIZONTAL STROKES
+# 22FF; Z NOTATION BAG MEMBERSHIP
+# 2320; TOP HALF INTEGRAL
+# 2321; BOTTOM HALF INTEGRAL
+# 27D3; LOWER RIGHT CORNER WITH DOT
+# 27D4; UPPER LEFT CORNER WITH DOT
+# 27DC; LEFT MULTIMAP
+# 299B; MEASURED ANGLE OPENING LEFT
+# 299C; RIGHT ANGLE VARIANT WITH SQUARE
+# 299D; MEASURED RIGHT ANGLE WITH DOT
+# 299E; ANGLE WITH S INSIDE
+# 299F; ACUTE ANGLE
+# 29A0; SPHERICAL ANGLE OPENING LEFT
+# 29A1; SPHERICAL ANGLE OPENING UP
+# 29A2; TURNED ANGLE
+# 29A3; REVERSED ANGLE
+# 29A4; ANGLE WITH UNDERBAR
+# 29A5; REVERSED ANGLE WITH UNDERBAR
+# 29A6; OBLIQUE ANGLE OPENING UP
+# 29A7; OBLIQUE ANGLE OPENING DOWN
+# 29A8; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT
+# 29A9; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT
+# 29AA; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT
+# 29AB; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT
+# 29AC; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP
+# 29AD; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP
+# 29AE; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN
+# 29AF; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN
+# 29C2; CIRCLE WITH SMALL CIRCLE TO THE RIGHT
+# 29C3; CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT
+# 29C9; TWO JOINED SQUARES
+# 29CE; RIGHT TRIANGLE ABOVE LEFT TRIANGLE
+# 29DC; INCOMPLETE INFINITY
+# 29E1; INCREASES AS
+# 29E3; EQUALS SIGN AND SLANTED PARALLEL
+# 29E4; EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE
+# 29E5; IDENTICAL TO AND SLANTED PARALLEL
+# 29E8; DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK
+# 29E9; DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK
+# 29F4; RULE-DELAYED
+# 29F6; SOLIDUS WITH OVERBAR
+# 29F7; REVERSE SOLIDUS WITH HORIZONTAL STROKE
+# 2A0A; MODULO TWO SUM
+# 2A0B; SUMMATION WITH INTEGRAL
+# 2A0C; QUADRUPLE INTEGRAL OPERATOR
+# 2A0D; FINITE PART INTEGRAL
+# 2A0E; INTEGRAL WITH DOUBLE STROKE
+# 2A0F; INTEGRAL AVERAGE WITH SLASH
+# 2A10; CIRCULATION FUNCTION
+# 2A11; ANTICLOCKWISE INTEGRATION
+# 2A12; LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE
+# 2A13; LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE
+# 2A14; LINE INTEGRATION NOT INCLUDING THE POLE
+# 2A15; INTEGRAL AROUND A POINT OPERATOR
+# 2A16; QUATERNION INTEGRAL OPERATOR
+# 2A17; INTEGRAL WITH LEFTWARDS ARROW WITH HOOK
+# 2A18; INTEGRAL WITH TIMES SIGN
+# 2A19; INTEGRAL WITH INTERSECTION
+# 2A1A; INTEGRAL WITH UNION
+# 2A1B; INTEGRAL WITH OVERBAR
+# 2A1C; INTEGRAL WITH UNDERBAR
+# 2A1E; LARGE LEFT TRIANGLE OPERATOR
+# 2A1F; Z NOTATION SCHEMA COMPOSITION
+# 2A20; Z NOTATION SCHEMA PIPING
+# 2A21; Z NOTATION SCHEMA PROJECTION
+# 2A24; PLUS SIGN WITH TILDE ABOVE
+# 2A26; PLUS SIGN WITH TILDE BELOW
+# 2A29; MINUS SIGN WITH COMMA ABOVE
+# 2A3E; Z NOTATION RELATIONAL COMPOSITION
+# 2A57; SLOPING LARGE OR
+# 2A58; SLOPING LARGE AND
+# 2A6A; TILDE OPERATOR WITH DOT ABOVE
+# 2A6B; TILDE OPERATOR WITH RISING DOTS
+# 2A6C; SIMILAR MINUS SIMILAR
+# 2A6D; CONGRUENT WITH DOT ABOVE
+# 2A6F; ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT
+# 2A70; APPROXIMATELY EQUAL OR EQUAL TO
+# 2A73; EQUALS SIGN ABOVE TILDE OPERATOR
+# 2A74; DOUBLE COLON EQUAL
+# 2A7B; LESS-THAN WITH QUESTION MARK ABOVE
+# 2A7C; GREATER-THAN WITH QUESTION MARK ABOVE
+# 2A85; LESS-THAN OR APPROXIMATE
+# 2A86; GREATER-THAN OR APPROXIMATE
+# 2A87; LESS-THAN AND SINGLE-LINE NOT EQUAL TO
+# 2A88; GREATER-THAN AND SINGLE-LINE NOT EQUAL TO
+# 2A89; LESS-THAN AND NOT APPROXIMATE
+# 2A8A; GREATER-THAN AND NOT APPROXIMATE
+# 2A8D; LESS-THAN ABOVE SIMILAR OR EQUAL
+# 2A8E; GREATER-THAN ABOVE SIMILAR OR EQUAL
+# 2A8F; LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN
+# 2A90; GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN
+# 2A9D; SIMILAR OR LESS-THAN
+# 2A9E; SIMILAR OR GREATER-THAN
+# 2A9F; SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN
+# 2AA0; SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN
+# 2AA3; DOUBLE NESTED LESS-THAN WITH UNDERBAR
+# 2AB1; PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO
+# 2AB2; SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO
+# 2AB5; PRECEDES ABOVE NOT EQUAL TO
+# 2AB6; SUCCEEDS ABOVE NOT EQUAL TO
+# 2AB7; PRECEDES ABOVE ALMOST EQUAL TO
+# 2AB8; SUCCEEDS ABOVE ALMOST EQUAL TO
+# 2AB9; PRECEDES ABOVE NOT ALMOST EQUAL TO
+# 2ABA; SUCCEEDS ABOVE NOT ALMOST EQUAL TO
+# 2AC7; SUBSET OF ABOVE TILDE OPERATOR
+# 2AC8; SUPERSET OF ABOVE TILDE OPERATOR
+# 2AC9; SUBSET OF ABOVE ALMOST EQUAL TO
+# 2ACA; SUPERSET OF ABOVE ALMOST EQUAL TO
+# 2ACB; SUBSET OF ABOVE NOT EQUAL TO
+# 2ACC; SUPERSET OF ABOVE NOT EQUAL TO
+# 2ADC; FORKING
+# 2AE2; VERTICAL BAR TRIPLE RIGHT TURNSTILE
+# 2AE6; LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL
+# 2AEE; DOES NOT DIVIDE WITH REVERSED NEGATION SLASH
+# 2AF3; PARALLEL WITH TILDE OPERATOR
+# 2AFB; TRIPLE SOLIDUS BINARY RELATION
+# 2AFD; DOUBLE SOLIDUS OPERATOR
diff --git a/gen.tab/unidata/ReadMe.txt b/gen.tab/unidata/ReadMe.txt
new file mode 100644
index 0000000..763a23f
--- /dev/null
+++ b/gen.tab/unidata/ReadMe.txt
@@ -0,0 +1,40 @@
+2004 March 30
+
+This directory contains the Unicode Character Database
+data files.
+
+Currently, the Unicode Character Database files are at
+the version level:
+
+ Unicode Standard, Version 4.0.1
+
+For information about the standard itself, see:
+
+http://www.unicode.org/versions/Unicode4.0.1/
+
+Detailed documentation of the files constituting the
+Unicode Character Database (contributory data files for
+the standard itself) can be found in UCD.html.
+
+Unihan.txt is a very large file. A zipped version is
+also provided for downloading convenience: Unihan.zip.
+
+The current Unicode 4.0.1 version of Unihan.txt is also available in
+two compressed formats in the Unicode 4.0.1 update directory. See:
+http://www.unicode.org/Public/4.0-Update1/
+or
+ftp://ftp.unicode.org/Public/4.0-Update1/
+
+Unihan-4.0.1.zip for Windows. (Use winzip)
+Unihan-4.0.1.txt.gz for Unix. (Use gzip or gunzip)
+
+Note that the files are zipped in
+exactly the same format they have on the server (with Unix
+line endings). From a browser, right-clicking on
+Unihan.zip will allow automatic download and unzip on a
+Windows system with winzip installed.
+
+
+
+
+
diff --git a/gen.tab/unidata/extracted/DerivedBidiClass.txt b/gen.tab/unidata/extracted/DerivedBidiClass.txt
new file mode 100644
index 0000000..c1ffc1d
--- /dev/null
+++ b/gen.tab/unidata/extracted/DerivedBidiClass.txt
@@ -0,0 +1,1299 @@
+# DerivedBidiClass-4.0.1.txt
+# Date: 2004-03-11, 18:33:24 GMT [MD]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2004 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see UCD.html
+
+# ================================================
+
+# Bidi Class (listing UnicodeData.txt, field 4: see UCD.html)
+
+# All code points not explicitly listed for Bidi_Class
+# have the value Left_To_Right (L).
+
+# ================================================
+
+# Bidi_Class=Left_To_Right
+
+0041..005A ; L # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+0061..007A ; L # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00AA ; L # L& FEMININE ORDINAL INDICATOR
+00B5 ; L # L& MICRO SIGN
+00BA ; L # L& MASCULINE ORDINAL INDICATOR
+00C0..00D6 ; L # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00F6 ; L # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..01BA ; L # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
+01BB ; L # Lo LATIN LETTER TWO WITH STROKE
+01BC..01BF ; L # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
+01C0..01C3 ; L # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
+01C4..0236 ; L # L& [115] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER T WITH CURL
+0250..02AF ; L # L& [96] LATIN SMALL LETTER TURNED A..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0..02B8 ; L # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y
+02BB..02C1 ; L # Lm [7] MODIFIER LETTER TURNED COMMA..MODIFIER LETTER REVERSED GLOTTAL STOP
+02D0..02D1 ; L # Lm [2] MODIFIER LETTER TRIANGULAR COLON..MODIFIER LETTER HALF TRIANGULAR COLON
+02E0..02E4 ; L # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02EE ; L # Lm MODIFIER LETTER DOUBLE APOSTROPHE
+037A ; L # Lm GREEK YPOGEGRAMMENI
+0386 ; L # L& GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A ; L # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C ; L # L& GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1 ; L # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03CE ; L # L& [44] GREEK CAPITAL LETTER SIGMA..GREEK SMALL LETTER OMEGA WITH TONOS
+03D0..03F5 ; L # L& [38] GREEK BETA SYMBOL..GREEK LUNATE EPSILON SYMBOL
+03F7..03FB ; L # L& [5] GREEK CAPITAL LETTER SHO..GREEK SMALL LETTER SAN
+0400..0481 ; L # L& [130] CYRILLIC CAPITAL LETTER IE WITH GRAVE..CYRILLIC SMALL LETTER KOPPA
+0482 ; L # So CYRILLIC THOUSANDS SIGN
+048A..04CE ; L # L& [69] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EM WITH TAIL
+04D0..04F5 ; L # L& [38] CYRILLIC CAPITAL LETTER A WITH BREVE..CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F8..04F9 ; L # L& [2] CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS..CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+0500..050F ; L # L& [16] CYRILLIC CAPITAL LETTER KOMI DE..CYRILLIC SMALL LETTER KOMI TJE
+0531..0556 ; L # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0559 ; L # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING
+055A..055F ; L # Po [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK
+0561..0587 ; L # L& [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
+0589 ; L # Po ARMENIAN FULL STOP
+0903 ; L # Mc DEVANAGARI SIGN VISARGA
+0904..0939 ; L # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
+093D ; L # Lo DEVANAGARI SIGN AVAGRAHA
+093E..0940 ; L # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
+0949..094C ; L # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
+0950 ; L # Lo DEVANAGARI OM
+0958..0961 ; L # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
+0964..0965 ; L # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
+0966..096F ; L # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
+0970 ; L # Po DEVANAGARI ABBREVIATION SIGN
+0982..0983 ; L # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
+0985..098C ; L # Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
+098F..0990 ; L # Lo [2] BENGALI LETTER E..BENGALI LETTER AI
+0993..09A8 ; L # Lo [22] BENGALI LETTER O..BENGALI LETTER NA
+09AA..09B0 ; L # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA
+09B2 ; L # Lo BENGALI LETTER LA
+09B6..09B9 ; L # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA
+09BD ; L # Lo BENGALI SIGN AVAGRAHA
+09BE..09C0 ; L # Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
+09C7..09C8 ; L # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+09CB..09CC ; L # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+09D7 ; L # Mc BENGALI AU LENGTH MARK
+09DC..09DD ; L # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF..09E1 ; L # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
+09E6..09EF ; L # Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
+09F0..09F1 ; L # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
+09F4..09F9 ; L # No [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN
+09FA ; L # So BENGALI ISSHAR
+0A03 ; L # Mc GURMUKHI SIGN VISARGA
+0A05..0A0A ; L # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
+0A0F..0A10 ; L # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
+0A13..0A28 ; L # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
+0A2A..0A30 ; L # Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
+0A32..0A33 ; L # Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
+0A35..0A36 ; L # Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
+0A38..0A39 ; L # Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
+0A3E..0A40 ; L # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
+0A59..0A5C ; L # Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
+0A5E ; L # Lo GURMUKHI LETTER FA
+0A66..0A6F ; L # Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
+0A72..0A74 ; L # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR
+0A83 ; L # Mc GUJARATI SIGN VISARGA
+0A85..0A8D ; L # Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
+0A8F..0A91 ; L # Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
+0A93..0AA8 ; L # Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA
+0AAA..0AB0 ; L # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA
+0AB2..0AB3 ; L # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
+0AB5..0AB9 ; L # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA
+0ABD ; L # Lo GUJARATI SIGN AVAGRAHA
+0ABE..0AC0 ; L # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
+0AC9 ; L # Mc GUJARATI VOWEL SIGN CANDRA O
+0ACB..0ACC ; L # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
+0AD0 ; L # Lo GUJARATI OM
+0AE0..0AE1 ; L # Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
+0AE6..0AEF ; L # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
+0B02..0B03 ; L # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
+0B05..0B0C ; L # Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
+0B0F..0B10 ; L # Lo [2] ORIYA LETTER E..ORIYA LETTER AI
+0B13..0B28 ; L # Lo [22] ORIYA LETTER O..ORIYA LETTER NA
+0B2A..0B30 ; L # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA
+0B32..0B33 ; L # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA
+0B35..0B39 ; L # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA
+0B3D ; L # Lo ORIYA SIGN AVAGRAHA
+0B3E ; L # Mc ORIYA VOWEL SIGN AA
+0B40 ; L # Mc ORIYA VOWEL SIGN II
+0B47..0B48 ; L # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
+0B4B..0B4C ; L # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+0B57 ; L # Mc ORIYA AU LENGTH MARK
+0B5C..0B5D ; L # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0B5F..0B61 ; L # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
+0B66..0B6F ; L # Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
+0B70 ; L # So ORIYA ISSHAR
+0B71 ; L # Lo ORIYA LETTER WA
+0B83 ; L # Lo TAMIL SIGN VISARGA
+0B85..0B8A ; L # Lo [6] TAMIL LETTER A..TAMIL LETTER UU
+0B8E..0B90 ; L # Lo [3] TAMIL LETTER E..TAMIL LETTER AI
+0B92..0B95 ; L # Lo [4] TAMIL LETTER O..TAMIL LETTER KA
+0B99..0B9A ; L # Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA
+0B9C ; L # Lo TAMIL LETTER JA
+0B9E..0B9F ; L # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA
+0BA3..0BA4 ; L # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA
+0BA8..0BAA ; L # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA
+0BAE..0BB5 ; L # Lo [8] TAMIL LETTER MA..TAMIL LETTER VA
+0BB7..0BB9 ; L # Lo [3] TAMIL LETTER SSA..TAMIL LETTER HA
+0BBE..0BBF ; L # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
+0BC1..0BC2 ; L # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
+0BC6..0BC8 ; L # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
+0BCA..0BCC ; L # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0BD7 ; L # Mc TAMIL AU LENGTH MARK
+0BE7..0BEF ; L # Nd [9] TAMIL DIGIT ONE..TAMIL DIGIT NINE
+0BF0..0BF2 ; L # No [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND
+0C01..0C03 ; L # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+0C05..0C0C ; L # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
+0C0E..0C10 ; L # Lo [3] TELUGU LETTER E..TELUGU LETTER AI
+0C12..0C28 ; L # Lo [23] TELUGU LETTER O..TELUGU LETTER NA
+0C2A..0C33 ; L # Lo [10] TELUGU LETTER PA..TELUGU LETTER LLA
+0C35..0C39 ; L # Lo [5] TELUGU LETTER VA..TELUGU LETTER HA
+0C41..0C44 ; L # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
+0C60..0C61 ; L # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+0C66..0C6F ; L # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
+0C82..0C83 ; L # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+0C85..0C8C ; L # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
+0C8E..0C90 ; L # Lo [3] KANNADA LETTER E..KANNADA LETTER AI
+0C92..0CA8 ; L # Lo [23] KANNADA LETTER O..KANNADA LETTER NA
+0CAA..0CB3 ; L # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA
+0CB5..0CB9 ; L # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA
+0CBD ; L # Lo KANNADA SIGN AVAGRAHA
+0CBE ; L # Mc KANNADA VOWEL SIGN AA
+0CBF ; L # Mn KANNADA VOWEL SIGN I
+0CC0..0CC4 ; L # Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
+0CC6 ; L # Mn KANNADA VOWEL SIGN E
+0CC7..0CC8 ; L # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB ; L # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+0CD5..0CD6 ; L # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0CDE ; L # Lo KANNADA LETTER FA
+0CE0..0CE1 ; L # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
+0CE6..0CEF ; L # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
+0D02..0D03 ; L # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+0D05..0D0C ; L # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D0E..0D10 ; L # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
+0D12..0D28 ; L # Lo [23] MALAYALAM LETTER O..MALAYALAM LETTER NA
+0D2A..0D39 ; L # Lo [16] MALAYALAM LETTER PA..MALAYALAM LETTER HA
+0D3E..0D40 ; L # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
+0D46..0D48 ; L # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
+0D4A..0D4C ; L # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0D57 ; L # Mc MALAYALAM AU LENGTH MARK
+0D60..0D61 ; L # Lo [2] MALAYALAM LETTER VOCALIC RR..MALAYALAM LETTER VOCALIC LL
+0D66..0D6F ; L # Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
+0D82..0D83 ; L # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
+0D85..0D96 ; L # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
+0D9A..0DB1 ; L # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
+0DB3..0DBB ; L # Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
+0DBD ; L # Lo SINHALA LETTER DANTAJA LAYANNA
+0DC0..0DC6 ; L # Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
+0DCF..0DD1 ; L # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD8..0DDF ; L # Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
+0DF2..0DF3 ; L # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0DF4 ; L # Po SINHALA PUNCTUATION KUNDDALIYA
+0E01..0E30 ; L # Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
+0E32..0E33 ; L # Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
+0E40..0E45 ; L # Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
+0E46 ; L # Lm THAI CHARACTER MAIYAMOK
+0E4F ; L # Po THAI CHARACTER FONGMAN
+0E50..0E59 ; L # Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE
+0E5A..0E5B ; L # Po [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT
+0E81..0E82 ; L # Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG
+0E84 ; L # Lo LAO LETTER KHO TAM
+0E87..0E88 ; L # Lo [2] LAO LETTER NGO..LAO LETTER CO
+0E8A ; L # Lo LAO LETTER SO TAM
+0E8D ; L # Lo LAO LETTER NYO
+0E94..0E97 ; L # Lo [4] LAO LETTER DO..LAO LETTER THO TAM
+0E99..0E9F ; L # Lo [7] LAO LETTER NO..LAO LETTER FO SUNG
+0EA1..0EA3 ; L # Lo [3] LAO LETTER MO..LAO LETTER LO LING
+0EA5 ; L # Lo LAO LETTER LO LOOT
+0EA7 ; L # Lo LAO LETTER WO
+0EAA..0EAB ; L # Lo [2] LAO LETTER SO SUNG..LAO LETTER HO SUNG
+0EAD..0EB0 ; L # Lo [4] LAO LETTER O..LAO VOWEL SIGN A
+0EB2..0EB3 ; L # Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
+0EBD ; L # Lo LAO SEMIVOWEL SIGN NYO
+0EC0..0EC4 ; L # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+0EC6 ; L # Lm LAO KO LA
+0ED0..0ED9 ; L # Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE
+0EDC..0EDD ; L # Lo [2] LAO HO NO..LAO HO MO
+0F00 ; L # Lo TIBETAN SYLLABLE OM
+0F01..0F03 ; L # So [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
+0F04..0F12 ; L # Po [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD
+0F13..0F17 ; L # So [5] TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
+0F1A..0F1F ; L # So [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG
+0F20..0F29 ; L # Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
+0F2A..0F33 ; L # No [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO
+0F34 ; L # So TIBETAN MARK BSDUS RTAGS
+0F36 ; L # So TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
+0F38 ; L # So TIBETAN MARK CHE MGO
+0F3E..0F3F ; L # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
+0F40..0F47 ; L # Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA
+0F49..0F6A ; L # Lo [34] TIBETAN LETTER NYA..TIBETAN LETTER FIXED-FORM RA
+0F7F ; L # Mc TIBETAN SIGN RNAM BCAD
+0F85 ; L # Po TIBETAN MARK PALUTA
+0F88..0F8B ; L # Lo [4] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN GRU MED RGYINGS
+0FBE..0FC5 ; L # So [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE
+0FC7..0FCC ; L # So [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL
+0FCF ; L # So TIBETAN SIGN RDEL NAG GSUM
+1000..1021 ; L # Lo [34] MYANMAR LETTER KA..MYANMAR LETTER A
+1023..1027 ; L # Lo [5] MYANMAR LETTER I..MYANMAR LETTER E
+1029..102A ; L # Lo [2] MYANMAR LETTER O..MYANMAR LETTER AU
+102C ; L # Mc MYANMAR VOWEL SIGN AA
+1031 ; L # Mc MYANMAR VOWEL SIGN E
+1038 ; L # Mc MYANMAR SIGN VISARGA
+1040..1049 ; L # Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
+104A..104F ; L # Po [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE
+1050..1055 ; L # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
+1056..1057 ; L # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
+10A0..10C5 ; L # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10D0..10F8 ; L # Lo [41] GEORGIAN LETTER AN..GEORGIAN LETTER ELIFI
+10FB ; L # Po GEORGIAN PARAGRAPH SEPARATOR
+1100..1159 ; L # Lo [90] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG YEORINHIEUH
+115F..11A2 ; L # Lo [68] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG SSANGARAEA
+11A8..11F9 ; L # Lo [82] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG YEORINHIEUH
+1200..1206 ; L # Lo [7] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE HO
+1208..1246 ; L # Lo [63] ETHIOPIC SYLLABLE LA..ETHIOPIC SYLLABLE QO
+1248 ; L # Lo ETHIOPIC SYLLABLE QWA
+124A..124D ; L # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
+1250..1256 ; L # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
+1258 ; L # Lo ETHIOPIC SYLLABLE QHWA
+125A..125D ; L # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
+1260..1286 ; L # Lo [39] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XO
+1288 ; L # Lo ETHIOPIC SYLLABLE XWA
+128A..128D ; L # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
+1290..12AE ; L # Lo [31] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KO
+12B0 ; L # Lo ETHIOPIC SYLLABLE KWA
+12B2..12B5 ; L # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
+12B8..12BE ; L # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
+12C0 ; L # Lo ETHIOPIC SYLLABLE KXWA
+12C2..12C5 ; L # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
+12C8..12CE ; L # Lo [7] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE WO
+12D0..12D6 ; L # Lo [7] ETHIOPIC SYLLABLE PHARYNGEAL A..ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8..12EE ; L # Lo [23] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE YO
+12F0..130E ; L # Lo [31] ETHIOPIC SYLLABLE DA..ETHIOPIC SYLLABLE GO
+1310 ; L # Lo ETHIOPIC SYLLABLE GWA
+1312..1315 ; L # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
+1318..131E ; L # Lo [7] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE GGO
+1320..1346 ; L # Lo [39] ETHIOPIC SYLLABLE THA..ETHIOPIC SYLLABLE TZO
+1348..135A ; L # Lo [19] ETHIOPIC SYLLABLE FA..ETHIOPIC SYLLABLE FYA
+1361..1368 ; L # Po [8] ETHIOPIC WORDSPACE..ETHIOPIC PARAGRAPH SEPARATOR
+1369..1371 ; L # Nd [9] ETHIOPIC DIGIT ONE..ETHIOPIC DIGIT NINE
+1372..137C ; L # No [11] ETHIOPIC NUMBER TEN..ETHIOPIC NUMBER TEN THOUSAND
+13A0..13F4 ; L # Lo [85] CHEROKEE LETTER A..CHEROKEE LETTER YV
+1401..166C ; L # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
+166D..166E ; L # Po [2] CANADIAN SYLLABICS CHI SIGN..CANADIAN SYLLABICS FULL STOP
+166F..1676 ; L # Lo [8] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS NNGAA
+1681..169A ; L # Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
+16A0..16EA ; L # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
+16EB..16ED ; L # Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION
+16EE..16F0 ; L # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
+1700..170C ; L # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA
+170E..1711 ; L # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA
+1720..1731 ; L # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA
+1735..1736 ; L # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION
+1740..1751 ; L # Lo [18] BUHID LETTER A..BUHID LETTER HA
+1760..176C ; L # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
+176E..1770 ; L # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
+1780..17B3 ; L # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
+17B4..17B5 ; L # Cf [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+17B6 ; L # Mc KHMER VOWEL SIGN AA
+17BE..17C5 ; L # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
+17C7..17C8 ; L # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
+17D4..17D6 ; L # Po [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH
+17D7 ; L # Lm KHMER SIGN LEK TOO
+17D8..17DA ; L # Po [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT
+17DC ; L # Lo KHMER SIGN AVAKRAHASANYA
+17E0..17E9 ; L # Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE
+1810..1819 ; L # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
+1820..1842 ; L # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
+1843 ; L # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844..1877 ; L # Lo [52] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER MANCHU ZHA
+1880..18A8 ; L # Lo [41] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER MANCHU ALI GALI BHA
+1900..191C ; L # Lo [29] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER HA
+1923..1926 ; L # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
+1930..1931 ; L # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
+1933..1938 ; L # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
+1946..194F ; L # Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE
+1950..196D ; L # Lo [30] TAI LE LETTER KA..TAI LE LETTER AI
+1970..1974 ; L # Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
+1D00..1D2B ; L # L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
+1D2C..1D61 ; L # Lm [54] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL CHI
+1D62..1D6B ; L # L& [10] LATIN SUBSCRIPT SMALL LETTER I..LATIN SMALL LETTER UE
+1E00..1E9B ; L # L& [156] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1EA0..1EF9 ; L # L& [90] LATIN CAPITAL LETTER A WITH DOT BELOW..LATIN SMALL LETTER Y WITH TILDE
+1F00..1F15 ; L # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D ; L # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45 ; L # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D ; L # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57 ; L # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59 ; L # L& GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B ; L # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D ; L # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D ; L # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4 ; L # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC ; L # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBE ; L # L& GREEK PROSGEGRAMMENI
+1FC2..1FC4 ; L # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC ; L # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD0..1FD3 ; L # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB ; L # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE0..1FEC ; L # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FF2..1FF4 ; L # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC ; L # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+200E ; L # Cf LEFT-TO-RIGHT MARK
+2071 ; L # L& SUPERSCRIPT LATIN SMALL LETTER I
+207F ; L # L& SUPERSCRIPT LATIN SMALL LETTER N
+2102 ; L # L& DOUBLE-STRUCK CAPITAL C
+2107 ; L # L& EULER CONSTANT
+210A..2113 ; L # L& [10] SCRIPT SMALL G..SCRIPT SMALL L
+2115 ; L # L& DOUBLE-STRUCK CAPITAL N
+2119..211D ; L # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2124 ; L # L& DOUBLE-STRUCK CAPITAL Z
+2126 ; L # L& OHM SIGN
+2128 ; L # L& BLACK-LETTER CAPITAL Z
+212A..212D ; L # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
+212F..2131 ; L # L& [3] SCRIPT SMALL E..SCRIPT CAPITAL F
+2133..2134 ; L # L& [2] SCRIPT CAPITAL M..SCRIPT SMALL O
+2135..2138 ; L # Lo [4] ALEF SYMBOL..DALET SYMBOL
+2139 ; L # L& INFORMATION SOURCE
+213D..213F ; L # L& [3] DOUBLE-STRUCK SMALL GAMMA..DOUBLE-STRUCK CAPITAL PI
+2145..2149 ; L # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+2160..2183 ; L # Nl [36] ROMAN NUMERAL ONE..ROMAN NUMERAL REVERSED ONE HUNDRED
+2336..237A ; L # So [69] APL FUNCTIONAL SYMBOL I-BEAM..APL FUNCTIONAL SYMBOL ALPHA
+2395 ; L # So APL FUNCTIONAL SYMBOL QUAD
+249C..24E9 ; L # So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
+2800..28FF ; L # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678
+3005 ; L # Lm IDEOGRAPHIC ITERATION MARK
+3006 ; L # Lo IDEOGRAPHIC CLOSING MARK
+3007 ; L # Nl IDEOGRAPHIC NUMBER ZERO
+3021..3029 ; L # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
+3031..3035 ; L # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+3038..303A ; L # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+303B ; L # Lm VERTICAL IDEOGRAPHIC ITERATION MARK
+303C ; L # Lo MASU MARK
+3041..3096 ; L # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
+309D..309E ; L # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+309F ; L # Lo HIRAGANA DIGRAPH YORI
+30A1..30FA ; L # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
+30FC..30FE ; L # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
+30FF ; L # Lo KATAKANA DIGRAPH KOTO
+3105..312C ; L # Lo [40] BOPOMOFO LETTER B..BOPOMOFO LETTER GN
+3131..318E ; L # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+3190..3191 ; L # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
+3192..3195 ; L # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
+3196..319F ; L # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
+31A0..31B7 ; L # Lo [24] BOPOMOFO LETTER BU..BOPOMOFO FINAL LETTER H
+31F0..31FF ; L # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
+3200..321C ; L # So [29] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED HANGUL CIEUC U
+3220..3229 ; L # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
+322A..3243 ; L # So [26] PARENTHESIZED IDEOGRAPH MOON..PARENTHESIZED IDEOGRAPH REACH
+3260..327B ; L # So [28] CIRCLED HANGUL KIYEOK..CIRCLED HANGUL HIEUH A
+327F ; L # So KOREAN STANDARD SYMBOL
+3280..3289 ; L # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
+328A..32B0 ; L # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
+32C0..32CB ; L # So [12] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
+32D0..32FE ; L # So [47] CIRCLED KATAKANA A..CIRCLED KATAKANA WO
+3300..3376 ; L # So [119] SQUARE APAATO..SQUARE PC
+337B..33DD ; L # So [99] SQUARE ERA NAME HEISEI..SQUARE WB
+33E0..33FE ; L # So [31] IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
+3400..4DB5 ; L # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
+4E00..9FA5 ; L # Lo [20902] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FA5
+A000..A48C ; L # Lo [1165] YI SYLLABLE IT..YI SYLLABLE YYR
+AC00..D7A3 ; L # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+E000..F8FF ; L # Co [6400] <private-use-E000>..<private-use-F8FF>
+F900..FA2D ; L # Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA2D
+FA30..FA6A ; L # Lo [59] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6A
+FB00..FB06 ; L # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17 ; L # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FF21..FF3A ; L # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF41..FF5A ; L # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+FF66..FF6F ; L # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
+FF70 ; L # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71..FF9D ; L # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+FF9E..FF9F ; L # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFA0..FFBE ; L # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7 ; L # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF ; L # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7 ; L # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+10000..1000B ; L # Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
+1000D..10026 ; L # Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
+10028..1003A ; L # Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
+1003C..1003D ; L # Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
+1003F..1004D ; L # Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
+10050..1005D ; L # Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
+10080..100FA ; L # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
+10100 ; L # Po AEGEAN WORD SEPARATOR LINE
+10102 ; L # So AEGEAN CHECK MARK
+10107..10133 ; L # No [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND
+10137..1013F ; L # So [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT
+10300..1031E ; L # Lo [31] OLD ITALIC LETTER A..OLD ITALIC LETTER UU
+10320..10323 ; L # No [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY
+10330..10349 ; L # Lo [26] GOTHIC LETTER AHSA..GOTHIC LETTER OTHAL
+1034A ; L # Nl GOTHIC LETTER NINE HUNDRED
+10380..1039D ; L # Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
+1039F ; L # Po UGARITIC WORD DIVIDER
+10400..1044F ; L # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
+10450..1049D ; L # Lo [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO
+104A0..104A9 ; L # Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE
+1D000..1D0F5 ; L # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
+1D100..1D126 ; L # So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2
+1D12A..1D164 ; L # So [59] MUSICAL SYMBOL DOUBLE SHARP..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D165..1D166 ; L # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
+1D16A..1D16C ; L # So [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3
+1D16D..1D172 ; L # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
+1D183..1D184 ; L # So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN
+1D18C..1D1A9 ; L # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH
+1D1AE..1D1DD ; L # So [48] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL PES SUBPUNCTIS
+1D400..1D454 ; L # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C ; L # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F ; L # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2 ; L # L& MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6 ; L # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC ; L # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9 ; L # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB ; L # L& MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3 ; L # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505 ; L # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A ; L # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514 ; L # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C ; L # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539 ; L # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E ; L # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544 ; L # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546 ; L # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550 ; L # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A3 ; L # L& [338] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL MONOSPACE SMALL Z
+1D6A8..1D6C0 ; L # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C1 ; L # Sm MATHEMATICAL BOLD NABLA
+1D6C2..1D6DA ; L # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DB ; L # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+1D6DC..1D6FA ; L # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FB ; L # Sm MATHEMATICAL ITALIC NABLA
+1D6FC..1D714 ; L # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D715 ; L # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+1D716..1D734 ; L # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D735 ; L # Sm MATHEMATICAL BOLD ITALIC NABLA
+1D736..1D74E ; L # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D74F ; L # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+1D750..1D76E ; L # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D76F ; L # Sm MATHEMATICAL SANS-SERIF BOLD NABLA
+1D770..1D788 ; L # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D789 ; L # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+1D78A..1D7A8 ; L # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7A9 ; L # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+1D7AA..1D7C2 ; L # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C3 ; L # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+1D7C4..1D7C9 ; L # L& [6] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
+20000..2A6D6 ; L # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+2F800..2FA1D ; L # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+F0000..FFFFD ; L # Co [65534] <private-use-F0000>..<private-use-FFFFD>
+100000..10FFFD; L # Co [65534] <private-use-100000>..<private-use-10FFFD>
+
+# The above property value applies to 873851 code points not listed here.
+# Total code points: 1102638
+
+# ================================================
+
+# Bidi_Class=Right_To_Left
+
+0590 ; R # Cn <reserved-0590>
+05A2 ; R # Cn <reserved-05A2>
+05BA ; R # Cn <reserved-05BA>
+05BE ; R # Po HEBREW PUNCTUATION MAQAF
+05C0 ; R # Po HEBREW PUNCTUATION PASEQ
+05C3 ; R # Po HEBREW PUNCTUATION SOF PASUQ
+05C5..05CF ; R # Cn [11] <reserved-05C5>..<reserved-05CF>
+05D0..05EA ; R # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
+05EB..05EF ; R # Cn [5] <reserved-05EB>..<reserved-05EF>
+05F0..05F2 ; R # Lo [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD
+05F3..05F4 ; R # Po [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM
+05F5..05FF ; R # Cn [11] <reserved-05F5>..<reserved-05FF>
+07C0..08FF ; R # Cn [320] <reserved-07C0>..<reserved-08FF>
+200F ; R # Cf RIGHT-TO-LEFT MARK
+FB1D ; R # Lo HEBREW LETTER YOD WITH HIRIQ
+FB1F..FB28 ; R # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
+FB2A..FB36 ; R # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB37 ; R # Cn <reserved-FB37>
+FB38..FB3C ; R # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3D ; R # Cn <reserved-FB3D>
+FB3E ; R # Lo HEBREW LETTER MEM WITH DAGESH
+FB3F ; R # Cn <reserved-FB3F>
+FB40..FB41 ; R # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB42 ; R # Cn <reserved-FB42>
+FB43..FB44 ; R # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB45 ; R # Cn <reserved-FB45>
+FB46..FB4F ; R # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED
+10800..10805 ; R # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
+10806..10807 ; R # Cn [2] <reserved-10806>..<reserved-10807>
+10808 ; R # Lo CYPRIOT SYLLABLE JO
+10809 ; R # Cn <reserved-10809>
+1080A..10835 ; R # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
+10836 ; R # Cn <reserved-10836>
+10837..10838 ; R # Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
+10839..1083B ; R # Cn [3] <reserved-10839>..<reserved-1083B>
+1083C ; R # Lo CYPRIOT SYLLABLE ZA
+1083D..1083E ; R # Cn [2] <reserved-1083D>..<reserved-1083E>
+1083F ; R # Lo CYPRIOT SYLLABLE ZO
+10840..10FFF ; R # Cn [1984] <reserved-10840>..<reserved-10FFF>
+
+# Total code points: 2483
+
+# ================================================
+
+# Bidi_Class=European_Number
+
+0030..0039 ; EN # Nd [10] DIGIT ZERO..DIGIT NINE
+00B2..00B3 ; EN # No [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE
+00B9 ; EN # No SUPERSCRIPT ONE
+06F0..06F9 ; EN # Nd [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE
+2070 ; EN # No SUPERSCRIPT ZERO
+2074..2079 ; EN # No [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE
+2080..2089 ; EN # No [10] SUBSCRIPT ZERO..SUBSCRIPT NINE
+2488..249B ; EN # No [20] DIGIT ONE FULL STOP..NUMBER TWENTY FULL STOP
+FF10..FF19 ; EN # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
+1D7CE..1D7FF ; EN # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+
+# Total code points: 120
+
+# ================================================
+
+# Bidi_Class=European_Separator
+
+002B ; ES # Sm PLUS SIGN
+002D ; ES # Pd HYPHEN-MINUS
+FF0F ; ES # Po FULLWIDTH SOLIDUS
+
+# Total code points: 3
+
+# ================================================
+
+# Bidi_Class=European_Terminator
+
+0023 ; ET # Po NUMBER SIGN
+0024 ; ET # Sc DOLLAR SIGN
+0025 ; ET # Po PERCENT SIGN
+00A2..00A5 ; ET # Sc [4] CENT SIGN..YEN SIGN
+00B0 ; ET # So DEGREE SIGN
+00B1 ; ET # Sm PLUS-MINUS SIGN
+066A ; ET # Po ARABIC PERCENT SIGN
+09F2..09F3 ; ET # Sc [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN
+0AF1 ; ET # Sc GUJARATI RUPEE SIGN
+0BF9 ; ET # Sc TAMIL RUPEE SIGN
+0E3F ; ET # Sc THAI CURRENCY SYMBOL BAHT
+17DB ; ET # Sc KHMER CURRENCY SYMBOL RIEL
+2030..2034 ; ET # Po [5] PER MILLE SIGN..TRIPLE PRIME
+207A..207B ; ET # Sm [2] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT MINUS
+208A..208B ; ET # Sm [2] SUBSCRIPT PLUS SIGN..SUBSCRIPT MINUS
+20A0..20B1 ; ET # Sc [18] EURO-CURRENCY SIGN..PESO SIGN
+212E ; ET # So ESTIMATED SYMBOL
+2212..2213 ; ET # Sm [2] MINUS SIGN..MINUS-OR-PLUS SIGN
+FB29 ; ET # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN
+FE5F ; ET # Po SMALL NUMBER SIGN
+FE62 ; ET # Sm SMALL PLUS SIGN
+FE63 ; ET # Pd SMALL HYPHEN-MINUS
+FE69 ; ET # Sc SMALL DOLLAR SIGN
+FE6A ; ET # Po SMALL PERCENT SIGN
+FF03 ; ET # Po FULLWIDTH NUMBER SIGN
+FF04 ; ET # Sc FULLWIDTH DOLLAR SIGN
+FF05 ; ET # Po FULLWIDTH PERCENT SIGN
+FF0B ; ET # Sm FULLWIDTH PLUS SIGN
+FF0D ; ET # Pd FULLWIDTH HYPHEN-MINUS
+FFE0..FFE1 ; ET # Sc [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN
+FFE5..FFE6 ; ET # Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN
+
+# Total code points: 61
+
+# ================================================
+
+# Bidi_Class=Arabic_Number
+
+0660..0669 ; AN # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
+066B..066C ; AN # Po [2] ARABIC DECIMAL SEPARATOR..ARABIC THOUSANDS SEPARATOR
+
+# Total code points: 12
+
+# ================================================
+
+# Bidi_Class=Common_Separator
+
+002C ; CS # Po COMMA
+002E..002F ; CS # Po [2] FULL STOP..SOLIDUS
+003A ; CS # Po COLON
+00A0 ; CS # Zs NO-BREAK SPACE
+060C ; CS # Po ARABIC COMMA
+2044 ; CS # Sm FRACTION SLASH
+FE50 ; CS # Po SMALL COMMA
+FE52 ; CS # Po SMALL FULL STOP
+FE55 ; CS # Po SMALL COLON
+FF0C ; CS # Po FULLWIDTH COMMA
+FF0E ; CS # Po FULLWIDTH FULL STOP
+FF1A ; CS # Po FULLWIDTH COLON
+
+# Total code points: 13
+
+# ================================================
+
+# Bidi_Class=Paragraph_Separator
+
+000A ; B # Cc <control-000A>
+000D ; B # Cc <control-000D>
+001C..001E ; B # Cc [3] <control-001C>..<control-001E>
+0085 ; B # Cc <control-0085>
+2029 ; B # Zp PARAGRAPH SEPARATOR
+
+# Total code points: 7
+
+# ================================================
+
+# Bidi_Class=Segment_Separator
+
+0009 ; S # Cc <control-0009>
+000B ; S # Cc <control-000B>
+001F ; S # Cc <control-001F>
+
+# Total code points: 3
+
+# ================================================
+
+# Bidi_Class=White_Space
+
+000C ; WS # Cc <control-000C>
+0020 ; WS # Zs SPACE
+1680 ; WS # Zs OGHAM SPACE MARK
+180E ; WS # Zs MONGOLIAN VOWEL SEPARATOR
+2000..200A ; WS # Zs [11] EN QUAD..HAIR SPACE
+2028 ; WS # Zl LINE SEPARATOR
+202F ; WS # Zs NARROW NO-BREAK SPACE
+205F ; WS # Zs MEDIUM MATHEMATICAL SPACE
+3000 ; WS # Zs IDEOGRAPHIC SPACE
+
+# Total code points: 19
+
+# ================================================
+
+# Bidi_Class=Other_Neutral
+
+0021..0022 ; ON # Po [2] EXCLAMATION MARK..QUOTATION MARK
+0026..0027 ; ON # Po [2] AMPERSAND..APOSTROPHE
+0028 ; ON # Ps LEFT PARENTHESIS
+0029 ; ON # Pe RIGHT PARENTHESIS
+002A ; ON # Po ASTERISK
+003B ; ON # Po SEMICOLON
+003C..003E ; ON # Sm [3] LESS-THAN SIGN..GREATER-THAN SIGN
+003F..0040 ; ON # Po [2] QUESTION MARK..COMMERCIAL AT
+005B ; ON # Ps LEFT SQUARE BRACKET
+005C ; ON # Po REVERSE SOLIDUS
+005D ; ON # Pe RIGHT SQUARE BRACKET
+005E ; ON # Sk CIRCUMFLEX ACCENT
+005F ; ON # Pc LOW LINE
+0060 ; ON # Sk GRAVE ACCENT
+007B ; ON # Ps LEFT CURLY BRACKET
+007C ; ON # Sm VERTICAL LINE
+007D ; ON # Pe RIGHT CURLY BRACKET
+007E ; ON # Sm TILDE
+00A1 ; ON # Po INVERTED EXCLAMATION MARK
+00A6..00A7 ; ON # So [2] BROKEN BAR..SECTION SIGN
+00A8 ; ON # Sk DIAERESIS
+00A9 ; ON # So COPYRIGHT SIGN
+00AB ; ON # Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00AC ; ON # Sm NOT SIGN
+00AE ; ON # So REGISTERED SIGN
+00AF ; ON # Sk MACRON
+00B4 ; ON # Sk ACUTE ACCENT
+00B6 ; ON # So PILCROW SIGN
+00B7 ; ON # Po MIDDLE DOT
+00B8 ; ON # Sk CEDILLA
+00BB ; ON # Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BC..00BE ; ON # No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS
+00BF ; ON # Po INVERTED QUESTION MARK
+00D7 ; ON # Sm MULTIPLICATION SIGN
+00F7 ; ON # Sm DIVISION SIGN
+02B9..02BA ; ON # Lm [2] MODIFIER LETTER PRIME..MODIFIER LETTER DOUBLE PRIME
+02C2..02C5 ; ON # Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD
+02C6..02CF ; ON # Lm [10] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER LOW ACUTE ACCENT
+02D2..02DF ; ON # Sk [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT
+02E5..02ED ; ON # Sk [9] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER UNASPIRATED
+02EF..02FF ; ON # Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW
+0374..0375 ; ON # Sk [2] GREEK NUMERAL SIGN..GREEK LOWER NUMERAL SIGN
+037E ; ON # Po GREEK QUESTION MARK
+0384..0385 ; ON # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS
+0387 ; ON # Po GREEK ANO TELEIA
+03F6 ; ON # Sm GREEK REVERSED LUNATE EPSILON SYMBOL
+058A ; ON # Pd ARMENIAN HYPHEN
+060E..060F ; ON # So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA
+06E9 ; ON # So ARABIC PLACE OF SAJDAH
+0BF3..0BF8 ; ON # So [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN
+0BFA ; ON # So TAMIL NUMBER SIGN
+0F3A ; ON # Ps TIBETAN MARK GUG RTAGS GYON
+0F3B ; ON # Pe TIBETAN MARK GUG RTAGS GYAS
+0F3C ; ON # Ps TIBETAN MARK ANG KHANG GYON
+0F3D ; ON # Pe TIBETAN MARK ANG KHANG GYAS
+169B ; ON # Ps OGHAM FEATHER MARK
+169C ; ON # Pe OGHAM REVERSED FEATHER MARK
+17F0..17F9 ; ON # No [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON
+1800..1805 ; ON # Po [6] MONGOLIAN BIRGA..MONGOLIAN FOUR DOTS
+1806 ; ON # Pd MONGOLIAN TODO SOFT HYPHEN
+1807..180A ; ON # Po [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU
+1940 ; ON # So LIMBU SIGN LOO
+1944..1945 ; ON # Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK
+19E0..19FF ; ON # So [32] KHMER SYMBOL PATHAMASAT..KHMER SYMBOL DAP-PRAM ROC
+1FBD ; ON # Sk GREEK KORONIS
+1FBF..1FC1 ; ON # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
+1FCD..1FCF ; ON # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+1FDD..1FDF ; ON # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+1FED..1FEF ; ON # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
+1FFD..1FFE ; ON # Sk [2] GREEK OXIA..GREEK DASIA
+2010..2015 ; ON # Pd [6] HYPHEN..HORIZONTAL BAR
+2016..2017 ; ON # Po [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE
+2018 ; ON # Pi LEFT SINGLE QUOTATION MARK
+2019 ; ON # Pf RIGHT SINGLE QUOTATION MARK
+201A ; ON # Ps SINGLE LOW-9 QUOTATION MARK
+201B..201C ; ON # Pi [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK
+201D ; ON # Pf RIGHT DOUBLE QUOTATION MARK
+201E ; ON # Ps DOUBLE LOW-9 QUOTATION MARK
+201F ; ON # Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+2020..2027 ; ON # Po [8] DAGGER..HYPHENATION POINT
+2035..2038 ; ON # Po [4] REVERSED PRIME..CARET
+2039 ; ON # Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A ; ON # Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+203B..203E ; ON # Po [4] REFERENCE MARK..OVERLINE
+203F..2040 ; ON # Pc [2] UNDERTIE..CHARACTER TIE
+2041..2043 ; ON # Po [3] CARET INSERTION POINT..HYPHEN BULLET
+2045 ; ON # Ps LEFT SQUARE BRACKET WITH QUILL
+2046 ; ON # Pe RIGHT SQUARE BRACKET WITH QUILL
+2047..2051 ; ON # Po [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY
+2052 ; ON # Sm COMMERCIAL MINUS SIGN
+2053 ; ON # Po SWUNG DASH
+2054 ; ON # Pc INVERTED UNDERTIE
+2057 ; ON # Po QUADRUPLE PRIME
+207C ; ON # Sm SUPERSCRIPT EQUALS SIGN
+207D ; ON # Ps SUPERSCRIPT LEFT PARENTHESIS
+207E ; ON # Pe SUPERSCRIPT RIGHT PARENTHESIS
+208C ; ON # Sm SUBSCRIPT EQUALS SIGN
+208D ; ON # Ps SUBSCRIPT LEFT PARENTHESIS
+208E ; ON # Pe SUBSCRIPT RIGHT PARENTHESIS
+2100..2101 ; ON # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
+2103..2106 ; ON # So [4] DEGREE CELSIUS..CADA UNA
+2108..2109 ; ON # So [2] SCRUPLE..DEGREE FAHRENHEIT
+2114 ; ON # So L B BAR SYMBOL
+2116..2118 ; ON # So [3] NUMERO SIGN..SCRIPT CAPITAL P
+211E..2123 ; ON # So [6] PRESCRIPTION TAKE..VERSICLE
+2125 ; ON # So OUNCE SIGN
+2127 ; ON # So INVERTED OHM SIGN
+2129 ; ON # So TURNED GREEK SMALL LETTER IOTA
+2132 ; ON # So TURNED CAPITAL F
+213A..213B ; ON # So [2] ROTATED CAPITAL Q..FACSIMILE SIGN
+2140..2144 ; ON # Sm [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y
+214A ; ON # So PROPERTY LINE
+214B ; ON # Sm TURNED AMPERSAND
+2153..215F ; ON # No [13] VULGAR FRACTION ONE THIRD..FRACTION NUMERATOR ONE
+2190..2194 ; ON # Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
+2195..2199 ; ON # So [5] UP DOWN ARROW..SOUTH WEST ARROW
+219A..219B ; ON # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
+219C..219F ; ON # So [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
+21A0 ; ON # Sm RIGHTWARDS TWO HEADED ARROW
+21A1..21A2 ; ON # So [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
+21A3 ; ON # Sm RIGHTWARDS ARROW WITH TAIL
+21A4..21A5 ; ON # So [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
+21A6 ; ON # Sm RIGHTWARDS ARROW FROM BAR
+21A7..21AD ; ON # So [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW
+21AE ; ON # Sm LEFT RIGHT ARROW WITH STROKE
+21AF..21CD ; ON # So [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE..21CF ; ON # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
+21D0..21D1 ; ON # So [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
+21D2 ; ON # Sm RIGHTWARDS DOUBLE ARROW
+21D3 ; ON # So DOWNWARDS DOUBLE ARROW
+21D4 ; ON # Sm LEFT RIGHT DOUBLE ARROW
+21D5..21F3 ; ON # So [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW
+21F4..2211 ; ON # Sm [30] RIGHT ARROW WITH SMALL CIRCLE..N-ARY SUMMATION
+2214..22FF ; ON # Sm [236] DOT PLUS..Z NOTATION BAG MEMBERSHIP
+2300..2307 ; ON # So [8] DIAMETER SIGN..WAVY LINE
+2308..230B ; ON # Sm [4] LEFT CEILING..RIGHT FLOOR
+230C..231F ; ON # So [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER
+2320..2321 ; ON # Sm [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL
+2322..2328 ; ON # So [7] FROWN..KEYBOARD
+2329 ; ON # Ps LEFT-POINTING ANGLE BRACKET
+232A ; ON # Pe RIGHT-POINTING ANGLE BRACKET
+232B..2335 ; ON # So [11] ERASE TO THE LEFT..COUNTERSINK
+237B ; ON # So NOT CHECK MARK
+237C ; ON # Sm RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+237D..2394 ; ON # So [24] SHOULDERED OPEN BOX..SOFTWARE-FUNCTION SYMBOL
+2396..239A ; ON # So [5] DECIMAL SEPARATOR KEY SYMBOL..CLEAR SCREEN SYMBOL
+239B..23B3 ; ON # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
+23B4 ; ON # Ps TOP SQUARE BRACKET
+23B5 ; ON # Pe BOTTOM SQUARE BRACKET
+23B6 ; ON # Po BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET
+23B7..23D0 ; ON # So [26] RADICAL SYMBOL BOTTOM..VERTICAL LINE EXTENSION
+2400..2426 ; ON # So [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO
+2440..244A ; ON # So [11] OCR HOOK..OCR DOUBLE BACKSLASH
+2460..2487 ; ON # No [40] CIRCLED DIGIT ONE..PARENTHESIZED NUMBER TWENTY
+24EA..24FF ; ON # No [22] CIRCLED DIGIT ZERO..NEGATIVE CIRCLED DIGIT ZERO
+2500..25B6 ; ON # So [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE
+25B7 ; ON # Sm WHITE RIGHT-POINTING TRIANGLE
+25B8..25C0 ; ON # So [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE
+25C1 ; ON # Sm WHITE LEFT-POINTING TRIANGLE
+25C2..25F7 ; ON # So [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+25F8..25FF ; ON # Sm [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE
+2600..2617 ; ON # So [24] BLACK SUN WITH RAYS..BLACK SHOGI PIECE
+2619..266E ; ON # So [86] REVERSED ROTATED FLORAL HEART BULLET..MUSIC NATURAL SIGN
+266F ; ON # Sm MUSIC SHARP SIGN
+2670..267D ; ON # So [14] WEST SYRIAC CROSS..PARTIALLY-RECYCLED PAPER SYMBOL
+2680..2691 ; ON # So [18] DIE FACE-1..BLACK FLAG
+26A0..26A1 ; ON # So [2] WARNING SIGN..HIGH VOLTAGE SIGN
+2701..2704 ; ON # So [4] UPPER BLADE SCISSORS..WHITE SCISSORS
+2706..2709 ; ON # So [4] TELEPHONE LOCATION SIGN..ENVELOPE
+270C..2727 ; ON # So [28] VICTORY HAND..WHITE FOUR POINTED STAR
+2729..274B ; ON # So [35] STRESS OUTLINED WHITE STAR..HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+274D ; ON # So SHADOWED WHITE CIRCLE
+274F..2752 ; ON # So [4] LOWER RIGHT DROP-SHADOWED WHITE SQUARE..UPPER RIGHT SHADOWED WHITE SQUARE
+2756 ; ON # So BLACK DIAMOND MINUS WHITE X
+2758..275E ; ON # So [7] LIGHT VERTICAL BAR..HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
+2761..2767 ; ON # So [7] CURVED STEM PARAGRAPH SIGN ORNAMENT..ROTATED FLORAL HEART BULLET
+2768 ; ON # Ps MEDIUM LEFT PARENTHESIS ORNAMENT
+2769 ; ON # Pe MEDIUM RIGHT PARENTHESIS ORNAMENT
+276A ; ON # Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+276B ; ON # Pe MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+276C ; ON # Ps MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+276D ; ON # Pe MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+276E ; ON # Ps HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+276F ; ON # Pe HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+2770 ; ON # Ps HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+2771 ; ON # Pe HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+2772 ; ON # Ps LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+2773 ; ON # Pe LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+2774 ; ON # Ps MEDIUM LEFT CURLY BRACKET ORNAMENT
+2775 ; ON # Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT
+2776..2793 ; ON # No [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
+2794 ; ON # So HEAVY WIDE-HEADED RIGHTWARDS ARROW
+2798..27AF ; ON # So [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27B1..27BE ; ON # So [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW
+27D0..27E5 ; ON # Sm [22] WHITE DIAMOND WITH CENTRED DOT..WHITE SQUARE WITH RIGHTWARDS TICK
+27E6 ; ON # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7 ; ON # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8 ; ON # Ps MATHEMATICAL LEFT ANGLE BRACKET
+27E9 ; ON # Pe MATHEMATICAL RIGHT ANGLE BRACKET
+27EA ; ON # Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB ; ON # Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27F0..27FF ; ON # Sm [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW
+2900..2982 ; ON # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON
+2983 ; ON # Ps LEFT WHITE CURLY BRACKET
+2984 ; ON # Pe RIGHT WHITE CURLY BRACKET
+2985 ; ON # Ps LEFT WHITE PARENTHESIS
+2986 ; ON # Pe RIGHT WHITE PARENTHESIS
+2987 ; ON # Ps Z NOTATION LEFT IMAGE BRACKET
+2988 ; ON # Pe Z NOTATION RIGHT IMAGE BRACKET
+2989 ; ON # Ps Z NOTATION LEFT BINDING BRACKET
+298A ; ON # Pe Z NOTATION RIGHT BINDING BRACKET
+298B ; ON # Ps LEFT SQUARE BRACKET WITH UNDERBAR
+298C ; ON # Pe RIGHT SQUARE BRACKET WITH UNDERBAR
+298D ; ON # Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E ; ON # Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F ; ON # Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990 ; ON # Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991 ; ON # Ps LEFT ANGLE BRACKET WITH DOT
+2992 ; ON # Pe RIGHT ANGLE BRACKET WITH DOT
+2993 ; ON # Ps LEFT ARC LESS-THAN BRACKET
+2994 ; ON # Pe RIGHT ARC GREATER-THAN BRACKET
+2995 ; ON # Ps DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996 ; ON # Pe DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997 ; ON # Ps LEFT BLACK TORTOISE SHELL BRACKET
+2998 ; ON # Pe RIGHT BLACK TORTOISE SHELL BRACKET
+2999..29D7 ; ON # Sm [63] DOTTED FENCE..BLACK HOURGLASS
+29D8 ; ON # Ps LEFT WIGGLY FENCE
+29D9 ; ON # Pe RIGHT WIGGLY FENCE
+29DA ; ON # Ps LEFT DOUBLE WIGGLY FENCE
+29DB ; ON # Pe RIGHT DOUBLE WIGGLY FENCE
+29DC..29FB ; ON # Sm [32] INCOMPLETE INFINITY..TRIPLE PLUS
+29FC ; ON # Ps LEFT-POINTING CURVED ANGLE BRACKET
+29FD ; ON # Pe RIGHT-POINTING CURVED ANGLE BRACKET
+29FE..2AFF ; ON # Sm [258] TINY..N-ARY WHITE VERTICAL BAR
+2B00..2B0D ; ON # So [14] NORTH EAST WHITE ARROW..UP DOWN BLACK ARROW
+2E80..2E99 ; ON # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP
+2E9B..2EF3 ; ON # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
+2F00..2FD5 ; ON # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
+2FF0..2FFB ; ON # So [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
+3001..3003 ; ON # Po [3] IDEOGRAPHIC COMMA..DITTO MARK
+3004 ; ON # So JAPANESE INDUSTRIAL STANDARD SYMBOL
+3008 ; ON # Ps LEFT ANGLE BRACKET
+3009 ; ON # Pe RIGHT ANGLE BRACKET
+300A ; ON # Ps LEFT DOUBLE ANGLE BRACKET
+300B ; ON # Pe RIGHT DOUBLE ANGLE BRACKET
+300C ; ON # Ps LEFT CORNER BRACKET
+300D ; ON # Pe RIGHT CORNER BRACKET
+300E ; ON # Ps LEFT WHITE CORNER BRACKET
+300F ; ON # Pe RIGHT WHITE CORNER BRACKET
+3010 ; ON # Ps LEFT BLACK LENTICULAR BRACKET
+3011 ; ON # Pe RIGHT BLACK LENTICULAR BRACKET
+3012..3013 ; ON # So [2] POSTAL MARK..GETA MARK
+3014 ; ON # Ps LEFT TORTOISE SHELL BRACKET
+3015 ; ON # Pe RIGHT TORTOISE SHELL BRACKET
+3016 ; ON # Ps LEFT WHITE LENTICULAR BRACKET
+3017 ; ON # Pe RIGHT WHITE LENTICULAR BRACKET
+3018 ; ON # Ps LEFT WHITE TORTOISE SHELL BRACKET
+3019 ; ON # Pe RIGHT WHITE TORTOISE SHELL BRACKET
+301A ; ON # Ps LEFT WHITE SQUARE BRACKET
+301B ; ON # Pe RIGHT WHITE SQUARE BRACKET
+301C ; ON # Pd WAVE DASH
+301D ; ON # Ps REVERSED DOUBLE PRIME QUOTATION MARK
+301E..301F ; ON # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
+3020 ; ON # So POSTAL MARK FACE
+3030 ; ON # Pd WAVY DASH
+3036..3037 ; ON # So [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
+303D ; ON # Po PART ALTERNATION MARK
+303E..303F ; ON # So [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE
+309B..309C ; ON # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+30A0 ; ON # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN
+30FB ; ON # Pc KATAKANA MIDDLE DOT
+321D..321E ; ON # So [2] PARENTHESIZED KOREAN CHARACTER OJEON..PARENTHESIZED KOREAN CHARACTER O HU
+3250 ; ON # So PARTNERSHIP SIGN
+3251..325F ; ON # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE
+327C..327D ; ON # So [2] CIRCLED KOREAN CHARACTER CHAMKO..CIRCLED KOREAN CHARACTER JUEUI
+32B1..32BF ; ON # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
+32CC..32CF ; ON # So [4] SQUARE HG..LIMITED LIABILITY SIGN
+3377..337A ; ON # So [4] SQUARE DM..SQUARE IU
+33DE..33DF ; ON # So [2] SQUARE V OVER M..SQUARE A OVER M
+33FF ; ON # So SQUARE GAL
+4DC0..4DFF ; ON # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
+A490..A4C6 ; ON # So [55] YI RADICAL QOT..YI RADICAL KE
+FD3E ; ON # Ps ORNATE LEFT PARENTHESIS
+FD3F ; ON # Pe ORNATE RIGHT PARENTHESIS
+FDFD ; ON # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
+FE30 ; ON # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+FE31..FE32 ; ON # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
+FE33..FE34 ; ON # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE35 ; ON # Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+FE36 ; ON # Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+FE37 ; ON # Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+FE38 ; ON # Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+FE39 ; ON # Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+FE3A ; ON # Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+FE3B ; ON # Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+FE3C ; ON # Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+FE3D ; ON # Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+FE3E ; ON # Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+FE3F ; ON # Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+FE40 ; ON # Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+FE41 ; ON # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+FE42 ; ON # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+FE43 ; ON # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+FE44 ; ON # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FE45..FE46 ; ON # Po [2] SESAME DOT..WHITE SESAME DOT
+FE47 ; ON # Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+FE48 ; ON # Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+FE49..FE4C ; ON # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE
+FE4D..FE4F ; ON # Pc [3] DASHED LOW LINE..WAVY LOW LINE
+FE51 ; ON # Po SMALL IDEOGRAPHIC COMMA
+FE54 ; ON # Po SMALL SEMICOLON
+FE56..FE57 ; ON # Po [2] SMALL QUESTION MARK..SMALL EXCLAMATION MARK
+FE58 ; ON # Pd SMALL EM DASH
+FE59 ; ON # Ps SMALL LEFT PARENTHESIS
+FE5A ; ON # Pe SMALL RIGHT PARENTHESIS
+FE5B ; ON # Ps SMALL LEFT CURLY BRACKET
+FE5C ; ON # Pe SMALL RIGHT CURLY BRACKET
+FE5D ; ON # Ps SMALL LEFT TORTOISE SHELL BRACKET
+FE5E ; ON # Pe SMALL RIGHT TORTOISE SHELL BRACKET
+FE60..FE61 ; ON # Po [2] SMALL AMPERSAND..SMALL ASTERISK
+FE64..FE66 ; ON # Sm [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN
+FE68 ; ON # Po SMALL REVERSE SOLIDUS
+FE6B ; ON # Po SMALL COMMERCIAL AT
+FF01..FF02 ; ON # Po [2] FULLWIDTH EXCLAMATION MARK..FULLWIDTH QUOTATION MARK
+FF06..FF07 ; ON # Po [2] FULLWIDTH AMPERSAND..FULLWIDTH APOSTROPHE
+FF08 ; ON # Ps FULLWIDTH LEFT PARENTHESIS
+FF09 ; ON # Pe FULLWIDTH RIGHT PARENTHESIS
+FF0A ; ON # Po FULLWIDTH ASTERISK
+FF1B ; ON # Po FULLWIDTH SEMICOLON
+FF1C..FF1E ; ON # Sm [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN
+FF1F..FF20 ; ON # Po [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT
+FF3B ; ON # Ps FULLWIDTH LEFT SQUARE BRACKET
+FF3C ; ON # Po FULLWIDTH REVERSE SOLIDUS
+FF3D ; ON # Pe FULLWIDTH RIGHT SQUARE BRACKET
+FF3E ; ON # Sk FULLWIDTH CIRCUMFLEX ACCENT
+FF3F ; ON # Pc FULLWIDTH LOW LINE
+FF40 ; ON # Sk FULLWIDTH GRAVE ACCENT
+FF5B ; ON # Ps FULLWIDTH LEFT CURLY BRACKET
+FF5C ; ON # Sm FULLWIDTH VERTICAL LINE
+FF5D ; ON # Pe FULLWIDTH RIGHT CURLY BRACKET
+FF5E ; ON # Sm FULLWIDTH TILDE
+FF5F ; ON # Ps FULLWIDTH LEFT WHITE PARENTHESIS
+FF60 ; ON # Pe FULLWIDTH RIGHT WHITE PARENTHESIS
+FF61 ; ON # Po HALFWIDTH IDEOGRAPHIC FULL STOP
+FF62 ; ON # Ps HALFWIDTH LEFT CORNER BRACKET
+FF63 ; ON # Pe HALFWIDTH RIGHT CORNER BRACKET
+FF64 ; ON # Po HALFWIDTH IDEOGRAPHIC COMMA
+FF65 ; ON # Pc HALFWIDTH KATAKANA MIDDLE DOT
+FFE2 ; ON # Sm FULLWIDTH NOT SIGN
+FFE3 ; ON # Sk FULLWIDTH MACRON
+FFE4 ; ON # So FULLWIDTH BROKEN BAR
+FFE8 ; ON # So HALFWIDTH FORMS LIGHT VERTICAL
+FFE9..FFEC ; ON # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW
+FFED..FFEE ; ON # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
+FFF9..FFFB ; ON # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR
+FFFC..FFFD ; ON # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER
+10101 ; ON # Po AEGEAN WORD SEPARATOR DOT
+1D300..1D356 ; ON # So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING
+
+# Total code points: 2793
+
+# ================================================
+
+# Bidi_Class=Boundary_Neutral
+
+0000..0008 ; BN # Cc [9] <control-0000>..<control-0008>
+000E..001B ; BN # Cc [14] <control-000E>..<control-001B>
+007F..0084 ; BN # Cc [6] <control-007F>..<control-0084>
+0086..009F ; BN # Cc [26] <control-0086>..<control-009F>
+00AD ; BN # Cf SOFT HYPHEN
+070F ; BN # Cf SYRIAC ABBREVIATION MARK
+200B..200D ; BN # Cf [3] ZERO WIDTH SPACE..ZERO WIDTH JOINER
+2060..2063 ; BN # Cf [4] WORD JOINER..INVISIBLE SEPARATOR
+2064..2069 ; BN # Cn [6] <reserved-2064>..<reserved-2069>
+206A..206F ; BN # Cf [6] INHIBIT SYMMETRIC SWAPPING..NOMINAL DIGIT SHAPES
+FDD0..FDEF ; BN # Cn [32] <noncharacter-FDD0>..<noncharacter-FDEF>
+FEFF ; BN # Cf ZERO WIDTH NO-BREAK SPACE
+FFF0..FFF8 ; BN # Cn [9] <reserved-FFF0>..<reserved-FFF8>
+FFFE..FFFF ; BN # Cn [2] <noncharacter-FFFE>..<noncharacter-FFFF>
+1D173..1D17A ; BN # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
+1FFFE..1FFFF ; BN # Cn [2] <noncharacter-1FFFE>..<noncharacter-1FFFF>
+2FFFE..2FFFF ; BN # Cn [2] <noncharacter-2FFFE>..<noncharacter-2FFFF>
+3FFFE..3FFFF ; BN # Cn [2] <noncharacter-3FFFE>..<noncharacter-3FFFF>
+4FFFE..4FFFF ; BN # Cn [2] <noncharacter-4FFFE>..<noncharacter-4FFFF>
+5FFFE..5FFFF ; BN # Cn [2] <noncharacter-5FFFE>..<noncharacter-5FFFF>
+6FFFE..6FFFF ; BN # Cn [2] <noncharacter-6FFFE>..<noncharacter-6FFFF>
+7FFFE..7FFFF ; BN # Cn [2] <noncharacter-7FFFE>..<noncharacter-7FFFF>
+8FFFE..8FFFF ; BN # Cn [2] <noncharacter-8FFFE>..<noncharacter-8FFFF>
+9FFFE..9FFFF ; BN # Cn [2] <noncharacter-9FFFE>..<noncharacter-9FFFF>
+AFFFE..AFFFF ; BN # Cn [2] <noncharacter-AFFFE>..<noncharacter-AFFFF>
+BFFFE..BFFFF ; BN # Cn [2] <noncharacter-BFFFE>..<noncharacter-BFFFF>
+CFFFE..CFFFF ; BN # Cn [2] <noncharacter-CFFFE>..<noncharacter-CFFFF>
+DFFFE..E0000 ; BN # Cn [3] <noncharacter-DFFFE>..<reserved-E0000>
+E0001 ; BN # Cf LANGUAGE TAG
+E0002..E001F ; BN # Cn [30] <reserved-E0002>..<reserved-E001F>
+E0020..E007F ; BN # Cf [96] TAG SPACE..CANCEL TAG
+E0080..E00FF ; BN # Cn [128] <reserved-E0080>..<reserved-E00FF>
+E01F0..E0FFF ; BN # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
+EFFFE..EFFFF ; BN # Cn [2] <noncharacter-EFFFE>..<noncharacter-EFFFF>
+FFFFE..FFFFF ; BN # Cn [2] <noncharacter-FFFFE>..<noncharacter-FFFFF>
+10FFFE..10FFFF; BN # Cn [2] <noncharacter-10FFFE>..<noncharacter-10FFFF>
+
+# Total code points: 4016
+
+# ================================================
+
+# Bidi_Class=Nonspacing_Mark
+
+0300..0357 ; NSM # Mn [88] COMBINING GRAVE ACCENT..COMBINING RIGHT HALF RING ABOVE
+035D..036F ; NSM # Mn [19] COMBINING DOUBLE BREVE..COMBINING LATIN SMALL LETTER X
+0483..0486 ; NSM # Mn [4] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC PSILI PNEUMATA
+0488..0489 ; NSM # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
+0591..05A1 ; NSM # Mn [17] HEBREW ACCENT ETNAHTA..HEBREW ACCENT PAZER
+05A3..05B9 ; NSM # Mn [23] HEBREW ACCENT MUNAH..HEBREW POINT HOLAM
+05BB..05BD ; NSM # Mn [3] HEBREW POINT QUBUTS..HEBREW POINT METEG
+05BF ; NSM # Mn HEBREW POINT RAFE
+05C1..05C2 ; NSM # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C4 ; NSM # Mn HEBREW MARK UPPER DOT
+0610..0615 ; NSM # Mn [6] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL HIGH TAH
+064B..0658 ; NSM # Mn [14] ARABIC FATHATAN..ARABIC MARK NOON GHUNNA
+0670 ; NSM # Mn ARABIC LETTER SUPERSCRIPT ALEF
+06D6..06DC ; NSM # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+06DE ; NSM # Me ARABIC START OF RUB EL HIZB
+06DF..06E4 ; NSM # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
+06E7..06E8 ; NSM # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+06EA..06ED ; NSM # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
+0711 ; NSM # Mn SYRIAC LETTER SUPERSCRIPT ALAPH
+0730..074A ; NSM # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
+07A6..07B0 ; NSM # Mn [11] THAANA ABAFILI..THAANA SUKUN
+0901..0902 ; NSM # Mn [2] DEVANAGARI SIGN CANDRABINDU..DEVANAGARI SIGN ANUSVARA
+093C ; NSM # Mn DEVANAGARI SIGN NUKTA
+0941..0948 ; NSM # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+094D ; NSM # Mn DEVANAGARI SIGN VIRAMA
+0951..0954 ; NSM # Mn [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT
+0962..0963 ; NSM # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+0981 ; NSM # Mn BENGALI SIGN CANDRABINDU
+09BC ; NSM # Mn BENGALI SIGN NUKTA
+09C1..09C4 ; NSM # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+09CD ; NSM # Mn BENGALI SIGN VIRAMA
+09E2..09E3 ; NSM # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+0A01..0A02 ; NSM # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+0A3C ; NSM # Mn GURMUKHI SIGN NUKTA
+0A41..0A42 ; NSM # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+0A47..0A48 ; NSM # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4D ; NSM # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
+0A70..0A71 ; NSM # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+0A81..0A82 ; NSM # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+0ABC ; NSM # Mn GUJARATI SIGN NUKTA
+0AC1..0AC5 ; NSM # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC8 ; NSM # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+0ACD ; NSM # Mn GUJARATI SIGN VIRAMA
+0AE2..0AE3 ; NSM # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0B01 ; NSM # Mn ORIYA SIGN CANDRABINDU
+0B3C ; NSM # Mn ORIYA SIGN NUKTA
+0B3F ; NSM # Mn ORIYA VOWEL SIGN I
+0B41..0B43 ; NSM # Mn [3] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC R
+0B4D ; NSM # Mn ORIYA SIGN VIRAMA
+0B56 ; NSM # Mn ORIYA AI LENGTH MARK
+0B82 ; NSM # Mn TAMIL SIGN ANUSVARA
+0BC0 ; NSM # Mn TAMIL VOWEL SIGN II
+0BCD ; NSM # Mn TAMIL SIGN VIRAMA
+0C3E..0C40 ; NSM # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+0C46..0C48 ; NSM # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+0C4A..0C4D ; NSM # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
+0C55..0C56 ; NSM # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+0CBC ; NSM # Mn KANNADA SIGN NUKTA
+0CCC..0CCD ; NSM # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
+0D41..0D43 ; NSM # Mn [3] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC R
+0D4D ; NSM # Mn MALAYALAM SIGN VIRAMA
+0DCA ; NSM # Mn SINHALA SIGN AL-LAKUNA
+0DD2..0DD4 ; NSM # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6 ; NSM # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA
+0E31 ; NSM # Mn THAI CHARACTER MAI HAN-AKAT
+0E34..0E3A ; NSM # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+0E47..0E4E ; NSM # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
+0EB1 ; NSM # Mn LAO VOWEL SIGN MAI KAN
+0EB4..0EB9 ; NSM # Mn [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU
+0EBB..0EBC ; NSM # Mn [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO
+0EC8..0ECD ; NSM # Mn [6] LAO TONE MAI EK..LAO NIGGAHITA
+0F18..0F19 ; NSM # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F35 ; NSM # Mn TIBETAN MARK NGAS BZUNG NYI ZLA
+0F37 ; NSM # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F39 ; NSM # Mn TIBETAN MARK TSA -PHRU
+0F71..0F7E ; NSM # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
+0F80..0F84 ; NSM # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
+0F86..0F87 ; NSM # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
+0F90..0F97 ; NSM # Mn [8] TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER JA
+0F99..0FBC ; NSM # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FC6 ; NSM # Mn TIBETAN SYMBOL PADMA GDAN
+102D..1030 ; NSM # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
+1032 ; NSM # Mn MYANMAR VOWEL SIGN AI
+1036..1037 ; NSM # Mn [2] MYANMAR SIGN ANUSVARA..MYANMAR SIGN DOT BELOW
+1039 ; NSM # Mn MYANMAR SIGN VIRAMA
+1058..1059 ; NSM # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+1712..1714 ; NSM # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
+1732..1734 ; NSM # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD
+1752..1753 ; NSM # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
+1772..1773 ; NSM # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+17B7..17BD ; NSM # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
+17C6 ; NSM # Mn KHMER SIGN NIKAHIT
+17C9..17D3 ; NSM # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
+17DD ; NSM # Mn KHMER SIGN ATTHACAN
+180B..180D ; NSM # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+18A9 ; NSM # Mn MONGOLIAN LETTER ALI GALI DAGALGA
+1920..1922 ; NSM # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
+1927..1928 ; NSM # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+1929..192B ; NSM # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
+1932 ; NSM # Mn LIMBU SMALL LETTER ANUSVARA
+1939..193B ; NSM # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
+20D0..20DC ; NSM # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+20DD..20E0 ; NSM # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
+20E1 ; NSM # Mn COMBINING LEFT RIGHT ARROW ABOVE
+20E2..20E4 ; NSM # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
+20E5..20EA ; NSM # Mn [6] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING LEFTWARDS ARROW OVERLAY
+302A..302F ; NSM # Mn [6] IDEOGRAPHIC LEVEL TONE MARK..HANGUL DOUBLE DOT TONE MARK
+3099..309A ; NSM # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+FB1E ; NSM # Mn HEBREW POINT JUDEO-SPANISH VARIKA
+FE00..FE0F ; NSM # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+FE20..FE23 ; NSM # Mn [4] COMBINING LIGATURE LEFT HALF..COMBINING DOUBLE TILDE RIGHT HALF
+1D167..1D169 ; NSM # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
+1D17B..1D182 ; NSM # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
+1D185..1D18B ; NSM # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D1AA..1D1AD ; NSM # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+E0100..E01EF ; NSM # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+
+# Total code points: 803
+
+# ================================================
+
+# Bidi_Class=Arabic_Letter
+
+0600..0603 ; AL # Cf [4] ARABIC NUMBER SIGN..ARABIC SIGN SAFHA
+0604..060B ; AL # Cn [8] <reserved-0604>..<reserved-060B>
+060D ; AL # Po ARABIC DATE SEPARATOR
+0616..061A ; AL # Cn [5] <reserved-0616>..<reserved-061A>
+061B ; AL # Po ARABIC SEMICOLON
+061C..061E ; AL # Cn [3] <reserved-061C>..<reserved-061E>
+061F ; AL # Po ARABIC QUESTION MARK
+0620 ; AL # Cn <reserved-0620>
+0621..063A ; AL # Lo [26] ARABIC LETTER HAMZA..ARABIC LETTER GHAIN
+063B..063F ; AL # Cn [5] <reserved-063B>..<reserved-063F>
+0640 ; AL # Lm ARABIC TATWEEL
+0641..064A ; AL # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH
+0659..065F ; AL # Cn [7] <reserved-0659>..<reserved-065F>
+066D ; AL # Po ARABIC FIVE POINTED STAR
+066E..066F ; AL # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
+0671..06D3 ; AL # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D4 ; AL # Po ARABIC FULL STOP
+06D5 ; AL # Lo ARABIC LETTER AE
+06DD ; AL # Cf ARABIC END OF AYAH
+06E5..06E6 ; AL # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06EE..06EF ; AL # Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+06FA..06FC ; AL # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
+06FD..06FE ; AL # So [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN
+06FF ; AL # Lo ARABIC LETTER HEH WITH INVERTED V
+0700..070D ; AL # Po [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS
+070E ; AL # Cn <reserved-070E>
+0710 ; AL # Lo SYRIAC LETTER ALAPH
+0712..072F ; AL # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
+074B..074C ; AL # Cn [2] <reserved-074B>..<reserved-074C>
+074D..074F ; AL # Lo [3] SYRIAC LETTER SOGDIAN ZHAIN..SYRIAC LETTER SOGDIAN FE
+0750..077F ; AL # Cn [48] <reserved-0750>..<reserved-077F>
+0780..07A5 ; AL # Lo [38] THAANA LETTER HAA..THAANA LETTER WAAVU
+07B1 ; AL # Lo THAANA LETTER NAA
+07B2..07BF ; AL # Cn [14] <reserved-07B2>..<reserved-07BF>
+FB50..FBB1 ; AL # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBB2..FBD2 ; AL # Cn [33] <reserved-FBB2>..<reserved-FBD2>
+FBD3..FD3D ; AL # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD40..FD4F ; AL # Cn [16] <reserved-FD40>..<reserved-FD4F>
+FD50..FD8F ; AL # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD90..FD91 ; AL # Cn [2] <reserved-FD90>..<reserved-FD91>
+FD92..FDC7 ; AL # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDC8..FDCF ; AL # Cn [8] <reserved-FDC8>..<reserved-FDCF>
+FDF0..FDFB ; AL # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
+FDFC ; AL # Sc RIAL SIGN
+FDFE..FDFF ; AL # Cn [2] <reserved-FDFE>..<reserved-FDFF>
+FE70..FE74 ; AL # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
+FE75 ; AL # Cn <reserved-FE75>
+FE76..FEFC ; AL # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FEFD..FEFE ; AL # Cn [2] <reserved-FEFD>..<reserved-FEFE>
+
+# Total code points: 1136
+
+# ================================================
+
+# Bidi_Class=Left_To_Right_Override
+
+202D ; LRO # Cf LEFT-TO-RIGHT OVERRIDE
+
+# Total code points: 1
+
+# ================================================
+
+# Bidi_Class=Right_To_Left_Override
+
+202E ; RLO # Cf RIGHT-TO-LEFT OVERRIDE
+
+# Total code points: 1
+
+# ================================================
+
+# Bidi_Class=Left_To_Right_Embedding
+
+202A ; LRE # Cf LEFT-TO-RIGHT EMBEDDING
+
+# Total code points: 1
+
+# ================================================
+
+# Bidi_Class=Right_To_Left_Embedding
+
+202B ; RLE # Cf RIGHT-TO-LEFT EMBEDDING
+
+# Total code points: 1
+
+# ================================================
+
+# Bidi_Class=Pop_Directional_Format
+
+202C ; PDF # Cf POP DIRECTIONAL FORMATTING
+
+# Total code points: 1
diff --git a/gen.tab/unidata/extracted/DerivedDecompositionType.txt b/gen.tab/unidata/extracted/DerivedDecompositionType.txt
new file mode 100644
index 0000000..7b79695
--- /dev/null
+++ b/gen.tab/unidata/extracted/DerivedDecompositionType.txt
@@ -0,0 +1,933 @@
+# DerivedDecompositionType-4.0.1.txt
+# Date: 2004-03-02, 02:41:56 GMT [MD]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2004 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see UCD.html
+
+# ================================================
+
+# Decomposition_Type (from UnicodeData.txt, field 5: see UCD.html)
+
+# All code points not explicitly listed for Decomposition_Type
+# have the value None.
+
+# ================================================
+
+00C0..00C5 ; Canonical # L& [6] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER A WITH RING ABOVE
+00C7..00CF ; Canonical # L& [9] LATIN CAPITAL LETTER C WITH CEDILLA..LATIN CAPITAL LETTER I WITH DIAERESIS
+00D1..00D6 ; Canonical # L& [6] LATIN CAPITAL LETTER N WITH TILDE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D9..00DD ; Canonical # L& [5] LATIN CAPITAL LETTER U WITH GRAVE..LATIN CAPITAL LETTER Y WITH ACUTE
+00E0..00E5 ; Canonical # L& [6] LATIN SMALL LETTER A WITH GRAVE..LATIN SMALL LETTER A WITH RING ABOVE
+00E7..00EF ; Canonical # L& [9] LATIN SMALL LETTER C WITH CEDILLA..LATIN SMALL LETTER I WITH DIAERESIS
+00F1..00F6 ; Canonical # L& [6] LATIN SMALL LETTER N WITH TILDE..LATIN SMALL LETTER O WITH DIAERESIS
+00F9..00FD ; Canonical # L& [5] LATIN SMALL LETTER U WITH GRAVE..LATIN SMALL LETTER Y WITH ACUTE
+00FF..010F ; Canonical # L& [17] LATIN SMALL LETTER Y WITH DIAERESIS..LATIN SMALL LETTER D WITH CARON
+0112..0125 ; Canonical # L& [20] LATIN CAPITAL LETTER E WITH MACRON..LATIN SMALL LETTER H WITH CIRCUMFLEX
+0128..0130 ; Canonical # L& [9] LATIN CAPITAL LETTER I WITH TILDE..LATIN CAPITAL LETTER I WITH DOT ABOVE
+0134..0137 ; Canonical # L& [4] LATIN CAPITAL LETTER J WITH CIRCUMFLEX..LATIN SMALL LETTER K WITH CEDILLA
+0139..013E ; Canonical # L& [6] LATIN CAPITAL LETTER L WITH ACUTE..LATIN SMALL LETTER L WITH CARON
+0143..0148 ; Canonical # L& [6] LATIN CAPITAL LETTER N WITH ACUTE..LATIN SMALL LETTER N WITH CARON
+014C..0151 ; Canonical # L& [6] LATIN CAPITAL LETTER O WITH MACRON..LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0154..0165 ; Canonical # L& [18] LATIN CAPITAL LETTER R WITH ACUTE..LATIN SMALL LETTER T WITH CARON
+0168..017E ; Canonical # L& [23] LATIN CAPITAL LETTER U WITH TILDE..LATIN SMALL LETTER Z WITH CARON
+01A0..01A1 ; Canonical # L& [2] LATIN CAPITAL LETTER O WITH HORN..LATIN SMALL LETTER O WITH HORN
+01AF..01B0 ; Canonical # L& [2] LATIN CAPITAL LETTER U WITH HORN..LATIN SMALL LETTER U WITH HORN
+01CD..01DC ; Canonical # L& [16] LATIN CAPITAL LETTER A WITH CARON..LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+01DE..01E3 ; Canonical # L& [6] LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON..LATIN SMALL LETTER AE WITH MACRON
+01E6..01F0 ; Canonical # L& [11] LATIN CAPITAL LETTER G WITH CARON..LATIN SMALL LETTER J WITH CARON
+01F4..01F5 ; Canonical # L& [2] LATIN CAPITAL LETTER G WITH ACUTE..LATIN SMALL LETTER G WITH ACUTE
+01F8..021B ; Canonical # L& [36] LATIN CAPITAL LETTER N WITH GRAVE..LATIN SMALL LETTER T WITH COMMA BELOW
+021E..021F ; Canonical # L& [2] LATIN CAPITAL LETTER H WITH CARON..LATIN SMALL LETTER H WITH CARON
+0226..0233 ; Canonical # L& [14] LATIN CAPITAL LETTER A WITH DOT ABOVE..LATIN SMALL LETTER Y WITH MACRON
+0340..0341 ; Canonical # Mn [2] COMBINING GRAVE TONE MARK..COMBINING ACUTE TONE MARK
+0343..0344 ; Canonical # Mn [2] COMBINING GREEK KORONIS..COMBINING GREEK DIALYTIKA TONOS
+0374 ; Canonical # Sk GREEK NUMERAL SIGN
+037E ; Canonical # Po GREEK QUESTION MARK
+0385 ; Canonical # Sk GREEK DIALYTIKA TONOS
+0386 ; Canonical # L& GREEK CAPITAL LETTER ALPHA WITH TONOS
+0387 ; Canonical # Po GREEK ANO TELEIA
+0388..038A ; Canonical # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C ; Canonical # L& GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..0390 ; Canonical # L& [3] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+03AA..03B0 ; Canonical # L& [7] GREEK CAPITAL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+03CA..03CE ; Canonical # L& [5] GREEK SMALL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER OMEGA WITH TONOS
+03D3..03D4 ; Canonical # L& [2] GREEK UPSILON WITH ACUTE AND HOOK SYMBOL..GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
+0400..0401 ; Canonical # L& [2] CYRILLIC CAPITAL LETTER IE WITH GRAVE..CYRILLIC CAPITAL LETTER IO
+0403 ; Canonical # L& CYRILLIC CAPITAL LETTER GJE
+0407 ; Canonical # L& CYRILLIC CAPITAL LETTER YI
+040C..040E ; Canonical # L& [3] CYRILLIC CAPITAL LETTER KJE..CYRILLIC CAPITAL LETTER SHORT U
+0419 ; Canonical # L& CYRILLIC CAPITAL LETTER SHORT I
+0439 ; Canonical # L& CYRILLIC SMALL LETTER SHORT I
+0450..0451 ; Canonical # L& [2] CYRILLIC SMALL LETTER IE WITH GRAVE..CYRILLIC SMALL LETTER IO
+0453 ; Canonical # L& CYRILLIC SMALL LETTER GJE
+0457 ; Canonical # L& CYRILLIC SMALL LETTER YI
+045C..045E ; Canonical # L& [3] CYRILLIC SMALL LETTER KJE..CYRILLIC SMALL LETTER SHORT U
+0476..0477 ; Canonical # L& [2] CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT..CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+04C1..04C2 ; Canonical # L& [2] CYRILLIC CAPITAL LETTER ZHE WITH BREVE..CYRILLIC SMALL LETTER ZHE WITH BREVE
+04D0..04D3 ; Canonical # L& [4] CYRILLIC CAPITAL LETTER A WITH BREVE..CYRILLIC SMALL LETTER A WITH DIAERESIS
+04D6..04D7 ; Canonical # L& [2] CYRILLIC CAPITAL LETTER IE WITH BREVE..CYRILLIC SMALL LETTER IE WITH BREVE
+04DA..04DF ; Canonical # L& [6] CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS..CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+04E2..04E7 ; Canonical # L& [6] CYRILLIC CAPITAL LETTER I WITH MACRON..CYRILLIC SMALL LETTER O WITH DIAERESIS
+04EA..04F5 ; Canonical # L& [12] CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS..CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F8..04F9 ; Canonical # L& [2] CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS..CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+0622..0626 ; Canonical # Lo [5] ARABIC LETTER ALEF WITH MADDA ABOVE..ARABIC LETTER YEH WITH HAMZA ABOVE
+06C0 ; Canonical # Lo ARABIC LETTER HEH WITH YEH ABOVE
+06C2 ; Canonical # Lo ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
+06D3 ; Canonical # Lo ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+0929 ; Canonical # Lo DEVANAGARI LETTER NNNA
+0931 ; Canonical # Lo DEVANAGARI LETTER RRA
+0934 ; Canonical # Lo DEVANAGARI LETTER LLLA
+0958..095F ; Canonical # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA
+09CB..09CC ; Canonical # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+09DC..09DD ; Canonical # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF ; Canonical # Lo BENGALI LETTER YYA
+0A33 ; Canonical # Lo GURMUKHI LETTER LLA
+0A36 ; Canonical # Lo GURMUKHI LETTER SHA
+0A59..0A5B ; Canonical # Lo [3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA
+0A5E ; Canonical # Lo GURMUKHI LETTER FA
+0B48 ; Canonical # Mc ORIYA VOWEL SIGN AI
+0B4B..0B4C ; Canonical # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+0B5C..0B5D ; Canonical # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0B94 ; Canonical # Lo TAMIL LETTER AU
+0BCA..0BCC ; Canonical # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0C48 ; Canonical # Mn TELUGU VOWEL SIGN AI
+0CC0 ; Canonical # Mc KANNADA VOWEL SIGN II
+0CC7..0CC8 ; Canonical # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB ; Canonical # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+0D4A..0D4C ; Canonical # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0DDA ; Canonical # Mc SINHALA VOWEL SIGN DIGA KOMBUVA
+0DDC..0DDE ; Canonical # Mc [3] SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
+0F43 ; Canonical # Lo TIBETAN LETTER GHA
+0F4D ; Canonical # Lo TIBETAN LETTER DDHA
+0F52 ; Canonical # Lo TIBETAN LETTER DHA
+0F57 ; Canonical # Lo TIBETAN LETTER BHA
+0F5C ; Canonical # Lo TIBETAN LETTER DZHA
+0F69 ; Canonical # Lo TIBETAN LETTER KSSA
+0F73 ; Canonical # Mn TIBETAN VOWEL SIGN II
+0F75..0F76 ; Canonical # Mn [2] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC R
+0F78 ; Canonical # Mn TIBETAN VOWEL SIGN VOCALIC L
+0F81 ; Canonical # Mn TIBETAN VOWEL SIGN REVERSED II
+0F93 ; Canonical # Mn TIBETAN SUBJOINED LETTER GHA
+0F9D ; Canonical # Mn TIBETAN SUBJOINED LETTER DDHA
+0FA2 ; Canonical # Mn TIBETAN SUBJOINED LETTER DHA
+0FA7 ; Canonical # Mn TIBETAN SUBJOINED LETTER BHA
+0FAC ; Canonical # Mn TIBETAN SUBJOINED LETTER DZHA
+0FB9 ; Canonical # Mn TIBETAN SUBJOINED LETTER KSSA
+1026 ; Canonical # Lo MYANMAR LETTER UU
+1E00..1E99 ; Canonical # L& [154] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH RING ABOVE
+1E9B ; Canonical # L& LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1EA0..1EF9 ; Canonical # L& [90] LATIN CAPITAL LETTER A WITH DOT BELOW..LATIN SMALL LETTER Y WITH TILDE
+1F00..1F15 ; Canonical # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D ; Canonical # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45 ; Canonical # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D ; Canonical # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57 ; Canonical # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59 ; Canonical # L& GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B ; Canonical # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D ; Canonical # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D ; Canonical # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4 ; Canonical # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC ; Canonical # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBE ; Canonical # L& GREEK PROSGEGRAMMENI
+1FC1 ; Canonical # Sk GREEK DIALYTIKA AND PERISPOMENI
+1FC2..1FC4 ; Canonical # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC ; Canonical # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCD..1FCF ; Canonical # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+1FD0..1FD3 ; Canonical # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB ; Canonical # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FDD..1FDF ; Canonical # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+1FE0..1FEC ; Canonical # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FED..1FEF ; Canonical # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
+1FF2..1FF4 ; Canonical # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC ; Canonical # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+1FFD ; Canonical # Sk GREEK OXIA
+2000..2001 ; Canonical # Zs [2] EN QUAD..EM QUAD
+2126 ; Canonical # L& OHM SIGN
+212A..212B ; Canonical # L& [2] KELVIN SIGN..ANGSTROM SIGN
+219A..219B ; Canonical # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
+21AE ; Canonical # Sm LEFT RIGHT ARROW WITH STROKE
+21CD ; Canonical # So LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE..21CF ; Canonical # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
+2204 ; Canonical # Sm THERE DOES NOT EXIST
+2209 ; Canonical # Sm NOT AN ELEMENT OF
+220C ; Canonical # Sm DOES NOT CONTAIN AS MEMBER
+2224 ; Canonical # Sm DOES NOT DIVIDE
+2226 ; Canonical # Sm NOT PARALLEL TO
+2241 ; Canonical # Sm NOT TILDE
+2244 ; Canonical # Sm NOT ASYMPTOTICALLY EQUAL TO
+2247 ; Canonical # Sm NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
+2249 ; Canonical # Sm NOT ALMOST EQUAL TO
+2260 ; Canonical # Sm NOT EQUAL TO
+2262 ; Canonical # Sm NOT IDENTICAL TO
+226D..2271 ; Canonical # Sm [5] NOT EQUIVALENT TO..NEITHER GREATER-THAN NOR EQUAL TO
+2274..2275 ; Canonical # Sm [2] NEITHER LESS-THAN NOR EQUIVALENT TO..NEITHER GREATER-THAN NOR EQUIVALENT TO
+2278..2279 ; Canonical # Sm [2] NEITHER LESS-THAN NOR GREATER-THAN..NEITHER GREATER-THAN NOR LESS-THAN
+2280..2281 ; Canonical # Sm [2] DOES NOT PRECEDE..DOES NOT SUCCEED
+2284..2285 ; Canonical # Sm [2] NOT A SUBSET OF..NOT A SUPERSET OF
+2288..2289 ; Canonical # Sm [2] NEITHER A SUBSET OF NOR EQUAL TO..NEITHER A SUPERSET OF NOR EQUAL TO
+22AC..22AF ; Canonical # Sm [4] DOES NOT PROVE..NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+22E0..22E3 ; Canonical # Sm [4] DOES NOT PRECEDE OR EQUAL..NOT SQUARE ORIGINAL OF OR EQUAL TO
+22EA..22ED ; Canonical # Sm [4] NOT NORMAL SUBGROUP OF..DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
+2329 ; Canonical # Ps LEFT-POINTING ANGLE BRACKET
+232A ; Canonical # Pe RIGHT-POINTING ANGLE BRACKET
+2ADC ; Canonical # Sm FORKING
+304C ; Canonical # Lo HIRAGANA LETTER GA
+304E ; Canonical # Lo HIRAGANA LETTER GI
+3050 ; Canonical # Lo HIRAGANA LETTER GU
+3052 ; Canonical # Lo HIRAGANA LETTER GE
+3054 ; Canonical # Lo HIRAGANA LETTER GO
+3056 ; Canonical # Lo HIRAGANA LETTER ZA
+3058 ; Canonical # Lo HIRAGANA LETTER ZI
+305A ; Canonical # Lo HIRAGANA LETTER ZU
+305C ; Canonical # Lo HIRAGANA LETTER ZE
+305E ; Canonical # Lo HIRAGANA LETTER ZO
+3060 ; Canonical # Lo HIRAGANA LETTER DA
+3062 ; Canonical # Lo HIRAGANA LETTER DI
+3065 ; Canonical # Lo HIRAGANA LETTER DU
+3067 ; Canonical # Lo HIRAGANA LETTER DE
+3069 ; Canonical # Lo HIRAGANA LETTER DO
+3070..3071 ; Canonical # Lo [2] HIRAGANA LETTER BA..HIRAGANA LETTER PA
+3073..3074 ; Canonical # Lo [2] HIRAGANA LETTER BI..HIRAGANA LETTER PI
+3076..3077 ; Canonical # Lo [2] HIRAGANA LETTER BU..HIRAGANA LETTER PU
+3079..307A ; Canonical # Lo [2] HIRAGANA LETTER BE..HIRAGANA LETTER PE
+307C..307D ; Canonical # Lo [2] HIRAGANA LETTER BO..HIRAGANA LETTER PO
+3094 ; Canonical # Lo HIRAGANA LETTER VU
+309E ; Canonical # Lm HIRAGANA VOICED ITERATION MARK
+30AC ; Canonical # Lo KATAKANA LETTER GA
+30AE ; Canonical # Lo KATAKANA LETTER GI
+30B0 ; Canonical # Lo KATAKANA LETTER GU
+30B2 ; Canonical # Lo KATAKANA LETTER GE
+30B4 ; Canonical # Lo KATAKANA LETTER GO
+30B6 ; Canonical # Lo KATAKANA LETTER ZA
+30B8 ; Canonical # Lo KATAKANA LETTER ZI
+30BA ; Canonical # Lo KATAKANA LETTER ZU
+30BC ; Canonical # Lo KATAKANA LETTER ZE
+30BE ; Canonical # Lo KATAKANA LETTER ZO
+30C0 ; Canonical # Lo KATAKANA LETTER DA
+30C2 ; Canonical # Lo KATAKANA LETTER DI
+30C5 ; Canonical # Lo KATAKANA LETTER DU
+30C7 ; Canonical # Lo KATAKANA LETTER DE
+30C9 ; Canonical # Lo KATAKANA LETTER DO
+30D0..30D1 ; Canonical # Lo [2] KATAKANA LETTER BA..KATAKANA LETTER PA
+30D3..30D4 ; Canonical # Lo [2] KATAKANA LETTER BI..KATAKANA LETTER PI
+30D6..30D7 ; Canonical # Lo [2] KATAKANA LETTER BU..KATAKANA LETTER PU
+30D9..30DA ; Canonical # Lo [2] KATAKANA LETTER BE..KATAKANA LETTER PE
+30DC..30DD ; Canonical # Lo [2] KATAKANA LETTER BO..KATAKANA LETTER PO
+30F4 ; Canonical # Lo KATAKANA LETTER VU
+30F7..30FA ; Canonical # Lo [4] KATAKANA LETTER VA..KATAKANA LETTER VO
+30FE ; Canonical # Lm KATAKANA VOICED ITERATION MARK
+AC00..D7A3 ; Canonical # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+F900..FA0D ; Canonical # Lo [270] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA0D
+FA10 ; Canonical # Lo CJK COMPATIBILITY IDEOGRAPH-FA10
+FA12 ; Canonical # Lo CJK COMPATIBILITY IDEOGRAPH-FA12
+FA15..FA1E ; Canonical # Lo [10] CJK COMPATIBILITY IDEOGRAPH-FA15..CJK COMPATIBILITY IDEOGRAPH-FA1E
+FA20 ; Canonical # Lo CJK COMPATIBILITY IDEOGRAPH-FA20
+FA22 ; Canonical # Lo CJK COMPATIBILITY IDEOGRAPH-FA22
+FA25..FA26 ; Canonical # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA25..CJK COMPATIBILITY IDEOGRAPH-FA26
+FA2A..FA2D ; Canonical # Lo [4] CJK COMPATIBILITY IDEOGRAPH-FA2A..CJK COMPATIBILITY IDEOGRAPH-FA2D
+FA30..FA6A ; Canonical # Lo [59] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6A
+FB1D ; Canonical # Lo HEBREW LETTER YOD WITH HIRIQ
+FB1F ; Canonical # Lo HEBREW LIGATURE YIDDISH YOD YOD PATAH
+FB2A..FB36 ; Canonical # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C ; Canonical # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E ; Canonical # Lo HEBREW LETTER MEM WITH DAGESH
+FB40..FB41 ; Canonical # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44 ; Canonical # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FB4E ; Canonical # Lo [9] HEBREW LETTER TSADI WITH DAGESH..HEBREW LETTER PE WITH RAFE
+1D15E..1D164 ; Canonical # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D1BB..1D1C0 ; Canonical # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK
+2F800..2FA1D ; Canonical # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+
+# Total code points: 13098
+
+# ================================================
+
+00A8 ; Compat # Sk DIAERESIS
+00AF ; Compat # Sk MACRON
+00B4 ; Compat # Sk ACUTE ACCENT
+00B5 ; Compat # L& MICRO SIGN
+00B8 ; Compat # Sk CEDILLA
+0132..0133 ; Compat # L& [2] LATIN CAPITAL LIGATURE IJ..LATIN SMALL LIGATURE IJ
+013F..0140 ; Compat # L& [2] LATIN CAPITAL LETTER L WITH MIDDLE DOT..LATIN SMALL LETTER L WITH MIDDLE DOT
+0149 ; Compat # L& LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+017F ; Compat # L& LATIN SMALL LETTER LONG S
+01C4..01CC ; Compat # L& [9] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER NJ
+01F1..01F3 ; Compat # L& [3] LATIN CAPITAL LETTER DZ..LATIN SMALL LETTER DZ
+02D8..02DD ; Compat # Sk [6] BREVE..DOUBLE ACUTE ACCENT
+037A ; Compat # Lm GREEK YPOGEGRAMMENI
+0384 ; Compat # Sk GREEK TONOS
+03D0..03D2 ; Compat # L& [3] GREEK BETA SYMBOL..GREEK UPSILON WITH HOOK SYMBOL
+03D5..03D6 ; Compat # L& [2] GREEK PHI SYMBOL..GREEK PI SYMBOL
+03F0..03F2 ; Compat # L& [3] GREEK KAPPA SYMBOL..GREEK LUNATE SIGMA SYMBOL
+03F4..03F5 ; Compat # L& [2] GREEK CAPITAL THETA SYMBOL..GREEK LUNATE EPSILON SYMBOL
+03F9 ; Compat # L& GREEK CAPITAL LUNATE SIGMA SYMBOL
+0587 ; Compat # L& ARMENIAN SMALL LIGATURE ECH YIWN
+0675..0678 ; Compat # Lo [4] ARABIC LETTER HIGH HAMZA ALEF..ARABIC LETTER HIGH HAMZA YEH
+0E33 ; Compat # Lo THAI CHARACTER SARA AM
+0EB3 ; Compat # Lo LAO VOWEL SIGN AM
+0EDC..0EDD ; Compat # Lo [2] LAO HO NO..LAO HO MO
+0F77 ; Compat # Mn TIBETAN VOWEL SIGN VOCALIC RR
+0F79 ; Compat # Mn TIBETAN VOWEL SIGN VOCALIC LL
+1E9A ; Compat # L& LATIN SMALL LETTER A WITH RIGHT HALF RING
+1FBD ; Compat # Sk GREEK KORONIS
+1FBF..1FC0 ; Compat # Sk [2] GREEK PSILI..GREEK PERISPOMENI
+1FFE ; Compat # Sk GREEK DASIA
+2002..2006 ; Compat # Zs [5] EN SPACE..SIX-PER-EM SPACE
+2008..200A ; Compat # Zs [3] PUNCTUATION SPACE..HAIR SPACE
+2017 ; Compat # Po DOUBLE LOW LINE
+2024..2026 ; Compat # Po [3] ONE DOT LEADER..HORIZONTAL ELLIPSIS
+2033..2034 ; Compat # Po [2] DOUBLE PRIME..TRIPLE PRIME
+2036..2037 ; Compat # Po [2] REVERSED DOUBLE PRIME..REVERSED TRIPLE PRIME
+203C ; Compat # Po DOUBLE EXCLAMATION MARK
+203E ; Compat # Po OVERLINE
+2047..2049 ; Compat # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK
+2057 ; Compat # Po QUADRUPLE PRIME
+205F ; Compat # Zs MEDIUM MATHEMATICAL SPACE
+20A8 ; Compat # Sc RUPEE SIGN
+2100..2101 ; Compat # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
+2103 ; Compat # So DEGREE CELSIUS
+2105..2106 ; Compat # So [2] CARE OF..CADA UNA
+2107 ; Compat # L& EULER CONSTANT
+2109 ; Compat # So DEGREE FAHRENHEIT
+2116 ; Compat # So NUMERO SIGN
+2121 ; Compat # So TELEPHONE SIGN
+2135..2138 ; Compat # Lo [4] ALEF SYMBOL..DALET SYMBOL
+213B ; Compat # So FACSIMILE SIGN
+2160..217F ; Compat # Nl [32] ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND
+222C..222D ; Compat # Sm [2] DOUBLE INTEGRAL..TRIPLE INTEGRAL
+222F..2230 ; Compat # Sm [2] SURFACE INTEGRAL..VOLUME INTEGRAL
+2474..249B ; Compat # No [40] PARENTHESIZED DIGIT ONE..NUMBER TWENTY FULL STOP
+249C..24B5 ; Compat # So [26] PARENTHESIZED LATIN SMALL LETTER A..PARENTHESIZED LATIN SMALL LETTER Z
+2A0C ; Compat # Sm QUADRUPLE INTEGRAL OPERATOR
+2A74..2A76 ; Compat # Sm [3] DOUBLE COLON EQUAL..THREE CONSECUTIVE EQUALS SIGNS
+2E9F ; Compat # So CJK RADICAL MOTHER
+2EF3 ; Compat # So CJK RADICAL C-SIMPLIFIED TURTLE
+2F00..2FD5 ; Compat # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
+3036 ; Compat # So CIRCLED POSTAL MARK
+3038..303A ; Compat # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+309B..309C ; Compat # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+3131..318E ; Compat # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+3200..321E ; Compat # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
+3220..3229 ; Compat # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
+322A..3243 ; Compat # So [26] PARENTHESIZED IDEOGRAPH MOON..PARENTHESIZED IDEOGRAPH REACH
+32C0..32CB ; Compat # So [12] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
+3358..3370 ; Compat # So [25] IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO..IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
+33E0..33FE ; Compat # So [31] IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
+FB00..FB06 ; Compat # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17 ; Compat # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FB4F ; Compat # Lo HEBREW LIGATURE ALEF LAMED
+FE49..FE4C ; Compat # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE
+FE4D..FE4F ; Compat # Pc [3] DASHED LOW LINE..WAVY LOW LINE
+
+# Total code points: 673
+
+# ================================================
+
+2102 ; Font # L& DOUBLE-STRUCK CAPITAL C
+210A..2113 ; Font # L& [10] SCRIPT SMALL G..SCRIPT SMALL L
+2115 ; Font # L& DOUBLE-STRUCK CAPITAL N
+2119..211D ; Font # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2124 ; Font # L& DOUBLE-STRUCK CAPITAL Z
+2128 ; Font # L& BLACK-LETTER CAPITAL Z
+212C..212D ; Font # L& [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C
+212F..2131 ; Font # L& [3] SCRIPT SMALL E..SCRIPT CAPITAL F
+2133..2134 ; Font # L& [2] SCRIPT CAPITAL M..SCRIPT SMALL O
+2139 ; Font # L& INFORMATION SOURCE
+213D..213F ; Font # L& [3] DOUBLE-STRUCK SMALL GAMMA..DOUBLE-STRUCK CAPITAL PI
+2140 ; Font # Sm DOUBLE-STRUCK N-ARY SUMMATION
+2145..2149 ; Font # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+FB20..FB28 ; Font # Lo [9] HEBREW LETTER ALTERNATIVE AYIN..HEBREW LETTER WIDE TAV
+FB29 ; Font # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN
+1D400..1D454 ; Font # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C ; Font # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F ; Font # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2 ; Font # L& MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6 ; Font # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC ; Font # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9 ; Font # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB ; Font # L& MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3 ; Font # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505 ; Font # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A ; Font # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514 ; Font # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C ; Font # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539 ; Font # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E ; Font # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544 ; Font # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546 ; Font # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550 ; Font # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A3 ; Font # L& [338] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL MONOSPACE SMALL Z
+1D6A8..1D6C0 ; Font # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C1 ; Font # Sm MATHEMATICAL BOLD NABLA
+1D6C2..1D6DA ; Font # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DB ; Font # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+1D6DC..1D6FA ; Font # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FB ; Font # Sm MATHEMATICAL ITALIC NABLA
+1D6FC..1D714 ; Font # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D715 ; Font # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+1D716..1D734 ; Font # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D735 ; Font # Sm MATHEMATICAL BOLD ITALIC NABLA
+1D736..1D74E ; Font # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D74F ; Font # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+1D750..1D76E ; Font # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D76F ; Font # Sm MATHEMATICAL SANS-SERIF BOLD NABLA
+1D770..1D788 ; Font # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D789 ; Font # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+1D78A..1D7A8 ; Font # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7A9 ; Font # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+1D7AA..1D7C2 ; Font # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C3 ; Font # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+1D7C4..1D7C9 ; Font # L& [6] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
+1D7CE..1D7FF ; Font # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+
+# Total code points: 1038
+
+# ================================================
+
+00A0 ; Nobreak # Zs NO-BREAK SPACE
+0F0C ; Nobreak # Po TIBETAN MARK DELIMITER TSHEG BSTAR
+2007 ; Nobreak # Zs FIGURE SPACE
+2011 ; Nobreak # Pd NON-BREAKING HYPHEN
+202F ; Nobreak # Zs NARROW NO-BREAK SPACE
+
+# Total code points: 5
+
+# ================================================
+
+FB54 ; Initial # Lo ARABIC LETTER BEEH INITIAL FORM
+FB58 ; Initial # Lo ARABIC LETTER PEH INITIAL FORM
+FB5C ; Initial # Lo ARABIC LETTER BEHEH INITIAL FORM
+FB60 ; Initial # Lo ARABIC LETTER TTEHEH INITIAL FORM
+FB64 ; Initial # Lo ARABIC LETTER TEHEH INITIAL FORM
+FB68 ; Initial # Lo ARABIC LETTER TTEH INITIAL FORM
+FB6C ; Initial # Lo ARABIC LETTER VEH INITIAL FORM
+FB70 ; Initial # Lo ARABIC LETTER PEHEH INITIAL FORM
+FB74 ; Initial # Lo ARABIC LETTER DYEH INITIAL FORM
+FB78 ; Initial # Lo ARABIC LETTER NYEH INITIAL FORM
+FB7C ; Initial # Lo ARABIC LETTER TCHEH INITIAL FORM
+FB80 ; Initial # Lo ARABIC LETTER TCHEHEH INITIAL FORM
+FB90 ; Initial # Lo ARABIC LETTER KEHEH INITIAL FORM
+FB94 ; Initial # Lo ARABIC LETTER GAF INITIAL FORM
+FB98 ; Initial # Lo ARABIC LETTER GUEH INITIAL FORM
+FB9C ; Initial # Lo ARABIC LETTER NGOEH INITIAL FORM
+FBA2 ; Initial # Lo ARABIC LETTER RNOON INITIAL FORM
+FBA8 ; Initial # Lo ARABIC LETTER HEH GOAL INITIAL FORM
+FBAC ; Initial # Lo ARABIC LETTER HEH DOACHASHMEE INITIAL FORM
+FBD5 ; Initial # Lo ARABIC LETTER NG INITIAL FORM
+FBE6 ; Initial # Lo ARABIC LETTER E INITIAL FORM
+FBE8 ; Initial # Lo ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM
+FBF8 ; Initial # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM
+FBFB ; Initial # Lo ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM
+FBFE ; Initial # Lo ARABIC LETTER FARSI YEH INITIAL FORM
+FC97..FCDE ; Initial # Lo [72] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM..ARABIC LIGATURE YEH WITH HEH INITIAL FORM
+FD2D..FD33 ; Initial # Lo [7] ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM..ARABIC LIGATURE TAH WITH MEEM INITIAL FORM
+FD50 ; Initial # Lo ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM
+FD52..FD57 ; Initial # Lo [6] ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM..ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM
+FD59 ; Initial # Lo ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM
+FD5C..FD5D ; Initial # Lo [2] ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM..ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM
+FD60..FD61 ; Initial # Lo [2] ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM..ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM
+FD63 ; Initial # Lo ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM
+FD65 ; Initial # Lo ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM
+FD68 ; Initial # Lo ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM
+FD6B ; Initial # Lo ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM
+FD6D ; Initial # Lo ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM
+FD70 ; Initial # Lo ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM
+FD72..FD73 ; Initial # Lo [2] ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM..ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM
+FD77 ; Initial # Lo ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM
+FD7D ; Initial # Lo ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM
+FD83 ; Initial # Lo ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM
+FD86 ; Initial # Lo ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM
+FD88..FD8A ; Initial # Lo [3] ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM..ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM
+FD8C..FD8F ; Initial # Lo [4] ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FD95 ; Initial # Lo [4] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM
+FD98 ; Initial # Lo ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM
+FD9D ; Initial # Lo ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM
+FDB4..FDB5 ; Initial # Lo [2] ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM..ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM
+FDB8 ; Initial # Lo ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM
+FDBA ; Initial # Lo ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM
+FDC3..FDC5 ; Initial # Lo [3] ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM
+FE8B ; Initial # Lo ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
+FE91 ; Initial # Lo ARABIC LETTER BEH INITIAL FORM
+FE97 ; Initial # Lo ARABIC LETTER TEH INITIAL FORM
+FE9B ; Initial # Lo ARABIC LETTER THEH INITIAL FORM
+FE9F ; Initial # Lo ARABIC LETTER JEEM INITIAL FORM
+FEA3 ; Initial # Lo ARABIC LETTER HAH INITIAL FORM
+FEA7 ; Initial # Lo ARABIC LETTER KHAH INITIAL FORM
+FEB3 ; Initial # Lo ARABIC LETTER SEEN INITIAL FORM
+FEB7 ; Initial # Lo ARABIC LETTER SHEEN INITIAL FORM
+FEBB ; Initial # Lo ARABIC LETTER SAD INITIAL FORM
+FEBF ; Initial # Lo ARABIC LETTER DAD INITIAL FORM
+FEC3 ; Initial # Lo ARABIC LETTER TAH INITIAL FORM
+FEC7 ; Initial # Lo ARABIC LETTER ZAH INITIAL FORM
+FECB ; Initial # Lo ARABIC LETTER AIN INITIAL FORM
+FECF ; Initial # Lo ARABIC LETTER GHAIN INITIAL FORM
+FED3 ; Initial # Lo ARABIC LETTER FEH INITIAL FORM
+FED7 ; Initial # Lo ARABIC LETTER QAF INITIAL FORM
+FEDB ; Initial # Lo ARABIC LETTER KAF INITIAL FORM
+FEDF ; Initial # Lo ARABIC LETTER LAM INITIAL FORM
+FEE3 ; Initial # Lo ARABIC LETTER MEEM INITIAL FORM
+FEE7 ; Initial # Lo ARABIC LETTER NOON INITIAL FORM
+FEEB ; Initial # Lo ARABIC LETTER HEH INITIAL FORM
+FEF3 ; Initial # Lo ARABIC LETTER YEH INITIAL FORM
+
+# Total code points: 171
+
+# ================================================
+
+FB55 ; Medial # Lo ARABIC LETTER BEEH MEDIAL FORM
+FB59 ; Medial # Lo ARABIC LETTER PEH MEDIAL FORM
+FB5D ; Medial # Lo ARABIC LETTER BEHEH MEDIAL FORM
+FB61 ; Medial # Lo ARABIC LETTER TTEHEH MEDIAL FORM
+FB65 ; Medial # Lo ARABIC LETTER TEHEH MEDIAL FORM
+FB69 ; Medial # Lo ARABIC LETTER TTEH MEDIAL FORM
+FB6D ; Medial # Lo ARABIC LETTER VEH MEDIAL FORM
+FB71 ; Medial # Lo ARABIC LETTER PEHEH MEDIAL FORM
+FB75 ; Medial # Lo ARABIC LETTER DYEH MEDIAL FORM
+FB79 ; Medial # Lo ARABIC LETTER NYEH MEDIAL FORM
+FB7D ; Medial # Lo ARABIC LETTER TCHEH MEDIAL FORM
+FB81 ; Medial # Lo ARABIC LETTER TCHEHEH MEDIAL FORM
+FB91 ; Medial # Lo ARABIC LETTER KEHEH MEDIAL FORM
+FB95 ; Medial # Lo ARABIC LETTER GAF MEDIAL FORM
+FB99 ; Medial # Lo ARABIC LETTER GUEH MEDIAL FORM
+FB9D ; Medial # Lo ARABIC LETTER NGOEH MEDIAL FORM
+FBA3 ; Medial # Lo ARABIC LETTER RNOON MEDIAL FORM
+FBA9 ; Medial # Lo ARABIC LETTER HEH GOAL MEDIAL FORM
+FBAD ; Medial # Lo ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM
+FBD6 ; Medial # Lo ARABIC LETTER NG MEDIAL FORM
+FBE7 ; Medial # Lo ARABIC LETTER E MEDIAL FORM
+FBE9 ; Medial # Lo ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM
+FBFF ; Medial # Lo ARABIC LETTER FARSI YEH MEDIAL FORM
+FCDF..FCF4 ; Medial # Lo [22] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM..ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM
+FD34..FD3B ; Medial # Lo [8] ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM..ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM
+FE71 ; Medial # Lo ARABIC TATWEEL WITH FATHATAN ABOVE
+FE77 ; Medial # Lo ARABIC FATHA MEDIAL FORM
+FE79 ; Medial # Lo ARABIC DAMMA MEDIAL FORM
+FE7B ; Medial # Lo ARABIC KASRA MEDIAL FORM
+FE7D ; Medial # Lo ARABIC SHADDA MEDIAL FORM
+FE7F ; Medial # Lo ARABIC SUKUN MEDIAL FORM
+FE8C ; Medial # Lo ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM
+FE92 ; Medial # Lo ARABIC LETTER BEH MEDIAL FORM
+FE98 ; Medial # Lo ARABIC LETTER TEH MEDIAL FORM
+FE9C ; Medial # Lo ARABIC LETTER THEH MEDIAL FORM
+FEA0 ; Medial # Lo ARABIC LETTER JEEM MEDIAL FORM
+FEA4 ; Medial # Lo ARABIC LETTER HAH MEDIAL FORM
+FEA8 ; Medial # Lo ARABIC LETTER KHAH MEDIAL FORM
+FEB4 ; Medial # Lo ARABIC LETTER SEEN MEDIAL FORM
+FEB8 ; Medial # Lo ARABIC LETTER SHEEN MEDIAL FORM
+FEBC ; Medial # Lo ARABIC LETTER SAD MEDIAL FORM
+FEC0 ; Medial # Lo ARABIC LETTER DAD MEDIAL FORM
+FEC4 ; Medial # Lo ARABIC LETTER TAH MEDIAL FORM
+FEC8 ; Medial # Lo ARABIC LETTER ZAH MEDIAL FORM
+FECC ; Medial # Lo ARABIC LETTER AIN MEDIAL FORM
+FED0 ; Medial # Lo ARABIC LETTER GHAIN MEDIAL FORM
+FED4 ; Medial # Lo ARABIC LETTER FEH MEDIAL FORM
+FED8 ; Medial # Lo ARABIC LETTER QAF MEDIAL FORM
+FEDC ; Medial # Lo ARABIC LETTER KAF MEDIAL FORM
+FEE0 ; Medial # Lo ARABIC LETTER LAM MEDIAL FORM
+FEE4 ; Medial # Lo ARABIC LETTER MEEM MEDIAL FORM
+FEE8 ; Medial # Lo ARABIC LETTER NOON MEDIAL FORM
+FEEC ; Medial # Lo ARABIC LETTER HEH MEDIAL FORM
+FEF4 ; Medial # Lo ARABIC LETTER YEH MEDIAL FORM
+
+# Total code points: 82
+
+# ================================================
+
+FB51 ; Final # Lo ARABIC LETTER ALEF WASLA FINAL FORM
+FB53 ; Final # Lo ARABIC LETTER BEEH FINAL FORM
+FB57 ; Final # Lo ARABIC LETTER PEH FINAL FORM
+FB5B ; Final # Lo ARABIC LETTER BEHEH FINAL FORM
+FB5F ; Final # Lo ARABIC LETTER TTEHEH FINAL FORM
+FB63 ; Final # Lo ARABIC LETTER TEHEH FINAL FORM
+FB67 ; Final # Lo ARABIC LETTER TTEH FINAL FORM
+FB6B ; Final # Lo ARABIC LETTER VEH FINAL FORM
+FB6F ; Final # Lo ARABIC LETTER PEHEH FINAL FORM
+FB73 ; Final # Lo ARABIC LETTER DYEH FINAL FORM
+FB77 ; Final # Lo ARABIC LETTER NYEH FINAL FORM
+FB7B ; Final # Lo ARABIC LETTER TCHEH FINAL FORM
+FB7F ; Final # Lo ARABIC LETTER TCHEHEH FINAL FORM
+FB83 ; Final # Lo ARABIC LETTER DDAHAL FINAL FORM
+FB85 ; Final # Lo ARABIC LETTER DAHAL FINAL FORM
+FB87 ; Final # Lo ARABIC LETTER DUL FINAL FORM
+FB89 ; Final # Lo ARABIC LETTER DDAL FINAL FORM
+FB8B ; Final # Lo ARABIC LETTER JEH FINAL FORM
+FB8D ; Final # Lo ARABIC LETTER RREH FINAL FORM
+FB8F ; Final # Lo ARABIC LETTER KEHEH FINAL FORM
+FB93 ; Final # Lo ARABIC LETTER GAF FINAL FORM
+FB97 ; Final # Lo ARABIC LETTER GUEH FINAL FORM
+FB9B ; Final # Lo ARABIC LETTER NGOEH FINAL FORM
+FB9F ; Final # Lo ARABIC LETTER NOON GHUNNA FINAL FORM
+FBA1 ; Final # Lo ARABIC LETTER RNOON FINAL FORM
+FBA5 ; Final # Lo ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM
+FBA7 ; Final # Lo ARABIC LETTER HEH GOAL FINAL FORM
+FBAB ; Final # Lo ARABIC LETTER HEH DOACHASHMEE FINAL FORM
+FBAF ; Final # Lo ARABIC LETTER YEH BARREE FINAL FORM
+FBB1 ; Final # Lo ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD4 ; Final # Lo ARABIC LETTER NG FINAL FORM
+FBD8 ; Final # Lo ARABIC LETTER U FINAL FORM
+FBDA ; Final # Lo ARABIC LETTER OE FINAL FORM
+FBDC ; Final # Lo ARABIC LETTER YU FINAL FORM
+FBDF ; Final # Lo ARABIC LETTER VE FINAL FORM
+FBE1 ; Final # Lo ARABIC LETTER KIRGHIZ OE FINAL FORM
+FBE3 ; Final # Lo ARABIC LETTER KIRGHIZ YU FINAL FORM
+FBE5 ; Final # Lo ARABIC LETTER E FINAL FORM
+FBEB ; Final # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM
+FBED ; Final # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM
+FBEF ; Final # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM
+FBF1 ; Final # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM
+FBF3 ; Final # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM
+FBF5 ; Final # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM
+FBF7 ; Final # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM
+FBFA ; Final # Lo ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
+FBFD ; Final # Lo ARABIC LETTER FARSI YEH FINAL FORM
+FC64..FC96 ; Final # Lo [51] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM..ARABIC LIGATURE YEH WITH YEH FINAL FORM
+FD11..FD2C ; Final # Lo [28] ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM..ARABIC LIGATURE DAD WITH REH FINAL FORM
+FD3C ; Final # Lo ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM
+FD51 ; Final # Lo ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM
+FD58 ; Final # Lo ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM
+FD5A..FD5B ; Final # Lo [2] ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM..ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD5E..FD5F ; Final # Lo [2] ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM..ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM
+FD62 ; Final # Lo ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM
+FD64 ; Final # Lo ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM
+FD66..FD67 ; Final # Lo [2] ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM..ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM
+FD69..FD6A ; Final # Lo [2] ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM..ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM
+FD6C ; Final # Lo ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM
+FD6E..FD6F ; Final # Lo [2] ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM..ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM
+FD71 ; Final # Lo ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM
+FD74..FD76 ; Final # Lo [3] ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM..ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM
+FD78..FD7C ; Final # Lo [5] ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM..ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM
+FD7E..FD82 ; Final # Lo [5] ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM..ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM
+FD84..FD85 ; Final # Lo [2] ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM..ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM
+FD87 ; Final # Lo ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM
+FD8B ; Final # Lo ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM
+FD96..FD97 ; Final # Lo [2] ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM
+FD99..FD9C ; Final # Lo [4] ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM..ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM
+FD9E..FDB3 ; Final # Lo [22] ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM..ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM
+FDB6..FDB7 ; Final # Lo [2] ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM..ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM
+FDB9 ; Final # Lo ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM
+FDBB..FDC2 ; Final # Lo [8] ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM..ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM
+FDC6..FDC7 ; Final # Lo [2] ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FE82 ; Final # Lo ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
+FE84 ; Final # Lo ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
+FE86 ; Final # Lo ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM
+FE88 ; Final # Lo ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM
+FE8A ; Final # Lo ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM
+FE8E ; Final # Lo ARABIC LETTER ALEF FINAL FORM
+FE90 ; Final # Lo ARABIC LETTER BEH FINAL FORM
+FE94 ; Final # Lo ARABIC LETTER TEH MARBUTA FINAL FORM
+FE96 ; Final # Lo ARABIC LETTER TEH FINAL FORM
+FE9A ; Final # Lo ARABIC LETTER THEH FINAL FORM
+FE9E ; Final # Lo ARABIC LETTER JEEM FINAL FORM
+FEA2 ; Final # Lo ARABIC LETTER HAH FINAL FORM
+FEA6 ; Final # Lo ARABIC LETTER KHAH FINAL FORM
+FEAA ; Final # Lo ARABIC LETTER DAL FINAL FORM
+FEAC ; Final # Lo ARABIC LETTER THAL FINAL FORM
+FEAE ; Final # Lo ARABIC LETTER REH FINAL FORM
+FEB0 ; Final # Lo ARABIC LETTER ZAIN FINAL FORM
+FEB2 ; Final # Lo ARABIC LETTER SEEN FINAL FORM
+FEB6 ; Final # Lo ARABIC LETTER SHEEN FINAL FORM
+FEBA ; Final # Lo ARABIC LETTER SAD FINAL FORM
+FEBE ; Final # Lo ARABIC LETTER DAD FINAL FORM
+FEC2 ; Final # Lo ARABIC LETTER TAH FINAL FORM
+FEC6 ; Final # Lo ARABIC LETTER ZAH FINAL FORM
+FECA ; Final # Lo ARABIC LETTER AIN FINAL FORM
+FECE ; Final # Lo ARABIC LETTER GHAIN FINAL FORM
+FED2 ; Final # Lo ARABIC LETTER FEH FINAL FORM
+FED6 ; Final # Lo ARABIC LETTER QAF FINAL FORM
+FEDA ; Final # Lo ARABIC LETTER KAF FINAL FORM
+FEDE ; Final # Lo ARABIC LETTER LAM FINAL FORM
+FEE2 ; Final # Lo ARABIC LETTER MEEM FINAL FORM
+FEE6 ; Final # Lo ARABIC LETTER NOON FINAL FORM
+FEEA ; Final # Lo ARABIC LETTER HEH FINAL FORM
+FEEE ; Final # Lo ARABIC LETTER WAW FINAL FORM
+FEF0 ; Final # Lo ARABIC LETTER ALEF MAKSURA FINAL FORM
+FEF2 ; Final # Lo ARABIC LETTER YEH FINAL FORM
+FEF6 ; Final # Lo ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
+FEF8 ; Final # Lo ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
+FEFA ; Final # Lo ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM
+FEFC ; Final # Lo ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+
+# Total code points: 240
+
+# ================================================
+
+FB50 ; Isolated # Lo ARABIC LETTER ALEF WASLA ISOLATED FORM
+FB52 ; Isolated # Lo ARABIC LETTER BEEH ISOLATED FORM
+FB56 ; Isolated # Lo ARABIC LETTER PEH ISOLATED FORM
+FB5A ; Isolated # Lo ARABIC LETTER BEHEH ISOLATED FORM
+FB5E ; Isolated # Lo ARABIC LETTER TTEHEH ISOLATED FORM
+FB62 ; Isolated # Lo ARABIC LETTER TEHEH ISOLATED FORM
+FB66 ; Isolated # Lo ARABIC LETTER TTEH ISOLATED FORM
+FB6A ; Isolated # Lo ARABIC LETTER VEH ISOLATED FORM
+FB6E ; Isolated # Lo ARABIC LETTER PEHEH ISOLATED FORM
+FB72 ; Isolated # Lo ARABIC LETTER DYEH ISOLATED FORM
+FB76 ; Isolated # Lo ARABIC LETTER NYEH ISOLATED FORM
+FB7A ; Isolated # Lo ARABIC LETTER TCHEH ISOLATED FORM
+FB7E ; Isolated # Lo ARABIC LETTER TCHEHEH ISOLATED FORM
+FB82 ; Isolated # Lo ARABIC LETTER DDAHAL ISOLATED FORM
+FB84 ; Isolated # Lo ARABIC LETTER DAHAL ISOLATED FORM
+FB86 ; Isolated # Lo ARABIC LETTER DUL ISOLATED FORM
+FB88 ; Isolated # Lo ARABIC LETTER DDAL ISOLATED FORM
+FB8A ; Isolated # Lo ARABIC LETTER JEH ISOLATED FORM
+FB8C ; Isolated # Lo ARABIC LETTER RREH ISOLATED FORM
+FB8E ; Isolated # Lo ARABIC LETTER KEHEH ISOLATED FORM
+FB92 ; Isolated # Lo ARABIC LETTER GAF ISOLATED FORM
+FB96 ; Isolated # Lo ARABIC LETTER GUEH ISOLATED FORM
+FB9A ; Isolated # Lo ARABIC LETTER NGOEH ISOLATED FORM
+FB9E ; Isolated # Lo ARABIC LETTER NOON GHUNNA ISOLATED FORM
+FBA0 ; Isolated # Lo ARABIC LETTER RNOON ISOLATED FORM
+FBA4 ; Isolated # Lo ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM
+FBA6 ; Isolated # Lo ARABIC LETTER HEH GOAL ISOLATED FORM
+FBAA ; Isolated # Lo ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM
+FBAE ; Isolated # Lo ARABIC LETTER YEH BARREE ISOLATED FORM
+FBB0 ; Isolated # Lo ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM
+FBD3 ; Isolated # Lo ARABIC LETTER NG ISOLATED FORM
+FBD7 ; Isolated # Lo ARABIC LETTER U ISOLATED FORM
+FBD9 ; Isolated # Lo ARABIC LETTER OE ISOLATED FORM
+FBDB ; Isolated # Lo ARABIC LETTER YU ISOLATED FORM
+FBDD..FBDE ; Isolated # Lo [2] ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM..ARABIC LETTER VE ISOLATED FORM
+FBE0 ; Isolated # Lo ARABIC LETTER KIRGHIZ OE ISOLATED FORM
+FBE2 ; Isolated # Lo ARABIC LETTER KIRGHIZ YU ISOLATED FORM
+FBE4 ; Isolated # Lo ARABIC LETTER E ISOLATED FORM
+FBEA ; Isolated # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM
+FBEC ; Isolated # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM
+FBEE ; Isolated # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM
+FBF0 ; Isolated # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM
+FBF2 ; Isolated # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM
+FBF4 ; Isolated # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM
+FBF6 ; Isolated # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM
+FBF9 ; Isolated # Lo ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
+FBFC ; Isolated # Lo ARABIC LETTER FARSI YEH ISOLATED FORM
+FC00..FC63 ; Isolated # Lo [100] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM..ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM
+FCF5..FD10 ; Isolated # Lo [28] ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM..ARABIC LIGATURE DAD WITH REH ISOLATED FORM
+FD3D ; Isolated # Lo ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FDF0..FDFB ; Isolated # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
+FDFC ; Isolated # Sc RIAL SIGN
+FE70 ; Isolated # Lo ARABIC FATHATAN ISOLATED FORM
+FE72 ; Isolated # Lo ARABIC DAMMATAN ISOLATED FORM
+FE74 ; Isolated # Lo ARABIC KASRATAN ISOLATED FORM
+FE76 ; Isolated # Lo ARABIC FATHA ISOLATED FORM
+FE78 ; Isolated # Lo ARABIC DAMMA ISOLATED FORM
+FE7A ; Isolated # Lo ARABIC KASRA ISOLATED FORM
+FE7C ; Isolated # Lo ARABIC SHADDA ISOLATED FORM
+FE7E ; Isolated # Lo ARABIC SUKUN ISOLATED FORM
+FE80..FE81 ; Isolated # Lo [2] ARABIC LETTER HAMZA ISOLATED FORM..ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
+FE83 ; Isolated # Lo ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
+FE85 ; Isolated # Lo ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
+FE87 ; Isolated # Lo ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM
+FE89 ; Isolated # Lo ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM
+FE8D ; Isolated # Lo ARABIC LETTER ALEF ISOLATED FORM
+FE8F ; Isolated # Lo ARABIC LETTER BEH ISOLATED FORM
+FE93 ; Isolated # Lo ARABIC LETTER TEH MARBUTA ISOLATED FORM
+FE95 ; Isolated # Lo ARABIC LETTER TEH ISOLATED FORM
+FE99 ; Isolated # Lo ARABIC LETTER THEH ISOLATED FORM
+FE9D ; Isolated # Lo ARABIC LETTER JEEM ISOLATED FORM
+FEA1 ; Isolated # Lo ARABIC LETTER HAH ISOLATED FORM
+FEA5 ; Isolated # Lo ARABIC LETTER KHAH ISOLATED FORM
+FEA9 ; Isolated # Lo ARABIC LETTER DAL ISOLATED FORM
+FEAB ; Isolated # Lo ARABIC LETTER THAL ISOLATED FORM
+FEAD ; Isolated # Lo ARABIC LETTER REH ISOLATED FORM
+FEAF ; Isolated # Lo ARABIC LETTER ZAIN ISOLATED FORM
+FEB1 ; Isolated # Lo ARABIC LETTER SEEN ISOLATED FORM
+FEB5 ; Isolated # Lo ARABIC LETTER SHEEN ISOLATED FORM
+FEB9 ; Isolated # Lo ARABIC LETTER SAD ISOLATED FORM
+FEBD ; Isolated # Lo ARABIC LETTER DAD ISOLATED FORM
+FEC1 ; Isolated # Lo ARABIC LETTER TAH ISOLATED FORM
+FEC5 ; Isolated # Lo ARABIC LETTER ZAH ISOLATED FORM
+FEC9 ; Isolated # Lo ARABIC LETTER AIN ISOLATED FORM
+FECD ; Isolated # Lo ARABIC LETTER GHAIN ISOLATED FORM
+FED1 ; Isolated # Lo ARABIC LETTER FEH ISOLATED FORM
+FED5 ; Isolated # Lo ARABIC LETTER QAF ISOLATED FORM
+FED9 ; Isolated # Lo ARABIC LETTER KAF ISOLATED FORM
+FEDD ; Isolated # Lo ARABIC LETTER LAM ISOLATED FORM
+FEE1 ; Isolated # Lo ARABIC LETTER MEEM ISOLATED FORM
+FEE5 ; Isolated # Lo ARABIC LETTER NOON ISOLATED FORM
+FEE9 ; Isolated # Lo ARABIC LETTER HEH ISOLATED FORM
+FEED ; Isolated # Lo ARABIC LETTER WAW ISOLATED FORM
+FEEF ; Isolated # Lo ARABIC LETTER ALEF MAKSURA ISOLATED FORM
+FEF1 ; Isolated # Lo ARABIC LETTER YEH ISOLATED FORM
+FEF5 ; Isolated # Lo ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
+FEF7 ; Isolated # Lo ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
+FEF9 ; Isolated # Lo ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM
+FEFB ; Isolated # Lo ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
+
+# Total code points: 238
+
+# ================================================
+
+2460..2473 ; Circle # No [20] CIRCLED DIGIT ONE..CIRCLED NUMBER TWENTY
+24B6..24E9 ; Circle # So [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z
+24EA ; Circle # No CIRCLED DIGIT ZERO
+3251..325F ; Circle # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE
+3260..327D ; Circle # So [30] CIRCLED HANGUL KIYEOK..CIRCLED KOREAN CHARACTER JUEUI
+3280..3289 ; Circle # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
+328A..32B0 ; Circle # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
+32B1..32BF ; Circle # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
+32D0..32FE ; Circle # So [47] CIRCLED KATAKANA A..CIRCLED KATAKANA WO
+
+# Total code points: 229
+
+# ================================================
+
+00AA ; Super # L& FEMININE ORDINAL INDICATOR
+00B2..00B3 ; Super # No [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE
+00B9 ; Super # No SUPERSCRIPT ONE
+00BA ; Super # L& MASCULINE ORDINAL INDICATOR
+02B0..02B8 ; Super # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y
+02E0..02E4 ; Super # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+1D2C..1D2E ; Super # Lm [3] MODIFIER LETTER CAPITAL A..MODIFIER LETTER CAPITAL B
+1D30..1D3A ; Super # Lm [11] MODIFIER LETTER CAPITAL D..MODIFIER LETTER CAPITAL N
+1D3C..1D4D ; Super # Lm [18] MODIFIER LETTER CAPITAL O..MODIFIER LETTER SMALL G
+1D4F..1D61 ; Super # Lm [19] MODIFIER LETTER SMALL K..MODIFIER LETTER SMALL CHI
+2070 ; Super # No SUPERSCRIPT ZERO
+2071 ; Super # L& SUPERSCRIPT LATIN SMALL LETTER I
+2074..2079 ; Super # No [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE
+207A..207C ; Super # Sm [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN
+207D ; Super # Ps SUPERSCRIPT LEFT PARENTHESIS
+207E ; Super # Pe SUPERSCRIPT RIGHT PARENTHESIS
+207F ; Super # L& SUPERSCRIPT LATIN SMALL LETTER N
+2120 ; Super # So SERVICE MARK
+2122 ; Super # So TRADE MARK SIGN
+3192..3195 ; Super # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
+3196..319F ; Super # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
+
+# Total code points: 100
+
+# ================================================
+
+1D62..1D6A ; Sub # L& [9] LATIN SUBSCRIPT SMALL LETTER I..GREEK SUBSCRIPT SMALL LETTER CHI
+2080..2089 ; Sub # No [10] SUBSCRIPT ZERO..SUBSCRIPT NINE
+208A..208C ; Sub # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
+208D ; Sub # Ps SUBSCRIPT LEFT PARENTHESIS
+208E ; Sub # Pe SUBSCRIPT RIGHT PARENTHESIS
+
+# Total code points: 24
+
+# ================================================
+
+309F ; Vertical # Lo HIRAGANA DIGRAPH YORI
+30FF ; Vertical # Lo KATAKANA DIGRAPH KOTO
+FE30 ; Vertical # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+FE31..FE32 ; Vertical # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
+FE33..FE34 ; Vertical # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE35 ; Vertical # Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+FE36 ; Vertical # Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+FE37 ; Vertical # Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+FE38 ; Vertical # Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+FE39 ; Vertical # Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+FE3A ; Vertical # Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+FE3B ; Vertical # Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+FE3C ; Vertical # Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+FE3D ; Vertical # Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+FE3E ; Vertical # Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+FE3F ; Vertical # Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+FE40 ; Vertical # Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+FE41 ; Vertical # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+FE42 ; Vertical # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+FE43 ; Vertical # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+FE44 ; Vertical # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FE47 ; Vertical # Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+FE48 ; Vertical # Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+
+# Total code points: 25
+
+# ================================================
+
+3000 ; Wide # Zs IDEOGRAPHIC SPACE
+FF01..FF03 ; Wide # Po [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN
+FF04 ; Wide # Sc FULLWIDTH DOLLAR SIGN
+FF05..FF07 ; Wide # Po [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE
+FF08 ; Wide # Ps FULLWIDTH LEFT PARENTHESIS
+FF09 ; Wide # Pe FULLWIDTH RIGHT PARENTHESIS
+FF0A ; Wide # Po FULLWIDTH ASTERISK
+FF0B ; Wide # Sm FULLWIDTH PLUS SIGN
+FF0C ; Wide # Po FULLWIDTH COMMA
+FF0D ; Wide # Pd FULLWIDTH HYPHEN-MINUS
+FF0E..FF0F ; Wide # Po [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS
+FF10..FF19 ; Wide # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
+FF1A..FF1B ; Wide # Po [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON
+FF1C..FF1E ; Wide # Sm [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN
+FF1F..FF20 ; Wide # Po [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT
+FF21..FF3A ; Wide # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF3B ; Wide # Ps FULLWIDTH LEFT SQUARE BRACKET
+FF3C ; Wide # Po FULLWIDTH REVERSE SOLIDUS
+FF3D ; Wide # Pe FULLWIDTH RIGHT SQUARE BRACKET
+FF3E ; Wide # Sk FULLWIDTH CIRCUMFLEX ACCENT
+FF3F ; Wide # Pc FULLWIDTH LOW LINE
+FF40 ; Wide # Sk FULLWIDTH GRAVE ACCENT
+FF41..FF5A ; Wide # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+FF5B ; Wide # Ps FULLWIDTH LEFT CURLY BRACKET
+FF5C ; Wide # Sm FULLWIDTH VERTICAL LINE
+FF5D ; Wide # Pe FULLWIDTH RIGHT CURLY BRACKET
+FF5E ; Wide # Sm FULLWIDTH TILDE
+FF5F ; Wide # Ps FULLWIDTH LEFT WHITE PARENTHESIS
+FF60 ; Wide # Pe FULLWIDTH RIGHT WHITE PARENTHESIS
+FFE0..FFE1 ; Wide # Sc [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN
+FFE2 ; Wide # Sm FULLWIDTH NOT SIGN
+FFE3 ; Wide # Sk FULLWIDTH MACRON
+FFE4 ; Wide # So FULLWIDTH BROKEN BAR
+FFE5..FFE6 ; Wide # Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN
+
+# Total code points: 104
+
+# ================================================
+
+FF61 ; Narrow # Po HALFWIDTH IDEOGRAPHIC FULL STOP
+FF62 ; Narrow # Ps HALFWIDTH LEFT CORNER BRACKET
+FF63 ; Narrow # Pe HALFWIDTH RIGHT CORNER BRACKET
+FF64 ; Narrow # Po HALFWIDTH IDEOGRAPHIC COMMA
+FF65 ; Narrow # Pc HALFWIDTH KATAKANA MIDDLE DOT
+FF66..FF6F ; Narrow # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
+FF70 ; Narrow # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71..FF9D ; Narrow # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+FF9E..FF9F ; Narrow # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFA0..FFBE ; Narrow # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7 ; Narrow # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF ; Narrow # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7 ; Narrow # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC ; Narrow # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+FFE8 ; Narrow # So HALFWIDTH FORMS LIGHT VERTICAL
+FFE9..FFEC ; Narrow # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW
+FFED..FFEE ; Narrow # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
+
+# Total code points: 122
+
+# ================================================
+
+FE50..FE52 ; Small # Po [3] SMALL COMMA..SMALL FULL STOP
+FE54..FE57 ; Small # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK
+FE58 ; Small # Pd SMALL EM DASH
+FE59 ; Small # Ps SMALL LEFT PARENTHESIS
+FE5A ; Small # Pe SMALL RIGHT PARENTHESIS
+FE5B ; Small # Ps SMALL LEFT CURLY BRACKET
+FE5C ; Small # Pe SMALL RIGHT CURLY BRACKET
+FE5D ; Small # Ps SMALL LEFT TORTOISE SHELL BRACKET
+FE5E ; Small # Pe SMALL RIGHT TORTOISE SHELL BRACKET
+FE5F..FE61 ; Small # Po [3] SMALL NUMBER SIGN..SMALL ASTERISK
+FE62 ; Small # Sm SMALL PLUS SIGN
+FE63 ; Small # Pd SMALL HYPHEN-MINUS
+FE64..FE66 ; Small # Sm [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN
+FE68 ; Small # Po SMALL REVERSE SOLIDUS
+FE69 ; Small # Sc SMALL DOLLAR SIGN
+FE6A..FE6B ; Small # Po [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT
+
+# Total code points: 26
+
+# ================================================
+
+3250 ; Square # So PARTNERSHIP SIGN
+32CC..32CF ; Square # So [4] SQUARE HG..LIMITED LIABILITY SIGN
+3300..3357 ; Square # So [88] SQUARE APAATO..SQUARE WATTO
+3371..33DF ; Square # So [111] SQUARE HPA..SQUARE A OVER M
+33FF ; Square # So SQUARE GAL
+
+# Total code points: 205
+
+# ================================================
+
+00BC..00BE ; Fraction # No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS
+2153..215F ; Fraction # No [13] VULGAR FRACTION ONE THIRD..FRACTION NUMERATOR ONE
+
+# Total code points: 16
diff --git a/gen.tab/unidata/extracted/DerivedJoiningType.txt b/gen.tab/unidata/extracted/DerivedJoiningType.txt
new file mode 100644
index 0000000..57e560a
--- /dev/null
+++ b/gen.tab/unidata/extracted/DerivedJoiningType.txt
@@ -0,0 +1,215 @@
+# DerivedJoiningType-4.0.1.txt
+# Date: 2004-03-02, 02:42:08 GMT [MD]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2004 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see UCD.html
+
+# ================================================
+
+# Type T is derived, as described in ArabicShaping.txt
+
+# All code points not explicitly listed for Joining_Type
+# have the value Non_Joining (U).
+
+# ================================================
+
+# Joining_Type=Join_Causing
+
+0640 ; C # Lm ARABIC TATWEEL
+200D ; C # Cf ZERO WIDTH JOINER
+
+# Total code points: 2
+
+# ================================================
+
+# Joining_Type=Dual_Joining
+
+0626 ; D # Lo ARABIC LETTER YEH WITH HAMZA ABOVE
+0628 ; D # Lo ARABIC LETTER BEH
+062A..062E ; D # Lo [5] ARABIC LETTER TEH..ARABIC LETTER KHAH
+0633..063A ; D # Lo [8] ARABIC LETTER SEEN..ARABIC LETTER GHAIN
+0641..0647 ; D # Lo [7] ARABIC LETTER FEH..ARABIC LETTER HEH
+0649..064A ; D # Lo [2] ARABIC LETTER ALEF MAKSURA..ARABIC LETTER YEH
+066E..066F ; D # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
+0678..0687 ; D # Lo [16] ARABIC LETTER HIGH HAMZA YEH..ARABIC LETTER TCHEHEH
+069A..06BF ; D # Lo [38] ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE..ARABIC LETTER TCHEH WITH DOT ABOVE
+06C1 ; D # Lo ARABIC LETTER HEH GOAL
+06CC ; D # Lo ARABIC LETTER FARSI YEH
+06CE ; D # Lo ARABIC LETTER YEH WITH SMALL V
+06D0..06D1 ; D # Lo [2] ARABIC LETTER E..ARABIC LETTER YEH WITH THREE DOTS BELOW
+06FA..06FC ; D # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
+06FF ; D # Lo ARABIC LETTER HEH WITH INVERTED V
+0712..0714 ; D # Lo [3] SYRIAC LETTER BETH..SYRIAC LETTER GAMAL GARSHUNI
+071A..071D ; D # Lo [4] SYRIAC LETTER HETH..SYRIAC LETTER YUDH
+071F..0727 ; D # Lo [9] SYRIAC LETTER KAPH..SYRIAC LETTER REVERSED PE
+0729 ; D # Lo SYRIAC LETTER QAPH
+072B ; D # Lo SYRIAC LETTER SHIN
+072D..072E ; D # Lo [2] SYRIAC LETTER PERSIAN BHETH..SYRIAC LETTER PERSIAN GHAMAL
+074E..074F ; D # Lo [2] SYRIAC LETTER SOGDIAN KHAPH..SYRIAC LETTER SOGDIAN FE
+
+# Total code points: 111
+
+# ================================================
+
+# Joining_Type=Right_Joining
+
+0622..0625 ; R # Lo [4] ARABIC LETTER ALEF WITH MADDA ABOVE..ARABIC LETTER ALEF WITH HAMZA BELOW
+0627 ; R # Lo ARABIC LETTER ALEF
+0629 ; R # Lo ARABIC LETTER TEH MARBUTA
+062F..0632 ; R # Lo [4] ARABIC LETTER DAL..ARABIC LETTER ZAIN
+0648 ; R # Lo ARABIC LETTER WAW
+0671..0673 ; R # Lo [3] ARABIC LETTER ALEF WASLA..ARABIC LETTER ALEF WITH WAVY HAMZA BELOW
+0675..0677 ; R # Lo [3] ARABIC LETTER HIGH HAMZA ALEF..ARABIC LETTER U WITH HAMZA ABOVE
+0688..0699 ; R # Lo [18] ARABIC LETTER DDAL..ARABIC LETTER REH WITH FOUR DOTS ABOVE
+06C0 ; R # Lo ARABIC LETTER HEH WITH YEH ABOVE
+06C2..06CB ; R # Lo [10] ARABIC LETTER HEH GOAL WITH HAMZA ABOVE..ARABIC LETTER VE
+06CD ; R # Lo ARABIC LETTER YEH WITH TAIL
+06CF ; R # Lo ARABIC LETTER WAW WITH DOT ABOVE
+06D2..06D3 ; R # Lo [2] ARABIC LETTER YEH BARREE..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D5 ; R # Lo ARABIC LETTER AE
+06EE..06EF ; R # Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+0710 ; R # Lo SYRIAC LETTER ALAPH
+0715..0719 ; R # Lo [5] SYRIAC LETTER DALATH..SYRIAC LETTER ZAIN
+071E ; R # Lo SYRIAC LETTER YUDH HE
+0728 ; R # Lo SYRIAC LETTER SADHE
+072A ; R # Lo SYRIAC LETTER RISH
+072C ; R # Lo SYRIAC LETTER TAW
+072F ; R # Lo SYRIAC LETTER PERSIAN DHALATH
+074D ; R # Lo SYRIAC LETTER SOGDIAN ZHAIN
+
+# Total code points: 65
+
+# ================================================
+
+# Joining_Type=Transparent
+
+00AD ; T # Cf SOFT HYPHEN
+0300..0357 ; T # Mn [88] COMBINING GRAVE ACCENT..COMBINING RIGHT HALF RING ABOVE
+035D..036F ; T # Mn [19] COMBINING DOUBLE BREVE..COMBINING LATIN SMALL LETTER X
+0483..0486 ; T # Mn [4] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC PSILI PNEUMATA
+0591..05A1 ; T # Mn [17] HEBREW ACCENT ETNAHTA..HEBREW ACCENT PAZER
+05A3..05B9 ; T # Mn [23] HEBREW ACCENT MUNAH..HEBREW POINT HOLAM
+05BB..05BD ; T # Mn [3] HEBREW POINT QUBUTS..HEBREW POINT METEG
+05BF ; T # Mn HEBREW POINT RAFE
+05C1..05C2 ; T # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C4 ; T # Mn HEBREW MARK UPPER DOT
+0610..0615 ; T # Mn [6] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL HIGH TAH
+064B..0658 ; T # Mn [14] ARABIC FATHATAN..ARABIC MARK NOON GHUNNA
+0670 ; T # Mn ARABIC LETTER SUPERSCRIPT ALEF
+06D6..06DC ; T # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+06DF..06E4 ; T # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
+06E7..06E8 ; T # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+06EA..06ED ; T # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
+070F ; T # Cf SYRIAC ABBREVIATION MARK
+0711 ; T # Mn SYRIAC LETTER SUPERSCRIPT ALAPH
+0730..074A ; T # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
+07A6..07B0 ; T # Mn [11] THAANA ABAFILI..THAANA SUKUN
+0901..0902 ; T # Mn [2] DEVANAGARI SIGN CANDRABINDU..DEVANAGARI SIGN ANUSVARA
+093C ; T # Mn DEVANAGARI SIGN NUKTA
+0941..0948 ; T # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+094D ; T # Mn DEVANAGARI SIGN VIRAMA
+0951..0954 ; T # Mn [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT
+0962..0963 ; T # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+0981 ; T # Mn BENGALI SIGN CANDRABINDU
+09BC ; T # Mn BENGALI SIGN NUKTA
+09C1..09C4 ; T # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+09CD ; T # Mn BENGALI SIGN VIRAMA
+09E2..09E3 ; T # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+0A01..0A02 ; T # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+0A3C ; T # Mn GURMUKHI SIGN NUKTA
+0A41..0A42 ; T # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+0A47..0A48 ; T # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4D ; T # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
+0A70..0A71 ; T # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+0A81..0A82 ; T # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+0ABC ; T # Mn GUJARATI SIGN NUKTA
+0AC1..0AC5 ; T # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC8 ; T # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+0ACD ; T # Mn GUJARATI SIGN VIRAMA
+0AE2..0AE3 ; T # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0B01 ; T # Mn ORIYA SIGN CANDRABINDU
+0B3C ; T # Mn ORIYA SIGN NUKTA
+0B3F ; T # Mn ORIYA VOWEL SIGN I
+0B41..0B43 ; T # Mn [3] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC R
+0B4D ; T # Mn ORIYA SIGN VIRAMA
+0B56 ; T # Mn ORIYA AI LENGTH MARK
+0B82 ; T # Mn TAMIL SIGN ANUSVARA
+0BC0 ; T # Mn TAMIL VOWEL SIGN II
+0BCD ; T # Mn TAMIL SIGN VIRAMA
+0C3E..0C40 ; T # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+0C46..0C48 ; T # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+0C4A..0C4D ; T # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
+0C55..0C56 ; T # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+0CBC ; T # Mn KANNADA SIGN NUKTA
+0CBF ; T # Mn KANNADA VOWEL SIGN I
+0CC6 ; T # Mn KANNADA VOWEL SIGN E
+0CCC..0CCD ; T # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
+0D41..0D43 ; T # Mn [3] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC R
+0D4D ; T # Mn MALAYALAM SIGN VIRAMA
+0DCA ; T # Mn SINHALA SIGN AL-LAKUNA
+0DD2..0DD4 ; T # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6 ; T # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA
+0E31 ; T # Mn THAI CHARACTER MAI HAN-AKAT
+0E34..0E3A ; T # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+0E47..0E4E ; T # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
+0EB1 ; T # Mn LAO VOWEL SIGN MAI KAN
+0EB4..0EB9 ; T # Mn [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU
+0EBB..0EBC ; T # Mn [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO
+0EC8..0ECD ; T # Mn [6] LAO TONE MAI EK..LAO NIGGAHITA
+0F18..0F19 ; T # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F35 ; T # Mn TIBETAN MARK NGAS BZUNG NYI ZLA
+0F37 ; T # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F39 ; T # Mn TIBETAN MARK TSA -PHRU
+0F71..0F7E ; T # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
+0F80..0F84 ; T # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
+0F86..0F87 ; T # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
+0F90..0F97 ; T # Mn [8] TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER JA
+0F99..0FBC ; T # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FC6 ; T # Mn TIBETAN SYMBOL PADMA GDAN
+102D..1030 ; T # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
+1032 ; T # Mn MYANMAR VOWEL SIGN AI
+1036..1037 ; T # Mn [2] MYANMAR SIGN ANUSVARA..MYANMAR SIGN DOT BELOW
+1039 ; T # Mn MYANMAR SIGN VIRAMA
+1058..1059 ; T # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+1712..1714 ; T # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
+1732..1734 ; T # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD
+1752..1753 ; T # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
+1772..1773 ; T # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+17B4..17B5 ; T # Cf [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+17B7..17BD ; T # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
+17C6 ; T # Mn KHMER SIGN NIKAHIT
+17C9..17D3 ; T # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
+17DD ; T # Mn KHMER SIGN ATTHACAN
+180B..180D ; T # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+18A9 ; T # Mn MONGOLIAN LETTER ALI GALI DAGALGA
+1920..1922 ; T # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
+1927..1928 ; T # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+1932 ; T # Mn LIMBU SMALL LETTER ANUSVARA
+1939..193B ; T # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
+200B ; T # Cf ZERO WIDTH SPACE
+200E..200F ; T # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
+202A..202E ; T # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
+2060..2063 ; T # Cf [4] WORD JOINER..INVISIBLE SEPARATOR
+206A..206F ; T # Cf [6] INHIBIT SYMMETRIC SWAPPING..NOMINAL DIGIT SHAPES
+20D0..20DC ; T # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+20E1 ; T # Mn COMBINING LEFT RIGHT ARROW ABOVE
+20E5..20EA ; T # Mn [6] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING LEFTWARDS ARROW OVERLAY
+302A..302F ; T # Mn [6] IDEOGRAPHIC LEVEL TONE MARK..HANGUL DOUBLE DOT TONE MARK
+3099..309A ; T # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+FB1E ; T # Mn HEBREW POINT JUDEO-SPANISH VARIKA
+FE00..FE0F ; T # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+FE20..FE23 ; T # Mn [4] COMBINING LIGATURE LEFT HALF..COMBINING DOUBLE TILDE RIGHT HALF
+FEFF ; T # Cf ZERO WIDTH NO-BREAK SPACE
+FFF9..FFFB ; T # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR
+1D167..1D169 ; T # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
+1D173..1D17A ; T # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
+1D17B..1D182 ; T # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
+1D185..1D18B ; T # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D1AA..1D1AD ; T # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+E0001 ; T # Cf LANGUAGE TAG
+E0020..E007F ; T # Cf [96] TAG SPACE..CANCEL TAG
+E0100..E01EF ; T # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+
+# Total code points: 923
diff --git a/lib/Headers.mk b/lib/Headers.mk
new file mode 100644
index 0000000..9ea5381
--- /dev/null
+++ b/lib/Headers.mk
@@ -0,0 +1,14 @@
+libfribidi_la_headers = \
+ fribidi-begindecls.h \
+ fribidi-bidi.h \
+ fribidi-bidi-type.h \
+ fribidi-bidi-types.h \
+ fribidi-common.h \
+ fribidi-config.h \
+ fribidi-enddecls.h \
+ fribidi-env.h \
+ fribidi-mirroring.h \
+ fribidi-types.h \
+ fribidi-unicode.h \
+ fribidi-unicode-version.h \
+ fribidi.h # should be the last entry
diff --git a/lib/Makefile.am b/lib/Makefile.am
new file mode 100644
index 0000000..b260142
--- /dev/null
+++ b/lib/Makefile.am
@@ -0,0 +1,75 @@
+lib_LTLIBRARIES = libfribidi.la
+
+AM_CPPFLAGS = $(GLIB_CFLAGS)
+
+if PLATFORM_WIN32
+no_undefined = -no-undefined
+endif # PLATFORM_WIN32
+
+libfribidi_la_LDFLAGS = -version-info $(LT_VERSION_INFO) $(no_undefined)
+libfribidi_la_LIBADD = $(GLIB_LIBS)
+libfribidi_la_DEPENDENCIES =
+
+if OS_WIN32
+libfribidi_la_LDFLAGS += -export-symbols
+endif # OS_WIN32
+
+if FRIBIDI_CHARSETS
+
+AM_CPPFLAGS += -I$(top_srcdir)/charset
+libfribidi_la_LIBADD += $(top_builddir)/charset/libfribidi-char-sets.la
+libfribidi_la_DEPENDENCIES += $(top_builddir)/charset/libfribidi-char-sets.la
+
+$(top_builddir)/charset/libfribidi-char-sets.la:
+ cd $(top_builddir)/lib && $(MAKE) $(AM_MAKEFLAGS) libfribidi-char-sets.la
+
+endif # FRIBIDI_CHARSETS
+
+include Headers.mk
+pkginclude_HEADERS = $(libfribidi_la_headers)
+
+libfribidi_la_SOURCES = \
+ bidi-types.h \
+ bidi-types-list.h \
+ bidi-type-table.i \
+ common.h \
+ debug.h \
+ fribidi.c \
+ fribidi-bidi.c \
+ fribidi-bidi-type.c \
+ fribidi-bidi-types.c \
+ fribidi-env.c \
+ fribidi-mem.c \
+ fribidi-mirroring.c \
+ mem.h \
+ mirroring-table.i
+
+BUILT_SOURCES= \
+ bidi-type-table.i \
+ mirroring-table.i \
+ fribidi-config.h \
+ fribidi-unicode-version.h
+
+MAINTAINERCLEANFILES = $(BUILT_SOURCES)
+
+fribidi_tab_mirroring_0.i: $(fribidi_create_mirroring_SOURCES) fribidi_types.h \
+ unidata/BidiMirroring.txt
+ $(MAKE) fribidi_create_mirroring
+ if test -d unidata; then UNIDATA=unidata; \
+ else UNIDATA="$(srcdir)/unidata"; fi && \
+ ./fribidi_create_mirroring "$$UNIDATA" || \
+ ($(RM) "$@"; false)
+
+fribidi_tab_bidi_type.i: $(fribidi_create_char_types_SOURCES) \
+ unidata/UnicodeData.txt
+ $(MAKE) fribidi_create_char_types
+ if test -d unidata; then UNIDATA=unidata; \
+ else UNIDATA="$(srcdir)/unidata"; fi && \
+ ./fribidi_create_char_types "`echo "$@" \
+ | $(SED) 's/[^0-9]*//g'`" "$$UNIDATA" || \
+ ($(RM) "$@"; false)
+ $(RM) fribidi_tab_char_type_stamp
+ $(MAKE) fribidi_tab_char_type_stamp
+
+$(top_builddir)/config.h: $(top_srcdir)/config.h.in
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) config.h
diff --git a/lib/bidi-type-table.i b/lib/bidi-type-table.i
new file mode 100644
index 0000000..c37c962
--- /dev/null
+++ b/lib/bidi-type-table.i
@@ -0,0 +1,5228 @@
+/*
+ This file was automatically created from UnicodeData.txt version 3.2.0
+ by fribidi_create_char_types
+*/
+
+#ifndef FRIBIDI_TAB_CHAR_TYPE_2_I
+#define FRIBIDI_TAB_CHAR_TYPE_2_I
+
+#include "bidi-types.h"
+
+#define LTR FRIBIDI_PROP_TYPE_LTR
+#define RTL FRIBIDI_PROP_TYPE_RTL
+#define AL FRIBIDI_PROP_TYPE_AL
+#define ON FRIBIDI_PROP_TYPE_ON
+#define BN FRIBIDI_PROP_TYPE_BN
+#define AN FRIBIDI_PROP_TYPE_AN
+#define BS FRIBIDI_PROP_TYPE_BS
+#define CS FRIBIDI_PROP_TYPE_CS
+#define EN FRIBIDI_PROP_TYPE_EN
+#define ES FRIBIDI_PROP_TYPE_ES
+#define ET FRIBIDI_PROP_TYPE_ET
+#define LRE FRIBIDI_PROP_TYPE_LRE
+#define LRO FRIBIDI_PROP_TYPE_LRO
+#define NSM FRIBIDI_PROP_TYPE_NSM
+#define PDF FRIBIDI_PROP_TYPE_PDF
+#define RLE FRIBIDI_PROP_TYPE_RLE
+#define RLO FRIBIDI_PROP_TYPE_RLO
+#define SS FRIBIDI_PROP_TYPE_SS
+#define WS FRIBIDI_PROP_TYPE_WS
+
+#define PACKTAB_UINT8 fribidi_uint8
+#define PACKTAB_UINT16 fribidi_uint16
+#define PACKTAB_UINT32 fribidi_uint32
+/*
+ Automatically generated by packtab.c version 2
+
+ just use FRIBIDI_GET_TYPE(key)
+
+ assumed sizeof(FriBidiPropCharType) == 1
+ required memory: 19200
+ lookups: 2
+ partition shape: FriBidiPropertyBlock[4352][256]
+ different table entries: 1 41
+*/
+
+/* *INDENT-OFF* */
+
+static const FriBidiPropCharType FriBidiPropertyBlockLevel1[256*41] = {
+
+#define FriBidiPropertyBlockLevel1_0000 0x0
+
+ 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,
+
+#define FriBidiPropertyBlockLevel1_0100 0x100
+
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_0200 0x200
+
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,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,
+
+#define FriBidiPropertyBlockLevel1_0300 0x300
+
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,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,
+ NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ LTR,LTR,LTR,LTR, ON, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON,LTR,
+ LTR,LTR,LTR,LTR, 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, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_0400 0x400
+
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,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,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_0500 0x500
+
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,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,
+ RTL,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,RTL,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,NSM,NSM,RTL,NSM,
+ RTL,NSM,NSM,RTL,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,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+
+#define FriBidiPropertyBlockLevel1_0600 0x600
+
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, 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, 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, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ 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, AL,NSM,NSM,
+ NSM,NSM,NSM,NSM,NSM, AL, AL,NSM,NSM, ON,NSM,NSM,NSM,NSM, AL, AL,
+ EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, AL, AL, AL, AL, AL, AL,
+
+#define FriBidiPropertyBlockLevel1_0700 0x700
+
+ 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, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, 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, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_0900 0x800
+
+ 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,LTR,LTR,
+ LTR,NSM,NSM,NSM,NSM,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,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,LTR,
+ LTR,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,NSM,NSM,LTR,LTR,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,
+
+#define FriBidiPropertyBlockLevel1_0A00 0x900
+
+ 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,NSM,LTR,LTR,LTR,
+ LTR,NSM,NSM,LTR,LTR,LTR,LTR,NSM,NSM,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,
+ 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,LTR,NSM,NSM,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,
+
+#define FriBidiPropertyBlockLevel1_0B00 0xA00
+
+ 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,LTR,LTR,NSM,
+ LTR,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,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,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,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_0C00 0xB00
+
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,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,LTR,NSM,NSM,NSM,NSM,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,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,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,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_0D00 0xC00
+
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,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,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,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,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,NSM,NSM,NSM,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,
+
+#define FriBidiPropertyBlockLevel1_0E00 0xD00
+
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,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,LTR,LTR,LTR,LTR, 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,LTR,NSM,NSM,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,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,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_0F00 0xE00
+
+ 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,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,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,
+
+#define FriBidiPropertyBlockLevel1_1000 0xF00
+
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,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,LTR,LTR,LTR,NSM,NSM,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,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,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_1600 0x1000
+
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,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,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_1700 0x1100
+
+ 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,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,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,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,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,
+
+#define FriBidiPropertyBlockLevel1_1800 0x1200
+
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,NSM,NSM,NSM, 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,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,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_1F00 0x1300
+
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,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,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON, ON,LTR,
+
+#define FriBidiPropertyBlockLevel1_2000 0x1400
+
+ 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,LTR,LTR,LTR,LTR, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR, WS,
+ BN, BN, BN, BN,LTR,LTR,LTR,LTR,LTR,LTR, BN, BN, BN, BN, BN, BN,
+ EN,LTR,LTR,LTR, 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,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ ET, ET, ET, ET, ET, ET, ET, ET, ET, ET, ET, ET, ET, ET, ET, ET,
+ ET, 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,
+ NSM,NSM,NSM,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,
+
+#define FriBidiPropertyBlockLevel1_2100 0x1500
+
+ 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,LTR,LTR,LTR,LTR,LTR,
+ ON, ON, ON, ON, ON,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,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,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,
+
+#define FriBidiPropertyBlockLevel1_2200 0x1600
+
+ 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,
+
+#define FriBidiPropertyBlockLevel1_2300 0x1700
+
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, 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,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_2400 0x1800
+
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, 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,
+ 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,
+ 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, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,LTR,
+
+#define FriBidiPropertyBlockLevel1_2500 0x1900
+
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+
+#define FriBidiPropertyBlockLevel1_2600 0x1A00
+
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON,LTR,LTR, 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,LTR,LTR,
+ 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,
+
+#define FriBidiPropertyBlockLevel1_2700 0x1B00
+
+ LTR, ON, ON, ON, ON,LTR, ON, ON, ON, ON,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,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,LTR, ON,LTR, ON,
+ ON, ON, ON,LTR,LTR,LTR, ON,LTR, ON, ON, ON, ON, ON, ON, ON,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,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,
+ LTR, 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,
+ ON, ON, ON, ON, 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,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+
+#define FriBidiPropertyBlockLevel1_2E00 0x1C00
+
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,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,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_2F00 0x1D00
+
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, 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,
+ ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_3000 0x1E00
+
+ 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, 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,NSM,NSM, ON, ON,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,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,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,
+
+#define FriBidiPropertyBlockLevel1_3200 0x1F00
+
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,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,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,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,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_A400 0x2000
+
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,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,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_FB00 0x2100
+
+ LTR,LTR,LTR,LTR,LTR,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,
+
+#define FriBidiPropertyBlockLevel1_FC00 0x2200
+
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+
+#define FriBidiPropertyBlockLevel1_FD00 0x2300
+
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, 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,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+
+#define FriBidiPropertyBlockLevel1_FE00 0x2400
+
+ 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,
+ NSM,NSM,NSM,NSM,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,LTR,LTR, ON, ON, ON, ON, ON, ON, ON,
+ CS, ON, CS,LTR, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ET,
+ ON, ON, ET, ET, ON, ON, ON,LTR, ON, ET, ET, ON,LTR,LTR,LTR,LTR,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+ AL, AL, AL, AL, AL, AL, AL, 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,
+
+#define FriBidiPropertyBlockLevel1_FF00 0x2500
+
+ LTR, 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,LTR, ON, ON, ON, ON, ON, ON, ON,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, BN, BN, BN, ON, ON,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_1D100 0x2600
+
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,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,LTR,
+ LTR,LTR,LTR, BN, BN, BN, BN, BN, BN, BN, BN,NSM,NSM,NSM,NSM,NSM,
+ NSM,NSM,NSM,LTR,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,LTR,LTR,LTR,LTR,LTR,LTR,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,
+
+#define FriBidiPropertyBlockLevel1_1D700 0x2700
+
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+ LTR,LTR,LTR,LTR,LTR,LTR,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, 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,
+
+#define FriBidiPropertyBlockLevel1_E0000 0x2800
+
+ LTR, 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,
+ 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, 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, 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, BN, BN,
+ BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, 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,
+};
+
+static const PACKTAB_UINT16 FriBidiPropertyBlockLevel0[4352*1] = {
+
+#define FriBidiPropertyBlockLevel0_0000 0x0
+
+ FriBidiPropertyBlockLevel1_0000, /* 0000..00FF */
+ FriBidiPropertyBlockLevel1_0100, /* 0100..01FF */
+ FriBidiPropertyBlockLevel1_0200, /* 0200..02FF */
+ FriBidiPropertyBlockLevel1_0300, /* 0300..03FF */
+ FriBidiPropertyBlockLevel1_0400, /* 0400..04FF */
+ FriBidiPropertyBlockLevel1_0500, /* 0500..05FF */
+ FriBidiPropertyBlockLevel1_0600, /* 0600..06FF */
+ FriBidiPropertyBlockLevel1_0700, /* 0700..07FF */
+ FriBidiPropertyBlockLevel1_0100, /* 0800..08FF */
+ FriBidiPropertyBlockLevel1_0900, /* 0900..09FF */
+ FriBidiPropertyBlockLevel1_0A00, /* 0A00..0AFF */
+ FriBidiPropertyBlockLevel1_0B00, /* 0B00..0BFF */
+ FriBidiPropertyBlockLevel1_0C00, /* 0C00..0CFF */
+ FriBidiPropertyBlockLevel1_0D00, /* 0D00..0DFF */
+ FriBidiPropertyBlockLevel1_0E00, /* 0E00..0EFF */
+ FriBidiPropertyBlockLevel1_0F00, /* 0F00..0FFF */
+ FriBidiPropertyBlockLevel1_1000, /* 1000..10FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1100..11FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1200..12FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1300..13FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1400..14FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1500..15FF */
+ FriBidiPropertyBlockLevel1_1600, /* 1600..16FF */
+ FriBidiPropertyBlockLevel1_1700, /* 1700..17FF */
+ FriBidiPropertyBlockLevel1_1800, /* 1800..18FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1900..19FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1A00..1AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1B00..1BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1C00..1CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1D00..1DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1E00..1EFF */
+ FriBidiPropertyBlockLevel1_1F00, /* 1F00..1FFF */
+ FriBidiPropertyBlockLevel1_2000, /* 2000..20FF */
+ FriBidiPropertyBlockLevel1_2100, /* 2100..21FF */
+ FriBidiPropertyBlockLevel1_2200, /* 2200..22FF */
+ FriBidiPropertyBlockLevel1_2300, /* 2300..23FF */
+ FriBidiPropertyBlockLevel1_2400, /* 2400..24FF */
+ FriBidiPropertyBlockLevel1_2500, /* 2500..25FF */
+ FriBidiPropertyBlockLevel1_2600, /* 2600..26FF */
+ FriBidiPropertyBlockLevel1_2700, /* 2700..27FF */
+ FriBidiPropertyBlockLevel1_2500, /* 2800..28FF */
+ FriBidiPropertyBlockLevel1_2500, /* 2900..29FF */
+ FriBidiPropertyBlockLevel1_2500, /* 2A00..2AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2B00..2BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2C00..2CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2D00..2DFF */
+ FriBidiPropertyBlockLevel1_2E00, /* 2E00..2EFF */
+ FriBidiPropertyBlockLevel1_2F00, /* 2F00..2FFF */
+ FriBidiPropertyBlockLevel1_3000, /* 3000..30FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3100..31FF */
+ FriBidiPropertyBlockLevel1_3200, /* 3200..32FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3300..33FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3400..34FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3500..35FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3600..36FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3700..37FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3800..38FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3900..39FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3A00..3AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3B00..3BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3C00..3CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3D00..3DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3E00..3EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3F00..3FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4000..40FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4100..41FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4200..42FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4300..43FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4400..44FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4500..45FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4600..46FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4700..47FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4800..48FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4900..49FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4A00..4AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4B00..4BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4C00..4CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4D00..4DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4E00..4EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4F00..4FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5000..50FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5100..51FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5200..52FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5300..53FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5400..54FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5500..55FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5600..56FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5700..57FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5800..58FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5900..59FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5A00..5AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5B00..5BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5C00..5CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5D00..5DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5E00..5EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5F00..5FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6000..60FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6100..61FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6200..62FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6300..63FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6400..64FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6500..65FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6600..66FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6700..67FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6800..68FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6900..69FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6A00..6AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6B00..6BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6C00..6CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6D00..6DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6E00..6EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6F00..6FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7000..70FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7100..71FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7200..72FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7300..73FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7400..74FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7500..75FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7600..76FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7700..77FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7800..78FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7900..79FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7A00..7AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7B00..7BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7C00..7CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7D00..7DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7E00..7EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7F00..7FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8000..80FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8100..81FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8200..82FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8300..83FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8400..84FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8500..85FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8600..86FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8700..87FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8800..88FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8900..89FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8A00..8AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8B00..8BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8C00..8CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8D00..8DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8E00..8EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8F00..8FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9000..90FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9100..91FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9200..92FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9300..93FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9400..94FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9500..95FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9600..96FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9700..97FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9800..98FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9900..99FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9A00..9AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9B00..9BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9C00..9CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9D00..9DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9E00..9EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9F00..9FFF */
+ FriBidiPropertyBlockLevel1_0100, /* A000..A0FF */
+ FriBidiPropertyBlockLevel1_0100, /* A100..A1FF */
+ FriBidiPropertyBlockLevel1_0100, /* A200..A2FF */
+ FriBidiPropertyBlockLevel1_0100, /* A300..A3FF */
+ FriBidiPropertyBlockLevel1_A400, /* A400..A4FF */
+ FriBidiPropertyBlockLevel1_0100, /* A500..A5FF */
+ FriBidiPropertyBlockLevel1_0100, /* A600..A6FF */
+ FriBidiPropertyBlockLevel1_0100, /* A700..A7FF */
+ FriBidiPropertyBlockLevel1_0100, /* A800..A8FF */
+ FriBidiPropertyBlockLevel1_0100, /* A900..A9FF */
+ FriBidiPropertyBlockLevel1_0100, /* AA00..AAFF */
+ FriBidiPropertyBlockLevel1_0100, /* AB00..ABFF */
+ FriBidiPropertyBlockLevel1_0100, /* AC00..ACFF */
+ FriBidiPropertyBlockLevel1_0100, /* AD00..ADFF */
+ FriBidiPropertyBlockLevel1_0100, /* AE00..AEFF */
+ FriBidiPropertyBlockLevel1_0100, /* AF00..AFFF */
+ FriBidiPropertyBlockLevel1_0100, /* B000..B0FF */
+ FriBidiPropertyBlockLevel1_0100, /* B100..B1FF */
+ FriBidiPropertyBlockLevel1_0100, /* B200..B2FF */
+ FriBidiPropertyBlockLevel1_0100, /* B300..B3FF */
+ FriBidiPropertyBlockLevel1_0100, /* B400..B4FF */
+ FriBidiPropertyBlockLevel1_0100, /* B500..B5FF */
+ FriBidiPropertyBlockLevel1_0100, /* B600..B6FF */
+ FriBidiPropertyBlockLevel1_0100, /* B700..B7FF */
+ FriBidiPropertyBlockLevel1_0100, /* B800..B8FF */
+ FriBidiPropertyBlockLevel1_0100, /* B900..B9FF */
+ FriBidiPropertyBlockLevel1_0100, /* BA00..BAFF */
+ FriBidiPropertyBlockLevel1_0100, /* BB00..BBFF */
+ FriBidiPropertyBlockLevel1_0100, /* BC00..BCFF */
+ FriBidiPropertyBlockLevel1_0100, /* BD00..BDFF */
+ FriBidiPropertyBlockLevel1_0100, /* BE00..BEFF */
+ FriBidiPropertyBlockLevel1_0100, /* BF00..BFFF */
+ FriBidiPropertyBlockLevel1_0100, /* C000..C0FF */
+ FriBidiPropertyBlockLevel1_0100, /* C100..C1FF */
+ FriBidiPropertyBlockLevel1_0100, /* C200..C2FF */
+ FriBidiPropertyBlockLevel1_0100, /* C300..C3FF */
+ FriBidiPropertyBlockLevel1_0100, /* C400..C4FF */
+ FriBidiPropertyBlockLevel1_0100, /* C500..C5FF */
+ FriBidiPropertyBlockLevel1_0100, /* C600..C6FF */
+ FriBidiPropertyBlockLevel1_0100, /* C700..C7FF */
+ FriBidiPropertyBlockLevel1_0100, /* C800..C8FF */
+ FriBidiPropertyBlockLevel1_0100, /* C900..C9FF */
+ FriBidiPropertyBlockLevel1_0100, /* CA00..CAFF */
+ FriBidiPropertyBlockLevel1_0100, /* CB00..CBFF */
+ FriBidiPropertyBlockLevel1_0100, /* CC00..CCFF */
+ FriBidiPropertyBlockLevel1_0100, /* CD00..CDFF */
+ FriBidiPropertyBlockLevel1_0100, /* CE00..CEFF */
+ FriBidiPropertyBlockLevel1_0100, /* CF00..CFFF */
+ FriBidiPropertyBlockLevel1_0100, /* D000..D0FF */
+ FriBidiPropertyBlockLevel1_0100, /* D100..D1FF */
+ FriBidiPropertyBlockLevel1_0100, /* D200..D2FF */
+ FriBidiPropertyBlockLevel1_0100, /* D300..D3FF */
+ FriBidiPropertyBlockLevel1_0100, /* D400..D4FF */
+ FriBidiPropertyBlockLevel1_0100, /* D500..D5FF */
+ FriBidiPropertyBlockLevel1_0100, /* D600..D6FF */
+ FriBidiPropertyBlockLevel1_0100, /* D700..D7FF */
+ FriBidiPropertyBlockLevel1_0100, /* D800..D8FF */
+ FriBidiPropertyBlockLevel1_0100, /* D900..D9FF */
+ FriBidiPropertyBlockLevel1_0100, /* DA00..DAFF */
+ FriBidiPropertyBlockLevel1_0100, /* DB00..DBFF */
+ FriBidiPropertyBlockLevel1_0100, /* DC00..DCFF */
+ FriBidiPropertyBlockLevel1_0100, /* DD00..DDFF */
+ FriBidiPropertyBlockLevel1_0100, /* DE00..DEFF */
+ FriBidiPropertyBlockLevel1_0100, /* DF00..DFFF */
+ FriBidiPropertyBlockLevel1_0100, /* E000..E0FF */
+ FriBidiPropertyBlockLevel1_0100, /* E100..E1FF */
+ FriBidiPropertyBlockLevel1_0100, /* E200..E2FF */
+ FriBidiPropertyBlockLevel1_0100, /* E300..E3FF */
+ FriBidiPropertyBlockLevel1_0100, /* E400..E4FF */
+ FriBidiPropertyBlockLevel1_0100, /* E500..E5FF */
+ FriBidiPropertyBlockLevel1_0100, /* E600..E6FF */
+ FriBidiPropertyBlockLevel1_0100, /* E700..E7FF */
+ FriBidiPropertyBlockLevel1_0100, /* E800..E8FF */
+ FriBidiPropertyBlockLevel1_0100, /* E900..E9FF */
+ FriBidiPropertyBlockLevel1_0100, /* EA00..EAFF */
+ FriBidiPropertyBlockLevel1_0100, /* EB00..EBFF */
+ FriBidiPropertyBlockLevel1_0100, /* EC00..ECFF */
+ FriBidiPropertyBlockLevel1_0100, /* ED00..EDFF */
+ FriBidiPropertyBlockLevel1_0100, /* EE00..EEFF */
+ FriBidiPropertyBlockLevel1_0100, /* EF00..EFFF */
+ FriBidiPropertyBlockLevel1_0100, /* F000..F0FF */
+ FriBidiPropertyBlockLevel1_0100, /* F100..F1FF */
+ FriBidiPropertyBlockLevel1_0100, /* F200..F2FF */
+ FriBidiPropertyBlockLevel1_0100, /* F300..F3FF */
+ FriBidiPropertyBlockLevel1_0100, /* F400..F4FF */
+ FriBidiPropertyBlockLevel1_0100, /* F500..F5FF */
+ FriBidiPropertyBlockLevel1_0100, /* F600..F6FF */
+ FriBidiPropertyBlockLevel1_0100, /* F700..F7FF */
+ FriBidiPropertyBlockLevel1_0100, /* F800..F8FF */
+ FriBidiPropertyBlockLevel1_0100, /* F900..F9FF */
+ FriBidiPropertyBlockLevel1_0100, /* FA00..FAFF */
+ FriBidiPropertyBlockLevel1_FB00, /* FB00..FBFF */
+ FriBidiPropertyBlockLevel1_FC00, /* FC00..FCFF */
+ FriBidiPropertyBlockLevel1_FD00, /* FD00..FDFF */
+ FriBidiPropertyBlockLevel1_FE00, /* FE00..FEFF */
+ FriBidiPropertyBlockLevel1_FF00, /* FF00..FFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10000..100FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10100..101FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10200..102FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10300..103FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10400..104FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10500..105FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10600..106FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10700..107FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10800..108FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10900..109FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10A00..10AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10B00..10BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10C00..10CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10D00..10DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10E00..10EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10F00..10FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 11000..110FF */
+ FriBidiPropertyBlockLevel1_0100, /* 11100..111FF */
+ FriBidiPropertyBlockLevel1_0100, /* 11200..112FF */
+ FriBidiPropertyBlockLevel1_0100, /* 11300..113FF */
+ FriBidiPropertyBlockLevel1_0100, /* 11400..114FF */
+ FriBidiPropertyBlockLevel1_0100, /* 11500..115FF */
+ FriBidiPropertyBlockLevel1_0100, /* 11600..116FF */
+ FriBidiPropertyBlockLevel1_0100, /* 11700..117FF */
+ FriBidiPropertyBlockLevel1_0100, /* 11800..118FF */
+ FriBidiPropertyBlockLevel1_0100, /* 11900..119FF */
+ FriBidiPropertyBlockLevel1_0100, /* 11A00..11AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 11B00..11BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 11C00..11CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 11D00..11DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 11E00..11EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 11F00..11FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 12000..120FF */
+ FriBidiPropertyBlockLevel1_0100, /* 12100..121FF */
+ FriBidiPropertyBlockLevel1_0100, /* 12200..122FF */
+ FriBidiPropertyBlockLevel1_0100, /* 12300..123FF */
+ FriBidiPropertyBlockLevel1_0100, /* 12400..124FF */
+ FriBidiPropertyBlockLevel1_0100, /* 12500..125FF */
+ FriBidiPropertyBlockLevel1_0100, /* 12600..126FF */
+ FriBidiPropertyBlockLevel1_0100, /* 12700..127FF */
+ FriBidiPropertyBlockLevel1_0100, /* 12800..128FF */
+ FriBidiPropertyBlockLevel1_0100, /* 12900..129FF */
+ FriBidiPropertyBlockLevel1_0100, /* 12A00..12AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 12B00..12BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 12C00..12CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 12D00..12DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 12E00..12EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 12F00..12FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 13000..130FF */
+ FriBidiPropertyBlockLevel1_0100, /* 13100..131FF */
+ FriBidiPropertyBlockLevel1_0100, /* 13200..132FF */
+ FriBidiPropertyBlockLevel1_0100, /* 13300..133FF */
+ FriBidiPropertyBlockLevel1_0100, /* 13400..134FF */
+ FriBidiPropertyBlockLevel1_0100, /* 13500..135FF */
+ FriBidiPropertyBlockLevel1_0100, /* 13600..136FF */
+ FriBidiPropertyBlockLevel1_0100, /* 13700..137FF */
+ FriBidiPropertyBlockLevel1_0100, /* 13800..138FF */
+ FriBidiPropertyBlockLevel1_0100, /* 13900..139FF */
+ FriBidiPropertyBlockLevel1_0100, /* 13A00..13AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 13B00..13BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 13C00..13CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 13D00..13DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 13E00..13EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 13F00..13FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 14000..140FF */
+ FriBidiPropertyBlockLevel1_0100, /* 14100..141FF */
+ FriBidiPropertyBlockLevel1_0100, /* 14200..142FF */
+ FriBidiPropertyBlockLevel1_0100, /* 14300..143FF */
+ FriBidiPropertyBlockLevel1_0100, /* 14400..144FF */
+ FriBidiPropertyBlockLevel1_0100, /* 14500..145FF */
+ FriBidiPropertyBlockLevel1_0100, /* 14600..146FF */
+ FriBidiPropertyBlockLevel1_0100, /* 14700..147FF */
+ FriBidiPropertyBlockLevel1_0100, /* 14800..148FF */
+ FriBidiPropertyBlockLevel1_0100, /* 14900..149FF */
+ FriBidiPropertyBlockLevel1_0100, /* 14A00..14AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 14B00..14BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 14C00..14CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 14D00..14DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 14E00..14EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 14F00..14FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 15000..150FF */
+ FriBidiPropertyBlockLevel1_0100, /* 15100..151FF */
+ FriBidiPropertyBlockLevel1_0100, /* 15200..152FF */
+ FriBidiPropertyBlockLevel1_0100, /* 15300..153FF */
+ FriBidiPropertyBlockLevel1_0100, /* 15400..154FF */
+ FriBidiPropertyBlockLevel1_0100, /* 15500..155FF */
+ FriBidiPropertyBlockLevel1_0100, /* 15600..156FF */
+ FriBidiPropertyBlockLevel1_0100, /* 15700..157FF */
+ FriBidiPropertyBlockLevel1_0100, /* 15800..158FF */
+ FriBidiPropertyBlockLevel1_0100, /* 15900..159FF */
+ FriBidiPropertyBlockLevel1_0100, /* 15A00..15AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 15B00..15BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 15C00..15CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 15D00..15DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 15E00..15EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 15F00..15FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 16000..160FF */
+ FriBidiPropertyBlockLevel1_0100, /* 16100..161FF */
+ FriBidiPropertyBlockLevel1_0100, /* 16200..162FF */
+ FriBidiPropertyBlockLevel1_0100, /* 16300..163FF */
+ FriBidiPropertyBlockLevel1_0100, /* 16400..164FF */
+ FriBidiPropertyBlockLevel1_0100, /* 16500..165FF */
+ FriBidiPropertyBlockLevel1_0100, /* 16600..166FF */
+ FriBidiPropertyBlockLevel1_0100, /* 16700..167FF */
+ FriBidiPropertyBlockLevel1_0100, /* 16800..168FF */
+ FriBidiPropertyBlockLevel1_0100, /* 16900..169FF */
+ FriBidiPropertyBlockLevel1_0100, /* 16A00..16AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 16B00..16BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 16C00..16CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 16D00..16DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 16E00..16EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 16F00..16FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 17000..170FF */
+ FriBidiPropertyBlockLevel1_0100, /* 17100..171FF */
+ FriBidiPropertyBlockLevel1_0100, /* 17200..172FF */
+ FriBidiPropertyBlockLevel1_0100, /* 17300..173FF */
+ FriBidiPropertyBlockLevel1_0100, /* 17400..174FF */
+ FriBidiPropertyBlockLevel1_0100, /* 17500..175FF */
+ FriBidiPropertyBlockLevel1_0100, /* 17600..176FF */
+ FriBidiPropertyBlockLevel1_0100, /* 17700..177FF */
+ FriBidiPropertyBlockLevel1_0100, /* 17800..178FF */
+ FriBidiPropertyBlockLevel1_0100, /* 17900..179FF */
+ FriBidiPropertyBlockLevel1_0100, /* 17A00..17AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 17B00..17BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 17C00..17CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 17D00..17DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 17E00..17EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 17F00..17FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 18000..180FF */
+ FriBidiPropertyBlockLevel1_0100, /* 18100..181FF */
+ FriBidiPropertyBlockLevel1_0100, /* 18200..182FF */
+ FriBidiPropertyBlockLevel1_0100, /* 18300..183FF */
+ FriBidiPropertyBlockLevel1_0100, /* 18400..184FF */
+ FriBidiPropertyBlockLevel1_0100, /* 18500..185FF */
+ FriBidiPropertyBlockLevel1_0100, /* 18600..186FF */
+ FriBidiPropertyBlockLevel1_0100, /* 18700..187FF */
+ FriBidiPropertyBlockLevel1_0100, /* 18800..188FF */
+ FriBidiPropertyBlockLevel1_0100, /* 18900..189FF */
+ FriBidiPropertyBlockLevel1_0100, /* 18A00..18AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 18B00..18BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 18C00..18CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 18D00..18DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 18E00..18EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 18F00..18FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 19000..190FF */
+ FriBidiPropertyBlockLevel1_0100, /* 19100..191FF */
+ FriBidiPropertyBlockLevel1_0100, /* 19200..192FF */
+ FriBidiPropertyBlockLevel1_0100, /* 19300..193FF */
+ FriBidiPropertyBlockLevel1_0100, /* 19400..194FF */
+ FriBidiPropertyBlockLevel1_0100, /* 19500..195FF */
+ FriBidiPropertyBlockLevel1_0100, /* 19600..196FF */
+ FriBidiPropertyBlockLevel1_0100, /* 19700..197FF */
+ FriBidiPropertyBlockLevel1_0100, /* 19800..198FF */
+ FriBidiPropertyBlockLevel1_0100, /* 19900..199FF */
+ FriBidiPropertyBlockLevel1_0100, /* 19A00..19AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 19B00..19BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 19C00..19CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 19D00..19DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 19E00..19EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 19F00..19FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1A000..1A0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1A100..1A1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1A200..1A2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1A300..1A3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1A400..1A4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1A500..1A5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1A600..1A6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1A700..1A7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1A800..1A8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1A900..1A9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1AA00..1AAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1AB00..1ABFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1AC00..1ACFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1AD00..1ADFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1AE00..1AEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1AF00..1AFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1B000..1B0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1B100..1B1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1B200..1B2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1B300..1B3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1B400..1B4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1B500..1B5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1B600..1B6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1B700..1B7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1B800..1B8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1B900..1B9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1BA00..1BAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1BB00..1BBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1BC00..1BCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1BD00..1BDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1BE00..1BEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1BF00..1BFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1C000..1C0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1C100..1C1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1C200..1C2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1C300..1C3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1C400..1C4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1C500..1C5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1C600..1C6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1C700..1C7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1C800..1C8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1C900..1C9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1CA00..1CAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1CB00..1CBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1CC00..1CCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1CD00..1CDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1CE00..1CEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1CF00..1CFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1D000..1D0FF */
+ FriBidiPropertyBlockLevel1_1D100, /* 1D100..1D1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1D200..1D2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1D300..1D3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1D400..1D4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1D500..1D5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1D600..1D6FF */
+ FriBidiPropertyBlockLevel1_1D700, /* 1D700..1D7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1D800..1D8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1D900..1D9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1DA00..1DAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1DB00..1DBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1DC00..1DCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1DD00..1DDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1DE00..1DEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1DF00..1DFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1E000..1E0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1E100..1E1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1E200..1E2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1E300..1E3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1E400..1E4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1E500..1E5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1E600..1E6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1E700..1E7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1E800..1E8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1E900..1E9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1EA00..1EAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1EB00..1EBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1EC00..1ECFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1ED00..1EDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1EE00..1EEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1EF00..1EFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1F000..1F0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1F100..1F1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1F200..1F2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1F300..1F3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1F400..1F4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1F500..1F5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1F600..1F6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1F700..1F7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1F800..1F8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1F900..1F9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 1FA00..1FAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1FB00..1FBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1FC00..1FCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1FD00..1FDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1FE00..1FEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 1FF00..1FFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 20000..200FF */
+ FriBidiPropertyBlockLevel1_0100, /* 20100..201FF */
+ FriBidiPropertyBlockLevel1_0100, /* 20200..202FF */
+ FriBidiPropertyBlockLevel1_0100, /* 20300..203FF */
+ FriBidiPropertyBlockLevel1_0100, /* 20400..204FF */
+ FriBidiPropertyBlockLevel1_0100, /* 20500..205FF */
+ FriBidiPropertyBlockLevel1_0100, /* 20600..206FF */
+ FriBidiPropertyBlockLevel1_0100, /* 20700..207FF */
+ FriBidiPropertyBlockLevel1_0100, /* 20800..208FF */
+ FriBidiPropertyBlockLevel1_0100, /* 20900..209FF */
+ FriBidiPropertyBlockLevel1_0100, /* 20A00..20AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 20B00..20BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 20C00..20CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 20D00..20DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 20E00..20EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 20F00..20FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 21000..210FF */
+ FriBidiPropertyBlockLevel1_0100, /* 21100..211FF */
+ FriBidiPropertyBlockLevel1_0100, /* 21200..212FF */
+ FriBidiPropertyBlockLevel1_0100, /* 21300..213FF */
+ FriBidiPropertyBlockLevel1_0100, /* 21400..214FF */
+ FriBidiPropertyBlockLevel1_0100, /* 21500..215FF */
+ FriBidiPropertyBlockLevel1_0100, /* 21600..216FF */
+ FriBidiPropertyBlockLevel1_0100, /* 21700..217FF */
+ FriBidiPropertyBlockLevel1_0100, /* 21800..218FF */
+ FriBidiPropertyBlockLevel1_0100, /* 21900..219FF */
+ FriBidiPropertyBlockLevel1_0100, /* 21A00..21AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 21B00..21BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 21C00..21CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 21D00..21DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 21E00..21EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 21F00..21FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 22000..220FF */
+ FriBidiPropertyBlockLevel1_0100, /* 22100..221FF */
+ FriBidiPropertyBlockLevel1_0100, /* 22200..222FF */
+ FriBidiPropertyBlockLevel1_0100, /* 22300..223FF */
+ FriBidiPropertyBlockLevel1_0100, /* 22400..224FF */
+ FriBidiPropertyBlockLevel1_0100, /* 22500..225FF */
+ FriBidiPropertyBlockLevel1_0100, /* 22600..226FF */
+ FriBidiPropertyBlockLevel1_0100, /* 22700..227FF */
+ FriBidiPropertyBlockLevel1_0100, /* 22800..228FF */
+ FriBidiPropertyBlockLevel1_0100, /* 22900..229FF */
+ FriBidiPropertyBlockLevel1_0100, /* 22A00..22AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 22B00..22BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 22C00..22CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 22D00..22DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 22E00..22EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 22F00..22FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 23000..230FF */
+ FriBidiPropertyBlockLevel1_0100, /* 23100..231FF */
+ FriBidiPropertyBlockLevel1_0100, /* 23200..232FF */
+ FriBidiPropertyBlockLevel1_0100, /* 23300..233FF */
+ FriBidiPropertyBlockLevel1_0100, /* 23400..234FF */
+ FriBidiPropertyBlockLevel1_0100, /* 23500..235FF */
+ FriBidiPropertyBlockLevel1_0100, /* 23600..236FF */
+ FriBidiPropertyBlockLevel1_0100, /* 23700..237FF */
+ FriBidiPropertyBlockLevel1_0100, /* 23800..238FF */
+ FriBidiPropertyBlockLevel1_0100, /* 23900..239FF */
+ FriBidiPropertyBlockLevel1_0100, /* 23A00..23AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 23B00..23BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 23C00..23CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 23D00..23DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 23E00..23EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 23F00..23FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 24000..240FF */
+ FriBidiPropertyBlockLevel1_0100, /* 24100..241FF */
+ FriBidiPropertyBlockLevel1_0100, /* 24200..242FF */
+ FriBidiPropertyBlockLevel1_0100, /* 24300..243FF */
+ FriBidiPropertyBlockLevel1_0100, /* 24400..244FF */
+ FriBidiPropertyBlockLevel1_0100, /* 24500..245FF */
+ FriBidiPropertyBlockLevel1_0100, /* 24600..246FF */
+ FriBidiPropertyBlockLevel1_0100, /* 24700..247FF */
+ FriBidiPropertyBlockLevel1_0100, /* 24800..248FF */
+ FriBidiPropertyBlockLevel1_0100, /* 24900..249FF */
+ FriBidiPropertyBlockLevel1_0100, /* 24A00..24AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 24B00..24BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 24C00..24CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 24D00..24DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 24E00..24EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 24F00..24FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 25000..250FF */
+ FriBidiPropertyBlockLevel1_0100, /* 25100..251FF */
+ FriBidiPropertyBlockLevel1_0100, /* 25200..252FF */
+ FriBidiPropertyBlockLevel1_0100, /* 25300..253FF */
+ FriBidiPropertyBlockLevel1_0100, /* 25400..254FF */
+ FriBidiPropertyBlockLevel1_0100, /* 25500..255FF */
+ FriBidiPropertyBlockLevel1_0100, /* 25600..256FF */
+ FriBidiPropertyBlockLevel1_0100, /* 25700..257FF */
+ FriBidiPropertyBlockLevel1_0100, /* 25800..258FF */
+ FriBidiPropertyBlockLevel1_0100, /* 25900..259FF */
+ FriBidiPropertyBlockLevel1_0100, /* 25A00..25AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 25B00..25BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 25C00..25CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 25D00..25DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 25E00..25EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 25F00..25FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 26000..260FF */
+ FriBidiPropertyBlockLevel1_0100, /* 26100..261FF */
+ FriBidiPropertyBlockLevel1_0100, /* 26200..262FF */
+ FriBidiPropertyBlockLevel1_0100, /* 26300..263FF */
+ FriBidiPropertyBlockLevel1_0100, /* 26400..264FF */
+ FriBidiPropertyBlockLevel1_0100, /* 26500..265FF */
+ FriBidiPropertyBlockLevel1_0100, /* 26600..266FF */
+ FriBidiPropertyBlockLevel1_0100, /* 26700..267FF */
+ FriBidiPropertyBlockLevel1_0100, /* 26800..268FF */
+ FriBidiPropertyBlockLevel1_0100, /* 26900..269FF */
+ FriBidiPropertyBlockLevel1_0100, /* 26A00..26AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 26B00..26BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 26C00..26CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 26D00..26DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 26E00..26EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 26F00..26FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 27000..270FF */
+ FriBidiPropertyBlockLevel1_0100, /* 27100..271FF */
+ FriBidiPropertyBlockLevel1_0100, /* 27200..272FF */
+ FriBidiPropertyBlockLevel1_0100, /* 27300..273FF */
+ FriBidiPropertyBlockLevel1_0100, /* 27400..274FF */
+ FriBidiPropertyBlockLevel1_0100, /* 27500..275FF */
+ FriBidiPropertyBlockLevel1_0100, /* 27600..276FF */
+ FriBidiPropertyBlockLevel1_0100, /* 27700..277FF */
+ FriBidiPropertyBlockLevel1_0100, /* 27800..278FF */
+ FriBidiPropertyBlockLevel1_0100, /* 27900..279FF */
+ FriBidiPropertyBlockLevel1_0100, /* 27A00..27AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 27B00..27BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 27C00..27CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 27D00..27DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 27E00..27EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 27F00..27FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 28000..280FF */
+ FriBidiPropertyBlockLevel1_0100, /* 28100..281FF */
+ FriBidiPropertyBlockLevel1_0100, /* 28200..282FF */
+ FriBidiPropertyBlockLevel1_0100, /* 28300..283FF */
+ FriBidiPropertyBlockLevel1_0100, /* 28400..284FF */
+ FriBidiPropertyBlockLevel1_0100, /* 28500..285FF */
+ FriBidiPropertyBlockLevel1_0100, /* 28600..286FF */
+ FriBidiPropertyBlockLevel1_0100, /* 28700..287FF */
+ FriBidiPropertyBlockLevel1_0100, /* 28800..288FF */
+ FriBidiPropertyBlockLevel1_0100, /* 28900..289FF */
+ FriBidiPropertyBlockLevel1_0100, /* 28A00..28AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 28B00..28BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 28C00..28CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 28D00..28DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 28E00..28EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 28F00..28FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 29000..290FF */
+ FriBidiPropertyBlockLevel1_0100, /* 29100..291FF */
+ FriBidiPropertyBlockLevel1_0100, /* 29200..292FF */
+ FriBidiPropertyBlockLevel1_0100, /* 29300..293FF */
+ FriBidiPropertyBlockLevel1_0100, /* 29400..294FF */
+ FriBidiPropertyBlockLevel1_0100, /* 29500..295FF */
+ FriBidiPropertyBlockLevel1_0100, /* 29600..296FF */
+ FriBidiPropertyBlockLevel1_0100, /* 29700..297FF */
+ FriBidiPropertyBlockLevel1_0100, /* 29800..298FF */
+ FriBidiPropertyBlockLevel1_0100, /* 29900..299FF */
+ FriBidiPropertyBlockLevel1_0100, /* 29A00..29AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 29B00..29BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 29C00..29CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 29D00..29DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 29E00..29EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 29F00..29FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2A000..2A0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2A100..2A1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2A200..2A2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2A300..2A3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2A400..2A4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2A500..2A5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2A600..2A6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2A700..2A7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2A800..2A8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2A900..2A9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2AA00..2AAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2AB00..2ABFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2AC00..2ACFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2AD00..2ADFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2AE00..2AEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2AF00..2AFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2B000..2B0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2B100..2B1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2B200..2B2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2B300..2B3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2B400..2B4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2B500..2B5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2B600..2B6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2B700..2B7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2B800..2B8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2B900..2B9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2BA00..2BAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2BB00..2BBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2BC00..2BCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2BD00..2BDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2BE00..2BEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2BF00..2BFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2C000..2C0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2C100..2C1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2C200..2C2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2C300..2C3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2C400..2C4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2C500..2C5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2C600..2C6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2C700..2C7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2C800..2C8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2C900..2C9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2CA00..2CAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2CB00..2CBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2CC00..2CCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2CD00..2CDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2CE00..2CEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2CF00..2CFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2D000..2D0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2D100..2D1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2D200..2D2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2D300..2D3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2D400..2D4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2D500..2D5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2D600..2D6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2D700..2D7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2D800..2D8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2D900..2D9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2DA00..2DAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2DB00..2DBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2DC00..2DCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2DD00..2DDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2DE00..2DEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2DF00..2DFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2E000..2E0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2E100..2E1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2E200..2E2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2E300..2E3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2E400..2E4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2E500..2E5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2E600..2E6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2E700..2E7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2E800..2E8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2E900..2E9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2EA00..2EAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2EB00..2EBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2EC00..2ECFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2ED00..2EDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2EE00..2EEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2EF00..2EFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2F000..2F0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2F100..2F1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2F200..2F2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2F300..2F3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2F400..2F4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2F500..2F5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2F600..2F6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2F700..2F7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2F800..2F8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2F900..2F9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 2FA00..2FAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2FB00..2FBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2FC00..2FCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2FD00..2FDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2FE00..2FEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 2FF00..2FFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 30000..300FF */
+ FriBidiPropertyBlockLevel1_0100, /* 30100..301FF */
+ FriBidiPropertyBlockLevel1_0100, /* 30200..302FF */
+ FriBidiPropertyBlockLevel1_0100, /* 30300..303FF */
+ FriBidiPropertyBlockLevel1_0100, /* 30400..304FF */
+ FriBidiPropertyBlockLevel1_0100, /* 30500..305FF */
+ FriBidiPropertyBlockLevel1_0100, /* 30600..306FF */
+ FriBidiPropertyBlockLevel1_0100, /* 30700..307FF */
+ FriBidiPropertyBlockLevel1_0100, /* 30800..308FF */
+ FriBidiPropertyBlockLevel1_0100, /* 30900..309FF */
+ FriBidiPropertyBlockLevel1_0100, /* 30A00..30AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 30B00..30BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 30C00..30CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 30D00..30DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 30E00..30EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 30F00..30FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 31000..310FF */
+ FriBidiPropertyBlockLevel1_0100, /* 31100..311FF */
+ FriBidiPropertyBlockLevel1_0100, /* 31200..312FF */
+ FriBidiPropertyBlockLevel1_0100, /* 31300..313FF */
+ FriBidiPropertyBlockLevel1_0100, /* 31400..314FF */
+ FriBidiPropertyBlockLevel1_0100, /* 31500..315FF */
+ FriBidiPropertyBlockLevel1_0100, /* 31600..316FF */
+ FriBidiPropertyBlockLevel1_0100, /* 31700..317FF */
+ FriBidiPropertyBlockLevel1_0100, /* 31800..318FF */
+ FriBidiPropertyBlockLevel1_0100, /* 31900..319FF */
+ FriBidiPropertyBlockLevel1_0100, /* 31A00..31AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 31B00..31BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 31C00..31CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 31D00..31DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 31E00..31EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 31F00..31FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 32000..320FF */
+ FriBidiPropertyBlockLevel1_0100, /* 32100..321FF */
+ FriBidiPropertyBlockLevel1_0100, /* 32200..322FF */
+ FriBidiPropertyBlockLevel1_0100, /* 32300..323FF */
+ FriBidiPropertyBlockLevel1_0100, /* 32400..324FF */
+ FriBidiPropertyBlockLevel1_0100, /* 32500..325FF */
+ FriBidiPropertyBlockLevel1_0100, /* 32600..326FF */
+ FriBidiPropertyBlockLevel1_0100, /* 32700..327FF */
+ FriBidiPropertyBlockLevel1_0100, /* 32800..328FF */
+ FriBidiPropertyBlockLevel1_0100, /* 32900..329FF */
+ FriBidiPropertyBlockLevel1_0100, /* 32A00..32AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 32B00..32BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 32C00..32CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 32D00..32DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 32E00..32EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 32F00..32FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 33000..330FF */
+ FriBidiPropertyBlockLevel1_0100, /* 33100..331FF */
+ FriBidiPropertyBlockLevel1_0100, /* 33200..332FF */
+ FriBidiPropertyBlockLevel1_0100, /* 33300..333FF */
+ FriBidiPropertyBlockLevel1_0100, /* 33400..334FF */
+ FriBidiPropertyBlockLevel1_0100, /* 33500..335FF */
+ FriBidiPropertyBlockLevel1_0100, /* 33600..336FF */
+ FriBidiPropertyBlockLevel1_0100, /* 33700..337FF */
+ FriBidiPropertyBlockLevel1_0100, /* 33800..338FF */
+ FriBidiPropertyBlockLevel1_0100, /* 33900..339FF */
+ FriBidiPropertyBlockLevel1_0100, /* 33A00..33AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 33B00..33BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 33C00..33CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 33D00..33DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 33E00..33EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 33F00..33FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 34000..340FF */
+ FriBidiPropertyBlockLevel1_0100, /* 34100..341FF */
+ FriBidiPropertyBlockLevel1_0100, /* 34200..342FF */
+ FriBidiPropertyBlockLevel1_0100, /* 34300..343FF */
+ FriBidiPropertyBlockLevel1_0100, /* 34400..344FF */
+ FriBidiPropertyBlockLevel1_0100, /* 34500..345FF */
+ FriBidiPropertyBlockLevel1_0100, /* 34600..346FF */
+ FriBidiPropertyBlockLevel1_0100, /* 34700..347FF */
+ FriBidiPropertyBlockLevel1_0100, /* 34800..348FF */
+ FriBidiPropertyBlockLevel1_0100, /* 34900..349FF */
+ FriBidiPropertyBlockLevel1_0100, /* 34A00..34AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 34B00..34BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 34C00..34CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 34D00..34DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 34E00..34EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 34F00..34FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 35000..350FF */
+ FriBidiPropertyBlockLevel1_0100, /* 35100..351FF */
+ FriBidiPropertyBlockLevel1_0100, /* 35200..352FF */
+ FriBidiPropertyBlockLevel1_0100, /* 35300..353FF */
+ FriBidiPropertyBlockLevel1_0100, /* 35400..354FF */
+ FriBidiPropertyBlockLevel1_0100, /* 35500..355FF */
+ FriBidiPropertyBlockLevel1_0100, /* 35600..356FF */
+ FriBidiPropertyBlockLevel1_0100, /* 35700..357FF */
+ FriBidiPropertyBlockLevel1_0100, /* 35800..358FF */
+ FriBidiPropertyBlockLevel1_0100, /* 35900..359FF */
+ FriBidiPropertyBlockLevel1_0100, /* 35A00..35AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 35B00..35BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 35C00..35CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 35D00..35DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 35E00..35EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 35F00..35FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 36000..360FF */
+ FriBidiPropertyBlockLevel1_0100, /* 36100..361FF */
+ FriBidiPropertyBlockLevel1_0100, /* 36200..362FF */
+ FriBidiPropertyBlockLevel1_0100, /* 36300..363FF */
+ FriBidiPropertyBlockLevel1_0100, /* 36400..364FF */
+ FriBidiPropertyBlockLevel1_0100, /* 36500..365FF */
+ FriBidiPropertyBlockLevel1_0100, /* 36600..366FF */
+ FriBidiPropertyBlockLevel1_0100, /* 36700..367FF */
+ FriBidiPropertyBlockLevel1_0100, /* 36800..368FF */
+ FriBidiPropertyBlockLevel1_0100, /* 36900..369FF */
+ FriBidiPropertyBlockLevel1_0100, /* 36A00..36AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 36B00..36BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 36C00..36CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 36D00..36DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 36E00..36EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 36F00..36FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 37000..370FF */
+ FriBidiPropertyBlockLevel1_0100, /* 37100..371FF */
+ FriBidiPropertyBlockLevel1_0100, /* 37200..372FF */
+ FriBidiPropertyBlockLevel1_0100, /* 37300..373FF */
+ FriBidiPropertyBlockLevel1_0100, /* 37400..374FF */
+ FriBidiPropertyBlockLevel1_0100, /* 37500..375FF */
+ FriBidiPropertyBlockLevel1_0100, /* 37600..376FF */
+ FriBidiPropertyBlockLevel1_0100, /* 37700..377FF */
+ FriBidiPropertyBlockLevel1_0100, /* 37800..378FF */
+ FriBidiPropertyBlockLevel1_0100, /* 37900..379FF */
+ FriBidiPropertyBlockLevel1_0100, /* 37A00..37AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 37B00..37BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 37C00..37CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 37D00..37DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 37E00..37EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 37F00..37FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 38000..380FF */
+ FriBidiPropertyBlockLevel1_0100, /* 38100..381FF */
+ FriBidiPropertyBlockLevel1_0100, /* 38200..382FF */
+ FriBidiPropertyBlockLevel1_0100, /* 38300..383FF */
+ FriBidiPropertyBlockLevel1_0100, /* 38400..384FF */
+ FriBidiPropertyBlockLevel1_0100, /* 38500..385FF */
+ FriBidiPropertyBlockLevel1_0100, /* 38600..386FF */
+ FriBidiPropertyBlockLevel1_0100, /* 38700..387FF */
+ FriBidiPropertyBlockLevel1_0100, /* 38800..388FF */
+ FriBidiPropertyBlockLevel1_0100, /* 38900..389FF */
+ FriBidiPropertyBlockLevel1_0100, /* 38A00..38AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 38B00..38BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 38C00..38CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 38D00..38DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 38E00..38EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 38F00..38FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 39000..390FF */
+ FriBidiPropertyBlockLevel1_0100, /* 39100..391FF */
+ FriBidiPropertyBlockLevel1_0100, /* 39200..392FF */
+ FriBidiPropertyBlockLevel1_0100, /* 39300..393FF */
+ FriBidiPropertyBlockLevel1_0100, /* 39400..394FF */
+ FriBidiPropertyBlockLevel1_0100, /* 39500..395FF */
+ FriBidiPropertyBlockLevel1_0100, /* 39600..396FF */
+ FriBidiPropertyBlockLevel1_0100, /* 39700..397FF */
+ FriBidiPropertyBlockLevel1_0100, /* 39800..398FF */
+ FriBidiPropertyBlockLevel1_0100, /* 39900..399FF */
+ FriBidiPropertyBlockLevel1_0100, /* 39A00..39AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 39B00..39BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 39C00..39CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 39D00..39DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 39E00..39EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 39F00..39FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3A000..3A0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3A100..3A1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3A200..3A2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3A300..3A3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3A400..3A4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3A500..3A5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3A600..3A6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3A700..3A7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3A800..3A8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3A900..3A9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3AA00..3AAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3AB00..3ABFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3AC00..3ACFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3AD00..3ADFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3AE00..3AEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3AF00..3AFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3B000..3B0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3B100..3B1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3B200..3B2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3B300..3B3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3B400..3B4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3B500..3B5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3B600..3B6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3B700..3B7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3B800..3B8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3B900..3B9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3BA00..3BAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3BB00..3BBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3BC00..3BCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3BD00..3BDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3BE00..3BEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3BF00..3BFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3C000..3C0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3C100..3C1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3C200..3C2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3C300..3C3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3C400..3C4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3C500..3C5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3C600..3C6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3C700..3C7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3C800..3C8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3C900..3C9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3CA00..3CAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3CB00..3CBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3CC00..3CCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3CD00..3CDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3CE00..3CEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3CF00..3CFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3D000..3D0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3D100..3D1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3D200..3D2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3D300..3D3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3D400..3D4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3D500..3D5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3D600..3D6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3D700..3D7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3D800..3D8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3D900..3D9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3DA00..3DAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3DB00..3DBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3DC00..3DCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3DD00..3DDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3DE00..3DEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3DF00..3DFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3E000..3E0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3E100..3E1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3E200..3E2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3E300..3E3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3E400..3E4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3E500..3E5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3E600..3E6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3E700..3E7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3E800..3E8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3E900..3E9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3EA00..3EAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3EB00..3EBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3EC00..3ECFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3ED00..3EDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3EE00..3EEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3EF00..3EFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3F000..3F0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3F100..3F1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3F200..3F2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3F300..3F3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3F400..3F4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3F500..3F5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3F600..3F6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3F700..3F7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3F800..3F8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3F900..3F9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 3FA00..3FAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3FB00..3FBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3FC00..3FCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3FD00..3FDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3FE00..3FEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 3FF00..3FFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 40000..400FF */
+ FriBidiPropertyBlockLevel1_0100, /* 40100..401FF */
+ FriBidiPropertyBlockLevel1_0100, /* 40200..402FF */
+ FriBidiPropertyBlockLevel1_0100, /* 40300..403FF */
+ FriBidiPropertyBlockLevel1_0100, /* 40400..404FF */
+ FriBidiPropertyBlockLevel1_0100, /* 40500..405FF */
+ FriBidiPropertyBlockLevel1_0100, /* 40600..406FF */
+ FriBidiPropertyBlockLevel1_0100, /* 40700..407FF */
+ FriBidiPropertyBlockLevel1_0100, /* 40800..408FF */
+ FriBidiPropertyBlockLevel1_0100, /* 40900..409FF */
+ FriBidiPropertyBlockLevel1_0100, /* 40A00..40AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 40B00..40BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 40C00..40CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 40D00..40DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 40E00..40EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 40F00..40FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 41000..410FF */
+ FriBidiPropertyBlockLevel1_0100, /* 41100..411FF */
+ FriBidiPropertyBlockLevel1_0100, /* 41200..412FF */
+ FriBidiPropertyBlockLevel1_0100, /* 41300..413FF */
+ FriBidiPropertyBlockLevel1_0100, /* 41400..414FF */
+ FriBidiPropertyBlockLevel1_0100, /* 41500..415FF */
+ FriBidiPropertyBlockLevel1_0100, /* 41600..416FF */
+ FriBidiPropertyBlockLevel1_0100, /* 41700..417FF */
+ FriBidiPropertyBlockLevel1_0100, /* 41800..418FF */
+ FriBidiPropertyBlockLevel1_0100, /* 41900..419FF */
+ FriBidiPropertyBlockLevel1_0100, /* 41A00..41AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 41B00..41BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 41C00..41CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 41D00..41DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 41E00..41EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 41F00..41FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 42000..420FF */
+ FriBidiPropertyBlockLevel1_0100, /* 42100..421FF */
+ FriBidiPropertyBlockLevel1_0100, /* 42200..422FF */
+ FriBidiPropertyBlockLevel1_0100, /* 42300..423FF */
+ FriBidiPropertyBlockLevel1_0100, /* 42400..424FF */
+ FriBidiPropertyBlockLevel1_0100, /* 42500..425FF */
+ FriBidiPropertyBlockLevel1_0100, /* 42600..426FF */
+ FriBidiPropertyBlockLevel1_0100, /* 42700..427FF */
+ FriBidiPropertyBlockLevel1_0100, /* 42800..428FF */
+ FriBidiPropertyBlockLevel1_0100, /* 42900..429FF */
+ FriBidiPropertyBlockLevel1_0100, /* 42A00..42AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 42B00..42BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 42C00..42CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 42D00..42DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 42E00..42EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 42F00..42FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 43000..430FF */
+ FriBidiPropertyBlockLevel1_0100, /* 43100..431FF */
+ FriBidiPropertyBlockLevel1_0100, /* 43200..432FF */
+ FriBidiPropertyBlockLevel1_0100, /* 43300..433FF */
+ FriBidiPropertyBlockLevel1_0100, /* 43400..434FF */
+ FriBidiPropertyBlockLevel1_0100, /* 43500..435FF */
+ FriBidiPropertyBlockLevel1_0100, /* 43600..436FF */
+ FriBidiPropertyBlockLevel1_0100, /* 43700..437FF */
+ FriBidiPropertyBlockLevel1_0100, /* 43800..438FF */
+ FriBidiPropertyBlockLevel1_0100, /* 43900..439FF */
+ FriBidiPropertyBlockLevel1_0100, /* 43A00..43AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 43B00..43BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 43C00..43CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 43D00..43DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 43E00..43EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 43F00..43FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 44000..440FF */
+ FriBidiPropertyBlockLevel1_0100, /* 44100..441FF */
+ FriBidiPropertyBlockLevel1_0100, /* 44200..442FF */
+ FriBidiPropertyBlockLevel1_0100, /* 44300..443FF */
+ FriBidiPropertyBlockLevel1_0100, /* 44400..444FF */
+ FriBidiPropertyBlockLevel1_0100, /* 44500..445FF */
+ FriBidiPropertyBlockLevel1_0100, /* 44600..446FF */
+ FriBidiPropertyBlockLevel1_0100, /* 44700..447FF */
+ FriBidiPropertyBlockLevel1_0100, /* 44800..448FF */
+ FriBidiPropertyBlockLevel1_0100, /* 44900..449FF */
+ FriBidiPropertyBlockLevel1_0100, /* 44A00..44AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 44B00..44BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 44C00..44CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 44D00..44DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 44E00..44EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 44F00..44FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 45000..450FF */
+ FriBidiPropertyBlockLevel1_0100, /* 45100..451FF */
+ FriBidiPropertyBlockLevel1_0100, /* 45200..452FF */
+ FriBidiPropertyBlockLevel1_0100, /* 45300..453FF */
+ FriBidiPropertyBlockLevel1_0100, /* 45400..454FF */
+ FriBidiPropertyBlockLevel1_0100, /* 45500..455FF */
+ FriBidiPropertyBlockLevel1_0100, /* 45600..456FF */
+ FriBidiPropertyBlockLevel1_0100, /* 45700..457FF */
+ FriBidiPropertyBlockLevel1_0100, /* 45800..458FF */
+ FriBidiPropertyBlockLevel1_0100, /* 45900..459FF */
+ FriBidiPropertyBlockLevel1_0100, /* 45A00..45AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 45B00..45BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 45C00..45CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 45D00..45DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 45E00..45EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 45F00..45FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 46000..460FF */
+ FriBidiPropertyBlockLevel1_0100, /* 46100..461FF */
+ FriBidiPropertyBlockLevel1_0100, /* 46200..462FF */
+ FriBidiPropertyBlockLevel1_0100, /* 46300..463FF */
+ FriBidiPropertyBlockLevel1_0100, /* 46400..464FF */
+ FriBidiPropertyBlockLevel1_0100, /* 46500..465FF */
+ FriBidiPropertyBlockLevel1_0100, /* 46600..466FF */
+ FriBidiPropertyBlockLevel1_0100, /* 46700..467FF */
+ FriBidiPropertyBlockLevel1_0100, /* 46800..468FF */
+ FriBidiPropertyBlockLevel1_0100, /* 46900..469FF */
+ FriBidiPropertyBlockLevel1_0100, /* 46A00..46AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 46B00..46BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 46C00..46CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 46D00..46DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 46E00..46EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 46F00..46FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 47000..470FF */
+ FriBidiPropertyBlockLevel1_0100, /* 47100..471FF */
+ FriBidiPropertyBlockLevel1_0100, /* 47200..472FF */
+ FriBidiPropertyBlockLevel1_0100, /* 47300..473FF */
+ FriBidiPropertyBlockLevel1_0100, /* 47400..474FF */
+ FriBidiPropertyBlockLevel1_0100, /* 47500..475FF */
+ FriBidiPropertyBlockLevel1_0100, /* 47600..476FF */
+ FriBidiPropertyBlockLevel1_0100, /* 47700..477FF */
+ FriBidiPropertyBlockLevel1_0100, /* 47800..478FF */
+ FriBidiPropertyBlockLevel1_0100, /* 47900..479FF */
+ FriBidiPropertyBlockLevel1_0100, /* 47A00..47AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 47B00..47BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 47C00..47CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 47D00..47DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 47E00..47EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 47F00..47FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 48000..480FF */
+ FriBidiPropertyBlockLevel1_0100, /* 48100..481FF */
+ FriBidiPropertyBlockLevel1_0100, /* 48200..482FF */
+ FriBidiPropertyBlockLevel1_0100, /* 48300..483FF */
+ FriBidiPropertyBlockLevel1_0100, /* 48400..484FF */
+ FriBidiPropertyBlockLevel1_0100, /* 48500..485FF */
+ FriBidiPropertyBlockLevel1_0100, /* 48600..486FF */
+ FriBidiPropertyBlockLevel1_0100, /* 48700..487FF */
+ FriBidiPropertyBlockLevel1_0100, /* 48800..488FF */
+ FriBidiPropertyBlockLevel1_0100, /* 48900..489FF */
+ FriBidiPropertyBlockLevel1_0100, /* 48A00..48AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 48B00..48BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 48C00..48CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 48D00..48DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 48E00..48EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 48F00..48FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 49000..490FF */
+ FriBidiPropertyBlockLevel1_0100, /* 49100..491FF */
+ FriBidiPropertyBlockLevel1_0100, /* 49200..492FF */
+ FriBidiPropertyBlockLevel1_0100, /* 49300..493FF */
+ FriBidiPropertyBlockLevel1_0100, /* 49400..494FF */
+ FriBidiPropertyBlockLevel1_0100, /* 49500..495FF */
+ FriBidiPropertyBlockLevel1_0100, /* 49600..496FF */
+ FriBidiPropertyBlockLevel1_0100, /* 49700..497FF */
+ FriBidiPropertyBlockLevel1_0100, /* 49800..498FF */
+ FriBidiPropertyBlockLevel1_0100, /* 49900..499FF */
+ FriBidiPropertyBlockLevel1_0100, /* 49A00..49AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 49B00..49BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 49C00..49CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 49D00..49DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 49E00..49EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 49F00..49FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4A000..4A0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4A100..4A1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4A200..4A2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4A300..4A3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4A400..4A4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4A500..4A5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4A600..4A6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4A700..4A7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4A800..4A8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4A900..4A9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4AA00..4AAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4AB00..4ABFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4AC00..4ACFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4AD00..4ADFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4AE00..4AEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4AF00..4AFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4B000..4B0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4B100..4B1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4B200..4B2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4B300..4B3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4B400..4B4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4B500..4B5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4B600..4B6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4B700..4B7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4B800..4B8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4B900..4B9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4BA00..4BAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4BB00..4BBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4BC00..4BCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4BD00..4BDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4BE00..4BEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4BF00..4BFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4C000..4C0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4C100..4C1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4C200..4C2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4C300..4C3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4C400..4C4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4C500..4C5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4C600..4C6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4C700..4C7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4C800..4C8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4C900..4C9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4CA00..4CAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4CB00..4CBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4CC00..4CCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4CD00..4CDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4CE00..4CEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4CF00..4CFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4D000..4D0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4D100..4D1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4D200..4D2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4D300..4D3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4D400..4D4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4D500..4D5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4D600..4D6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4D700..4D7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4D800..4D8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4D900..4D9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4DA00..4DAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4DB00..4DBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4DC00..4DCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4DD00..4DDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4DE00..4DEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4DF00..4DFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4E000..4E0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4E100..4E1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4E200..4E2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4E300..4E3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4E400..4E4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4E500..4E5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4E600..4E6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4E700..4E7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4E800..4E8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4E900..4E9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4EA00..4EAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4EB00..4EBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4EC00..4ECFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4ED00..4EDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4EE00..4EEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4EF00..4EFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4F000..4F0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4F100..4F1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4F200..4F2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4F300..4F3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4F400..4F4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4F500..4F5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4F600..4F6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4F700..4F7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4F800..4F8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4F900..4F9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 4FA00..4FAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4FB00..4FBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4FC00..4FCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4FD00..4FDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4FE00..4FEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 4FF00..4FFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 50000..500FF */
+ FriBidiPropertyBlockLevel1_0100, /* 50100..501FF */
+ FriBidiPropertyBlockLevel1_0100, /* 50200..502FF */
+ FriBidiPropertyBlockLevel1_0100, /* 50300..503FF */
+ FriBidiPropertyBlockLevel1_0100, /* 50400..504FF */
+ FriBidiPropertyBlockLevel1_0100, /* 50500..505FF */
+ FriBidiPropertyBlockLevel1_0100, /* 50600..506FF */
+ FriBidiPropertyBlockLevel1_0100, /* 50700..507FF */
+ FriBidiPropertyBlockLevel1_0100, /* 50800..508FF */
+ FriBidiPropertyBlockLevel1_0100, /* 50900..509FF */
+ FriBidiPropertyBlockLevel1_0100, /* 50A00..50AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 50B00..50BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 50C00..50CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 50D00..50DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 50E00..50EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 50F00..50FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 51000..510FF */
+ FriBidiPropertyBlockLevel1_0100, /* 51100..511FF */
+ FriBidiPropertyBlockLevel1_0100, /* 51200..512FF */
+ FriBidiPropertyBlockLevel1_0100, /* 51300..513FF */
+ FriBidiPropertyBlockLevel1_0100, /* 51400..514FF */
+ FriBidiPropertyBlockLevel1_0100, /* 51500..515FF */
+ FriBidiPropertyBlockLevel1_0100, /* 51600..516FF */
+ FriBidiPropertyBlockLevel1_0100, /* 51700..517FF */
+ FriBidiPropertyBlockLevel1_0100, /* 51800..518FF */
+ FriBidiPropertyBlockLevel1_0100, /* 51900..519FF */
+ FriBidiPropertyBlockLevel1_0100, /* 51A00..51AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 51B00..51BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 51C00..51CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 51D00..51DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 51E00..51EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 51F00..51FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 52000..520FF */
+ FriBidiPropertyBlockLevel1_0100, /* 52100..521FF */
+ FriBidiPropertyBlockLevel1_0100, /* 52200..522FF */
+ FriBidiPropertyBlockLevel1_0100, /* 52300..523FF */
+ FriBidiPropertyBlockLevel1_0100, /* 52400..524FF */
+ FriBidiPropertyBlockLevel1_0100, /* 52500..525FF */
+ FriBidiPropertyBlockLevel1_0100, /* 52600..526FF */
+ FriBidiPropertyBlockLevel1_0100, /* 52700..527FF */
+ FriBidiPropertyBlockLevel1_0100, /* 52800..528FF */
+ FriBidiPropertyBlockLevel1_0100, /* 52900..529FF */
+ FriBidiPropertyBlockLevel1_0100, /* 52A00..52AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 52B00..52BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 52C00..52CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 52D00..52DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 52E00..52EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 52F00..52FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 53000..530FF */
+ FriBidiPropertyBlockLevel1_0100, /* 53100..531FF */
+ FriBidiPropertyBlockLevel1_0100, /* 53200..532FF */
+ FriBidiPropertyBlockLevel1_0100, /* 53300..533FF */
+ FriBidiPropertyBlockLevel1_0100, /* 53400..534FF */
+ FriBidiPropertyBlockLevel1_0100, /* 53500..535FF */
+ FriBidiPropertyBlockLevel1_0100, /* 53600..536FF */
+ FriBidiPropertyBlockLevel1_0100, /* 53700..537FF */
+ FriBidiPropertyBlockLevel1_0100, /* 53800..538FF */
+ FriBidiPropertyBlockLevel1_0100, /* 53900..539FF */
+ FriBidiPropertyBlockLevel1_0100, /* 53A00..53AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 53B00..53BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 53C00..53CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 53D00..53DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 53E00..53EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 53F00..53FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 54000..540FF */
+ FriBidiPropertyBlockLevel1_0100, /* 54100..541FF */
+ FriBidiPropertyBlockLevel1_0100, /* 54200..542FF */
+ FriBidiPropertyBlockLevel1_0100, /* 54300..543FF */
+ FriBidiPropertyBlockLevel1_0100, /* 54400..544FF */
+ FriBidiPropertyBlockLevel1_0100, /* 54500..545FF */
+ FriBidiPropertyBlockLevel1_0100, /* 54600..546FF */
+ FriBidiPropertyBlockLevel1_0100, /* 54700..547FF */
+ FriBidiPropertyBlockLevel1_0100, /* 54800..548FF */
+ FriBidiPropertyBlockLevel1_0100, /* 54900..549FF */
+ FriBidiPropertyBlockLevel1_0100, /* 54A00..54AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 54B00..54BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 54C00..54CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 54D00..54DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 54E00..54EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 54F00..54FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 55000..550FF */
+ FriBidiPropertyBlockLevel1_0100, /* 55100..551FF */
+ FriBidiPropertyBlockLevel1_0100, /* 55200..552FF */
+ FriBidiPropertyBlockLevel1_0100, /* 55300..553FF */
+ FriBidiPropertyBlockLevel1_0100, /* 55400..554FF */
+ FriBidiPropertyBlockLevel1_0100, /* 55500..555FF */
+ FriBidiPropertyBlockLevel1_0100, /* 55600..556FF */
+ FriBidiPropertyBlockLevel1_0100, /* 55700..557FF */
+ FriBidiPropertyBlockLevel1_0100, /* 55800..558FF */
+ FriBidiPropertyBlockLevel1_0100, /* 55900..559FF */
+ FriBidiPropertyBlockLevel1_0100, /* 55A00..55AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 55B00..55BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 55C00..55CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 55D00..55DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 55E00..55EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 55F00..55FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 56000..560FF */
+ FriBidiPropertyBlockLevel1_0100, /* 56100..561FF */
+ FriBidiPropertyBlockLevel1_0100, /* 56200..562FF */
+ FriBidiPropertyBlockLevel1_0100, /* 56300..563FF */
+ FriBidiPropertyBlockLevel1_0100, /* 56400..564FF */
+ FriBidiPropertyBlockLevel1_0100, /* 56500..565FF */
+ FriBidiPropertyBlockLevel1_0100, /* 56600..566FF */
+ FriBidiPropertyBlockLevel1_0100, /* 56700..567FF */
+ FriBidiPropertyBlockLevel1_0100, /* 56800..568FF */
+ FriBidiPropertyBlockLevel1_0100, /* 56900..569FF */
+ FriBidiPropertyBlockLevel1_0100, /* 56A00..56AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 56B00..56BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 56C00..56CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 56D00..56DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 56E00..56EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 56F00..56FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 57000..570FF */
+ FriBidiPropertyBlockLevel1_0100, /* 57100..571FF */
+ FriBidiPropertyBlockLevel1_0100, /* 57200..572FF */
+ FriBidiPropertyBlockLevel1_0100, /* 57300..573FF */
+ FriBidiPropertyBlockLevel1_0100, /* 57400..574FF */
+ FriBidiPropertyBlockLevel1_0100, /* 57500..575FF */
+ FriBidiPropertyBlockLevel1_0100, /* 57600..576FF */
+ FriBidiPropertyBlockLevel1_0100, /* 57700..577FF */
+ FriBidiPropertyBlockLevel1_0100, /* 57800..578FF */
+ FriBidiPropertyBlockLevel1_0100, /* 57900..579FF */
+ FriBidiPropertyBlockLevel1_0100, /* 57A00..57AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 57B00..57BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 57C00..57CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 57D00..57DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 57E00..57EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 57F00..57FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 58000..580FF */
+ FriBidiPropertyBlockLevel1_0100, /* 58100..581FF */
+ FriBidiPropertyBlockLevel1_0100, /* 58200..582FF */
+ FriBidiPropertyBlockLevel1_0100, /* 58300..583FF */
+ FriBidiPropertyBlockLevel1_0100, /* 58400..584FF */
+ FriBidiPropertyBlockLevel1_0100, /* 58500..585FF */
+ FriBidiPropertyBlockLevel1_0100, /* 58600..586FF */
+ FriBidiPropertyBlockLevel1_0100, /* 58700..587FF */
+ FriBidiPropertyBlockLevel1_0100, /* 58800..588FF */
+ FriBidiPropertyBlockLevel1_0100, /* 58900..589FF */
+ FriBidiPropertyBlockLevel1_0100, /* 58A00..58AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 58B00..58BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 58C00..58CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 58D00..58DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 58E00..58EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 58F00..58FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 59000..590FF */
+ FriBidiPropertyBlockLevel1_0100, /* 59100..591FF */
+ FriBidiPropertyBlockLevel1_0100, /* 59200..592FF */
+ FriBidiPropertyBlockLevel1_0100, /* 59300..593FF */
+ FriBidiPropertyBlockLevel1_0100, /* 59400..594FF */
+ FriBidiPropertyBlockLevel1_0100, /* 59500..595FF */
+ FriBidiPropertyBlockLevel1_0100, /* 59600..596FF */
+ FriBidiPropertyBlockLevel1_0100, /* 59700..597FF */
+ FriBidiPropertyBlockLevel1_0100, /* 59800..598FF */
+ FriBidiPropertyBlockLevel1_0100, /* 59900..599FF */
+ FriBidiPropertyBlockLevel1_0100, /* 59A00..59AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 59B00..59BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 59C00..59CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 59D00..59DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 59E00..59EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 59F00..59FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5A000..5A0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5A100..5A1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5A200..5A2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5A300..5A3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5A400..5A4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5A500..5A5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5A600..5A6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5A700..5A7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5A800..5A8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5A900..5A9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5AA00..5AAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5AB00..5ABFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5AC00..5ACFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5AD00..5ADFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5AE00..5AEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5AF00..5AFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5B000..5B0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5B100..5B1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5B200..5B2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5B300..5B3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5B400..5B4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5B500..5B5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5B600..5B6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5B700..5B7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5B800..5B8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5B900..5B9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5BA00..5BAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5BB00..5BBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5BC00..5BCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5BD00..5BDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5BE00..5BEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5BF00..5BFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5C000..5C0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5C100..5C1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5C200..5C2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5C300..5C3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5C400..5C4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5C500..5C5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5C600..5C6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5C700..5C7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5C800..5C8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5C900..5C9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5CA00..5CAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5CB00..5CBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5CC00..5CCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5CD00..5CDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5CE00..5CEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5CF00..5CFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5D000..5D0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5D100..5D1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5D200..5D2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5D300..5D3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5D400..5D4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5D500..5D5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5D600..5D6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5D700..5D7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5D800..5D8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5D900..5D9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5DA00..5DAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5DB00..5DBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5DC00..5DCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5DD00..5DDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5DE00..5DEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5DF00..5DFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5E000..5E0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5E100..5E1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5E200..5E2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5E300..5E3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5E400..5E4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5E500..5E5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5E600..5E6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5E700..5E7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5E800..5E8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5E900..5E9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5EA00..5EAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5EB00..5EBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5EC00..5ECFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5ED00..5EDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5EE00..5EEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5EF00..5EFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5F000..5F0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5F100..5F1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5F200..5F2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5F300..5F3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5F400..5F4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5F500..5F5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5F600..5F6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5F700..5F7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5F800..5F8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5F900..5F9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 5FA00..5FAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5FB00..5FBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5FC00..5FCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5FD00..5FDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5FE00..5FEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 5FF00..5FFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 60000..600FF */
+ FriBidiPropertyBlockLevel1_0100, /* 60100..601FF */
+ FriBidiPropertyBlockLevel1_0100, /* 60200..602FF */
+ FriBidiPropertyBlockLevel1_0100, /* 60300..603FF */
+ FriBidiPropertyBlockLevel1_0100, /* 60400..604FF */
+ FriBidiPropertyBlockLevel1_0100, /* 60500..605FF */
+ FriBidiPropertyBlockLevel1_0100, /* 60600..606FF */
+ FriBidiPropertyBlockLevel1_0100, /* 60700..607FF */
+ FriBidiPropertyBlockLevel1_0100, /* 60800..608FF */
+ FriBidiPropertyBlockLevel1_0100, /* 60900..609FF */
+ FriBidiPropertyBlockLevel1_0100, /* 60A00..60AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 60B00..60BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 60C00..60CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 60D00..60DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 60E00..60EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 60F00..60FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 61000..610FF */
+ FriBidiPropertyBlockLevel1_0100, /* 61100..611FF */
+ FriBidiPropertyBlockLevel1_0100, /* 61200..612FF */
+ FriBidiPropertyBlockLevel1_0100, /* 61300..613FF */
+ FriBidiPropertyBlockLevel1_0100, /* 61400..614FF */
+ FriBidiPropertyBlockLevel1_0100, /* 61500..615FF */
+ FriBidiPropertyBlockLevel1_0100, /* 61600..616FF */
+ FriBidiPropertyBlockLevel1_0100, /* 61700..617FF */
+ FriBidiPropertyBlockLevel1_0100, /* 61800..618FF */
+ FriBidiPropertyBlockLevel1_0100, /* 61900..619FF */
+ FriBidiPropertyBlockLevel1_0100, /* 61A00..61AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 61B00..61BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 61C00..61CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 61D00..61DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 61E00..61EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 61F00..61FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 62000..620FF */
+ FriBidiPropertyBlockLevel1_0100, /* 62100..621FF */
+ FriBidiPropertyBlockLevel1_0100, /* 62200..622FF */
+ FriBidiPropertyBlockLevel1_0100, /* 62300..623FF */
+ FriBidiPropertyBlockLevel1_0100, /* 62400..624FF */
+ FriBidiPropertyBlockLevel1_0100, /* 62500..625FF */
+ FriBidiPropertyBlockLevel1_0100, /* 62600..626FF */
+ FriBidiPropertyBlockLevel1_0100, /* 62700..627FF */
+ FriBidiPropertyBlockLevel1_0100, /* 62800..628FF */
+ FriBidiPropertyBlockLevel1_0100, /* 62900..629FF */
+ FriBidiPropertyBlockLevel1_0100, /* 62A00..62AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 62B00..62BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 62C00..62CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 62D00..62DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 62E00..62EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 62F00..62FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 63000..630FF */
+ FriBidiPropertyBlockLevel1_0100, /* 63100..631FF */
+ FriBidiPropertyBlockLevel1_0100, /* 63200..632FF */
+ FriBidiPropertyBlockLevel1_0100, /* 63300..633FF */
+ FriBidiPropertyBlockLevel1_0100, /* 63400..634FF */
+ FriBidiPropertyBlockLevel1_0100, /* 63500..635FF */
+ FriBidiPropertyBlockLevel1_0100, /* 63600..636FF */
+ FriBidiPropertyBlockLevel1_0100, /* 63700..637FF */
+ FriBidiPropertyBlockLevel1_0100, /* 63800..638FF */
+ FriBidiPropertyBlockLevel1_0100, /* 63900..639FF */
+ FriBidiPropertyBlockLevel1_0100, /* 63A00..63AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 63B00..63BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 63C00..63CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 63D00..63DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 63E00..63EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 63F00..63FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 64000..640FF */
+ FriBidiPropertyBlockLevel1_0100, /* 64100..641FF */
+ FriBidiPropertyBlockLevel1_0100, /* 64200..642FF */
+ FriBidiPropertyBlockLevel1_0100, /* 64300..643FF */
+ FriBidiPropertyBlockLevel1_0100, /* 64400..644FF */
+ FriBidiPropertyBlockLevel1_0100, /* 64500..645FF */
+ FriBidiPropertyBlockLevel1_0100, /* 64600..646FF */
+ FriBidiPropertyBlockLevel1_0100, /* 64700..647FF */
+ FriBidiPropertyBlockLevel1_0100, /* 64800..648FF */
+ FriBidiPropertyBlockLevel1_0100, /* 64900..649FF */
+ FriBidiPropertyBlockLevel1_0100, /* 64A00..64AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 64B00..64BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 64C00..64CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 64D00..64DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 64E00..64EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 64F00..64FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 65000..650FF */
+ FriBidiPropertyBlockLevel1_0100, /* 65100..651FF */
+ FriBidiPropertyBlockLevel1_0100, /* 65200..652FF */
+ FriBidiPropertyBlockLevel1_0100, /* 65300..653FF */
+ FriBidiPropertyBlockLevel1_0100, /* 65400..654FF */
+ FriBidiPropertyBlockLevel1_0100, /* 65500..655FF */
+ FriBidiPropertyBlockLevel1_0100, /* 65600..656FF */
+ FriBidiPropertyBlockLevel1_0100, /* 65700..657FF */
+ FriBidiPropertyBlockLevel1_0100, /* 65800..658FF */
+ FriBidiPropertyBlockLevel1_0100, /* 65900..659FF */
+ FriBidiPropertyBlockLevel1_0100, /* 65A00..65AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 65B00..65BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 65C00..65CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 65D00..65DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 65E00..65EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 65F00..65FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 66000..660FF */
+ FriBidiPropertyBlockLevel1_0100, /* 66100..661FF */
+ FriBidiPropertyBlockLevel1_0100, /* 66200..662FF */
+ FriBidiPropertyBlockLevel1_0100, /* 66300..663FF */
+ FriBidiPropertyBlockLevel1_0100, /* 66400..664FF */
+ FriBidiPropertyBlockLevel1_0100, /* 66500..665FF */
+ FriBidiPropertyBlockLevel1_0100, /* 66600..666FF */
+ FriBidiPropertyBlockLevel1_0100, /* 66700..667FF */
+ FriBidiPropertyBlockLevel1_0100, /* 66800..668FF */
+ FriBidiPropertyBlockLevel1_0100, /* 66900..669FF */
+ FriBidiPropertyBlockLevel1_0100, /* 66A00..66AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 66B00..66BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 66C00..66CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 66D00..66DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 66E00..66EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 66F00..66FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 67000..670FF */
+ FriBidiPropertyBlockLevel1_0100, /* 67100..671FF */
+ FriBidiPropertyBlockLevel1_0100, /* 67200..672FF */
+ FriBidiPropertyBlockLevel1_0100, /* 67300..673FF */
+ FriBidiPropertyBlockLevel1_0100, /* 67400..674FF */
+ FriBidiPropertyBlockLevel1_0100, /* 67500..675FF */
+ FriBidiPropertyBlockLevel1_0100, /* 67600..676FF */
+ FriBidiPropertyBlockLevel1_0100, /* 67700..677FF */
+ FriBidiPropertyBlockLevel1_0100, /* 67800..678FF */
+ FriBidiPropertyBlockLevel1_0100, /* 67900..679FF */
+ FriBidiPropertyBlockLevel1_0100, /* 67A00..67AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 67B00..67BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 67C00..67CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 67D00..67DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 67E00..67EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 67F00..67FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 68000..680FF */
+ FriBidiPropertyBlockLevel1_0100, /* 68100..681FF */
+ FriBidiPropertyBlockLevel1_0100, /* 68200..682FF */
+ FriBidiPropertyBlockLevel1_0100, /* 68300..683FF */
+ FriBidiPropertyBlockLevel1_0100, /* 68400..684FF */
+ FriBidiPropertyBlockLevel1_0100, /* 68500..685FF */
+ FriBidiPropertyBlockLevel1_0100, /* 68600..686FF */
+ FriBidiPropertyBlockLevel1_0100, /* 68700..687FF */
+ FriBidiPropertyBlockLevel1_0100, /* 68800..688FF */
+ FriBidiPropertyBlockLevel1_0100, /* 68900..689FF */
+ FriBidiPropertyBlockLevel1_0100, /* 68A00..68AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 68B00..68BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 68C00..68CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 68D00..68DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 68E00..68EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 68F00..68FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 69000..690FF */
+ FriBidiPropertyBlockLevel1_0100, /* 69100..691FF */
+ FriBidiPropertyBlockLevel1_0100, /* 69200..692FF */
+ FriBidiPropertyBlockLevel1_0100, /* 69300..693FF */
+ FriBidiPropertyBlockLevel1_0100, /* 69400..694FF */
+ FriBidiPropertyBlockLevel1_0100, /* 69500..695FF */
+ FriBidiPropertyBlockLevel1_0100, /* 69600..696FF */
+ FriBidiPropertyBlockLevel1_0100, /* 69700..697FF */
+ FriBidiPropertyBlockLevel1_0100, /* 69800..698FF */
+ FriBidiPropertyBlockLevel1_0100, /* 69900..699FF */
+ FriBidiPropertyBlockLevel1_0100, /* 69A00..69AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 69B00..69BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 69C00..69CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 69D00..69DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 69E00..69EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 69F00..69FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6A000..6A0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6A100..6A1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6A200..6A2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6A300..6A3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6A400..6A4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6A500..6A5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6A600..6A6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6A700..6A7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6A800..6A8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6A900..6A9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6AA00..6AAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6AB00..6ABFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6AC00..6ACFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6AD00..6ADFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6AE00..6AEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6AF00..6AFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6B000..6B0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6B100..6B1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6B200..6B2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6B300..6B3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6B400..6B4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6B500..6B5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6B600..6B6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6B700..6B7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6B800..6B8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6B900..6B9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6BA00..6BAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6BB00..6BBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6BC00..6BCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6BD00..6BDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6BE00..6BEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6BF00..6BFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6C000..6C0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6C100..6C1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6C200..6C2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6C300..6C3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6C400..6C4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6C500..6C5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6C600..6C6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6C700..6C7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6C800..6C8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6C900..6C9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6CA00..6CAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6CB00..6CBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6CC00..6CCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6CD00..6CDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6CE00..6CEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6CF00..6CFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6D000..6D0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6D100..6D1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6D200..6D2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6D300..6D3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6D400..6D4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6D500..6D5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6D600..6D6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6D700..6D7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6D800..6D8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6D900..6D9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6DA00..6DAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6DB00..6DBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6DC00..6DCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6DD00..6DDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6DE00..6DEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6DF00..6DFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6E000..6E0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6E100..6E1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6E200..6E2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6E300..6E3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6E400..6E4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6E500..6E5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6E600..6E6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6E700..6E7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6E800..6E8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6E900..6E9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6EA00..6EAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6EB00..6EBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6EC00..6ECFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6ED00..6EDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6EE00..6EEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6EF00..6EFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6F000..6F0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6F100..6F1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6F200..6F2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6F300..6F3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6F400..6F4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6F500..6F5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6F600..6F6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6F700..6F7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6F800..6F8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6F900..6F9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 6FA00..6FAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6FB00..6FBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6FC00..6FCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6FD00..6FDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6FE00..6FEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 6FF00..6FFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 70000..700FF */
+ FriBidiPropertyBlockLevel1_0100, /* 70100..701FF */
+ FriBidiPropertyBlockLevel1_0100, /* 70200..702FF */
+ FriBidiPropertyBlockLevel1_0100, /* 70300..703FF */
+ FriBidiPropertyBlockLevel1_0100, /* 70400..704FF */
+ FriBidiPropertyBlockLevel1_0100, /* 70500..705FF */
+ FriBidiPropertyBlockLevel1_0100, /* 70600..706FF */
+ FriBidiPropertyBlockLevel1_0100, /* 70700..707FF */
+ FriBidiPropertyBlockLevel1_0100, /* 70800..708FF */
+ FriBidiPropertyBlockLevel1_0100, /* 70900..709FF */
+ FriBidiPropertyBlockLevel1_0100, /* 70A00..70AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 70B00..70BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 70C00..70CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 70D00..70DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 70E00..70EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 70F00..70FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 71000..710FF */
+ FriBidiPropertyBlockLevel1_0100, /* 71100..711FF */
+ FriBidiPropertyBlockLevel1_0100, /* 71200..712FF */
+ FriBidiPropertyBlockLevel1_0100, /* 71300..713FF */
+ FriBidiPropertyBlockLevel1_0100, /* 71400..714FF */
+ FriBidiPropertyBlockLevel1_0100, /* 71500..715FF */
+ FriBidiPropertyBlockLevel1_0100, /* 71600..716FF */
+ FriBidiPropertyBlockLevel1_0100, /* 71700..717FF */
+ FriBidiPropertyBlockLevel1_0100, /* 71800..718FF */
+ FriBidiPropertyBlockLevel1_0100, /* 71900..719FF */
+ FriBidiPropertyBlockLevel1_0100, /* 71A00..71AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 71B00..71BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 71C00..71CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 71D00..71DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 71E00..71EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 71F00..71FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 72000..720FF */
+ FriBidiPropertyBlockLevel1_0100, /* 72100..721FF */
+ FriBidiPropertyBlockLevel1_0100, /* 72200..722FF */
+ FriBidiPropertyBlockLevel1_0100, /* 72300..723FF */
+ FriBidiPropertyBlockLevel1_0100, /* 72400..724FF */
+ FriBidiPropertyBlockLevel1_0100, /* 72500..725FF */
+ FriBidiPropertyBlockLevel1_0100, /* 72600..726FF */
+ FriBidiPropertyBlockLevel1_0100, /* 72700..727FF */
+ FriBidiPropertyBlockLevel1_0100, /* 72800..728FF */
+ FriBidiPropertyBlockLevel1_0100, /* 72900..729FF */
+ FriBidiPropertyBlockLevel1_0100, /* 72A00..72AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 72B00..72BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 72C00..72CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 72D00..72DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 72E00..72EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 72F00..72FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 73000..730FF */
+ FriBidiPropertyBlockLevel1_0100, /* 73100..731FF */
+ FriBidiPropertyBlockLevel1_0100, /* 73200..732FF */
+ FriBidiPropertyBlockLevel1_0100, /* 73300..733FF */
+ FriBidiPropertyBlockLevel1_0100, /* 73400..734FF */
+ FriBidiPropertyBlockLevel1_0100, /* 73500..735FF */
+ FriBidiPropertyBlockLevel1_0100, /* 73600..736FF */
+ FriBidiPropertyBlockLevel1_0100, /* 73700..737FF */
+ FriBidiPropertyBlockLevel1_0100, /* 73800..738FF */
+ FriBidiPropertyBlockLevel1_0100, /* 73900..739FF */
+ FriBidiPropertyBlockLevel1_0100, /* 73A00..73AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 73B00..73BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 73C00..73CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 73D00..73DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 73E00..73EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 73F00..73FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 74000..740FF */
+ FriBidiPropertyBlockLevel1_0100, /* 74100..741FF */
+ FriBidiPropertyBlockLevel1_0100, /* 74200..742FF */
+ FriBidiPropertyBlockLevel1_0100, /* 74300..743FF */
+ FriBidiPropertyBlockLevel1_0100, /* 74400..744FF */
+ FriBidiPropertyBlockLevel1_0100, /* 74500..745FF */
+ FriBidiPropertyBlockLevel1_0100, /* 74600..746FF */
+ FriBidiPropertyBlockLevel1_0100, /* 74700..747FF */
+ FriBidiPropertyBlockLevel1_0100, /* 74800..748FF */
+ FriBidiPropertyBlockLevel1_0100, /* 74900..749FF */
+ FriBidiPropertyBlockLevel1_0100, /* 74A00..74AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 74B00..74BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 74C00..74CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 74D00..74DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 74E00..74EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 74F00..74FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 75000..750FF */
+ FriBidiPropertyBlockLevel1_0100, /* 75100..751FF */
+ FriBidiPropertyBlockLevel1_0100, /* 75200..752FF */
+ FriBidiPropertyBlockLevel1_0100, /* 75300..753FF */
+ FriBidiPropertyBlockLevel1_0100, /* 75400..754FF */
+ FriBidiPropertyBlockLevel1_0100, /* 75500..755FF */
+ FriBidiPropertyBlockLevel1_0100, /* 75600..756FF */
+ FriBidiPropertyBlockLevel1_0100, /* 75700..757FF */
+ FriBidiPropertyBlockLevel1_0100, /* 75800..758FF */
+ FriBidiPropertyBlockLevel1_0100, /* 75900..759FF */
+ FriBidiPropertyBlockLevel1_0100, /* 75A00..75AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 75B00..75BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 75C00..75CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 75D00..75DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 75E00..75EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 75F00..75FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 76000..760FF */
+ FriBidiPropertyBlockLevel1_0100, /* 76100..761FF */
+ FriBidiPropertyBlockLevel1_0100, /* 76200..762FF */
+ FriBidiPropertyBlockLevel1_0100, /* 76300..763FF */
+ FriBidiPropertyBlockLevel1_0100, /* 76400..764FF */
+ FriBidiPropertyBlockLevel1_0100, /* 76500..765FF */
+ FriBidiPropertyBlockLevel1_0100, /* 76600..766FF */
+ FriBidiPropertyBlockLevel1_0100, /* 76700..767FF */
+ FriBidiPropertyBlockLevel1_0100, /* 76800..768FF */
+ FriBidiPropertyBlockLevel1_0100, /* 76900..769FF */
+ FriBidiPropertyBlockLevel1_0100, /* 76A00..76AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 76B00..76BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 76C00..76CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 76D00..76DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 76E00..76EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 76F00..76FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 77000..770FF */
+ FriBidiPropertyBlockLevel1_0100, /* 77100..771FF */
+ FriBidiPropertyBlockLevel1_0100, /* 77200..772FF */
+ FriBidiPropertyBlockLevel1_0100, /* 77300..773FF */
+ FriBidiPropertyBlockLevel1_0100, /* 77400..774FF */
+ FriBidiPropertyBlockLevel1_0100, /* 77500..775FF */
+ FriBidiPropertyBlockLevel1_0100, /* 77600..776FF */
+ FriBidiPropertyBlockLevel1_0100, /* 77700..777FF */
+ FriBidiPropertyBlockLevel1_0100, /* 77800..778FF */
+ FriBidiPropertyBlockLevel1_0100, /* 77900..779FF */
+ FriBidiPropertyBlockLevel1_0100, /* 77A00..77AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 77B00..77BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 77C00..77CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 77D00..77DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 77E00..77EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 77F00..77FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 78000..780FF */
+ FriBidiPropertyBlockLevel1_0100, /* 78100..781FF */
+ FriBidiPropertyBlockLevel1_0100, /* 78200..782FF */
+ FriBidiPropertyBlockLevel1_0100, /* 78300..783FF */
+ FriBidiPropertyBlockLevel1_0100, /* 78400..784FF */
+ FriBidiPropertyBlockLevel1_0100, /* 78500..785FF */
+ FriBidiPropertyBlockLevel1_0100, /* 78600..786FF */
+ FriBidiPropertyBlockLevel1_0100, /* 78700..787FF */
+ FriBidiPropertyBlockLevel1_0100, /* 78800..788FF */
+ FriBidiPropertyBlockLevel1_0100, /* 78900..789FF */
+ FriBidiPropertyBlockLevel1_0100, /* 78A00..78AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 78B00..78BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 78C00..78CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 78D00..78DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 78E00..78EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 78F00..78FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 79000..790FF */
+ FriBidiPropertyBlockLevel1_0100, /* 79100..791FF */
+ FriBidiPropertyBlockLevel1_0100, /* 79200..792FF */
+ FriBidiPropertyBlockLevel1_0100, /* 79300..793FF */
+ FriBidiPropertyBlockLevel1_0100, /* 79400..794FF */
+ FriBidiPropertyBlockLevel1_0100, /* 79500..795FF */
+ FriBidiPropertyBlockLevel1_0100, /* 79600..796FF */
+ FriBidiPropertyBlockLevel1_0100, /* 79700..797FF */
+ FriBidiPropertyBlockLevel1_0100, /* 79800..798FF */
+ FriBidiPropertyBlockLevel1_0100, /* 79900..799FF */
+ FriBidiPropertyBlockLevel1_0100, /* 79A00..79AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 79B00..79BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 79C00..79CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 79D00..79DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 79E00..79EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 79F00..79FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7A000..7A0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7A100..7A1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7A200..7A2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7A300..7A3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7A400..7A4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7A500..7A5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7A600..7A6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7A700..7A7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7A800..7A8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7A900..7A9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7AA00..7AAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7AB00..7ABFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7AC00..7ACFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7AD00..7ADFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7AE00..7AEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7AF00..7AFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7B000..7B0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7B100..7B1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7B200..7B2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7B300..7B3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7B400..7B4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7B500..7B5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7B600..7B6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7B700..7B7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7B800..7B8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7B900..7B9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7BA00..7BAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7BB00..7BBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7BC00..7BCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7BD00..7BDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7BE00..7BEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7BF00..7BFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7C000..7C0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7C100..7C1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7C200..7C2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7C300..7C3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7C400..7C4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7C500..7C5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7C600..7C6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7C700..7C7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7C800..7C8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7C900..7C9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7CA00..7CAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7CB00..7CBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7CC00..7CCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7CD00..7CDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7CE00..7CEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7CF00..7CFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7D000..7D0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7D100..7D1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7D200..7D2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7D300..7D3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7D400..7D4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7D500..7D5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7D600..7D6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7D700..7D7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7D800..7D8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7D900..7D9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7DA00..7DAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7DB00..7DBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7DC00..7DCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7DD00..7DDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7DE00..7DEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7DF00..7DFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7E000..7E0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7E100..7E1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7E200..7E2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7E300..7E3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7E400..7E4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7E500..7E5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7E600..7E6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7E700..7E7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7E800..7E8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7E900..7E9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7EA00..7EAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7EB00..7EBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7EC00..7ECFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7ED00..7EDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7EE00..7EEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7EF00..7EFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7F000..7F0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7F100..7F1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7F200..7F2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7F300..7F3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7F400..7F4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7F500..7F5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7F600..7F6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7F700..7F7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7F800..7F8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7F900..7F9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 7FA00..7FAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7FB00..7FBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7FC00..7FCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7FD00..7FDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7FE00..7FEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 7FF00..7FFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 80000..800FF */
+ FriBidiPropertyBlockLevel1_0100, /* 80100..801FF */
+ FriBidiPropertyBlockLevel1_0100, /* 80200..802FF */
+ FriBidiPropertyBlockLevel1_0100, /* 80300..803FF */
+ FriBidiPropertyBlockLevel1_0100, /* 80400..804FF */
+ FriBidiPropertyBlockLevel1_0100, /* 80500..805FF */
+ FriBidiPropertyBlockLevel1_0100, /* 80600..806FF */
+ FriBidiPropertyBlockLevel1_0100, /* 80700..807FF */
+ FriBidiPropertyBlockLevel1_0100, /* 80800..808FF */
+ FriBidiPropertyBlockLevel1_0100, /* 80900..809FF */
+ FriBidiPropertyBlockLevel1_0100, /* 80A00..80AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 80B00..80BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 80C00..80CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 80D00..80DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 80E00..80EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 80F00..80FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 81000..810FF */
+ FriBidiPropertyBlockLevel1_0100, /* 81100..811FF */
+ FriBidiPropertyBlockLevel1_0100, /* 81200..812FF */
+ FriBidiPropertyBlockLevel1_0100, /* 81300..813FF */
+ FriBidiPropertyBlockLevel1_0100, /* 81400..814FF */
+ FriBidiPropertyBlockLevel1_0100, /* 81500..815FF */
+ FriBidiPropertyBlockLevel1_0100, /* 81600..816FF */
+ FriBidiPropertyBlockLevel1_0100, /* 81700..817FF */
+ FriBidiPropertyBlockLevel1_0100, /* 81800..818FF */
+ FriBidiPropertyBlockLevel1_0100, /* 81900..819FF */
+ FriBidiPropertyBlockLevel1_0100, /* 81A00..81AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 81B00..81BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 81C00..81CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 81D00..81DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 81E00..81EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 81F00..81FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 82000..820FF */
+ FriBidiPropertyBlockLevel1_0100, /* 82100..821FF */
+ FriBidiPropertyBlockLevel1_0100, /* 82200..822FF */
+ FriBidiPropertyBlockLevel1_0100, /* 82300..823FF */
+ FriBidiPropertyBlockLevel1_0100, /* 82400..824FF */
+ FriBidiPropertyBlockLevel1_0100, /* 82500..825FF */
+ FriBidiPropertyBlockLevel1_0100, /* 82600..826FF */
+ FriBidiPropertyBlockLevel1_0100, /* 82700..827FF */
+ FriBidiPropertyBlockLevel1_0100, /* 82800..828FF */
+ FriBidiPropertyBlockLevel1_0100, /* 82900..829FF */
+ FriBidiPropertyBlockLevel1_0100, /* 82A00..82AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 82B00..82BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 82C00..82CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 82D00..82DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 82E00..82EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 82F00..82FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 83000..830FF */
+ FriBidiPropertyBlockLevel1_0100, /* 83100..831FF */
+ FriBidiPropertyBlockLevel1_0100, /* 83200..832FF */
+ FriBidiPropertyBlockLevel1_0100, /* 83300..833FF */
+ FriBidiPropertyBlockLevel1_0100, /* 83400..834FF */
+ FriBidiPropertyBlockLevel1_0100, /* 83500..835FF */
+ FriBidiPropertyBlockLevel1_0100, /* 83600..836FF */
+ FriBidiPropertyBlockLevel1_0100, /* 83700..837FF */
+ FriBidiPropertyBlockLevel1_0100, /* 83800..838FF */
+ FriBidiPropertyBlockLevel1_0100, /* 83900..839FF */
+ FriBidiPropertyBlockLevel1_0100, /* 83A00..83AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 83B00..83BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 83C00..83CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 83D00..83DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 83E00..83EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 83F00..83FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 84000..840FF */
+ FriBidiPropertyBlockLevel1_0100, /* 84100..841FF */
+ FriBidiPropertyBlockLevel1_0100, /* 84200..842FF */
+ FriBidiPropertyBlockLevel1_0100, /* 84300..843FF */
+ FriBidiPropertyBlockLevel1_0100, /* 84400..844FF */
+ FriBidiPropertyBlockLevel1_0100, /* 84500..845FF */
+ FriBidiPropertyBlockLevel1_0100, /* 84600..846FF */
+ FriBidiPropertyBlockLevel1_0100, /* 84700..847FF */
+ FriBidiPropertyBlockLevel1_0100, /* 84800..848FF */
+ FriBidiPropertyBlockLevel1_0100, /* 84900..849FF */
+ FriBidiPropertyBlockLevel1_0100, /* 84A00..84AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 84B00..84BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 84C00..84CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 84D00..84DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 84E00..84EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 84F00..84FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 85000..850FF */
+ FriBidiPropertyBlockLevel1_0100, /* 85100..851FF */
+ FriBidiPropertyBlockLevel1_0100, /* 85200..852FF */
+ FriBidiPropertyBlockLevel1_0100, /* 85300..853FF */
+ FriBidiPropertyBlockLevel1_0100, /* 85400..854FF */
+ FriBidiPropertyBlockLevel1_0100, /* 85500..855FF */
+ FriBidiPropertyBlockLevel1_0100, /* 85600..856FF */
+ FriBidiPropertyBlockLevel1_0100, /* 85700..857FF */
+ FriBidiPropertyBlockLevel1_0100, /* 85800..858FF */
+ FriBidiPropertyBlockLevel1_0100, /* 85900..859FF */
+ FriBidiPropertyBlockLevel1_0100, /* 85A00..85AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 85B00..85BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 85C00..85CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 85D00..85DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 85E00..85EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 85F00..85FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 86000..860FF */
+ FriBidiPropertyBlockLevel1_0100, /* 86100..861FF */
+ FriBidiPropertyBlockLevel1_0100, /* 86200..862FF */
+ FriBidiPropertyBlockLevel1_0100, /* 86300..863FF */
+ FriBidiPropertyBlockLevel1_0100, /* 86400..864FF */
+ FriBidiPropertyBlockLevel1_0100, /* 86500..865FF */
+ FriBidiPropertyBlockLevel1_0100, /* 86600..866FF */
+ FriBidiPropertyBlockLevel1_0100, /* 86700..867FF */
+ FriBidiPropertyBlockLevel1_0100, /* 86800..868FF */
+ FriBidiPropertyBlockLevel1_0100, /* 86900..869FF */
+ FriBidiPropertyBlockLevel1_0100, /* 86A00..86AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 86B00..86BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 86C00..86CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 86D00..86DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 86E00..86EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 86F00..86FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 87000..870FF */
+ FriBidiPropertyBlockLevel1_0100, /* 87100..871FF */
+ FriBidiPropertyBlockLevel1_0100, /* 87200..872FF */
+ FriBidiPropertyBlockLevel1_0100, /* 87300..873FF */
+ FriBidiPropertyBlockLevel1_0100, /* 87400..874FF */
+ FriBidiPropertyBlockLevel1_0100, /* 87500..875FF */
+ FriBidiPropertyBlockLevel1_0100, /* 87600..876FF */
+ FriBidiPropertyBlockLevel1_0100, /* 87700..877FF */
+ FriBidiPropertyBlockLevel1_0100, /* 87800..878FF */
+ FriBidiPropertyBlockLevel1_0100, /* 87900..879FF */
+ FriBidiPropertyBlockLevel1_0100, /* 87A00..87AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 87B00..87BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 87C00..87CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 87D00..87DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 87E00..87EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 87F00..87FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 88000..880FF */
+ FriBidiPropertyBlockLevel1_0100, /* 88100..881FF */
+ FriBidiPropertyBlockLevel1_0100, /* 88200..882FF */
+ FriBidiPropertyBlockLevel1_0100, /* 88300..883FF */
+ FriBidiPropertyBlockLevel1_0100, /* 88400..884FF */
+ FriBidiPropertyBlockLevel1_0100, /* 88500..885FF */
+ FriBidiPropertyBlockLevel1_0100, /* 88600..886FF */
+ FriBidiPropertyBlockLevel1_0100, /* 88700..887FF */
+ FriBidiPropertyBlockLevel1_0100, /* 88800..888FF */
+ FriBidiPropertyBlockLevel1_0100, /* 88900..889FF */
+ FriBidiPropertyBlockLevel1_0100, /* 88A00..88AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 88B00..88BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 88C00..88CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 88D00..88DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 88E00..88EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 88F00..88FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 89000..890FF */
+ FriBidiPropertyBlockLevel1_0100, /* 89100..891FF */
+ FriBidiPropertyBlockLevel1_0100, /* 89200..892FF */
+ FriBidiPropertyBlockLevel1_0100, /* 89300..893FF */
+ FriBidiPropertyBlockLevel1_0100, /* 89400..894FF */
+ FriBidiPropertyBlockLevel1_0100, /* 89500..895FF */
+ FriBidiPropertyBlockLevel1_0100, /* 89600..896FF */
+ FriBidiPropertyBlockLevel1_0100, /* 89700..897FF */
+ FriBidiPropertyBlockLevel1_0100, /* 89800..898FF */
+ FriBidiPropertyBlockLevel1_0100, /* 89900..899FF */
+ FriBidiPropertyBlockLevel1_0100, /* 89A00..89AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 89B00..89BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 89C00..89CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 89D00..89DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 89E00..89EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 89F00..89FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8A000..8A0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8A100..8A1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8A200..8A2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8A300..8A3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8A400..8A4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8A500..8A5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8A600..8A6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8A700..8A7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8A800..8A8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8A900..8A9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8AA00..8AAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8AB00..8ABFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8AC00..8ACFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8AD00..8ADFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8AE00..8AEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8AF00..8AFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8B000..8B0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8B100..8B1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8B200..8B2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8B300..8B3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8B400..8B4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8B500..8B5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8B600..8B6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8B700..8B7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8B800..8B8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8B900..8B9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8BA00..8BAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8BB00..8BBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8BC00..8BCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8BD00..8BDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8BE00..8BEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8BF00..8BFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8C000..8C0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8C100..8C1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8C200..8C2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8C300..8C3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8C400..8C4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8C500..8C5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8C600..8C6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8C700..8C7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8C800..8C8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8C900..8C9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8CA00..8CAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8CB00..8CBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8CC00..8CCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8CD00..8CDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8CE00..8CEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8CF00..8CFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8D000..8D0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8D100..8D1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8D200..8D2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8D300..8D3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8D400..8D4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8D500..8D5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8D600..8D6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8D700..8D7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8D800..8D8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8D900..8D9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8DA00..8DAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8DB00..8DBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8DC00..8DCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8DD00..8DDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8DE00..8DEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8DF00..8DFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8E000..8E0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8E100..8E1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8E200..8E2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8E300..8E3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8E400..8E4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8E500..8E5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8E600..8E6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8E700..8E7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8E800..8E8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8E900..8E9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8EA00..8EAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8EB00..8EBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8EC00..8ECFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8ED00..8EDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8EE00..8EEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8EF00..8EFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8F000..8F0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8F100..8F1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8F200..8F2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8F300..8F3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8F400..8F4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8F500..8F5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8F600..8F6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8F700..8F7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8F800..8F8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8F900..8F9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 8FA00..8FAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8FB00..8FBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8FC00..8FCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8FD00..8FDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8FE00..8FEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 8FF00..8FFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 90000..900FF */
+ FriBidiPropertyBlockLevel1_0100, /* 90100..901FF */
+ FriBidiPropertyBlockLevel1_0100, /* 90200..902FF */
+ FriBidiPropertyBlockLevel1_0100, /* 90300..903FF */
+ FriBidiPropertyBlockLevel1_0100, /* 90400..904FF */
+ FriBidiPropertyBlockLevel1_0100, /* 90500..905FF */
+ FriBidiPropertyBlockLevel1_0100, /* 90600..906FF */
+ FriBidiPropertyBlockLevel1_0100, /* 90700..907FF */
+ FriBidiPropertyBlockLevel1_0100, /* 90800..908FF */
+ FriBidiPropertyBlockLevel1_0100, /* 90900..909FF */
+ FriBidiPropertyBlockLevel1_0100, /* 90A00..90AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 90B00..90BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 90C00..90CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 90D00..90DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 90E00..90EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 90F00..90FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 91000..910FF */
+ FriBidiPropertyBlockLevel1_0100, /* 91100..911FF */
+ FriBidiPropertyBlockLevel1_0100, /* 91200..912FF */
+ FriBidiPropertyBlockLevel1_0100, /* 91300..913FF */
+ FriBidiPropertyBlockLevel1_0100, /* 91400..914FF */
+ FriBidiPropertyBlockLevel1_0100, /* 91500..915FF */
+ FriBidiPropertyBlockLevel1_0100, /* 91600..916FF */
+ FriBidiPropertyBlockLevel1_0100, /* 91700..917FF */
+ FriBidiPropertyBlockLevel1_0100, /* 91800..918FF */
+ FriBidiPropertyBlockLevel1_0100, /* 91900..919FF */
+ FriBidiPropertyBlockLevel1_0100, /* 91A00..91AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 91B00..91BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 91C00..91CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 91D00..91DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 91E00..91EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 91F00..91FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 92000..920FF */
+ FriBidiPropertyBlockLevel1_0100, /* 92100..921FF */
+ FriBidiPropertyBlockLevel1_0100, /* 92200..922FF */
+ FriBidiPropertyBlockLevel1_0100, /* 92300..923FF */
+ FriBidiPropertyBlockLevel1_0100, /* 92400..924FF */
+ FriBidiPropertyBlockLevel1_0100, /* 92500..925FF */
+ FriBidiPropertyBlockLevel1_0100, /* 92600..926FF */
+ FriBidiPropertyBlockLevel1_0100, /* 92700..927FF */
+ FriBidiPropertyBlockLevel1_0100, /* 92800..928FF */
+ FriBidiPropertyBlockLevel1_0100, /* 92900..929FF */
+ FriBidiPropertyBlockLevel1_0100, /* 92A00..92AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 92B00..92BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 92C00..92CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 92D00..92DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 92E00..92EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 92F00..92FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 93000..930FF */
+ FriBidiPropertyBlockLevel1_0100, /* 93100..931FF */
+ FriBidiPropertyBlockLevel1_0100, /* 93200..932FF */
+ FriBidiPropertyBlockLevel1_0100, /* 93300..933FF */
+ FriBidiPropertyBlockLevel1_0100, /* 93400..934FF */
+ FriBidiPropertyBlockLevel1_0100, /* 93500..935FF */
+ FriBidiPropertyBlockLevel1_0100, /* 93600..936FF */
+ FriBidiPropertyBlockLevel1_0100, /* 93700..937FF */
+ FriBidiPropertyBlockLevel1_0100, /* 93800..938FF */
+ FriBidiPropertyBlockLevel1_0100, /* 93900..939FF */
+ FriBidiPropertyBlockLevel1_0100, /* 93A00..93AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 93B00..93BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 93C00..93CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 93D00..93DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 93E00..93EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 93F00..93FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 94000..940FF */
+ FriBidiPropertyBlockLevel1_0100, /* 94100..941FF */
+ FriBidiPropertyBlockLevel1_0100, /* 94200..942FF */
+ FriBidiPropertyBlockLevel1_0100, /* 94300..943FF */
+ FriBidiPropertyBlockLevel1_0100, /* 94400..944FF */
+ FriBidiPropertyBlockLevel1_0100, /* 94500..945FF */
+ FriBidiPropertyBlockLevel1_0100, /* 94600..946FF */
+ FriBidiPropertyBlockLevel1_0100, /* 94700..947FF */
+ FriBidiPropertyBlockLevel1_0100, /* 94800..948FF */
+ FriBidiPropertyBlockLevel1_0100, /* 94900..949FF */
+ FriBidiPropertyBlockLevel1_0100, /* 94A00..94AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 94B00..94BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 94C00..94CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 94D00..94DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 94E00..94EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 94F00..94FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 95000..950FF */
+ FriBidiPropertyBlockLevel1_0100, /* 95100..951FF */
+ FriBidiPropertyBlockLevel1_0100, /* 95200..952FF */
+ FriBidiPropertyBlockLevel1_0100, /* 95300..953FF */
+ FriBidiPropertyBlockLevel1_0100, /* 95400..954FF */
+ FriBidiPropertyBlockLevel1_0100, /* 95500..955FF */
+ FriBidiPropertyBlockLevel1_0100, /* 95600..956FF */
+ FriBidiPropertyBlockLevel1_0100, /* 95700..957FF */
+ FriBidiPropertyBlockLevel1_0100, /* 95800..958FF */
+ FriBidiPropertyBlockLevel1_0100, /* 95900..959FF */
+ FriBidiPropertyBlockLevel1_0100, /* 95A00..95AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 95B00..95BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 95C00..95CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 95D00..95DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 95E00..95EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 95F00..95FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 96000..960FF */
+ FriBidiPropertyBlockLevel1_0100, /* 96100..961FF */
+ FriBidiPropertyBlockLevel1_0100, /* 96200..962FF */
+ FriBidiPropertyBlockLevel1_0100, /* 96300..963FF */
+ FriBidiPropertyBlockLevel1_0100, /* 96400..964FF */
+ FriBidiPropertyBlockLevel1_0100, /* 96500..965FF */
+ FriBidiPropertyBlockLevel1_0100, /* 96600..966FF */
+ FriBidiPropertyBlockLevel1_0100, /* 96700..967FF */
+ FriBidiPropertyBlockLevel1_0100, /* 96800..968FF */
+ FriBidiPropertyBlockLevel1_0100, /* 96900..969FF */
+ FriBidiPropertyBlockLevel1_0100, /* 96A00..96AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 96B00..96BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 96C00..96CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 96D00..96DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 96E00..96EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 96F00..96FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 97000..970FF */
+ FriBidiPropertyBlockLevel1_0100, /* 97100..971FF */
+ FriBidiPropertyBlockLevel1_0100, /* 97200..972FF */
+ FriBidiPropertyBlockLevel1_0100, /* 97300..973FF */
+ FriBidiPropertyBlockLevel1_0100, /* 97400..974FF */
+ FriBidiPropertyBlockLevel1_0100, /* 97500..975FF */
+ FriBidiPropertyBlockLevel1_0100, /* 97600..976FF */
+ FriBidiPropertyBlockLevel1_0100, /* 97700..977FF */
+ FriBidiPropertyBlockLevel1_0100, /* 97800..978FF */
+ FriBidiPropertyBlockLevel1_0100, /* 97900..979FF */
+ FriBidiPropertyBlockLevel1_0100, /* 97A00..97AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 97B00..97BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 97C00..97CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 97D00..97DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 97E00..97EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 97F00..97FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 98000..980FF */
+ FriBidiPropertyBlockLevel1_0100, /* 98100..981FF */
+ FriBidiPropertyBlockLevel1_0100, /* 98200..982FF */
+ FriBidiPropertyBlockLevel1_0100, /* 98300..983FF */
+ FriBidiPropertyBlockLevel1_0100, /* 98400..984FF */
+ FriBidiPropertyBlockLevel1_0100, /* 98500..985FF */
+ FriBidiPropertyBlockLevel1_0100, /* 98600..986FF */
+ FriBidiPropertyBlockLevel1_0100, /* 98700..987FF */
+ FriBidiPropertyBlockLevel1_0100, /* 98800..988FF */
+ FriBidiPropertyBlockLevel1_0100, /* 98900..989FF */
+ FriBidiPropertyBlockLevel1_0100, /* 98A00..98AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 98B00..98BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 98C00..98CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 98D00..98DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 98E00..98EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 98F00..98FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 99000..990FF */
+ FriBidiPropertyBlockLevel1_0100, /* 99100..991FF */
+ FriBidiPropertyBlockLevel1_0100, /* 99200..992FF */
+ FriBidiPropertyBlockLevel1_0100, /* 99300..993FF */
+ FriBidiPropertyBlockLevel1_0100, /* 99400..994FF */
+ FriBidiPropertyBlockLevel1_0100, /* 99500..995FF */
+ FriBidiPropertyBlockLevel1_0100, /* 99600..996FF */
+ FriBidiPropertyBlockLevel1_0100, /* 99700..997FF */
+ FriBidiPropertyBlockLevel1_0100, /* 99800..998FF */
+ FriBidiPropertyBlockLevel1_0100, /* 99900..999FF */
+ FriBidiPropertyBlockLevel1_0100, /* 99A00..99AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 99B00..99BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 99C00..99CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 99D00..99DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 99E00..99EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 99F00..99FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9A000..9A0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9A100..9A1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9A200..9A2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9A300..9A3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9A400..9A4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9A500..9A5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9A600..9A6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9A700..9A7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9A800..9A8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9A900..9A9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9AA00..9AAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9AB00..9ABFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9AC00..9ACFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9AD00..9ADFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9AE00..9AEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9AF00..9AFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9B000..9B0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9B100..9B1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9B200..9B2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9B300..9B3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9B400..9B4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9B500..9B5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9B600..9B6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9B700..9B7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9B800..9B8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9B900..9B9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9BA00..9BAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9BB00..9BBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9BC00..9BCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9BD00..9BDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9BE00..9BEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9BF00..9BFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9C000..9C0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9C100..9C1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9C200..9C2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9C300..9C3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9C400..9C4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9C500..9C5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9C600..9C6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9C700..9C7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9C800..9C8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9C900..9C9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9CA00..9CAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9CB00..9CBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9CC00..9CCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9CD00..9CDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9CE00..9CEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9CF00..9CFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9D000..9D0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9D100..9D1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9D200..9D2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9D300..9D3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9D400..9D4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9D500..9D5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9D600..9D6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9D700..9D7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9D800..9D8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9D900..9D9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9DA00..9DAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9DB00..9DBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9DC00..9DCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9DD00..9DDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9DE00..9DEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9DF00..9DFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9E000..9E0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9E100..9E1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9E200..9E2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9E300..9E3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9E400..9E4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9E500..9E5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9E600..9E6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9E700..9E7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9E800..9E8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9E900..9E9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9EA00..9EAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9EB00..9EBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9EC00..9ECFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9ED00..9EDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9EE00..9EEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9EF00..9EFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9F000..9F0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9F100..9F1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9F200..9F2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9F300..9F3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9F400..9F4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9F500..9F5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9F600..9F6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9F700..9F7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9F800..9F8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9F900..9F9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 9FA00..9FAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9FB00..9FBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9FC00..9FCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9FD00..9FDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9FE00..9FEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 9FF00..9FFFF */
+ FriBidiPropertyBlockLevel1_0100, /* A0000..A00FF */
+ FriBidiPropertyBlockLevel1_0100, /* A0100..A01FF */
+ FriBidiPropertyBlockLevel1_0100, /* A0200..A02FF */
+ FriBidiPropertyBlockLevel1_0100, /* A0300..A03FF */
+ FriBidiPropertyBlockLevel1_0100, /* A0400..A04FF */
+ FriBidiPropertyBlockLevel1_0100, /* A0500..A05FF */
+ FriBidiPropertyBlockLevel1_0100, /* A0600..A06FF */
+ FriBidiPropertyBlockLevel1_0100, /* A0700..A07FF */
+ FriBidiPropertyBlockLevel1_0100, /* A0800..A08FF */
+ FriBidiPropertyBlockLevel1_0100, /* A0900..A09FF */
+ FriBidiPropertyBlockLevel1_0100, /* A0A00..A0AFF */
+ FriBidiPropertyBlockLevel1_0100, /* A0B00..A0BFF */
+ FriBidiPropertyBlockLevel1_0100, /* A0C00..A0CFF */
+ FriBidiPropertyBlockLevel1_0100, /* A0D00..A0DFF */
+ FriBidiPropertyBlockLevel1_0100, /* A0E00..A0EFF */
+ FriBidiPropertyBlockLevel1_0100, /* A0F00..A0FFF */
+ FriBidiPropertyBlockLevel1_0100, /* A1000..A10FF */
+ FriBidiPropertyBlockLevel1_0100, /* A1100..A11FF */
+ FriBidiPropertyBlockLevel1_0100, /* A1200..A12FF */
+ FriBidiPropertyBlockLevel1_0100, /* A1300..A13FF */
+ FriBidiPropertyBlockLevel1_0100, /* A1400..A14FF */
+ FriBidiPropertyBlockLevel1_0100, /* A1500..A15FF */
+ FriBidiPropertyBlockLevel1_0100, /* A1600..A16FF */
+ FriBidiPropertyBlockLevel1_0100, /* A1700..A17FF */
+ FriBidiPropertyBlockLevel1_0100, /* A1800..A18FF */
+ FriBidiPropertyBlockLevel1_0100, /* A1900..A19FF */
+ FriBidiPropertyBlockLevel1_0100, /* A1A00..A1AFF */
+ FriBidiPropertyBlockLevel1_0100, /* A1B00..A1BFF */
+ FriBidiPropertyBlockLevel1_0100, /* A1C00..A1CFF */
+ FriBidiPropertyBlockLevel1_0100, /* A1D00..A1DFF */
+ FriBidiPropertyBlockLevel1_0100, /* A1E00..A1EFF */
+ FriBidiPropertyBlockLevel1_0100, /* A1F00..A1FFF */
+ FriBidiPropertyBlockLevel1_0100, /* A2000..A20FF */
+ FriBidiPropertyBlockLevel1_0100, /* A2100..A21FF */
+ FriBidiPropertyBlockLevel1_0100, /* A2200..A22FF */
+ FriBidiPropertyBlockLevel1_0100, /* A2300..A23FF */
+ FriBidiPropertyBlockLevel1_0100, /* A2400..A24FF */
+ FriBidiPropertyBlockLevel1_0100, /* A2500..A25FF */
+ FriBidiPropertyBlockLevel1_0100, /* A2600..A26FF */
+ FriBidiPropertyBlockLevel1_0100, /* A2700..A27FF */
+ FriBidiPropertyBlockLevel1_0100, /* A2800..A28FF */
+ FriBidiPropertyBlockLevel1_0100, /* A2900..A29FF */
+ FriBidiPropertyBlockLevel1_0100, /* A2A00..A2AFF */
+ FriBidiPropertyBlockLevel1_0100, /* A2B00..A2BFF */
+ FriBidiPropertyBlockLevel1_0100, /* A2C00..A2CFF */
+ FriBidiPropertyBlockLevel1_0100, /* A2D00..A2DFF */
+ FriBidiPropertyBlockLevel1_0100, /* A2E00..A2EFF */
+ FriBidiPropertyBlockLevel1_0100, /* A2F00..A2FFF */
+ FriBidiPropertyBlockLevel1_0100, /* A3000..A30FF */
+ FriBidiPropertyBlockLevel1_0100, /* A3100..A31FF */
+ FriBidiPropertyBlockLevel1_0100, /* A3200..A32FF */
+ FriBidiPropertyBlockLevel1_0100, /* A3300..A33FF */
+ FriBidiPropertyBlockLevel1_0100, /* A3400..A34FF */
+ FriBidiPropertyBlockLevel1_0100, /* A3500..A35FF */
+ FriBidiPropertyBlockLevel1_0100, /* A3600..A36FF */
+ FriBidiPropertyBlockLevel1_0100, /* A3700..A37FF */
+ FriBidiPropertyBlockLevel1_0100, /* A3800..A38FF */
+ FriBidiPropertyBlockLevel1_0100, /* A3900..A39FF */
+ FriBidiPropertyBlockLevel1_0100, /* A3A00..A3AFF */
+ FriBidiPropertyBlockLevel1_0100, /* A3B00..A3BFF */
+ FriBidiPropertyBlockLevel1_0100, /* A3C00..A3CFF */
+ FriBidiPropertyBlockLevel1_0100, /* A3D00..A3DFF */
+ FriBidiPropertyBlockLevel1_0100, /* A3E00..A3EFF */
+ FriBidiPropertyBlockLevel1_0100, /* A3F00..A3FFF */
+ FriBidiPropertyBlockLevel1_0100, /* A4000..A40FF */
+ FriBidiPropertyBlockLevel1_0100, /* A4100..A41FF */
+ FriBidiPropertyBlockLevel1_0100, /* A4200..A42FF */
+ FriBidiPropertyBlockLevel1_0100, /* A4300..A43FF */
+ FriBidiPropertyBlockLevel1_0100, /* A4400..A44FF */
+ FriBidiPropertyBlockLevel1_0100, /* A4500..A45FF */
+ FriBidiPropertyBlockLevel1_0100, /* A4600..A46FF */
+ FriBidiPropertyBlockLevel1_0100, /* A4700..A47FF */
+ FriBidiPropertyBlockLevel1_0100, /* A4800..A48FF */
+ FriBidiPropertyBlockLevel1_0100, /* A4900..A49FF */
+ FriBidiPropertyBlockLevel1_0100, /* A4A00..A4AFF */
+ FriBidiPropertyBlockLevel1_0100, /* A4B00..A4BFF */
+ FriBidiPropertyBlockLevel1_0100, /* A4C00..A4CFF */
+ FriBidiPropertyBlockLevel1_0100, /* A4D00..A4DFF */
+ FriBidiPropertyBlockLevel1_0100, /* A4E00..A4EFF */
+ FriBidiPropertyBlockLevel1_0100, /* A4F00..A4FFF */
+ FriBidiPropertyBlockLevel1_0100, /* A5000..A50FF */
+ FriBidiPropertyBlockLevel1_0100, /* A5100..A51FF */
+ FriBidiPropertyBlockLevel1_0100, /* A5200..A52FF */
+ FriBidiPropertyBlockLevel1_0100, /* A5300..A53FF */
+ FriBidiPropertyBlockLevel1_0100, /* A5400..A54FF */
+ FriBidiPropertyBlockLevel1_0100, /* A5500..A55FF */
+ FriBidiPropertyBlockLevel1_0100, /* A5600..A56FF */
+ FriBidiPropertyBlockLevel1_0100, /* A5700..A57FF */
+ FriBidiPropertyBlockLevel1_0100, /* A5800..A58FF */
+ FriBidiPropertyBlockLevel1_0100, /* A5900..A59FF */
+ FriBidiPropertyBlockLevel1_0100, /* A5A00..A5AFF */
+ FriBidiPropertyBlockLevel1_0100, /* A5B00..A5BFF */
+ FriBidiPropertyBlockLevel1_0100, /* A5C00..A5CFF */
+ FriBidiPropertyBlockLevel1_0100, /* A5D00..A5DFF */
+ FriBidiPropertyBlockLevel1_0100, /* A5E00..A5EFF */
+ FriBidiPropertyBlockLevel1_0100, /* A5F00..A5FFF */
+ FriBidiPropertyBlockLevel1_0100, /* A6000..A60FF */
+ FriBidiPropertyBlockLevel1_0100, /* A6100..A61FF */
+ FriBidiPropertyBlockLevel1_0100, /* A6200..A62FF */
+ FriBidiPropertyBlockLevel1_0100, /* A6300..A63FF */
+ FriBidiPropertyBlockLevel1_0100, /* A6400..A64FF */
+ FriBidiPropertyBlockLevel1_0100, /* A6500..A65FF */
+ FriBidiPropertyBlockLevel1_0100, /* A6600..A66FF */
+ FriBidiPropertyBlockLevel1_0100, /* A6700..A67FF */
+ FriBidiPropertyBlockLevel1_0100, /* A6800..A68FF */
+ FriBidiPropertyBlockLevel1_0100, /* A6900..A69FF */
+ FriBidiPropertyBlockLevel1_0100, /* A6A00..A6AFF */
+ FriBidiPropertyBlockLevel1_0100, /* A6B00..A6BFF */
+ FriBidiPropertyBlockLevel1_0100, /* A6C00..A6CFF */
+ FriBidiPropertyBlockLevel1_0100, /* A6D00..A6DFF */
+ FriBidiPropertyBlockLevel1_0100, /* A6E00..A6EFF */
+ FriBidiPropertyBlockLevel1_0100, /* A6F00..A6FFF */
+ FriBidiPropertyBlockLevel1_0100, /* A7000..A70FF */
+ FriBidiPropertyBlockLevel1_0100, /* A7100..A71FF */
+ FriBidiPropertyBlockLevel1_0100, /* A7200..A72FF */
+ FriBidiPropertyBlockLevel1_0100, /* A7300..A73FF */
+ FriBidiPropertyBlockLevel1_0100, /* A7400..A74FF */
+ FriBidiPropertyBlockLevel1_0100, /* A7500..A75FF */
+ FriBidiPropertyBlockLevel1_0100, /* A7600..A76FF */
+ FriBidiPropertyBlockLevel1_0100, /* A7700..A77FF */
+ FriBidiPropertyBlockLevel1_0100, /* A7800..A78FF */
+ FriBidiPropertyBlockLevel1_0100, /* A7900..A79FF */
+ FriBidiPropertyBlockLevel1_0100, /* A7A00..A7AFF */
+ FriBidiPropertyBlockLevel1_0100, /* A7B00..A7BFF */
+ FriBidiPropertyBlockLevel1_0100, /* A7C00..A7CFF */
+ FriBidiPropertyBlockLevel1_0100, /* A7D00..A7DFF */
+ FriBidiPropertyBlockLevel1_0100, /* A7E00..A7EFF */
+ FriBidiPropertyBlockLevel1_0100, /* A7F00..A7FFF */
+ FriBidiPropertyBlockLevel1_0100, /* A8000..A80FF */
+ FriBidiPropertyBlockLevel1_0100, /* A8100..A81FF */
+ FriBidiPropertyBlockLevel1_0100, /* A8200..A82FF */
+ FriBidiPropertyBlockLevel1_0100, /* A8300..A83FF */
+ FriBidiPropertyBlockLevel1_0100, /* A8400..A84FF */
+ FriBidiPropertyBlockLevel1_0100, /* A8500..A85FF */
+ FriBidiPropertyBlockLevel1_0100, /* A8600..A86FF */
+ FriBidiPropertyBlockLevel1_0100, /* A8700..A87FF */
+ FriBidiPropertyBlockLevel1_0100, /* A8800..A88FF */
+ FriBidiPropertyBlockLevel1_0100, /* A8900..A89FF */
+ FriBidiPropertyBlockLevel1_0100, /* A8A00..A8AFF */
+ FriBidiPropertyBlockLevel1_0100, /* A8B00..A8BFF */
+ FriBidiPropertyBlockLevel1_0100, /* A8C00..A8CFF */
+ FriBidiPropertyBlockLevel1_0100, /* A8D00..A8DFF */
+ FriBidiPropertyBlockLevel1_0100, /* A8E00..A8EFF */
+ FriBidiPropertyBlockLevel1_0100, /* A8F00..A8FFF */
+ FriBidiPropertyBlockLevel1_0100, /* A9000..A90FF */
+ FriBidiPropertyBlockLevel1_0100, /* A9100..A91FF */
+ FriBidiPropertyBlockLevel1_0100, /* A9200..A92FF */
+ FriBidiPropertyBlockLevel1_0100, /* A9300..A93FF */
+ FriBidiPropertyBlockLevel1_0100, /* A9400..A94FF */
+ FriBidiPropertyBlockLevel1_0100, /* A9500..A95FF */
+ FriBidiPropertyBlockLevel1_0100, /* A9600..A96FF */
+ FriBidiPropertyBlockLevel1_0100, /* A9700..A97FF */
+ FriBidiPropertyBlockLevel1_0100, /* A9800..A98FF */
+ FriBidiPropertyBlockLevel1_0100, /* A9900..A99FF */
+ FriBidiPropertyBlockLevel1_0100, /* A9A00..A9AFF */
+ FriBidiPropertyBlockLevel1_0100, /* A9B00..A9BFF */
+ FriBidiPropertyBlockLevel1_0100, /* A9C00..A9CFF */
+ FriBidiPropertyBlockLevel1_0100, /* A9D00..A9DFF */
+ FriBidiPropertyBlockLevel1_0100, /* A9E00..A9EFF */
+ FriBidiPropertyBlockLevel1_0100, /* A9F00..A9FFF */
+ FriBidiPropertyBlockLevel1_0100, /* AA000..AA0FF */
+ FriBidiPropertyBlockLevel1_0100, /* AA100..AA1FF */
+ FriBidiPropertyBlockLevel1_0100, /* AA200..AA2FF */
+ FriBidiPropertyBlockLevel1_0100, /* AA300..AA3FF */
+ FriBidiPropertyBlockLevel1_0100, /* AA400..AA4FF */
+ FriBidiPropertyBlockLevel1_0100, /* AA500..AA5FF */
+ FriBidiPropertyBlockLevel1_0100, /* AA600..AA6FF */
+ FriBidiPropertyBlockLevel1_0100, /* AA700..AA7FF */
+ FriBidiPropertyBlockLevel1_0100, /* AA800..AA8FF */
+ FriBidiPropertyBlockLevel1_0100, /* AA900..AA9FF */
+ FriBidiPropertyBlockLevel1_0100, /* AAA00..AAAFF */
+ FriBidiPropertyBlockLevel1_0100, /* AAB00..AABFF */
+ FriBidiPropertyBlockLevel1_0100, /* AAC00..AACFF */
+ FriBidiPropertyBlockLevel1_0100, /* AAD00..AADFF */
+ FriBidiPropertyBlockLevel1_0100, /* AAE00..AAEFF */
+ FriBidiPropertyBlockLevel1_0100, /* AAF00..AAFFF */
+ FriBidiPropertyBlockLevel1_0100, /* AB000..AB0FF */
+ FriBidiPropertyBlockLevel1_0100, /* AB100..AB1FF */
+ FriBidiPropertyBlockLevel1_0100, /* AB200..AB2FF */
+ FriBidiPropertyBlockLevel1_0100, /* AB300..AB3FF */
+ FriBidiPropertyBlockLevel1_0100, /* AB400..AB4FF */
+ FriBidiPropertyBlockLevel1_0100, /* AB500..AB5FF */
+ FriBidiPropertyBlockLevel1_0100, /* AB600..AB6FF */
+ FriBidiPropertyBlockLevel1_0100, /* AB700..AB7FF */
+ FriBidiPropertyBlockLevel1_0100, /* AB800..AB8FF */
+ FriBidiPropertyBlockLevel1_0100, /* AB900..AB9FF */
+ FriBidiPropertyBlockLevel1_0100, /* ABA00..ABAFF */
+ FriBidiPropertyBlockLevel1_0100, /* ABB00..ABBFF */
+ FriBidiPropertyBlockLevel1_0100, /* ABC00..ABCFF */
+ FriBidiPropertyBlockLevel1_0100, /* ABD00..ABDFF */
+ FriBidiPropertyBlockLevel1_0100, /* ABE00..ABEFF */
+ FriBidiPropertyBlockLevel1_0100, /* ABF00..ABFFF */
+ FriBidiPropertyBlockLevel1_0100, /* AC000..AC0FF */
+ FriBidiPropertyBlockLevel1_0100, /* AC100..AC1FF */
+ FriBidiPropertyBlockLevel1_0100, /* AC200..AC2FF */
+ FriBidiPropertyBlockLevel1_0100, /* AC300..AC3FF */
+ FriBidiPropertyBlockLevel1_0100, /* AC400..AC4FF */
+ FriBidiPropertyBlockLevel1_0100, /* AC500..AC5FF */
+ FriBidiPropertyBlockLevel1_0100, /* AC600..AC6FF */
+ FriBidiPropertyBlockLevel1_0100, /* AC700..AC7FF */
+ FriBidiPropertyBlockLevel1_0100, /* AC800..AC8FF */
+ FriBidiPropertyBlockLevel1_0100, /* AC900..AC9FF */
+ FriBidiPropertyBlockLevel1_0100, /* ACA00..ACAFF */
+ FriBidiPropertyBlockLevel1_0100, /* ACB00..ACBFF */
+ FriBidiPropertyBlockLevel1_0100, /* ACC00..ACCFF */
+ FriBidiPropertyBlockLevel1_0100, /* ACD00..ACDFF */
+ FriBidiPropertyBlockLevel1_0100, /* ACE00..ACEFF */
+ FriBidiPropertyBlockLevel1_0100, /* ACF00..ACFFF */
+ FriBidiPropertyBlockLevel1_0100, /* AD000..AD0FF */
+ FriBidiPropertyBlockLevel1_0100, /* AD100..AD1FF */
+ FriBidiPropertyBlockLevel1_0100, /* AD200..AD2FF */
+ FriBidiPropertyBlockLevel1_0100, /* AD300..AD3FF */
+ FriBidiPropertyBlockLevel1_0100, /* AD400..AD4FF */
+ FriBidiPropertyBlockLevel1_0100, /* AD500..AD5FF */
+ FriBidiPropertyBlockLevel1_0100, /* AD600..AD6FF */
+ FriBidiPropertyBlockLevel1_0100, /* AD700..AD7FF */
+ FriBidiPropertyBlockLevel1_0100, /* AD800..AD8FF */
+ FriBidiPropertyBlockLevel1_0100, /* AD900..AD9FF */
+ FriBidiPropertyBlockLevel1_0100, /* ADA00..ADAFF */
+ FriBidiPropertyBlockLevel1_0100, /* ADB00..ADBFF */
+ FriBidiPropertyBlockLevel1_0100, /* ADC00..ADCFF */
+ FriBidiPropertyBlockLevel1_0100, /* ADD00..ADDFF */
+ FriBidiPropertyBlockLevel1_0100, /* ADE00..ADEFF */
+ FriBidiPropertyBlockLevel1_0100, /* ADF00..ADFFF */
+ FriBidiPropertyBlockLevel1_0100, /* AE000..AE0FF */
+ FriBidiPropertyBlockLevel1_0100, /* AE100..AE1FF */
+ FriBidiPropertyBlockLevel1_0100, /* AE200..AE2FF */
+ FriBidiPropertyBlockLevel1_0100, /* AE300..AE3FF */
+ FriBidiPropertyBlockLevel1_0100, /* AE400..AE4FF */
+ FriBidiPropertyBlockLevel1_0100, /* AE500..AE5FF */
+ FriBidiPropertyBlockLevel1_0100, /* AE600..AE6FF */
+ FriBidiPropertyBlockLevel1_0100, /* AE700..AE7FF */
+ FriBidiPropertyBlockLevel1_0100, /* AE800..AE8FF */
+ FriBidiPropertyBlockLevel1_0100, /* AE900..AE9FF */
+ FriBidiPropertyBlockLevel1_0100, /* AEA00..AEAFF */
+ FriBidiPropertyBlockLevel1_0100, /* AEB00..AEBFF */
+ FriBidiPropertyBlockLevel1_0100, /* AEC00..AECFF */
+ FriBidiPropertyBlockLevel1_0100, /* AED00..AEDFF */
+ FriBidiPropertyBlockLevel1_0100, /* AEE00..AEEFF */
+ FriBidiPropertyBlockLevel1_0100, /* AEF00..AEFFF */
+ FriBidiPropertyBlockLevel1_0100, /* AF000..AF0FF */
+ FriBidiPropertyBlockLevel1_0100, /* AF100..AF1FF */
+ FriBidiPropertyBlockLevel1_0100, /* AF200..AF2FF */
+ FriBidiPropertyBlockLevel1_0100, /* AF300..AF3FF */
+ FriBidiPropertyBlockLevel1_0100, /* AF400..AF4FF */
+ FriBidiPropertyBlockLevel1_0100, /* AF500..AF5FF */
+ FriBidiPropertyBlockLevel1_0100, /* AF600..AF6FF */
+ FriBidiPropertyBlockLevel1_0100, /* AF700..AF7FF */
+ FriBidiPropertyBlockLevel1_0100, /* AF800..AF8FF */
+ FriBidiPropertyBlockLevel1_0100, /* AF900..AF9FF */
+ FriBidiPropertyBlockLevel1_0100, /* AFA00..AFAFF */
+ FriBidiPropertyBlockLevel1_0100, /* AFB00..AFBFF */
+ FriBidiPropertyBlockLevel1_0100, /* AFC00..AFCFF */
+ FriBidiPropertyBlockLevel1_0100, /* AFD00..AFDFF */
+ FriBidiPropertyBlockLevel1_0100, /* AFE00..AFEFF */
+ FriBidiPropertyBlockLevel1_0100, /* AFF00..AFFFF */
+ FriBidiPropertyBlockLevel1_0100, /* B0000..B00FF */
+ FriBidiPropertyBlockLevel1_0100, /* B0100..B01FF */
+ FriBidiPropertyBlockLevel1_0100, /* B0200..B02FF */
+ FriBidiPropertyBlockLevel1_0100, /* B0300..B03FF */
+ FriBidiPropertyBlockLevel1_0100, /* B0400..B04FF */
+ FriBidiPropertyBlockLevel1_0100, /* B0500..B05FF */
+ FriBidiPropertyBlockLevel1_0100, /* B0600..B06FF */
+ FriBidiPropertyBlockLevel1_0100, /* B0700..B07FF */
+ FriBidiPropertyBlockLevel1_0100, /* B0800..B08FF */
+ FriBidiPropertyBlockLevel1_0100, /* B0900..B09FF */
+ FriBidiPropertyBlockLevel1_0100, /* B0A00..B0AFF */
+ FriBidiPropertyBlockLevel1_0100, /* B0B00..B0BFF */
+ FriBidiPropertyBlockLevel1_0100, /* B0C00..B0CFF */
+ FriBidiPropertyBlockLevel1_0100, /* B0D00..B0DFF */
+ FriBidiPropertyBlockLevel1_0100, /* B0E00..B0EFF */
+ FriBidiPropertyBlockLevel1_0100, /* B0F00..B0FFF */
+ FriBidiPropertyBlockLevel1_0100, /* B1000..B10FF */
+ FriBidiPropertyBlockLevel1_0100, /* B1100..B11FF */
+ FriBidiPropertyBlockLevel1_0100, /* B1200..B12FF */
+ FriBidiPropertyBlockLevel1_0100, /* B1300..B13FF */
+ FriBidiPropertyBlockLevel1_0100, /* B1400..B14FF */
+ FriBidiPropertyBlockLevel1_0100, /* B1500..B15FF */
+ FriBidiPropertyBlockLevel1_0100, /* B1600..B16FF */
+ FriBidiPropertyBlockLevel1_0100, /* B1700..B17FF */
+ FriBidiPropertyBlockLevel1_0100, /* B1800..B18FF */
+ FriBidiPropertyBlockLevel1_0100, /* B1900..B19FF */
+ FriBidiPropertyBlockLevel1_0100, /* B1A00..B1AFF */
+ FriBidiPropertyBlockLevel1_0100, /* B1B00..B1BFF */
+ FriBidiPropertyBlockLevel1_0100, /* B1C00..B1CFF */
+ FriBidiPropertyBlockLevel1_0100, /* B1D00..B1DFF */
+ FriBidiPropertyBlockLevel1_0100, /* B1E00..B1EFF */
+ FriBidiPropertyBlockLevel1_0100, /* B1F00..B1FFF */
+ FriBidiPropertyBlockLevel1_0100, /* B2000..B20FF */
+ FriBidiPropertyBlockLevel1_0100, /* B2100..B21FF */
+ FriBidiPropertyBlockLevel1_0100, /* B2200..B22FF */
+ FriBidiPropertyBlockLevel1_0100, /* B2300..B23FF */
+ FriBidiPropertyBlockLevel1_0100, /* B2400..B24FF */
+ FriBidiPropertyBlockLevel1_0100, /* B2500..B25FF */
+ FriBidiPropertyBlockLevel1_0100, /* B2600..B26FF */
+ FriBidiPropertyBlockLevel1_0100, /* B2700..B27FF */
+ FriBidiPropertyBlockLevel1_0100, /* B2800..B28FF */
+ FriBidiPropertyBlockLevel1_0100, /* B2900..B29FF */
+ FriBidiPropertyBlockLevel1_0100, /* B2A00..B2AFF */
+ FriBidiPropertyBlockLevel1_0100, /* B2B00..B2BFF */
+ FriBidiPropertyBlockLevel1_0100, /* B2C00..B2CFF */
+ FriBidiPropertyBlockLevel1_0100, /* B2D00..B2DFF */
+ FriBidiPropertyBlockLevel1_0100, /* B2E00..B2EFF */
+ FriBidiPropertyBlockLevel1_0100, /* B2F00..B2FFF */
+ FriBidiPropertyBlockLevel1_0100, /* B3000..B30FF */
+ FriBidiPropertyBlockLevel1_0100, /* B3100..B31FF */
+ FriBidiPropertyBlockLevel1_0100, /* B3200..B32FF */
+ FriBidiPropertyBlockLevel1_0100, /* B3300..B33FF */
+ FriBidiPropertyBlockLevel1_0100, /* B3400..B34FF */
+ FriBidiPropertyBlockLevel1_0100, /* B3500..B35FF */
+ FriBidiPropertyBlockLevel1_0100, /* B3600..B36FF */
+ FriBidiPropertyBlockLevel1_0100, /* B3700..B37FF */
+ FriBidiPropertyBlockLevel1_0100, /* B3800..B38FF */
+ FriBidiPropertyBlockLevel1_0100, /* B3900..B39FF */
+ FriBidiPropertyBlockLevel1_0100, /* B3A00..B3AFF */
+ FriBidiPropertyBlockLevel1_0100, /* B3B00..B3BFF */
+ FriBidiPropertyBlockLevel1_0100, /* B3C00..B3CFF */
+ FriBidiPropertyBlockLevel1_0100, /* B3D00..B3DFF */
+ FriBidiPropertyBlockLevel1_0100, /* B3E00..B3EFF */
+ FriBidiPropertyBlockLevel1_0100, /* B3F00..B3FFF */
+ FriBidiPropertyBlockLevel1_0100, /* B4000..B40FF */
+ FriBidiPropertyBlockLevel1_0100, /* B4100..B41FF */
+ FriBidiPropertyBlockLevel1_0100, /* B4200..B42FF */
+ FriBidiPropertyBlockLevel1_0100, /* B4300..B43FF */
+ FriBidiPropertyBlockLevel1_0100, /* B4400..B44FF */
+ FriBidiPropertyBlockLevel1_0100, /* B4500..B45FF */
+ FriBidiPropertyBlockLevel1_0100, /* B4600..B46FF */
+ FriBidiPropertyBlockLevel1_0100, /* B4700..B47FF */
+ FriBidiPropertyBlockLevel1_0100, /* B4800..B48FF */
+ FriBidiPropertyBlockLevel1_0100, /* B4900..B49FF */
+ FriBidiPropertyBlockLevel1_0100, /* B4A00..B4AFF */
+ FriBidiPropertyBlockLevel1_0100, /* B4B00..B4BFF */
+ FriBidiPropertyBlockLevel1_0100, /* B4C00..B4CFF */
+ FriBidiPropertyBlockLevel1_0100, /* B4D00..B4DFF */
+ FriBidiPropertyBlockLevel1_0100, /* B4E00..B4EFF */
+ FriBidiPropertyBlockLevel1_0100, /* B4F00..B4FFF */
+ FriBidiPropertyBlockLevel1_0100, /* B5000..B50FF */
+ FriBidiPropertyBlockLevel1_0100, /* B5100..B51FF */
+ FriBidiPropertyBlockLevel1_0100, /* B5200..B52FF */
+ FriBidiPropertyBlockLevel1_0100, /* B5300..B53FF */
+ FriBidiPropertyBlockLevel1_0100, /* B5400..B54FF */
+ FriBidiPropertyBlockLevel1_0100, /* B5500..B55FF */
+ FriBidiPropertyBlockLevel1_0100, /* B5600..B56FF */
+ FriBidiPropertyBlockLevel1_0100, /* B5700..B57FF */
+ FriBidiPropertyBlockLevel1_0100, /* B5800..B58FF */
+ FriBidiPropertyBlockLevel1_0100, /* B5900..B59FF */
+ FriBidiPropertyBlockLevel1_0100, /* B5A00..B5AFF */
+ FriBidiPropertyBlockLevel1_0100, /* B5B00..B5BFF */
+ FriBidiPropertyBlockLevel1_0100, /* B5C00..B5CFF */
+ FriBidiPropertyBlockLevel1_0100, /* B5D00..B5DFF */
+ FriBidiPropertyBlockLevel1_0100, /* B5E00..B5EFF */
+ FriBidiPropertyBlockLevel1_0100, /* B5F00..B5FFF */
+ FriBidiPropertyBlockLevel1_0100, /* B6000..B60FF */
+ FriBidiPropertyBlockLevel1_0100, /* B6100..B61FF */
+ FriBidiPropertyBlockLevel1_0100, /* B6200..B62FF */
+ FriBidiPropertyBlockLevel1_0100, /* B6300..B63FF */
+ FriBidiPropertyBlockLevel1_0100, /* B6400..B64FF */
+ FriBidiPropertyBlockLevel1_0100, /* B6500..B65FF */
+ FriBidiPropertyBlockLevel1_0100, /* B6600..B66FF */
+ FriBidiPropertyBlockLevel1_0100, /* B6700..B67FF */
+ FriBidiPropertyBlockLevel1_0100, /* B6800..B68FF */
+ FriBidiPropertyBlockLevel1_0100, /* B6900..B69FF */
+ FriBidiPropertyBlockLevel1_0100, /* B6A00..B6AFF */
+ FriBidiPropertyBlockLevel1_0100, /* B6B00..B6BFF */
+ FriBidiPropertyBlockLevel1_0100, /* B6C00..B6CFF */
+ FriBidiPropertyBlockLevel1_0100, /* B6D00..B6DFF */
+ FriBidiPropertyBlockLevel1_0100, /* B6E00..B6EFF */
+ FriBidiPropertyBlockLevel1_0100, /* B6F00..B6FFF */
+ FriBidiPropertyBlockLevel1_0100, /* B7000..B70FF */
+ FriBidiPropertyBlockLevel1_0100, /* B7100..B71FF */
+ FriBidiPropertyBlockLevel1_0100, /* B7200..B72FF */
+ FriBidiPropertyBlockLevel1_0100, /* B7300..B73FF */
+ FriBidiPropertyBlockLevel1_0100, /* B7400..B74FF */
+ FriBidiPropertyBlockLevel1_0100, /* B7500..B75FF */
+ FriBidiPropertyBlockLevel1_0100, /* B7600..B76FF */
+ FriBidiPropertyBlockLevel1_0100, /* B7700..B77FF */
+ FriBidiPropertyBlockLevel1_0100, /* B7800..B78FF */
+ FriBidiPropertyBlockLevel1_0100, /* B7900..B79FF */
+ FriBidiPropertyBlockLevel1_0100, /* B7A00..B7AFF */
+ FriBidiPropertyBlockLevel1_0100, /* B7B00..B7BFF */
+ FriBidiPropertyBlockLevel1_0100, /* B7C00..B7CFF */
+ FriBidiPropertyBlockLevel1_0100, /* B7D00..B7DFF */
+ FriBidiPropertyBlockLevel1_0100, /* B7E00..B7EFF */
+ FriBidiPropertyBlockLevel1_0100, /* B7F00..B7FFF */
+ FriBidiPropertyBlockLevel1_0100, /* B8000..B80FF */
+ FriBidiPropertyBlockLevel1_0100, /* B8100..B81FF */
+ FriBidiPropertyBlockLevel1_0100, /* B8200..B82FF */
+ FriBidiPropertyBlockLevel1_0100, /* B8300..B83FF */
+ FriBidiPropertyBlockLevel1_0100, /* B8400..B84FF */
+ FriBidiPropertyBlockLevel1_0100, /* B8500..B85FF */
+ FriBidiPropertyBlockLevel1_0100, /* B8600..B86FF */
+ FriBidiPropertyBlockLevel1_0100, /* B8700..B87FF */
+ FriBidiPropertyBlockLevel1_0100, /* B8800..B88FF */
+ FriBidiPropertyBlockLevel1_0100, /* B8900..B89FF */
+ FriBidiPropertyBlockLevel1_0100, /* B8A00..B8AFF */
+ FriBidiPropertyBlockLevel1_0100, /* B8B00..B8BFF */
+ FriBidiPropertyBlockLevel1_0100, /* B8C00..B8CFF */
+ FriBidiPropertyBlockLevel1_0100, /* B8D00..B8DFF */
+ FriBidiPropertyBlockLevel1_0100, /* B8E00..B8EFF */
+ FriBidiPropertyBlockLevel1_0100, /* B8F00..B8FFF */
+ FriBidiPropertyBlockLevel1_0100, /* B9000..B90FF */
+ FriBidiPropertyBlockLevel1_0100, /* B9100..B91FF */
+ FriBidiPropertyBlockLevel1_0100, /* B9200..B92FF */
+ FriBidiPropertyBlockLevel1_0100, /* B9300..B93FF */
+ FriBidiPropertyBlockLevel1_0100, /* B9400..B94FF */
+ FriBidiPropertyBlockLevel1_0100, /* B9500..B95FF */
+ FriBidiPropertyBlockLevel1_0100, /* B9600..B96FF */
+ FriBidiPropertyBlockLevel1_0100, /* B9700..B97FF */
+ FriBidiPropertyBlockLevel1_0100, /* B9800..B98FF */
+ FriBidiPropertyBlockLevel1_0100, /* B9900..B99FF */
+ FriBidiPropertyBlockLevel1_0100, /* B9A00..B9AFF */
+ FriBidiPropertyBlockLevel1_0100, /* B9B00..B9BFF */
+ FriBidiPropertyBlockLevel1_0100, /* B9C00..B9CFF */
+ FriBidiPropertyBlockLevel1_0100, /* B9D00..B9DFF */
+ FriBidiPropertyBlockLevel1_0100, /* B9E00..B9EFF */
+ FriBidiPropertyBlockLevel1_0100, /* B9F00..B9FFF */
+ FriBidiPropertyBlockLevel1_0100, /* BA000..BA0FF */
+ FriBidiPropertyBlockLevel1_0100, /* BA100..BA1FF */
+ FriBidiPropertyBlockLevel1_0100, /* BA200..BA2FF */
+ FriBidiPropertyBlockLevel1_0100, /* BA300..BA3FF */
+ FriBidiPropertyBlockLevel1_0100, /* BA400..BA4FF */
+ FriBidiPropertyBlockLevel1_0100, /* BA500..BA5FF */
+ FriBidiPropertyBlockLevel1_0100, /* BA600..BA6FF */
+ FriBidiPropertyBlockLevel1_0100, /* BA700..BA7FF */
+ FriBidiPropertyBlockLevel1_0100, /* BA800..BA8FF */
+ FriBidiPropertyBlockLevel1_0100, /* BA900..BA9FF */
+ FriBidiPropertyBlockLevel1_0100, /* BAA00..BAAFF */
+ FriBidiPropertyBlockLevel1_0100, /* BAB00..BABFF */
+ FriBidiPropertyBlockLevel1_0100, /* BAC00..BACFF */
+ FriBidiPropertyBlockLevel1_0100, /* BAD00..BADFF */
+ FriBidiPropertyBlockLevel1_0100, /* BAE00..BAEFF */
+ FriBidiPropertyBlockLevel1_0100, /* BAF00..BAFFF */
+ FriBidiPropertyBlockLevel1_0100, /* BB000..BB0FF */
+ FriBidiPropertyBlockLevel1_0100, /* BB100..BB1FF */
+ FriBidiPropertyBlockLevel1_0100, /* BB200..BB2FF */
+ FriBidiPropertyBlockLevel1_0100, /* BB300..BB3FF */
+ FriBidiPropertyBlockLevel1_0100, /* BB400..BB4FF */
+ FriBidiPropertyBlockLevel1_0100, /* BB500..BB5FF */
+ FriBidiPropertyBlockLevel1_0100, /* BB600..BB6FF */
+ FriBidiPropertyBlockLevel1_0100, /* BB700..BB7FF */
+ FriBidiPropertyBlockLevel1_0100, /* BB800..BB8FF */
+ FriBidiPropertyBlockLevel1_0100, /* BB900..BB9FF */
+ FriBidiPropertyBlockLevel1_0100, /* BBA00..BBAFF */
+ FriBidiPropertyBlockLevel1_0100, /* BBB00..BBBFF */
+ FriBidiPropertyBlockLevel1_0100, /* BBC00..BBCFF */
+ FriBidiPropertyBlockLevel1_0100, /* BBD00..BBDFF */
+ FriBidiPropertyBlockLevel1_0100, /* BBE00..BBEFF */
+ FriBidiPropertyBlockLevel1_0100, /* BBF00..BBFFF */
+ FriBidiPropertyBlockLevel1_0100, /* BC000..BC0FF */
+ FriBidiPropertyBlockLevel1_0100, /* BC100..BC1FF */
+ FriBidiPropertyBlockLevel1_0100, /* BC200..BC2FF */
+ FriBidiPropertyBlockLevel1_0100, /* BC300..BC3FF */
+ FriBidiPropertyBlockLevel1_0100, /* BC400..BC4FF */
+ FriBidiPropertyBlockLevel1_0100, /* BC500..BC5FF */
+ FriBidiPropertyBlockLevel1_0100, /* BC600..BC6FF */
+ FriBidiPropertyBlockLevel1_0100, /* BC700..BC7FF */
+ FriBidiPropertyBlockLevel1_0100, /* BC800..BC8FF */
+ FriBidiPropertyBlockLevel1_0100, /* BC900..BC9FF */
+ FriBidiPropertyBlockLevel1_0100, /* BCA00..BCAFF */
+ FriBidiPropertyBlockLevel1_0100, /* BCB00..BCBFF */
+ FriBidiPropertyBlockLevel1_0100, /* BCC00..BCCFF */
+ FriBidiPropertyBlockLevel1_0100, /* BCD00..BCDFF */
+ FriBidiPropertyBlockLevel1_0100, /* BCE00..BCEFF */
+ FriBidiPropertyBlockLevel1_0100, /* BCF00..BCFFF */
+ FriBidiPropertyBlockLevel1_0100, /* BD000..BD0FF */
+ FriBidiPropertyBlockLevel1_0100, /* BD100..BD1FF */
+ FriBidiPropertyBlockLevel1_0100, /* BD200..BD2FF */
+ FriBidiPropertyBlockLevel1_0100, /* BD300..BD3FF */
+ FriBidiPropertyBlockLevel1_0100, /* BD400..BD4FF */
+ FriBidiPropertyBlockLevel1_0100, /* BD500..BD5FF */
+ FriBidiPropertyBlockLevel1_0100, /* BD600..BD6FF */
+ FriBidiPropertyBlockLevel1_0100, /* BD700..BD7FF */
+ FriBidiPropertyBlockLevel1_0100, /* BD800..BD8FF */
+ FriBidiPropertyBlockLevel1_0100, /* BD900..BD9FF */
+ FriBidiPropertyBlockLevel1_0100, /* BDA00..BDAFF */
+ FriBidiPropertyBlockLevel1_0100, /* BDB00..BDBFF */
+ FriBidiPropertyBlockLevel1_0100, /* BDC00..BDCFF */
+ FriBidiPropertyBlockLevel1_0100, /* BDD00..BDDFF */
+ FriBidiPropertyBlockLevel1_0100, /* BDE00..BDEFF */
+ FriBidiPropertyBlockLevel1_0100, /* BDF00..BDFFF */
+ FriBidiPropertyBlockLevel1_0100, /* BE000..BE0FF */
+ FriBidiPropertyBlockLevel1_0100, /* BE100..BE1FF */
+ FriBidiPropertyBlockLevel1_0100, /* BE200..BE2FF */
+ FriBidiPropertyBlockLevel1_0100, /* BE300..BE3FF */
+ FriBidiPropertyBlockLevel1_0100, /* BE400..BE4FF */
+ FriBidiPropertyBlockLevel1_0100, /* BE500..BE5FF */
+ FriBidiPropertyBlockLevel1_0100, /* BE600..BE6FF */
+ FriBidiPropertyBlockLevel1_0100, /* BE700..BE7FF */
+ FriBidiPropertyBlockLevel1_0100, /* BE800..BE8FF */
+ FriBidiPropertyBlockLevel1_0100, /* BE900..BE9FF */
+ FriBidiPropertyBlockLevel1_0100, /* BEA00..BEAFF */
+ FriBidiPropertyBlockLevel1_0100, /* BEB00..BEBFF */
+ FriBidiPropertyBlockLevel1_0100, /* BEC00..BECFF */
+ FriBidiPropertyBlockLevel1_0100, /* BED00..BEDFF */
+ FriBidiPropertyBlockLevel1_0100, /* BEE00..BEEFF */
+ FriBidiPropertyBlockLevel1_0100, /* BEF00..BEFFF */
+ FriBidiPropertyBlockLevel1_0100, /* BF000..BF0FF */
+ FriBidiPropertyBlockLevel1_0100, /* BF100..BF1FF */
+ FriBidiPropertyBlockLevel1_0100, /* BF200..BF2FF */
+ FriBidiPropertyBlockLevel1_0100, /* BF300..BF3FF */
+ FriBidiPropertyBlockLevel1_0100, /* BF400..BF4FF */
+ FriBidiPropertyBlockLevel1_0100, /* BF500..BF5FF */
+ FriBidiPropertyBlockLevel1_0100, /* BF600..BF6FF */
+ FriBidiPropertyBlockLevel1_0100, /* BF700..BF7FF */
+ FriBidiPropertyBlockLevel1_0100, /* BF800..BF8FF */
+ FriBidiPropertyBlockLevel1_0100, /* BF900..BF9FF */
+ FriBidiPropertyBlockLevel1_0100, /* BFA00..BFAFF */
+ FriBidiPropertyBlockLevel1_0100, /* BFB00..BFBFF */
+ FriBidiPropertyBlockLevel1_0100, /* BFC00..BFCFF */
+ FriBidiPropertyBlockLevel1_0100, /* BFD00..BFDFF */
+ FriBidiPropertyBlockLevel1_0100, /* BFE00..BFEFF */
+ FriBidiPropertyBlockLevel1_0100, /* BFF00..BFFFF */
+ FriBidiPropertyBlockLevel1_0100, /* C0000..C00FF */
+ FriBidiPropertyBlockLevel1_0100, /* C0100..C01FF */
+ FriBidiPropertyBlockLevel1_0100, /* C0200..C02FF */
+ FriBidiPropertyBlockLevel1_0100, /* C0300..C03FF */
+ FriBidiPropertyBlockLevel1_0100, /* C0400..C04FF */
+ FriBidiPropertyBlockLevel1_0100, /* C0500..C05FF */
+ FriBidiPropertyBlockLevel1_0100, /* C0600..C06FF */
+ FriBidiPropertyBlockLevel1_0100, /* C0700..C07FF */
+ FriBidiPropertyBlockLevel1_0100, /* C0800..C08FF */
+ FriBidiPropertyBlockLevel1_0100, /* C0900..C09FF */
+ FriBidiPropertyBlockLevel1_0100, /* C0A00..C0AFF */
+ FriBidiPropertyBlockLevel1_0100, /* C0B00..C0BFF */
+ FriBidiPropertyBlockLevel1_0100, /* C0C00..C0CFF */
+ FriBidiPropertyBlockLevel1_0100, /* C0D00..C0DFF */
+ FriBidiPropertyBlockLevel1_0100, /* C0E00..C0EFF */
+ FriBidiPropertyBlockLevel1_0100, /* C0F00..C0FFF */
+ FriBidiPropertyBlockLevel1_0100, /* C1000..C10FF */
+ FriBidiPropertyBlockLevel1_0100, /* C1100..C11FF */
+ FriBidiPropertyBlockLevel1_0100, /* C1200..C12FF */
+ FriBidiPropertyBlockLevel1_0100, /* C1300..C13FF */
+ FriBidiPropertyBlockLevel1_0100, /* C1400..C14FF */
+ FriBidiPropertyBlockLevel1_0100, /* C1500..C15FF */
+ FriBidiPropertyBlockLevel1_0100, /* C1600..C16FF */
+ FriBidiPropertyBlockLevel1_0100, /* C1700..C17FF */
+ FriBidiPropertyBlockLevel1_0100, /* C1800..C18FF */
+ FriBidiPropertyBlockLevel1_0100, /* C1900..C19FF */
+ FriBidiPropertyBlockLevel1_0100, /* C1A00..C1AFF */
+ FriBidiPropertyBlockLevel1_0100, /* C1B00..C1BFF */
+ FriBidiPropertyBlockLevel1_0100, /* C1C00..C1CFF */
+ FriBidiPropertyBlockLevel1_0100, /* C1D00..C1DFF */
+ FriBidiPropertyBlockLevel1_0100, /* C1E00..C1EFF */
+ FriBidiPropertyBlockLevel1_0100, /* C1F00..C1FFF */
+ FriBidiPropertyBlockLevel1_0100, /* C2000..C20FF */
+ FriBidiPropertyBlockLevel1_0100, /* C2100..C21FF */
+ FriBidiPropertyBlockLevel1_0100, /* C2200..C22FF */
+ FriBidiPropertyBlockLevel1_0100, /* C2300..C23FF */
+ FriBidiPropertyBlockLevel1_0100, /* C2400..C24FF */
+ FriBidiPropertyBlockLevel1_0100, /* C2500..C25FF */
+ FriBidiPropertyBlockLevel1_0100, /* C2600..C26FF */
+ FriBidiPropertyBlockLevel1_0100, /* C2700..C27FF */
+ FriBidiPropertyBlockLevel1_0100, /* C2800..C28FF */
+ FriBidiPropertyBlockLevel1_0100, /* C2900..C29FF */
+ FriBidiPropertyBlockLevel1_0100, /* C2A00..C2AFF */
+ FriBidiPropertyBlockLevel1_0100, /* C2B00..C2BFF */
+ FriBidiPropertyBlockLevel1_0100, /* C2C00..C2CFF */
+ FriBidiPropertyBlockLevel1_0100, /* C2D00..C2DFF */
+ FriBidiPropertyBlockLevel1_0100, /* C2E00..C2EFF */
+ FriBidiPropertyBlockLevel1_0100, /* C2F00..C2FFF */
+ FriBidiPropertyBlockLevel1_0100, /* C3000..C30FF */
+ FriBidiPropertyBlockLevel1_0100, /* C3100..C31FF */
+ FriBidiPropertyBlockLevel1_0100, /* C3200..C32FF */
+ FriBidiPropertyBlockLevel1_0100, /* C3300..C33FF */
+ FriBidiPropertyBlockLevel1_0100, /* C3400..C34FF */
+ FriBidiPropertyBlockLevel1_0100, /* C3500..C35FF */
+ FriBidiPropertyBlockLevel1_0100, /* C3600..C36FF */
+ FriBidiPropertyBlockLevel1_0100, /* C3700..C37FF */
+ FriBidiPropertyBlockLevel1_0100, /* C3800..C38FF */
+ FriBidiPropertyBlockLevel1_0100, /* C3900..C39FF */
+ FriBidiPropertyBlockLevel1_0100, /* C3A00..C3AFF */
+ FriBidiPropertyBlockLevel1_0100, /* C3B00..C3BFF */
+ FriBidiPropertyBlockLevel1_0100, /* C3C00..C3CFF */
+ FriBidiPropertyBlockLevel1_0100, /* C3D00..C3DFF */
+ FriBidiPropertyBlockLevel1_0100, /* C3E00..C3EFF */
+ FriBidiPropertyBlockLevel1_0100, /* C3F00..C3FFF */
+ FriBidiPropertyBlockLevel1_0100, /* C4000..C40FF */
+ FriBidiPropertyBlockLevel1_0100, /* C4100..C41FF */
+ FriBidiPropertyBlockLevel1_0100, /* C4200..C42FF */
+ FriBidiPropertyBlockLevel1_0100, /* C4300..C43FF */
+ FriBidiPropertyBlockLevel1_0100, /* C4400..C44FF */
+ FriBidiPropertyBlockLevel1_0100, /* C4500..C45FF */
+ FriBidiPropertyBlockLevel1_0100, /* C4600..C46FF */
+ FriBidiPropertyBlockLevel1_0100, /* C4700..C47FF */
+ FriBidiPropertyBlockLevel1_0100, /* C4800..C48FF */
+ FriBidiPropertyBlockLevel1_0100, /* C4900..C49FF */
+ FriBidiPropertyBlockLevel1_0100, /* C4A00..C4AFF */
+ FriBidiPropertyBlockLevel1_0100, /* C4B00..C4BFF */
+ FriBidiPropertyBlockLevel1_0100, /* C4C00..C4CFF */
+ FriBidiPropertyBlockLevel1_0100, /* C4D00..C4DFF */
+ FriBidiPropertyBlockLevel1_0100, /* C4E00..C4EFF */
+ FriBidiPropertyBlockLevel1_0100, /* C4F00..C4FFF */
+ FriBidiPropertyBlockLevel1_0100, /* C5000..C50FF */
+ FriBidiPropertyBlockLevel1_0100, /* C5100..C51FF */
+ FriBidiPropertyBlockLevel1_0100, /* C5200..C52FF */
+ FriBidiPropertyBlockLevel1_0100, /* C5300..C53FF */
+ FriBidiPropertyBlockLevel1_0100, /* C5400..C54FF */
+ FriBidiPropertyBlockLevel1_0100, /* C5500..C55FF */
+ FriBidiPropertyBlockLevel1_0100, /* C5600..C56FF */
+ FriBidiPropertyBlockLevel1_0100, /* C5700..C57FF */
+ FriBidiPropertyBlockLevel1_0100, /* C5800..C58FF */
+ FriBidiPropertyBlockLevel1_0100, /* C5900..C59FF */
+ FriBidiPropertyBlockLevel1_0100, /* C5A00..C5AFF */
+ FriBidiPropertyBlockLevel1_0100, /* C5B00..C5BFF */
+ FriBidiPropertyBlockLevel1_0100, /* C5C00..C5CFF */
+ FriBidiPropertyBlockLevel1_0100, /* C5D00..C5DFF */
+ FriBidiPropertyBlockLevel1_0100, /* C5E00..C5EFF */
+ FriBidiPropertyBlockLevel1_0100, /* C5F00..C5FFF */
+ FriBidiPropertyBlockLevel1_0100, /* C6000..C60FF */
+ FriBidiPropertyBlockLevel1_0100, /* C6100..C61FF */
+ FriBidiPropertyBlockLevel1_0100, /* C6200..C62FF */
+ FriBidiPropertyBlockLevel1_0100, /* C6300..C63FF */
+ FriBidiPropertyBlockLevel1_0100, /* C6400..C64FF */
+ FriBidiPropertyBlockLevel1_0100, /* C6500..C65FF */
+ FriBidiPropertyBlockLevel1_0100, /* C6600..C66FF */
+ FriBidiPropertyBlockLevel1_0100, /* C6700..C67FF */
+ FriBidiPropertyBlockLevel1_0100, /* C6800..C68FF */
+ FriBidiPropertyBlockLevel1_0100, /* C6900..C69FF */
+ FriBidiPropertyBlockLevel1_0100, /* C6A00..C6AFF */
+ FriBidiPropertyBlockLevel1_0100, /* C6B00..C6BFF */
+ FriBidiPropertyBlockLevel1_0100, /* C6C00..C6CFF */
+ FriBidiPropertyBlockLevel1_0100, /* C6D00..C6DFF */
+ FriBidiPropertyBlockLevel1_0100, /* C6E00..C6EFF */
+ FriBidiPropertyBlockLevel1_0100, /* C6F00..C6FFF */
+ FriBidiPropertyBlockLevel1_0100, /* C7000..C70FF */
+ FriBidiPropertyBlockLevel1_0100, /* C7100..C71FF */
+ FriBidiPropertyBlockLevel1_0100, /* C7200..C72FF */
+ FriBidiPropertyBlockLevel1_0100, /* C7300..C73FF */
+ FriBidiPropertyBlockLevel1_0100, /* C7400..C74FF */
+ FriBidiPropertyBlockLevel1_0100, /* C7500..C75FF */
+ FriBidiPropertyBlockLevel1_0100, /* C7600..C76FF */
+ FriBidiPropertyBlockLevel1_0100, /* C7700..C77FF */
+ FriBidiPropertyBlockLevel1_0100, /* C7800..C78FF */
+ FriBidiPropertyBlockLevel1_0100, /* C7900..C79FF */
+ FriBidiPropertyBlockLevel1_0100, /* C7A00..C7AFF */
+ FriBidiPropertyBlockLevel1_0100, /* C7B00..C7BFF */
+ FriBidiPropertyBlockLevel1_0100, /* C7C00..C7CFF */
+ FriBidiPropertyBlockLevel1_0100, /* C7D00..C7DFF */
+ FriBidiPropertyBlockLevel1_0100, /* C7E00..C7EFF */
+ FriBidiPropertyBlockLevel1_0100, /* C7F00..C7FFF */
+ FriBidiPropertyBlockLevel1_0100, /* C8000..C80FF */
+ FriBidiPropertyBlockLevel1_0100, /* C8100..C81FF */
+ FriBidiPropertyBlockLevel1_0100, /* C8200..C82FF */
+ FriBidiPropertyBlockLevel1_0100, /* C8300..C83FF */
+ FriBidiPropertyBlockLevel1_0100, /* C8400..C84FF */
+ FriBidiPropertyBlockLevel1_0100, /* C8500..C85FF */
+ FriBidiPropertyBlockLevel1_0100, /* C8600..C86FF */
+ FriBidiPropertyBlockLevel1_0100, /* C8700..C87FF */
+ FriBidiPropertyBlockLevel1_0100, /* C8800..C88FF */
+ FriBidiPropertyBlockLevel1_0100, /* C8900..C89FF */
+ FriBidiPropertyBlockLevel1_0100, /* C8A00..C8AFF */
+ FriBidiPropertyBlockLevel1_0100, /* C8B00..C8BFF */
+ FriBidiPropertyBlockLevel1_0100, /* C8C00..C8CFF */
+ FriBidiPropertyBlockLevel1_0100, /* C8D00..C8DFF */
+ FriBidiPropertyBlockLevel1_0100, /* C8E00..C8EFF */
+ FriBidiPropertyBlockLevel1_0100, /* C8F00..C8FFF */
+ FriBidiPropertyBlockLevel1_0100, /* C9000..C90FF */
+ FriBidiPropertyBlockLevel1_0100, /* C9100..C91FF */
+ FriBidiPropertyBlockLevel1_0100, /* C9200..C92FF */
+ FriBidiPropertyBlockLevel1_0100, /* C9300..C93FF */
+ FriBidiPropertyBlockLevel1_0100, /* C9400..C94FF */
+ FriBidiPropertyBlockLevel1_0100, /* C9500..C95FF */
+ FriBidiPropertyBlockLevel1_0100, /* C9600..C96FF */
+ FriBidiPropertyBlockLevel1_0100, /* C9700..C97FF */
+ FriBidiPropertyBlockLevel1_0100, /* C9800..C98FF */
+ FriBidiPropertyBlockLevel1_0100, /* C9900..C99FF */
+ FriBidiPropertyBlockLevel1_0100, /* C9A00..C9AFF */
+ FriBidiPropertyBlockLevel1_0100, /* C9B00..C9BFF */
+ FriBidiPropertyBlockLevel1_0100, /* C9C00..C9CFF */
+ FriBidiPropertyBlockLevel1_0100, /* C9D00..C9DFF */
+ FriBidiPropertyBlockLevel1_0100, /* C9E00..C9EFF */
+ FriBidiPropertyBlockLevel1_0100, /* C9F00..C9FFF */
+ FriBidiPropertyBlockLevel1_0100, /* CA000..CA0FF */
+ FriBidiPropertyBlockLevel1_0100, /* CA100..CA1FF */
+ FriBidiPropertyBlockLevel1_0100, /* CA200..CA2FF */
+ FriBidiPropertyBlockLevel1_0100, /* CA300..CA3FF */
+ FriBidiPropertyBlockLevel1_0100, /* CA400..CA4FF */
+ FriBidiPropertyBlockLevel1_0100, /* CA500..CA5FF */
+ FriBidiPropertyBlockLevel1_0100, /* CA600..CA6FF */
+ FriBidiPropertyBlockLevel1_0100, /* CA700..CA7FF */
+ FriBidiPropertyBlockLevel1_0100, /* CA800..CA8FF */
+ FriBidiPropertyBlockLevel1_0100, /* CA900..CA9FF */
+ FriBidiPropertyBlockLevel1_0100, /* CAA00..CAAFF */
+ FriBidiPropertyBlockLevel1_0100, /* CAB00..CABFF */
+ FriBidiPropertyBlockLevel1_0100, /* CAC00..CACFF */
+ FriBidiPropertyBlockLevel1_0100, /* CAD00..CADFF */
+ FriBidiPropertyBlockLevel1_0100, /* CAE00..CAEFF */
+ FriBidiPropertyBlockLevel1_0100, /* CAF00..CAFFF */
+ FriBidiPropertyBlockLevel1_0100, /* CB000..CB0FF */
+ FriBidiPropertyBlockLevel1_0100, /* CB100..CB1FF */
+ FriBidiPropertyBlockLevel1_0100, /* CB200..CB2FF */
+ FriBidiPropertyBlockLevel1_0100, /* CB300..CB3FF */
+ FriBidiPropertyBlockLevel1_0100, /* CB400..CB4FF */
+ FriBidiPropertyBlockLevel1_0100, /* CB500..CB5FF */
+ FriBidiPropertyBlockLevel1_0100, /* CB600..CB6FF */
+ FriBidiPropertyBlockLevel1_0100, /* CB700..CB7FF */
+ FriBidiPropertyBlockLevel1_0100, /* CB800..CB8FF */
+ FriBidiPropertyBlockLevel1_0100, /* CB900..CB9FF */
+ FriBidiPropertyBlockLevel1_0100, /* CBA00..CBAFF */
+ FriBidiPropertyBlockLevel1_0100, /* CBB00..CBBFF */
+ FriBidiPropertyBlockLevel1_0100, /* CBC00..CBCFF */
+ FriBidiPropertyBlockLevel1_0100, /* CBD00..CBDFF */
+ FriBidiPropertyBlockLevel1_0100, /* CBE00..CBEFF */
+ FriBidiPropertyBlockLevel1_0100, /* CBF00..CBFFF */
+ FriBidiPropertyBlockLevel1_0100, /* CC000..CC0FF */
+ FriBidiPropertyBlockLevel1_0100, /* CC100..CC1FF */
+ FriBidiPropertyBlockLevel1_0100, /* CC200..CC2FF */
+ FriBidiPropertyBlockLevel1_0100, /* CC300..CC3FF */
+ FriBidiPropertyBlockLevel1_0100, /* CC400..CC4FF */
+ FriBidiPropertyBlockLevel1_0100, /* CC500..CC5FF */
+ FriBidiPropertyBlockLevel1_0100, /* CC600..CC6FF */
+ FriBidiPropertyBlockLevel1_0100, /* CC700..CC7FF */
+ FriBidiPropertyBlockLevel1_0100, /* CC800..CC8FF */
+ FriBidiPropertyBlockLevel1_0100, /* CC900..CC9FF */
+ FriBidiPropertyBlockLevel1_0100, /* CCA00..CCAFF */
+ FriBidiPropertyBlockLevel1_0100, /* CCB00..CCBFF */
+ FriBidiPropertyBlockLevel1_0100, /* CCC00..CCCFF */
+ FriBidiPropertyBlockLevel1_0100, /* CCD00..CCDFF */
+ FriBidiPropertyBlockLevel1_0100, /* CCE00..CCEFF */
+ FriBidiPropertyBlockLevel1_0100, /* CCF00..CCFFF */
+ FriBidiPropertyBlockLevel1_0100, /* CD000..CD0FF */
+ FriBidiPropertyBlockLevel1_0100, /* CD100..CD1FF */
+ FriBidiPropertyBlockLevel1_0100, /* CD200..CD2FF */
+ FriBidiPropertyBlockLevel1_0100, /* CD300..CD3FF */
+ FriBidiPropertyBlockLevel1_0100, /* CD400..CD4FF */
+ FriBidiPropertyBlockLevel1_0100, /* CD500..CD5FF */
+ FriBidiPropertyBlockLevel1_0100, /* CD600..CD6FF */
+ FriBidiPropertyBlockLevel1_0100, /* CD700..CD7FF */
+ FriBidiPropertyBlockLevel1_0100, /* CD800..CD8FF */
+ FriBidiPropertyBlockLevel1_0100, /* CD900..CD9FF */
+ FriBidiPropertyBlockLevel1_0100, /* CDA00..CDAFF */
+ FriBidiPropertyBlockLevel1_0100, /* CDB00..CDBFF */
+ FriBidiPropertyBlockLevel1_0100, /* CDC00..CDCFF */
+ FriBidiPropertyBlockLevel1_0100, /* CDD00..CDDFF */
+ FriBidiPropertyBlockLevel1_0100, /* CDE00..CDEFF */
+ FriBidiPropertyBlockLevel1_0100, /* CDF00..CDFFF */
+ FriBidiPropertyBlockLevel1_0100, /* CE000..CE0FF */
+ FriBidiPropertyBlockLevel1_0100, /* CE100..CE1FF */
+ FriBidiPropertyBlockLevel1_0100, /* CE200..CE2FF */
+ FriBidiPropertyBlockLevel1_0100, /* CE300..CE3FF */
+ FriBidiPropertyBlockLevel1_0100, /* CE400..CE4FF */
+ FriBidiPropertyBlockLevel1_0100, /* CE500..CE5FF */
+ FriBidiPropertyBlockLevel1_0100, /* CE600..CE6FF */
+ FriBidiPropertyBlockLevel1_0100, /* CE700..CE7FF */
+ FriBidiPropertyBlockLevel1_0100, /* CE800..CE8FF */
+ FriBidiPropertyBlockLevel1_0100, /* CE900..CE9FF */
+ FriBidiPropertyBlockLevel1_0100, /* CEA00..CEAFF */
+ FriBidiPropertyBlockLevel1_0100, /* CEB00..CEBFF */
+ FriBidiPropertyBlockLevel1_0100, /* CEC00..CECFF */
+ FriBidiPropertyBlockLevel1_0100, /* CED00..CEDFF */
+ FriBidiPropertyBlockLevel1_0100, /* CEE00..CEEFF */
+ FriBidiPropertyBlockLevel1_0100, /* CEF00..CEFFF */
+ FriBidiPropertyBlockLevel1_0100, /* CF000..CF0FF */
+ FriBidiPropertyBlockLevel1_0100, /* CF100..CF1FF */
+ FriBidiPropertyBlockLevel1_0100, /* CF200..CF2FF */
+ FriBidiPropertyBlockLevel1_0100, /* CF300..CF3FF */
+ FriBidiPropertyBlockLevel1_0100, /* CF400..CF4FF */
+ FriBidiPropertyBlockLevel1_0100, /* CF500..CF5FF */
+ FriBidiPropertyBlockLevel1_0100, /* CF600..CF6FF */
+ FriBidiPropertyBlockLevel1_0100, /* CF700..CF7FF */
+ FriBidiPropertyBlockLevel1_0100, /* CF800..CF8FF */
+ FriBidiPropertyBlockLevel1_0100, /* CF900..CF9FF */
+ FriBidiPropertyBlockLevel1_0100, /* CFA00..CFAFF */
+ FriBidiPropertyBlockLevel1_0100, /* CFB00..CFBFF */
+ FriBidiPropertyBlockLevel1_0100, /* CFC00..CFCFF */
+ FriBidiPropertyBlockLevel1_0100, /* CFD00..CFDFF */
+ FriBidiPropertyBlockLevel1_0100, /* CFE00..CFEFF */
+ FriBidiPropertyBlockLevel1_0100, /* CFF00..CFFFF */
+ FriBidiPropertyBlockLevel1_0100, /* D0000..D00FF */
+ FriBidiPropertyBlockLevel1_0100, /* D0100..D01FF */
+ FriBidiPropertyBlockLevel1_0100, /* D0200..D02FF */
+ FriBidiPropertyBlockLevel1_0100, /* D0300..D03FF */
+ FriBidiPropertyBlockLevel1_0100, /* D0400..D04FF */
+ FriBidiPropertyBlockLevel1_0100, /* D0500..D05FF */
+ FriBidiPropertyBlockLevel1_0100, /* D0600..D06FF */
+ FriBidiPropertyBlockLevel1_0100, /* D0700..D07FF */
+ FriBidiPropertyBlockLevel1_0100, /* D0800..D08FF */
+ FriBidiPropertyBlockLevel1_0100, /* D0900..D09FF */
+ FriBidiPropertyBlockLevel1_0100, /* D0A00..D0AFF */
+ FriBidiPropertyBlockLevel1_0100, /* D0B00..D0BFF */
+ FriBidiPropertyBlockLevel1_0100, /* D0C00..D0CFF */
+ FriBidiPropertyBlockLevel1_0100, /* D0D00..D0DFF */
+ FriBidiPropertyBlockLevel1_0100, /* D0E00..D0EFF */
+ FriBidiPropertyBlockLevel1_0100, /* D0F00..D0FFF */
+ FriBidiPropertyBlockLevel1_0100, /* D1000..D10FF */
+ FriBidiPropertyBlockLevel1_0100, /* D1100..D11FF */
+ FriBidiPropertyBlockLevel1_0100, /* D1200..D12FF */
+ FriBidiPropertyBlockLevel1_0100, /* D1300..D13FF */
+ FriBidiPropertyBlockLevel1_0100, /* D1400..D14FF */
+ FriBidiPropertyBlockLevel1_0100, /* D1500..D15FF */
+ FriBidiPropertyBlockLevel1_0100, /* D1600..D16FF */
+ FriBidiPropertyBlockLevel1_0100, /* D1700..D17FF */
+ FriBidiPropertyBlockLevel1_0100, /* D1800..D18FF */
+ FriBidiPropertyBlockLevel1_0100, /* D1900..D19FF */
+ FriBidiPropertyBlockLevel1_0100, /* D1A00..D1AFF */
+ FriBidiPropertyBlockLevel1_0100, /* D1B00..D1BFF */
+ FriBidiPropertyBlockLevel1_0100, /* D1C00..D1CFF */
+ FriBidiPropertyBlockLevel1_0100, /* D1D00..D1DFF */
+ FriBidiPropertyBlockLevel1_0100, /* D1E00..D1EFF */
+ FriBidiPropertyBlockLevel1_0100, /* D1F00..D1FFF */
+ FriBidiPropertyBlockLevel1_0100, /* D2000..D20FF */
+ FriBidiPropertyBlockLevel1_0100, /* D2100..D21FF */
+ FriBidiPropertyBlockLevel1_0100, /* D2200..D22FF */
+ FriBidiPropertyBlockLevel1_0100, /* D2300..D23FF */
+ FriBidiPropertyBlockLevel1_0100, /* D2400..D24FF */
+ FriBidiPropertyBlockLevel1_0100, /* D2500..D25FF */
+ FriBidiPropertyBlockLevel1_0100, /* D2600..D26FF */
+ FriBidiPropertyBlockLevel1_0100, /* D2700..D27FF */
+ FriBidiPropertyBlockLevel1_0100, /* D2800..D28FF */
+ FriBidiPropertyBlockLevel1_0100, /* D2900..D29FF */
+ FriBidiPropertyBlockLevel1_0100, /* D2A00..D2AFF */
+ FriBidiPropertyBlockLevel1_0100, /* D2B00..D2BFF */
+ FriBidiPropertyBlockLevel1_0100, /* D2C00..D2CFF */
+ FriBidiPropertyBlockLevel1_0100, /* D2D00..D2DFF */
+ FriBidiPropertyBlockLevel1_0100, /* D2E00..D2EFF */
+ FriBidiPropertyBlockLevel1_0100, /* D2F00..D2FFF */
+ FriBidiPropertyBlockLevel1_0100, /* D3000..D30FF */
+ FriBidiPropertyBlockLevel1_0100, /* D3100..D31FF */
+ FriBidiPropertyBlockLevel1_0100, /* D3200..D32FF */
+ FriBidiPropertyBlockLevel1_0100, /* D3300..D33FF */
+ FriBidiPropertyBlockLevel1_0100, /* D3400..D34FF */
+ FriBidiPropertyBlockLevel1_0100, /* D3500..D35FF */
+ FriBidiPropertyBlockLevel1_0100, /* D3600..D36FF */
+ FriBidiPropertyBlockLevel1_0100, /* D3700..D37FF */
+ FriBidiPropertyBlockLevel1_0100, /* D3800..D38FF */
+ FriBidiPropertyBlockLevel1_0100, /* D3900..D39FF */
+ FriBidiPropertyBlockLevel1_0100, /* D3A00..D3AFF */
+ FriBidiPropertyBlockLevel1_0100, /* D3B00..D3BFF */
+ FriBidiPropertyBlockLevel1_0100, /* D3C00..D3CFF */
+ FriBidiPropertyBlockLevel1_0100, /* D3D00..D3DFF */
+ FriBidiPropertyBlockLevel1_0100, /* D3E00..D3EFF */
+ FriBidiPropertyBlockLevel1_0100, /* D3F00..D3FFF */
+ FriBidiPropertyBlockLevel1_0100, /* D4000..D40FF */
+ FriBidiPropertyBlockLevel1_0100, /* D4100..D41FF */
+ FriBidiPropertyBlockLevel1_0100, /* D4200..D42FF */
+ FriBidiPropertyBlockLevel1_0100, /* D4300..D43FF */
+ FriBidiPropertyBlockLevel1_0100, /* D4400..D44FF */
+ FriBidiPropertyBlockLevel1_0100, /* D4500..D45FF */
+ FriBidiPropertyBlockLevel1_0100, /* D4600..D46FF */
+ FriBidiPropertyBlockLevel1_0100, /* D4700..D47FF */
+ FriBidiPropertyBlockLevel1_0100, /* D4800..D48FF */
+ FriBidiPropertyBlockLevel1_0100, /* D4900..D49FF */
+ FriBidiPropertyBlockLevel1_0100, /* D4A00..D4AFF */
+ FriBidiPropertyBlockLevel1_0100, /* D4B00..D4BFF */
+ FriBidiPropertyBlockLevel1_0100, /* D4C00..D4CFF */
+ FriBidiPropertyBlockLevel1_0100, /* D4D00..D4DFF */
+ FriBidiPropertyBlockLevel1_0100, /* D4E00..D4EFF */
+ FriBidiPropertyBlockLevel1_0100, /* D4F00..D4FFF */
+ FriBidiPropertyBlockLevel1_0100, /* D5000..D50FF */
+ FriBidiPropertyBlockLevel1_0100, /* D5100..D51FF */
+ FriBidiPropertyBlockLevel1_0100, /* D5200..D52FF */
+ FriBidiPropertyBlockLevel1_0100, /* D5300..D53FF */
+ FriBidiPropertyBlockLevel1_0100, /* D5400..D54FF */
+ FriBidiPropertyBlockLevel1_0100, /* D5500..D55FF */
+ FriBidiPropertyBlockLevel1_0100, /* D5600..D56FF */
+ FriBidiPropertyBlockLevel1_0100, /* D5700..D57FF */
+ FriBidiPropertyBlockLevel1_0100, /* D5800..D58FF */
+ FriBidiPropertyBlockLevel1_0100, /* D5900..D59FF */
+ FriBidiPropertyBlockLevel1_0100, /* D5A00..D5AFF */
+ FriBidiPropertyBlockLevel1_0100, /* D5B00..D5BFF */
+ FriBidiPropertyBlockLevel1_0100, /* D5C00..D5CFF */
+ FriBidiPropertyBlockLevel1_0100, /* D5D00..D5DFF */
+ FriBidiPropertyBlockLevel1_0100, /* D5E00..D5EFF */
+ FriBidiPropertyBlockLevel1_0100, /* D5F00..D5FFF */
+ FriBidiPropertyBlockLevel1_0100, /* D6000..D60FF */
+ FriBidiPropertyBlockLevel1_0100, /* D6100..D61FF */
+ FriBidiPropertyBlockLevel1_0100, /* D6200..D62FF */
+ FriBidiPropertyBlockLevel1_0100, /* D6300..D63FF */
+ FriBidiPropertyBlockLevel1_0100, /* D6400..D64FF */
+ FriBidiPropertyBlockLevel1_0100, /* D6500..D65FF */
+ FriBidiPropertyBlockLevel1_0100, /* D6600..D66FF */
+ FriBidiPropertyBlockLevel1_0100, /* D6700..D67FF */
+ FriBidiPropertyBlockLevel1_0100, /* D6800..D68FF */
+ FriBidiPropertyBlockLevel1_0100, /* D6900..D69FF */
+ FriBidiPropertyBlockLevel1_0100, /* D6A00..D6AFF */
+ FriBidiPropertyBlockLevel1_0100, /* D6B00..D6BFF */
+ FriBidiPropertyBlockLevel1_0100, /* D6C00..D6CFF */
+ FriBidiPropertyBlockLevel1_0100, /* D6D00..D6DFF */
+ FriBidiPropertyBlockLevel1_0100, /* D6E00..D6EFF */
+ FriBidiPropertyBlockLevel1_0100, /* D6F00..D6FFF */
+ FriBidiPropertyBlockLevel1_0100, /* D7000..D70FF */
+ FriBidiPropertyBlockLevel1_0100, /* D7100..D71FF */
+ FriBidiPropertyBlockLevel1_0100, /* D7200..D72FF */
+ FriBidiPropertyBlockLevel1_0100, /* D7300..D73FF */
+ FriBidiPropertyBlockLevel1_0100, /* D7400..D74FF */
+ FriBidiPropertyBlockLevel1_0100, /* D7500..D75FF */
+ FriBidiPropertyBlockLevel1_0100, /* D7600..D76FF */
+ FriBidiPropertyBlockLevel1_0100, /* D7700..D77FF */
+ FriBidiPropertyBlockLevel1_0100, /* D7800..D78FF */
+ FriBidiPropertyBlockLevel1_0100, /* D7900..D79FF */
+ FriBidiPropertyBlockLevel1_0100, /* D7A00..D7AFF */
+ FriBidiPropertyBlockLevel1_0100, /* D7B00..D7BFF */
+ FriBidiPropertyBlockLevel1_0100, /* D7C00..D7CFF */
+ FriBidiPropertyBlockLevel1_0100, /* D7D00..D7DFF */
+ FriBidiPropertyBlockLevel1_0100, /* D7E00..D7EFF */
+ FriBidiPropertyBlockLevel1_0100, /* D7F00..D7FFF */
+ FriBidiPropertyBlockLevel1_0100, /* D8000..D80FF */
+ FriBidiPropertyBlockLevel1_0100, /* D8100..D81FF */
+ FriBidiPropertyBlockLevel1_0100, /* D8200..D82FF */
+ FriBidiPropertyBlockLevel1_0100, /* D8300..D83FF */
+ FriBidiPropertyBlockLevel1_0100, /* D8400..D84FF */
+ FriBidiPropertyBlockLevel1_0100, /* D8500..D85FF */
+ FriBidiPropertyBlockLevel1_0100, /* D8600..D86FF */
+ FriBidiPropertyBlockLevel1_0100, /* D8700..D87FF */
+ FriBidiPropertyBlockLevel1_0100, /* D8800..D88FF */
+ FriBidiPropertyBlockLevel1_0100, /* D8900..D89FF */
+ FriBidiPropertyBlockLevel1_0100, /* D8A00..D8AFF */
+ FriBidiPropertyBlockLevel1_0100, /* D8B00..D8BFF */
+ FriBidiPropertyBlockLevel1_0100, /* D8C00..D8CFF */
+ FriBidiPropertyBlockLevel1_0100, /* D8D00..D8DFF */
+ FriBidiPropertyBlockLevel1_0100, /* D8E00..D8EFF */
+ FriBidiPropertyBlockLevel1_0100, /* D8F00..D8FFF */
+ FriBidiPropertyBlockLevel1_0100, /* D9000..D90FF */
+ FriBidiPropertyBlockLevel1_0100, /* D9100..D91FF */
+ FriBidiPropertyBlockLevel1_0100, /* D9200..D92FF */
+ FriBidiPropertyBlockLevel1_0100, /* D9300..D93FF */
+ FriBidiPropertyBlockLevel1_0100, /* D9400..D94FF */
+ FriBidiPropertyBlockLevel1_0100, /* D9500..D95FF */
+ FriBidiPropertyBlockLevel1_0100, /* D9600..D96FF */
+ FriBidiPropertyBlockLevel1_0100, /* D9700..D97FF */
+ FriBidiPropertyBlockLevel1_0100, /* D9800..D98FF */
+ FriBidiPropertyBlockLevel1_0100, /* D9900..D99FF */
+ FriBidiPropertyBlockLevel1_0100, /* D9A00..D9AFF */
+ FriBidiPropertyBlockLevel1_0100, /* D9B00..D9BFF */
+ FriBidiPropertyBlockLevel1_0100, /* D9C00..D9CFF */
+ FriBidiPropertyBlockLevel1_0100, /* D9D00..D9DFF */
+ FriBidiPropertyBlockLevel1_0100, /* D9E00..D9EFF */
+ FriBidiPropertyBlockLevel1_0100, /* D9F00..D9FFF */
+ FriBidiPropertyBlockLevel1_0100, /* DA000..DA0FF */
+ FriBidiPropertyBlockLevel1_0100, /* DA100..DA1FF */
+ FriBidiPropertyBlockLevel1_0100, /* DA200..DA2FF */
+ FriBidiPropertyBlockLevel1_0100, /* DA300..DA3FF */
+ FriBidiPropertyBlockLevel1_0100, /* DA400..DA4FF */
+ FriBidiPropertyBlockLevel1_0100, /* DA500..DA5FF */
+ FriBidiPropertyBlockLevel1_0100, /* DA600..DA6FF */
+ FriBidiPropertyBlockLevel1_0100, /* DA700..DA7FF */
+ FriBidiPropertyBlockLevel1_0100, /* DA800..DA8FF */
+ FriBidiPropertyBlockLevel1_0100, /* DA900..DA9FF */
+ FriBidiPropertyBlockLevel1_0100, /* DAA00..DAAFF */
+ FriBidiPropertyBlockLevel1_0100, /* DAB00..DABFF */
+ FriBidiPropertyBlockLevel1_0100, /* DAC00..DACFF */
+ FriBidiPropertyBlockLevel1_0100, /* DAD00..DADFF */
+ FriBidiPropertyBlockLevel1_0100, /* DAE00..DAEFF */
+ FriBidiPropertyBlockLevel1_0100, /* DAF00..DAFFF */
+ FriBidiPropertyBlockLevel1_0100, /* DB000..DB0FF */
+ FriBidiPropertyBlockLevel1_0100, /* DB100..DB1FF */
+ FriBidiPropertyBlockLevel1_0100, /* DB200..DB2FF */
+ FriBidiPropertyBlockLevel1_0100, /* DB300..DB3FF */
+ FriBidiPropertyBlockLevel1_0100, /* DB400..DB4FF */
+ FriBidiPropertyBlockLevel1_0100, /* DB500..DB5FF */
+ FriBidiPropertyBlockLevel1_0100, /* DB600..DB6FF */
+ FriBidiPropertyBlockLevel1_0100, /* DB700..DB7FF */
+ FriBidiPropertyBlockLevel1_0100, /* DB800..DB8FF */
+ FriBidiPropertyBlockLevel1_0100, /* DB900..DB9FF */
+ FriBidiPropertyBlockLevel1_0100, /* DBA00..DBAFF */
+ FriBidiPropertyBlockLevel1_0100, /* DBB00..DBBFF */
+ FriBidiPropertyBlockLevel1_0100, /* DBC00..DBCFF */
+ FriBidiPropertyBlockLevel1_0100, /* DBD00..DBDFF */
+ FriBidiPropertyBlockLevel1_0100, /* DBE00..DBEFF */
+ FriBidiPropertyBlockLevel1_0100, /* DBF00..DBFFF */
+ FriBidiPropertyBlockLevel1_0100, /* DC000..DC0FF */
+ FriBidiPropertyBlockLevel1_0100, /* DC100..DC1FF */
+ FriBidiPropertyBlockLevel1_0100, /* DC200..DC2FF */
+ FriBidiPropertyBlockLevel1_0100, /* DC300..DC3FF */
+ FriBidiPropertyBlockLevel1_0100, /* DC400..DC4FF */
+ FriBidiPropertyBlockLevel1_0100, /* DC500..DC5FF */
+ FriBidiPropertyBlockLevel1_0100, /* DC600..DC6FF */
+ FriBidiPropertyBlockLevel1_0100, /* DC700..DC7FF */
+ FriBidiPropertyBlockLevel1_0100, /* DC800..DC8FF */
+ FriBidiPropertyBlockLevel1_0100, /* DC900..DC9FF */
+ FriBidiPropertyBlockLevel1_0100, /* DCA00..DCAFF */
+ FriBidiPropertyBlockLevel1_0100, /* DCB00..DCBFF */
+ FriBidiPropertyBlockLevel1_0100, /* DCC00..DCCFF */
+ FriBidiPropertyBlockLevel1_0100, /* DCD00..DCDFF */
+ FriBidiPropertyBlockLevel1_0100, /* DCE00..DCEFF */
+ FriBidiPropertyBlockLevel1_0100, /* DCF00..DCFFF */
+ FriBidiPropertyBlockLevel1_0100, /* DD000..DD0FF */
+ FriBidiPropertyBlockLevel1_0100, /* DD100..DD1FF */
+ FriBidiPropertyBlockLevel1_0100, /* DD200..DD2FF */
+ FriBidiPropertyBlockLevel1_0100, /* DD300..DD3FF */
+ FriBidiPropertyBlockLevel1_0100, /* DD400..DD4FF */
+ FriBidiPropertyBlockLevel1_0100, /* DD500..DD5FF */
+ FriBidiPropertyBlockLevel1_0100, /* DD600..DD6FF */
+ FriBidiPropertyBlockLevel1_0100, /* DD700..DD7FF */
+ FriBidiPropertyBlockLevel1_0100, /* DD800..DD8FF */
+ FriBidiPropertyBlockLevel1_0100, /* DD900..DD9FF */
+ FriBidiPropertyBlockLevel1_0100, /* DDA00..DDAFF */
+ FriBidiPropertyBlockLevel1_0100, /* DDB00..DDBFF */
+ FriBidiPropertyBlockLevel1_0100, /* DDC00..DDCFF */
+ FriBidiPropertyBlockLevel1_0100, /* DDD00..DDDFF */
+ FriBidiPropertyBlockLevel1_0100, /* DDE00..DDEFF */
+ FriBidiPropertyBlockLevel1_0100, /* DDF00..DDFFF */
+ FriBidiPropertyBlockLevel1_0100, /* DE000..DE0FF */
+ FriBidiPropertyBlockLevel1_0100, /* DE100..DE1FF */
+ FriBidiPropertyBlockLevel1_0100, /* DE200..DE2FF */
+ FriBidiPropertyBlockLevel1_0100, /* DE300..DE3FF */
+ FriBidiPropertyBlockLevel1_0100, /* DE400..DE4FF */
+ FriBidiPropertyBlockLevel1_0100, /* DE500..DE5FF */
+ FriBidiPropertyBlockLevel1_0100, /* DE600..DE6FF */
+ FriBidiPropertyBlockLevel1_0100, /* DE700..DE7FF */
+ FriBidiPropertyBlockLevel1_0100, /* DE800..DE8FF */
+ FriBidiPropertyBlockLevel1_0100, /* DE900..DE9FF */
+ FriBidiPropertyBlockLevel1_0100, /* DEA00..DEAFF */
+ FriBidiPropertyBlockLevel1_0100, /* DEB00..DEBFF */
+ FriBidiPropertyBlockLevel1_0100, /* DEC00..DECFF */
+ FriBidiPropertyBlockLevel1_0100, /* DED00..DEDFF */
+ FriBidiPropertyBlockLevel1_0100, /* DEE00..DEEFF */
+ FriBidiPropertyBlockLevel1_0100, /* DEF00..DEFFF */
+ FriBidiPropertyBlockLevel1_0100, /* DF000..DF0FF */
+ FriBidiPropertyBlockLevel1_0100, /* DF100..DF1FF */
+ FriBidiPropertyBlockLevel1_0100, /* DF200..DF2FF */
+ FriBidiPropertyBlockLevel1_0100, /* DF300..DF3FF */
+ FriBidiPropertyBlockLevel1_0100, /* DF400..DF4FF */
+ FriBidiPropertyBlockLevel1_0100, /* DF500..DF5FF */
+ FriBidiPropertyBlockLevel1_0100, /* DF600..DF6FF */
+ FriBidiPropertyBlockLevel1_0100, /* DF700..DF7FF */
+ FriBidiPropertyBlockLevel1_0100, /* DF800..DF8FF */
+ FriBidiPropertyBlockLevel1_0100, /* DF900..DF9FF */
+ FriBidiPropertyBlockLevel1_0100, /* DFA00..DFAFF */
+ FriBidiPropertyBlockLevel1_0100, /* DFB00..DFBFF */
+ FriBidiPropertyBlockLevel1_0100, /* DFC00..DFCFF */
+ FriBidiPropertyBlockLevel1_0100, /* DFD00..DFDFF */
+ FriBidiPropertyBlockLevel1_0100, /* DFE00..DFEFF */
+ FriBidiPropertyBlockLevel1_0100, /* DFF00..DFFFF */
+ FriBidiPropertyBlockLevel1_E0000, /* E0000..E00FF */
+ FriBidiPropertyBlockLevel1_0100, /* E0100..E01FF */
+ FriBidiPropertyBlockLevel1_0100, /* E0200..E02FF */
+ FriBidiPropertyBlockLevel1_0100, /* E0300..E03FF */
+ FriBidiPropertyBlockLevel1_0100, /* E0400..E04FF */
+ FriBidiPropertyBlockLevel1_0100, /* E0500..E05FF */
+ FriBidiPropertyBlockLevel1_0100, /* E0600..E06FF */
+ FriBidiPropertyBlockLevel1_0100, /* E0700..E07FF */
+ FriBidiPropertyBlockLevel1_0100, /* E0800..E08FF */
+ FriBidiPropertyBlockLevel1_0100, /* E0900..E09FF */
+ FriBidiPropertyBlockLevel1_0100, /* E0A00..E0AFF */
+ FriBidiPropertyBlockLevel1_0100, /* E0B00..E0BFF */
+ FriBidiPropertyBlockLevel1_0100, /* E0C00..E0CFF */
+ FriBidiPropertyBlockLevel1_0100, /* E0D00..E0DFF */
+ FriBidiPropertyBlockLevel1_0100, /* E0E00..E0EFF */
+ FriBidiPropertyBlockLevel1_0100, /* E0F00..E0FFF */
+ FriBidiPropertyBlockLevel1_0100, /* E1000..E10FF */
+ FriBidiPropertyBlockLevel1_0100, /* E1100..E11FF */
+ FriBidiPropertyBlockLevel1_0100, /* E1200..E12FF */
+ FriBidiPropertyBlockLevel1_0100, /* E1300..E13FF */
+ FriBidiPropertyBlockLevel1_0100, /* E1400..E14FF */
+ FriBidiPropertyBlockLevel1_0100, /* E1500..E15FF */
+ FriBidiPropertyBlockLevel1_0100, /* E1600..E16FF */
+ FriBidiPropertyBlockLevel1_0100, /* E1700..E17FF */
+ FriBidiPropertyBlockLevel1_0100, /* E1800..E18FF */
+ FriBidiPropertyBlockLevel1_0100, /* E1900..E19FF */
+ FriBidiPropertyBlockLevel1_0100, /* E1A00..E1AFF */
+ FriBidiPropertyBlockLevel1_0100, /* E1B00..E1BFF */
+ FriBidiPropertyBlockLevel1_0100, /* E1C00..E1CFF */
+ FriBidiPropertyBlockLevel1_0100, /* E1D00..E1DFF */
+ FriBidiPropertyBlockLevel1_0100, /* E1E00..E1EFF */
+ FriBidiPropertyBlockLevel1_0100, /* E1F00..E1FFF */
+ FriBidiPropertyBlockLevel1_0100, /* E2000..E20FF */
+ FriBidiPropertyBlockLevel1_0100, /* E2100..E21FF */
+ FriBidiPropertyBlockLevel1_0100, /* E2200..E22FF */
+ FriBidiPropertyBlockLevel1_0100, /* E2300..E23FF */
+ FriBidiPropertyBlockLevel1_0100, /* E2400..E24FF */
+ FriBidiPropertyBlockLevel1_0100, /* E2500..E25FF */
+ FriBidiPropertyBlockLevel1_0100, /* E2600..E26FF */
+ FriBidiPropertyBlockLevel1_0100, /* E2700..E27FF */
+ FriBidiPropertyBlockLevel1_0100, /* E2800..E28FF */
+ FriBidiPropertyBlockLevel1_0100, /* E2900..E29FF */
+ FriBidiPropertyBlockLevel1_0100, /* E2A00..E2AFF */
+ FriBidiPropertyBlockLevel1_0100, /* E2B00..E2BFF */
+ FriBidiPropertyBlockLevel1_0100, /* E2C00..E2CFF */
+ FriBidiPropertyBlockLevel1_0100, /* E2D00..E2DFF */
+ FriBidiPropertyBlockLevel1_0100, /* E2E00..E2EFF */
+ FriBidiPropertyBlockLevel1_0100, /* E2F00..E2FFF */
+ FriBidiPropertyBlockLevel1_0100, /* E3000..E30FF */
+ FriBidiPropertyBlockLevel1_0100, /* E3100..E31FF */
+ FriBidiPropertyBlockLevel1_0100, /* E3200..E32FF */
+ FriBidiPropertyBlockLevel1_0100, /* E3300..E33FF */
+ FriBidiPropertyBlockLevel1_0100, /* E3400..E34FF */
+ FriBidiPropertyBlockLevel1_0100, /* E3500..E35FF */
+ FriBidiPropertyBlockLevel1_0100, /* E3600..E36FF */
+ FriBidiPropertyBlockLevel1_0100, /* E3700..E37FF */
+ FriBidiPropertyBlockLevel1_0100, /* E3800..E38FF */
+ FriBidiPropertyBlockLevel1_0100, /* E3900..E39FF */
+ FriBidiPropertyBlockLevel1_0100, /* E3A00..E3AFF */
+ FriBidiPropertyBlockLevel1_0100, /* E3B00..E3BFF */
+ FriBidiPropertyBlockLevel1_0100, /* E3C00..E3CFF */
+ FriBidiPropertyBlockLevel1_0100, /* E3D00..E3DFF */
+ FriBidiPropertyBlockLevel1_0100, /* E3E00..E3EFF */
+ FriBidiPropertyBlockLevel1_0100, /* E3F00..E3FFF */
+ FriBidiPropertyBlockLevel1_0100, /* E4000..E40FF */
+ FriBidiPropertyBlockLevel1_0100, /* E4100..E41FF */
+ FriBidiPropertyBlockLevel1_0100, /* E4200..E42FF */
+ FriBidiPropertyBlockLevel1_0100, /* E4300..E43FF */
+ FriBidiPropertyBlockLevel1_0100, /* E4400..E44FF */
+ FriBidiPropertyBlockLevel1_0100, /* E4500..E45FF */
+ FriBidiPropertyBlockLevel1_0100, /* E4600..E46FF */
+ FriBidiPropertyBlockLevel1_0100, /* E4700..E47FF */
+ FriBidiPropertyBlockLevel1_0100, /* E4800..E48FF */
+ FriBidiPropertyBlockLevel1_0100, /* E4900..E49FF */
+ FriBidiPropertyBlockLevel1_0100, /* E4A00..E4AFF */
+ FriBidiPropertyBlockLevel1_0100, /* E4B00..E4BFF */
+ FriBidiPropertyBlockLevel1_0100, /* E4C00..E4CFF */
+ FriBidiPropertyBlockLevel1_0100, /* E4D00..E4DFF */
+ FriBidiPropertyBlockLevel1_0100, /* E4E00..E4EFF */
+ FriBidiPropertyBlockLevel1_0100, /* E4F00..E4FFF */
+ FriBidiPropertyBlockLevel1_0100, /* E5000..E50FF */
+ FriBidiPropertyBlockLevel1_0100, /* E5100..E51FF */
+ FriBidiPropertyBlockLevel1_0100, /* E5200..E52FF */
+ FriBidiPropertyBlockLevel1_0100, /* E5300..E53FF */
+ FriBidiPropertyBlockLevel1_0100, /* E5400..E54FF */
+ FriBidiPropertyBlockLevel1_0100, /* E5500..E55FF */
+ FriBidiPropertyBlockLevel1_0100, /* E5600..E56FF */
+ FriBidiPropertyBlockLevel1_0100, /* E5700..E57FF */
+ FriBidiPropertyBlockLevel1_0100, /* E5800..E58FF */
+ FriBidiPropertyBlockLevel1_0100, /* E5900..E59FF */
+ FriBidiPropertyBlockLevel1_0100, /* E5A00..E5AFF */
+ FriBidiPropertyBlockLevel1_0100, /* E5B00..E5BFF */
+ FriBidiPropertyBlockLevel1_0100, /* E5C00..E5CFF */
+ FriBidiPropertyBlockLevel1_0100, /* E5D00..E5DFF */
+ FriBidiPropertyBlockLevel1_0100, /* E5E00..E5EFF */
+ FriBidiPropertyBlockLevel1_0100, /* E5F00..E5FFF */
+ FriBidiPropertyBlockLevel1_0100, /* E6000..E60FF */
+ FriBidiPropertyBlockLevel1_0100, /* E6100..E61FF */
+ FriBidiPropertyBlockLevel1_0100, /* E6200..E62FF */
+ FriBidiPropertyBlockLevel1_0100, /* E6300..E63FF */
+ FriBidiPropertyBlockLevel1_0100, /* E6400..E64FF */
+ FriBidiPropertyBlockLevel1_0100, /* E6500..E65FF */
+ FriBidiPropertyBlockLevel1_0100, /* E6600..E66FF */
+ FriBidiPropertyBlockLevel1_0100, /* E6700..E67FF */
+ FriBidiPropertyBlockLevel1_0100, /* E6800..E68FF */
+ FriBidiPropertyBlockLevel1_0100, /* E6900..E69FF */
+ FriBidiPropertyBlockLevel1_0100, /* E6A00..E6AFF */
+ FriBidiPropertyBlockLevel1_0100, /* E6B00..E6BFF */
+ FriBidiPropertyBlockLevel1_0100, /* E6C00..E6CFF */
+ FriBidiPropertyBlockLevel1_0100, /* E6D00..E6DFF */
+ FriBidiPropertyBlockLevel1_0100, /* E6E00..E6EFF */
+ FriBidiPropertyBlockLevel1_0100, /* E6F00..E6FFF */
+ FriBidiPropertyBlockLevel1_0100, /* E7000..E70FF */
+ FriBidiPropertyBlockLevel1_0100, /* E7100..E71FF */
+ FriBidiPropertyBlockLevel1_0100, /* E7200..E72FF */
+ FriBidiPropertyBlockLevel1_0100, /* E7300..E73FF */
+ FriBidiPropertyBlockLevel1_0100, /* E7400..E74FF */
+ FriBidiPropertyBlockLevel1_0100, /* E7500..E75FF */
+ FriBidiPropertyBlockLevel1_0100, /* E7600..E76FF */
+ FriBidiPropertyBlockLevel1_0100, /* E7700..E77FF */
+ FriBidiPropertyBlockLevel1_0100, /* E7800..E78FF */
+ FriBidiPropertyBlockLevel1_0100, /* E7900..E79FF */
+ FriBidiPropertyBlockLevel1_0100, /* E7A00..E7AFF */
+ FriBidiPropertyBlockLevel1_0100, /* E7B00..E7BFF */
+ FriBidiPropertyBlockLevel1_0100, /* E7C00..E7CFF */
+ FriBidiPropertyBlockLevel1_0100, /* E7D00..E7DFF */
+ FriBidiPropertyBlockLevel1_0100, /* E7E00..E7EFF */
+ FriBidiPropertyBlockLevel1_0100, /* E7F00..E7FFF */
+ FriBidiPropertyBlockLevel1_0100, /* E8000..E80FF */
+ FriBidiPropertyBlockLevel1_0100, /* E8100..E81FF */
+ FriBidiPropertyBlockLevel1_0100, /* E8200..E82FF */
+ FriBidiPropertyBlockLevel1_0100, /* E8300..E83FF */
+ FriBidiPropertyBlockLevel1_0100, /* E8400..E84FF */
+ FriBidiPropertyBlockLevel1_0100, /* E8500..E85FF */
+ FriBidiPropertyBlockLevel1_0100, /* E8600..E86FF */
+ FriBidiPropertyBlockLevel1_0100, /* E8700..E87FF */
+ FriBidiPropertyBlockLevel1_0100, /* E8800..E88FF */
+ FriBidiPropertyBlockLevel1_0100, /* E8900..E89FF */
+ FriBidiPropertyBlockLevel1_0100, /* E8A00..E8AFF */
+ FriBidiPropertyBlockLevel1_0100, /* E8B00..E8BFF */
+ FriBidiPropertyBlockLevel1_0100, /* E8C00..E8CFF */
+ FriBidiPropertyBlockLevel1_0100, /* E8D00..E8DFF */
+ FriBidiPropertyBlockLevel1_0100, /* E8E00..E8EFF */
+ FriBidiPropertyBlockLevel1_0100, /* E8F00..E8FFF */
+ FriBidiPropertyBlockLevel1_0100, /* E9000..E90FF */
+ FriBidiPropertyBlockLevel1_0100, /* E9100..E91FF */
+ FriBidiPropertyBlockLevel1_0100, /* E9200..E92FF */
+ FriBidiPropertyBlockLevel1_0100, /* E9300..E93FF */
+ FriBidiPropertyBlockLevel1_0100, /* E9400..E94FF */
+ FriBidiPropertyBlockLevel1_0100, /* E9500..E95FF */
+ FriBidiPropertyBlockLevel1_0100, /* E9600..E96FF */
+ FriBidiPropertyBlockLevel1_0100, /* E9700..E97FF */
+ FriBidiPropertyBlockLevel1_0100, /* E9800..E98FF */
+ FriBidiPropertyBlockLevel1_0100, /* E9900..E99FF */
+ FriBidiPropertyBlockLevel1_0100, /* E9A00..E9AFF */
+ FriBidiPropertyBlockLevel1_0100, /* E9B00..E9BFF */
+ FriBidiPropertyBlockLevel1_0100, /* E9C00..E9CFF */
+ FriBidiPropertyBlockLevel1_0100, /* E9D00..E9DFF */
+ FriBidiPropertyBlockLevel1_0100, /* E9E00..E9EFF */
+ FriBidiPropertyBlockLevel1_0100, /* E9F00..E9FFF */
+ FriBidiPropertyBlockLevel1_0100, /* EA000..EA0FF */
+ FriBidiPropertyBlockLevel1_0100, /* EA100..EA1FF */
+ FriBidiPropertyBlockLevel1_0100, /* EA200..EA2FF */
+ FriBidiPropertyBlockLevel1_0100, /* EA300..EA3FF */
+ FriBidiPropertyBlockLevel1_0100, /* EA400..EA4FF */
+ FriBidiPropertyBlockLevel1_0100, /* EA500..EA5FF */
+ FriBidiPropertyBlockLevel1_0100, /* EA600..EA6FF */
+ FriBidiPropertyBlockLevel1_0100, /* EA700..EA7FF */
+ FriBidiPropertyBlockLevel1_0100, /* EA800..EA8FF */
+ FriBidiPropertyBlockLevel1_0100, /* EA900..EA9FF */
+ FriBidiPropertyBlockLevel1_0100, /* EAA00..EAAFF */
+ FriBidiPropertyBlockLevel1_0100, /* EAB00..EABFF */
+ FriBidiPropertyBlockLevel1_0100, /* EAC00..EACFF */
+ FriBidiPropertyBlockLevel1_0100, /* EAD00..EADFF */
+ FriBidiPropertyBlockLevel1_0100, /* EAE00..EAEFF */
+ FriBidiPropertyBlockLevel1_0100, /* EAF00..EAFFF */
+ FriBidiPropertyBlockLevel1_0100, /* EB000..EB0FF */
+ FriBidiPropertyBlockLevel1_0100, /* EB100..EB1FF */
+ FriBidiPropertyBlockLevel1_0100, /* EB200..EB2FF */
+ FriBidiPropertyBlockLevel1_0100, /* EB300..EB3FF */
+ FriBidiPropertyBlockLevel1_0100, /* EB400..EB4FF */
+ FriBidiPropertyBlockLevel1_0100, /* EB500..EB5FF */
+ FriBidiPropertyBlockLevel1_0100, /* EB600..EB6FF */
+ FriBidiPropertyBlockLevel1_0100, /* EB700..EB7FF */
+ FriBidiPropertyBlockLevel1_0100, /* EB800..EB8FF */
+ FriBidiPropertyBlockLevel1_0100, /* EB900..EB9FF */
+ FriBidiPropertyBlockLevel1_0100, /* EBA00..EBAFF */
+ FriBidiPropertyBlockLevel1_0100, /* EBB00..EBBFF */
+ FriBidiPropertyBlockLevel1_0100, /* EBC00..EBCFF */
+ FriBidiPropertyBlockLevel1_0100, /* EBD00..EBDFF */
+ FriBidiPropertyBlockLevel1_0100, /* EBE00..EBEFF */
+ FriBidiPropertyBlockLevel1_0100, /* EBF00..EBFFF */
+ FriBidiPropertyBlockLevel1_0100, /* EC000..EC0FF */
+ FriBidiPropertyBlockLevel1_0100, /* EC100..EC1FF */
+ FriBidiPropertyBlockLevel1_0100, /* EC200..EC2FF */
+ FriBidiPropertyBlockLevel1_0100, /* EC300..EC3FF */
+ FriBidiPropertyBlockLevel1_0100, /* EC400..EC4FF */
+ FriBidiPropertyBlockLevel1_0100, /* EC500..EC5FF */
+ FriBidiPropertyBlockLevel1_0100, /* EC600..EC6FF */
+ FriBidiPropertyBlockLevel1_0100, /* EC700..EC7FF */
+ FriBidiPropertyBlockLevel1_0100, /* EC800..EC8FF */
+ FriBidiPropertyBlockLevel1_0100, /* EC900..EC9FF */
+ FriBidiPropertyBlockLevel1_0100, /* ECA00..ECAFF */
+ FriBidiPropertyBlockLevel1_0100, /* ECB00..ECBFF */
+ FriBidiPropertyBlockLevel1_0100, /* ECC00..ECCFF */
+ FriBidiPropertyBlockLevel1_0100, /* ECD00..ECDFF */
+ FriBidiPropertyBlockLevel1_0100, /* ECE00..ECEFF */
+ FriBidiPropertyBlockLevel1_0100, /* ECF00..ECFFF */
+ FriBidiPropertyBlockLevel1_0100, /* ED000..ED0FF */
+ FriBidiPropertyBlockLevel1_0100, /* ED100..ED1FF */
+ FriBidiPropertyBlockLevel1_0100, /* ED200..ED2FF */
+ FriBidiPropertyBlockLevel1_0100, /* ED300..ED3FF */
+ FriBidiPropertyBlockLevel1_0100, /* ED400..ED4FF */
+ FriBidiPropertyBlockLevel1_0100, /* ED500..ED5FF */
+ FriBidiPropertyBlockLevel1_0100, /* ED600..ED6FF */
+ FriBidiPropertyBlockLevel1_0100, /* ED700..ED7FF */
+ FriBidiPropertyBlockLevel1_0100, /* ED800..ED8FF */
+ FriBidiPropertyBlockLevel1_0100, /* ED900..ED9FF */
+ FriBidiPropertyBlockLevel1_0100, /* EDA00..EDAFF */
+ FriBidiPropertyBlockLevel1_0100, /* EDB00..EDBFF */
+ FriBidiPropertyBlockLevel1_0100, /* EDC00..EDCFF */
+ FriBidiPropertyBlockLevel1_0100, /* EDD00..EDDFF */
+ FriBidiPropertyBlockLevel1_0100, /* EDE00..EDEFF */
+ FriBidiPropertyBlockLevel1_0100, /* EDF00..EDFFF */
+ FriBidiPropertyBlockLevel1_0100, /* EE000..EE0FF */
+ FriBidiPropertyBlockLevel1_0100, /* EE100..EE1FF */
+ FriBidiPropertyBlockLevel1_0100, /* EE200..EE2FF */
+ FriBidiPropertyBlockLevel1_0100, /* EE300..EE3FF */
+ FriBidiPropertyBlockLevel1_0100, /* EE400..EE4FF */
+ FriBidiPropertyBlockLevel1_0100, /* EE500..EE5FF */
+ FriBidiPropertyBlockLevel1_0100, /* EE600..EE6FF */
+ FriBidiPropertyBlockLevel1_0100, /* EE700..EE7FF */
+ FriBidiPropertyBlockLevel1_0100, /* EE800..EE8FF */
+ FriBidiPropertyBlockLevel1_0100, /* EE900..EE9FF */
+ FriBidiPropertyBlockLevel1_0100, /* EEA00..EEAFF */
+ FriBidiPropertyBlockLevel1_0100, /* EEB00..EEBFF */
+ FriBidiPropertyBlockLevel1_0100, /* EEC00..EECFF */
+ FriBidiPropertyBlockLevel1_0100, /* EED00..EEDFF */
+ FriBidiPropertyBlockLevel1_0100, /* EEE00..EEEFF */
+ FriBidiPropertyBlockLevel1_0100, /* EEF00..EEFFF */
+ FriBidiPropertyBlockLevel1_0100, /* EF000..EF0FF */
+ FriBidiPropertyBlockLevel1_0100, /* EF100..EF1FF */
+ FriBidiPropertyBlockLevel1_0100, /* EF200..EF2FF */
+ FriBidiPropertyBlockLevel1_0100, /* EF300..EF3FF */
+ FriBidiPropertyBlockLevel1_0100, /* EF400..EF4FF */
+ FriBidiPropertyBlockLevel1_0100, /* EF500..EF5FF */
+ FriBidiPropertyBlockLevel1_0100, /* EF600..EF6FF */
+ FriBidiPropertyBlockLevel1_0100, /* EF700..EF7FF */
+ FriBidiPropertyBlockLevel1_0100, /* EF800..EF8FF */
+ FriBidiPropertyBlockLevel1_0100, /* EF900..EF9FF */
+ FriBidiPropertyBlockLevel1_0100, /* EFA00..EFAFF */
+ FriBidiPropertyBlockLevel1_0100, /* EFB00..EFBFF */
+ FriBidiPropertyBlockLevel1_0100, /* EFC00..EFCFF */
+ FriBidiPropertyBlockLevel1_0100, /* EFD00..EFDFF */
+ FriBidiPropertyBlockLevel1_0100, /* EFE00..EFEFF */
+ FriBidiPropertyBlockLevel1_0100, /* EFF00..EFFFF */
+ FriBidiPropertyBlockLevel1_0100, /* F0000..F00FF */
+ FriBidiPropertyBlockLevel1_0100, /* F0100..F01FF */
+ FriBidiPropertyBlockLevel1_0100, /* F0200..F02FF */
+ FriBidiPropertyBlockLevel1_0100, /* F0300..F03FF */
+ FriBidiPropertyBlockLevel1_0100, /* F0400..F04FF */
+ FriBidiPropertyBlockLevel1_0100, /* F0500..F05FF */
+ FriBidiPropertyBlockLevel1_0100, /* F0600..F06FF */
+ FriBidiPropertyBlockLevel1_0100, /* F0700..F07FF */
+ FriBidiPropertyBlockLevel1_0100, /* F0800..F08FF */
+ FriBidiPropertyBlockLevel1_0100, /* F0900..F09FF */
+ FriBidiPropertyBlockLevel1_0100, /* F0A00..F0AFF */
+ FriBidiPropertyBlockLevel1_0100, /* F0B00..F0BFF */
+ FriBidiPropertyBlockLevel1_0100, /* F0C00..F0CFF */
+ FriBidiPropertyBlockLevel1_0100, /* F0D00..F0DFF */
+ FriBidiPropertyBlockLevel1_0100, /* F0E00..F0EFF */
+ FriBidiPropertyBlockLevel1_0100, /* F0F00..F0FFF */
+ FriBidiPropertyBlockLevel1_0100, /* F1000..F10FF */
+ FriBidiPropertyBlockLevel1_0100, /* F1100..F11FF */
+ FriBidiPropertyBlockLevel1_0100, /* F1200..F12FF */
+ FriBidiPropertyBlockLevel1_0100, /* F1300..F13FF */
+ FriBidiPropertyBlockLevel1_0100, /* F1400..F14FF */
+ FriBidiPropertyBlockLevel1_0100, /* F1500..F15FF */
+ FriBidiPropertyBlockLevel1_0100, /* F1600..F16FF */
+ FriBidiPropertyBlockLevel1_0100, /* F1700..F17FF */
+ FriBidiPropertyBlockLevel1_0100, /* F1800..F18FF */
+ FriBidiPropertyBlockLevel1_0100, /* F1900..F19FF */
+ FriBidiPropertyBlockLevel1_0100, /* F1A00..F1AFF */
+ FriBidiPropertyBlockLevel1_0100, /* F1B00..F1BFF */
+ FriBidiPropertyBlockLevel1_0100, /* F1C00..F1CFF */
+ FriBidiPropertyBlockLevel1_0100, /* F1D00..F1DFF */
+ FriBidiPropertyBlockLevel1_0100, /* F1E00..F1EFF */
+ FriBidiPropertyBlockLevel1_0100, /* F1F00..F1FFF */
+ FriBidiPropertyBlockLevel1_0100, /* F2000..F20FF */
+ FriBidiPropertyBlockLevel1_0100, /* F2100..F21FF */
+ FriBidiPropertyBlockLevel1_0100, /* F2200..F22FF */
+ FriBidiPropertyBlockLevel1_0100, /* F2300..F23FF */
+ FriBidiPropertyBlockLevel1_0100, /* F2400..F24FF */
+ FriBidiPropertyBlockLevel1_0100, /* F2500..F25FF */
+ FriBidiPropertyBlockLevel1_0100, /* F2600..F26FF */
+ FriBidiPropertyBlockLevel1_0100, /* F2700..F27FF */
+ FriBidiPropertyBlockLevel1_0100, /* F2800..F28FF */
+ FriBidiPropertyBlockLevel1_0100, /* F2900..F29FF */
+ FriBidiPropertyBlockLevel1_0100, /* F2A00..F2AFF */
+ FriBidiPropertyBlockLevel1_0100, /* F2B00..F2BFF */
+ FriBidiPropertyBlockLevel1_0100, /* F2C00..F2CFF */
+ FriBidiPropertyBlockLevel1_0100, /* F2D00..F2DFF */
+ FriBidiPropertyBlockLevel1_0100, /* F2E00..F2EFF */
+ FriBidiPropertyBlockLevel1_0100, /* F2F00..F2FFF */
+ FriBidiPropertyBlockLevel1_0100, /* F3000..F30FF */
+ FriBidiPropertyBlockLevel1_0100, /* F3100..F31FF */
+ FriBidiPropertyBlockLevel1_0100, /* F3200..F32FF */
+ FriBidiPropertyBlockLevel1_0100, /* F3300..F33FF */
+ FriBidiPropertyBlockLevel1_0100, /* F3400..F34FF */
+ FriBidiPropertyBlockLevel1_0100, /* F3500..F35FF */
+ FriBidiPropertyBlockLevel1_0100, /* F3600..F36FF */
+ FriBidiPropertyBlockLevel1_0100, /* F3700..F37FF */
+ FriBidiPropertyBlockLevel1_0100, /* F3800..F38FF */
+ FriBidiPropertyBlockLevel1_0100, /* F3900..F39FF */
+ FriBidiPropertyBlockLevel1_0100, /* F3A00..F3AFF */
+ FriBidiPropertyBlockLevel1_0100, /* F3B00..F3BFF */
+ FriBidiPropertyBlockLevel1_0100, /* F3C00..F3CFF */
+ FriBidiPropertyBlockLevel1_0100, /* F3D00..F3DFF */
+ FriBidiPropertyBlockLevel1_0100, /* F3E00..F3EFF */
+ FriBidiPropertyBlockLevel1_0100, /* F3F00..F3FFF */
+ FriBidiPropertyBlockLevel1_0100, /* F4000..F40FF */
+ FriBidiPropertyBlockLevel1_0100, /* F4100..F41FF */
+ FriBidiPropertyBlockLevel1_0100, /* F4200..F42FF */
+ FriBidiPropertyBlockLevel1_0100, /* F4300..F43FF */
+ FriBidiPropertyBlockLevel1_0100, /* F4400..F44FF */
+ FriBidiPropertyBlockLevel1_0100, /* F4500..F45FF */
+ FriBidiPropertyBlockLevel1_0100, /* F4600..F46FF */
+ FriBidiPropertyBlockLevel1_0100, /* F4700..F47FF */
+ FriBidiPropertyBlockLevel1_0100, /* F4800..F48FF */
+ FriBidiPropertyBlockLevel1_0100, /* F4900..F49FF */
+ FriBidiPropertyBlockLevel1_0100, /* F4A00..F4AFF */
+ FriBidiPropertyBlockLevel1_0100, /* F4B00..F4BFF */
+ FriBidiPropertyBlockLevel1_0100, /* F4C00..F4CFF */
+ FriBidiPropertyBlockLevel1_0100, /* F4D00..F4DFF */
+ FriBidiPropertyBlockLevel1_0100, /* F4E00..F4EFF */
+ FriBidiPropertyBlockLevel1_0100, /* F4F00..F4FFF */
+ FriBidiPropertyBlockLevel1_0100, /* F5000..F50FF */
+ FriBidiPropertyBlockLevel1_0100, /* F5100..F51FF */
+ FriBidiPropertyBlockLevel1_0100, /* F5200..F52FF */
+ FriBidiPropertyBlockLevel1_0100, /* F5300..F53FF */
+ FriBidiPropertyBlockLevel1_0100, /* F5400..F54FF */
+ FriBidiPropertyBlockLevel1_0100, /* F5500..F55FF */
+ FriBidiPropertyBlockLevel1_0100, /* F5600..F56FF */
+ FriBidiPropertyBlockLevel1_0100, /* F5700..F57FF */
+ FriBidiPropertyBlockLevel1_0100, /* F5800..F58FF */
+ FriBidiPropertyBlockLevel1_0100, /* F5900..F59FF */
+ FriBidiPropertyBlockLevel1_0100, /* F5A00..F5AFF */
+ FriBidiPropertyBlockLevel1_0100, /* F5B00..F5BFF */
+ FriBidiPropertyBlockLevel1_0100, /* F5C00..F5CFF */
+ FriBidiPropertyBlockLevel1_0100, /* F5D00..F5DFF */
+ FriBidiPropertyBlockLevel1_0100, /* F5E00..F5EFF */
+ FriBidiPropertyBlockLevel1_0100, /* F5F00..F5FFF */
+ FriBidiPropertyBlockLevel1_0100, /* F6000..F60FF */
+ FriBidiPropertyBlockLevel1_0100, /* F6100..F61FF */
+ FriBidiPropertyBlockLevel1_0100, /* F6200..F62FF */
+ FriBidiPropertyBlockLevel1_0100, /* F6300..F63FF */
+ FriBidiPropertyBlockLevel1_0100, /* F6400..F64FF */
+ FriBidiPropertyBlockLevel1_0100, /* F6500..F65FF */
+ FriBidiPropertyBlockLevel1_0100, /* F6600..F66FF */
+ FriBidiPropertyBlockLevel1_0100, /* F6700..F67FF */
+ FriBidiPropertyBlockLevel1_0100, /* F6800..F68FF */
+ FriBidiPropertyBlockLevel1_0100, /* F6900..F69FF */
+ FriBidiPropertyBlockLevel1_0100, /* F6A00..F6AFF */
+ FriBidiPropertyBlockLevel1_0100, /* F6B00..F6BFF */
+ FriBidiPropertyBlockLevel1_0100, /* F6C00..F6CFF */
+ FriBidiPropertyBlockLevel1_0100, /* F6D00..F6DFF */
+ FriBidiPropertyBlockLevel1_0100, /* F6E00..F6EFF */
+ FriBidiPropertyBlockLevel1_0100, /* F6F00..F6FFF */
+ FriBidiPropertyBlockLevel1_0100, /* F7000..F70FF */
+ FriBidiPropertyBlockLevel1_0100, /* F7100..F71FF */
+ FriBidiPropertyBlockLevel1_0100, /* F7200..F72FF */
+ FriBidiPropertyBlockLevel1_0100, /* F7300..F73FF */
+ FriBidiPropertyBlockLevel1_0100, /* F7400..F74FF */
+ FriBidiPropertyBlockLevel1_0100, /* F7500..F75FF */
+ FriBidiPropertyBlockLevel1_0100, /* F7600..F76FF */
+ FriBidiPropertyBlockLevel1_0100, /* F7700..F77FF */
+ FriBidiPropertyBlockLevel1_0100, /* F7800..F78FF */
+ FriBidiPropertyBlockLevel1_0100, /* F7900..F79FF */
+ FriBidiPropertyBlockLevel1_0100, /* F7A00..F7AFF */
+ FriBidiPropertyBlockLevel1_0100, /* F7B00..F7BFF */
+ FriBidiPropertyBlockLevel1_0100, /* F7C00..F7CFF */
+ FriBidiPropertyBlockLevel1_0100, /* F7D00..F7DFF */
+ FriBidiPropertyBlockLevel1_0100, /* F7E00..F7EFF */
+ FriBidiPropertyBlockLevel1_0100, /* F7F00..F7FFF */
+ FriBidiPropertyBlockLevel1_0100, /* F8000..F80FF */
+ FriBidiPropertyBlockLevel1_0100, /* F8100..F81FF */
+ FriBidiPropertyBlockLevel1_0100, /* F8200..F82FF */
+ FriBidiPropertyBlockLevel1_0100, /* F8300..F83FF */
+ FriBidiPropertyBlockLevel1_0100, /* F8400..F84FF */
+ FriBidiPropertyBlockLevel1_0100, /* F8500..F85FF */
+ FriBidiPropertyBlockLevel1_0100, /* F8600..F86FF */
+ FriBidiPropertyBlockLevel1_0100, /* F8700..F87FF */
+ FriBidiPropertyBlockLevel1_0100, /* F8800..F88FF */
+ FriBidiPropertyBlockLevel1_0100, /* F8900..F89FF */
+ FriBidiPropertyBlockLevel1_0100, /* F8A00..F8AFF */
+ FriBidiPropertyBlockLevel1_0100, /* F8B00..F8BFF */
+ FriBidiPropertyBlockLevel1_0100, /* F8C00..F8CFF */
+ FriBidiPropertyBlockLevel1_0100, /* F8D00..F8DFF */
+ FriBidiPropertyBlockLevel1_0100, /* F8E00..F8EFF */
+ FriBidiPropertyBlockLevel1_0100, /* F8F00..F8FFF */
+ FriBidiPropertyBlockLevel1_0100, /* F9000..F90FF */
+ FriBidiPropertyBlockLevel1_0100, /* F9100..F91FF */
+ FriBidiPropertyBlockLevel1_0100, /* F9200..F92FF */
+ FriBidiPropertyBlockLevel1_0100, /* F9300..F93FF */
+ FriBidiPropertyBlockLevel1_0100, /* F9400..F94FF */
+ FriBidiPropertyBlockLevel1_0100, /* F9500..F95FF */
+ FriBidiPropertyBlockLevel1_0100, /* F9600..F96FF */
+ FriBidiPropertyBlockLevel1_0100, /* F9700..F97FF */
+ FriBidiPropertyBlockLevel1_0100, /* F9800..F98FF */
+ FriBidiPropertyBlockLevel1_0100, /* F9900..F99FF */
+ FriBidiPropertyBlockLevel1_0100, /* F9A00..F9AFF */
+ FriBidiPropertyBlockLevel1_0100, /* F9B00..F9BFF */
+ FriBidiPropertyBlockLevel1_0100, /* F9C00..F9CFF */
+ FriBidiPropertyBlockLevel1_0100, /* F9D00..F9DFF */
+ FriBidiPropertyBlockLevel1_0100, /* F9E00..F9EFF */
+ FriBidiPropertyBlockLevel1_0100, /* F9F00..F9FFF */
+ FriBidiPropertyBlockLevel1_0100, /* FA000..FA0FF */
+ FriBidiPropertyBlockLevel1_0100, /* FA100..FA1FF */
+ FriBidiPropertyBlockLevel1_0100, /* FA200..FA2FF */
+ FriBidiPropertyBlockLevel1_0100, /* FA300..FA3FF */
+ FriBidiPropertyBlockLevel1_0100, /* FA400..FA4FF */
+ FriBidiPropertyBlockLevel1_0100, /* FA500..FA5FF */
+ FriBidiPropertyBlockLevel1_0100, /* FA600..FA6FF */
+ FriBidiPropertyBlockLevel1_0100, /* FA700..FA7FF */
+ FriBidiPropertyBlockLevel1_0100, /* FA800..FA8FF */
+ FriBidiPropertyBlockLevel1_0100, /* FA900..FA9FF */
+ FriBidiPropertyBlockLevel1_0100, /* FAA00..FAAFF */
+ FriBidiPropertyBlockLevel1_0100, /* FAB00..FABFF */
+ FriBidiPropertyBlockLevel1_0100, /* FAC00..FACFF */
+ FriBidiPropertyBlockLevel1_0100, /* FAD00..FADFF */
+ FriBidiPropertyBlockLevel1_0100, /* FAE00..FAEFF */
+ FriBidiPropertyBlockLevel1_0100, /* FAF00..FAFFF */
+ FriBidiPropertyBlockLevel1_0100, /* FB000..FB0FF */
+ FriBidiPropertyBlockLevel1_0100, /* FB100..FB1FF */
+ FriBidiPropertyBlockLevel1_0100, /* FB200..FB2FF */
+ FriBidiPropertyBlockLevel1_0100, /* FB300..FB3FF */
+ FriBidiPropertyBlockLevel1_0100, /* FB400..FB4FF */
+ FriBidiPropertyBlockLevel1_0100, /* FB500..FB5FF */
+ FriBidiPropertyBlockLevel1_0100, /* FB600..FB6FF */
+ FriBidiPropertyBlockLevel1_0100, /* FB700..FB7FF */
+ FriBidiPropertyBlockLevel1_0100, /* FB800..FB8FF */
+ FriBidiPropertyBlockLevel1_0100, /* FB900..FB9FF */
+ FriBidiPropertyBlockLevel1_0100, /* FBA00..FBAFF */
+ FriBidiPropertyBlockLevel1_0100, /* FBB00..FBBFF */
+ FriBidiPropertyBlockLevel1_0100, /* FBC00..FBCFF */
+ FriBidiPropertyBlockLevel1_0100, /* FBD00..FBDFF */
+ FriBidiPropertyBlockLevel1_0100, /* FBE00..FBEFF */
+ FriBidiPropertyBlockLevel1_0100, /* FBF00..FBFFF */
+ FriBidiPropertyBlockLevel1_0100, /* FC000..FC0FF */
+ FriBidiPropertyBlockLevel1_0100, /* FC100..FC1FF */
+ FriBidiPropertyBlockLevel1_0100, /* FC200..FC2FF */
+ FriBidiPropertyBlockLevel1_0100, /* FC300..FC3FF */
+ FriBidiPropertyBlockLevel1_0100, /* FC400..FC4FF */
+ FriBidiPropertyBlockLevel1_0100, /* FC500..FC5FF */
+ FriBidiPropertyBlockLevel1_0100, /* FC600..FC6FF */
+ FriBidiPropertyBlockLevel1_0100, /* FC700..FC7FF */
+ FriBidiPropertyBlockLevel1_0100, /* FC800..FC8FF */
+ FriBidiPropertyBlockLevel1_0100, /* FC900..FC9FF */
+ FriBidiPropertyBlockLevel1_0100, /* FCA00..FCAFF */
+ FriBidiPropertyBlockLevel1_0100, /* FCB00..FCBFF */
+ FriBidiPropertyBlockLevel1_0100, /* FCC00..FCCFF */
+ FriBidiPropertyBlockLevel1_0100, /* FCD00..FCDFF */
+ FriBidiPropertyBlockLevel1_0100, /* FCE00..FCEFF */
+ FriBidiPropertyBlockLevel1_0100, /* FCF00..FCFFF */
+ FriBidiPropertyBlockLevel1_0100, /* FD000..FD0FF */
+ FriBidiPropertyBlockLevel1_0100, /* FD100..FD1FF */
+ FriBidiPropertyBlockLevel1_0100, /* FD200..FD2FF */
+ FriBidiPropertyBlockLevel1_0100, /* FD300..FD3FF */
+ FriBidiPropertyBlockLevel1_0100, /* FD400..FD4FF */
+ FriBidiPropertyBlockLevel1_0100, /* FD500..FD5FF */
+ FriBidiPropertyBlockLevel1_0100, /* FD600..FD6FF */
+ FriBidiPropertyBlockLevel1_0100, /* FD700..FD7FF */
+ FriBidiPropertyBlockLevel1_0100, /* FD800..FD8FF */
+ FriBidiPropertyBlockLevel1_0100, /* FD900..FD9FF */
+ FriBidiPropertyBlockLevel1_0100, /* FDA00..FDAFF */
+ FriBidiPropertyBlockLevel1_0100, /* FDB00..FDBFF */
+ FriBidiPropertyBlockLevel1_0100, /* FDC00..FDCFF */
+ FriBidiPropertyBlockLevel1_0100, /* FDD00..FDDFF */
+ FriBidiPropertyBlockLevel1_0100, /* FDE00..FDEFF */
+ FriBidiPropertyBlockLevel1_0100, /* FDF00..FDFFF */
+ FriBidiPropertyBlockLevel1_0100, /* FE000..FE0FF */
+ FriBidiPropertyBlockLevel1_0100, /* FE100..FE1FF */
+ FriBidiPropertyBlockLevel1_0100, /* FE200..FE2FF */
+ FriBidiPropertyBlockLevel1_0100, /* FE300..FE3FF */
+ FriBidiPropertyBlockLevel1_0100, /* FE400..FE4FF */
+ FriBidiPropertyBlockLevel1_0100, /* FE500..FE5FF */
+ FriBidiPropertyBlockLevel1_0100, /* FE600..FE6FF */
+ FriBidiPropertyBlockLevel1_0100, /* FE700..FE7FF */
+ FriBidiPropertyBlockLevel1_0100, /* FE800..FE8FF */
+ FriBidiPropertyBlockLevel1_0100, /* FE900..FE9FF */
+ FriBidiPropertyBlockLevel1_0100, /* FEA00..FEAFF */
+ FriBidiPropertyBlockLevel1_0100, /* FEB00..FEBFF */
+ FriBidiPropertyBlockLevel1_0100, /* FEC00..FECFF */
+ FriBidiPropertyBlockLevel1_0100, /* FED00..FEDFF */
+ FriBidiPropertyBlockLevel1_0100, /* FEE00..FEEFF */
+ FriBidiPropertyBlockLevel1_0100, /* FEF00..FEFFF */
+ FriBidiPropertyBlockLevel1_0100, /* FF000..FF0FF */
+ FriBidiPropertyBlockLevel1_0100, /* FF100..FF1FF */
+ FriBidiPropertyBlockLevel1_0100, /* FF200..FF2FF */
+ FriBidiPropertyBlockLevel1_0100, /* FF300..FF3FF */
+ FriBidiPropertyBlockLevel1_0100, /* FF400..FF4FF */
+ FriBidiPropertyBlockLevel1_0100, /* FF500..FF5FF */
+ FriBidiPropertyBlockLevel1_0100, /* FF600..FF6FF */
+ FriBidiPropertyBlockLevel1_0100, /* FF700..FF7FF */
+ FriBidiPropertyBlockLevel1_0100, /* FF800..FF8FF */
+ FriBidiPropertyBlockLevel1_0100, /* FF900..FF9FF */
+ FriBidiPropertyBlockLevel1_0100, /* FFA00..FFAFF */
+ FriBidiPropertyBlockLevel1_0100, /* FFB00..FFBFF */
+ FriBidiPropertyBlockLevel1_0100, /* FFC00..FFCFF */
+ FriBidiPropertyBlockLevel1_0100, /* FFD00..FFDFF */
+ FriBidiPropertyBlockLevel1_0100, /* FFE00..FFEFF */
+ FriBidiPropertyBlockLevel1_0100, /* FFF00..FFFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 100000..1000FF */
+ FriBidiPropertyBlockLevel1_0100, /* 100100..1001FF */
+ FriBidiPropertyBlockLevel1_0100, /* 100200..1002FF */
+ FriBidiPropertyBlockLevel1_0100, /* 100300..1003FF */
+ FriBidiPropertyBlockLevel1_0100, /* 100400..1004FF */
+ FriBidiPropertyBlockLevel1_0100, /* 100500..1005FF */
+ FriBidiPropertyBlockLevel1_0100, /* 100600..1006FF */
+ FriBidiPropertyBlockLevel1_0100, /* 100700..1007FF */
+ FriBidiPropertyBlockLevel1_0100, /* 100800..1008FF */
+ FriBidiPropertyBlockLevel1_0100, /* 100900..1009FF */
+ FriBidiPropertyBlockLevel1_0100, /* 100A00..100AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 100B00..100BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 100C00..100CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 100D00..100DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 100E00..100EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 100F00..100FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 101000..1010FF */
+ FriBidiPropertyBlockLevel1_0100, /* 101100..1011FF */
+ FriBidiPropertyBlockLevel1_0100, /* 101200..1012FF */
+ FriBidiPropertyBlockLevel1_0100, /* 101300..1013FF */
+ FriBidiPropertyBlockLevel1_0100, /* 101400..1014FF */
+ FriBidiPropertyBlockLevel1_0100, /* 101500..1015FF */
+ FriBidiPropertyBlockLevel1_0100, /* 101600..1016FF */
+ FriBidiPropertyBlockLevel1_0100, /* 101700..1017FF */
+ FriBidiPropertyBlockLevel1_0100, /* 101800..1018FF */
+ FriBidiPropertyBlockLevel1_0100, /* 101900..1019FF */
+ FriBidiPropertyBlockLevel1_0100, /* 101A00..101AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 101B00..101BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 101C00..101CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 101D00..101DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 101E00..101EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 101F00..101FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 102000..1020FF */
+ FriBidiPropertyBlockLevel1_0100, /* 102100..1021FF */
+ FriBidiPropertyBlockLevel1_0100, /* 102200..1022FF */
+ FriBidiPropertyBlockLevel1_0100, /* 102300..1023FF */
+ FriBidiPropertyBlockLevel1_0100, /* 102400..1024FF */
+ FriBidiPropertyBlockLevel1_0100, /* 102500..1025FF */
+ FriBidiPropertyBlockLevel1_0100, /* 102600..1026FF */
+ FriBidiPropertyBlockLevel1_0100, /* 102700..1027FF */
+ FriBidiPropertyBlockLevel1_0100, /* 102800..1028FF */
+ FriBidiPropertyBlockLevel1_0100, /* 102900..1029FF */
+ FriBidiPropertyBlockLevel1_0100, /* 102A00..102AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 102B00..102BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 102C00..102CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 102D00..102DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 102E00..102EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 102F00..102FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 103000..1030FF */
+ FriBidiPropertyBlockLevel1_0100, /* 103100..1031FF */
+ FriBidiPropertyBlockLevel1_0100, /* 103200..1032FF */
+ FriBidiPropertyBlockLevel1_0100, /* 103300..1033FF */
+ FriBidiPropertyBlockLevel1_0100, /* 103400..1034FF */
+ FriBidiPropertyBlockLevel1_0100, /* 103500..1035FF */
+ FriBidiPropertyBlockLevel1_0100, /* 103600..1036FF */
+ FriBidiPropertyBlockLevel1_0100, /* 103700..1037FF */
+ FriBidiPropertyBlockLevel1_0100, /* 103800..1038FF */
+ FriBidiPropertyBlockLevel1_0100, /* 103900..1039FF */
+ FriBidiPropertyBlockLevel1_0100, /* 103A00..103AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 103B00..103BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 103C00..103CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 103D00..103DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 103E00..103EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 103F00..103FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 104000..1040FF */
+ FriBidiPropertyBlockLevel1_0100, /* 104100..1041FF */
+ FriBidiPropertyBlockLevel1_0100, /* 104200..1042FF */
+ FriBidiPropertyBlockLevel1_0100, /* 104300..1043FF */
+ FriBidiPropertyBlockLevel1_0100, /* 104400..1044FF */
+ FriBidiPropertyBlockLevel1_0100, /* 104500..1045FF */
+ FriBidiPropertyBlockLevel1_0100, /* 104600..1046FF */
+ FriBidiPropertyBlockLevel1_0100, /* 104700..1047FF */
+ FriBidiPropertyBlockLevel1_0100, /* 104800..1048FF */
+ FriBidiPropertyBlockLevel1_0100, /* 104900..1049FF */
+ FriBidiPropertyBlockLevel1_0100, /* 104A00..104AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 104B00..104BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 104C00..104CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 104D00..104DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 104E00..104EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 104F00..104FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 105000..1050FF */
+ FriBidiPropertyBlockLevel1_0100, /* 105100..1051FF */
+ FriBidiPropertyBlockLevel1_0100, /* 105200..1052FF */
+ FriBidiPropertyBlockLevel1_0100, /* 105300..1053FF */
+ FriBidiPropertyBlockLevel1_0100, /* 105400..1054FF */
+ FriBidiPropertyBlockLevel1_0100, /* 105500..1055FF */
+ FriBidiPropertyBlockLevel1_0100, /* 105600..1056FF */
+ FriBidiPropertyBlockLevel1_0100, /* 105700..1057FF */
+ FriBidiPropertyBlockLevel1_0100, /* 105800..1058FF */
+ FriBidiPropertyBlockLevel1_0100, /* 105900..1059FF */
+ FriBidiPropertyBlockLevel1_0100, /* 105A00..105AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 105B00..105BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 105C00..105CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 105D00..105DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 105E00..105EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 105F00..105FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 106000..1060FF */
+ FriBidiPropertyBlockLevel1_0100, /* 106100..1061FF */
+ FriBidiPropertyBlockLevel1_0100, /* 106200..1062FF */
+ FriBidiPropertyBlockLevel1_0100, /* 106300..1063FF */
+ FriBidiPropertyBlockLevel1_0100, /* 106400..1064FF */
+ FriBidiPropertyBlockLevel1_0100, /* 106500..1065FF */
+ FriBidiPropertyBlockLevel1_0100, /* 106600..1066FF */
+ FriBidiPropertyBlockLevel1_0100, /* 106700..1067FF */
+ FriBidiPropertyBlockLevel1_0100, /* 106800..1068FF */
+ FriBidiPropertyBlockLevel1_0100, /* 106900..1069FF */
+ FriBidiPropertyBlockLevel1_0100, /* 106A00..106AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 106B00..106BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 106C00..106CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 106D00..106DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 106E00..106EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 106F00..106FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 107000..1070FF */
+ FriBidiPropertyBlockLevel1_0100, /* 107100..1071FF */
+ FriBidiPropertyBlockLevel1_0100, /* 107200..1072FF */
+ FriBidiPropertyBlockLevel1_0100, /* 107300..1073FF */
+ FriBidiPropertyBlockLevel1_0100, /* 107400..1074FF */
+ FriBidiPropertyBlockLevel1_0100, /* 107500..1075FF */
+ FriBidiPropertyBlockLevel1_0100, /* 107600..1076FF */
+ FriBidiPropertyBlockLevel1_0100, /* 107700..1077FF */
+ FriBidiPropertyBlockLevel1_0100, /* 107800..1078FF */
+ FriBidiPropertyBlockLevel1_0100, /* 107900..1079FF */
+ FriBidiPropertyBlockLevel1_0100, /* 107A00..107AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 107B00..107BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 107C00..107CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 107D00..107DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 107E00..107EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 107F00..107FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 108000..1080FF */
+ FriBidiPropertyBlockLevel1_0100, /* 108100..1081FF */
+ FriBidiPropertyBlockLevel1_0100, /* 108200..1082FF */
+ FriBidiPropertyBlockLevel1_0100, /* 108300..1083FF */
+ FriBidiPropertyBlockLevel1_0100, /* 108400..1084FF */
+ FriBidiPropertyBlockLevel1_0100, /* 108500..1085FF */
+ FriBidiPropertyBlockLevel1_0100, /* 108600..1086FF */
+ FriBidiPropertyBlockLevel1_0100, /* 108700..1087FF */
+ FriBidiPropertyBlockLevel1_0100, /* 108800..1088FF */
+ FriBidiPropertyBlockLevel1_0100, /* 108900..1089FF */
+ FriBidiPropertyBlockLevel1_0100, /* 108A00..108AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 108B00..108BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 108C00..108CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 108D00..108DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 108E00..108EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 108F00..108FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 109000..1090FF */
+ FriBidiPropertyBlockLevel1_0100, /* 109100..1091FF */
+ FriBidiPropertyBlockLevel1_0100, /* 109200..1092FF */
+ FriBidiPropertyBlockLevel1_0100, /* 109300..1093FF */
+ FriBidiPropertyBlockLevel1_0100, /* 109400..1094FF */
+ FriBidiPropertyBlockLevel1_0100, /* 109500..1095FF */
+ FriBidiPropertyBlockLevel1_0100, /* 109600..1096FF */
+ FriBidiPropertyBlockLevel1_0100, /* 109700..1097FF */
+ FriBidiPropertyBlockLevel1_0100, /* 109800..1098FF */
+ FriBidiPropertyBlockLevel1_0100, /* 109900..1099FF */
+ FriBidiPropertyBlockLevel1_0100, /* 109A00..109AFF */
+ FriBidiPropertyBlockLevel1_0100, /* 109B00..109BFF */
+ FriBidiPropertyBlockLevel1_0100, /* 109C00..109CFF */
+ FriBidiPropertyBlockLevel1_0100, /* 109D00..109DFF */
+ FriBidiPropertyBlockLevel1_0100, /* 109E00..109EFF */
+ FriBidiPropertyBlockLevel1_0100, /* 109F00..109FFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10A000..10A0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10A100..10A1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10A200..10A2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10A300..10A3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10A400..10A4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10A500..10A5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10A600..10A6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10A700..10A7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10A800..10A8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10A900..10A9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10AA00..10AAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10AB00..10ABFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10AC00..10ACFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10AD00..10ADFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10AE00..10AEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10AF00..10AFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10B000..10B0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10B100..10B1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10B200..10B2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10B300..10B3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10B400..10B4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10B500..10B5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10B600..10B6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10B700..10B7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10B800..10B8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10B900..10B9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10BA00..10BAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10BB00..10BBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10BC00..10BCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10BD00..10BDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10BE00..10BEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10BF00..10BFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10C000..10C0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10C100..10C1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10C200..10C2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10C300..10C3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10C400..10C4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10C500..10C5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10C600..10C6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10C700..10C7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10C800..10C8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10C900..10C9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10CA00..10CAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10CB00..10CBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10CC00..10CCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10CD00..10CDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10CE00..10CEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10CF00..10CFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10D000..10D0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10D100..10D1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10D200..10D2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10D300..10D3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10D400..10D4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10D500..10D5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10D600..10D6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10D700..10D7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10D800..10D8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10D900..10D9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10DA00..10DAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10DB00..10DBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10DC00..10DCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10DD00..10DDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10DE00..10DEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10DF00..10DFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10E000..10E0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10E100..10E1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10E200..10E2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10E300..10E3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10E400..10E4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10E500..10E5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10E600..10E6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10E700..10E7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10E800..10E8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10E900..10E9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10EA00..10EAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10EB00..10EBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10EC00..10ECFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10ED00..10EDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10EE00..10EEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10EF00..10EFFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10F000..10F0FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10F100..10F1FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10F200..10F2FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10F300..10F3FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10F400..10F4FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10F500..10F5FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10F600..10F6FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10F700..10F7FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10F800..10F8FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10F900..10F9FF */
+ FriBidiPropertyBlockLevel1_0100, /* 10FA00..10FAFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10FB00..10FBFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10FC00..10FCFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10FD00..10FDFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10FE00..10FEFF */
+ FriBidiPropertyBlockLevel1_0100, /* 10FF00..10FFFF */
+};
+
+/* *INDENT-ON* */
+
+#define FRIBIDI_GET_TYPE(x) \
+ FriBidiPropertyBlockLevel1[(x)%256 + \
+ FriBidiPropertyBlockLevel0[(x)/256]]
+
+#undef WS
+#undef SS
+#undef RLO
+#undef RLE
+#undef PDF
+#undef NSM
+#undef LRO
+#undef LRE
+#undef ET
+#undef ES
+#undef EN
+#undef CS
+#undef BS
+#undef AN
+#undef BN
+#undef ON
+#undef AL
+#undef RTL
+#undef LTR
+
+static FriBidiCharType
+get_bidi_type (
+ /* input */
+ FriBidiChar uch
+)
+{
+ if (uch < 0x110000)
+ return fribidi_prop_to_type_[(unsigned char) FRIBIDI_GET_TYPE (uch)];
+ else
+ return FRIBIDI_TYPE_LTR;
+ /* Non-Unicode chars */
+}
+
+
+#endif /* FRIBIDI_TAB_CHAR_TYPE_2_I */
diff --git a/lib/bidi-types-list.h b/lib/bidi-types-list.h
new file mode 100644
index 0000000..7c08d27
--- /dev/null
+++ b/lib/bidi-types-list.h
@@ -0,0 +1,69 @@
+#if !__C2MAN__
+/* FriBidi
+ * bidi-types-list.h - list of bidi types
+ *
+ * $Id: bidi-types-list.h,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/lib/Attic/bidi-types-list.h,v $
+ *
+ * Author:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc.
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+/* *INDENT-OFF* */
+#endif /* !__C2MAN__ */
+
+/* Bidi types from the standard. */
+_FRIBIDI_ADD_TYPE (LTR, 'L') /* Left-To-Right letter */
+_FRIBIDI_ADD_TYPE (RTL, 'R') /* Right-To-Left letter */
+_FRIBIDI_ADD_TYPE (AL, 'A') /* Arabic Letter */
+_FRIBIDI_ADD_TYPE (EN, '1') /* European Numeral */
+_FRIBIDI_ADD_TYPE (AN, '9') /* Arabic Numeral */
+_FRIBIDI_ADD_TYPE (ES, 'w') /* European number Separator */
+_FRIBIDI_ADD_TYPE (ET, 'w') /* European number Terminator */
+_FRIBIDI_ADD_TYPE (CS, 'w') /* Common Separator */
+_FRIBIDI_ADD_TYPE (NSM, '`') /* Non Spacing Mark */
+_FRIBIDI_ADD_TYPE (BN, 'b') /* Boundary Neutral */
+_FRIBIDI_ADD_TYPE (BS, 'B') /* Block Separator */
+_FRIBIDI_ADD_TYPE (SS, 'S') /* Segment Separator */
+_FRIBIDI_ADD_TYPE (WS, '_') /* White-Space */
+_FRIBIDI_ADD_TYPE (ON, 'n') /* Other Neutral */
+_FRIBIDI_ADD_TYPE (LRE, '+') /* Left-to-Right Embedding */
+_FRIBIDI_ADD_TYPE (RLE, '+') /* Right-to-Left Embedding */
+_FRIBIDI_ADD_TYPE (LRO, '+') /* Left-to-Right Override */
+_FRIBIDI_ADD_TYPE (RLO, '+') /* Right-to-Left Override */
+_FRIBIDI_ADD_TYPE (PDF, '-') /* Pop Directional Flag */
+
+/* The following two types are not official Unicode bidi types, but used for
+ * paragraph direction handling only. */
+_FRIBIDI_ADD_TYPE (WL, 'l') /* Weak Left to right */
+_FRIBIDI_ADD_TYPE (WR, 'r') /* Weak Right to left */
+
+/* The following two types are used internally only. */
+_FRIBIDI_ADD_TYPE (SOT, '^') /* Start Of Text */
+_FRIBIDI_ADD_TYPE (EOT, '$') /* End Of Text */
+
+#if !__C2MAN__
+/* *INDENT-ON* */
+#endif /* !__C2MAN__ */
diff --git a/lib/bidi-types.h b/lib/bidi-types.h
new file mode 100644
index 0000000..b9b571b
--- /dev/null
+++ b/lib/bidi-types.h
@@ -0,0 +1,78 @@
+/* FriBidi
+ * bidi-types.h - define internal bidi types
+ *
+ * $Id: bidi-types.h,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/lib/bidi-types.h,v $
+ *
+ * Author:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc.
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+#ifndef _BIDI_TYPES_H
+#define _BIDI_TYPES_H
+
+#include <fribidi-common.h>
+
+#include <fribidi-types.h>
+#include <fribidi-bidi-types.h>
+
+#include "common.h"
+
+#include <fribidi-begindecls.h>
+
+/*
+ * Define character types that char_type_tables use.
+ * define them to be 0, 1, 2, ... and then in fribidi_get_type.c map them
+ * to FriBidiCharTypes.
+ */
+typedef char FriBidiPropCharType;
+
+enum FriBidiPropEnum
+{
+# define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL) FRIBIDI_PROP_TYPE_##TYPE,
+# include "bidi-types-list.h"
+# undef _FRIBIDI_ADD_TYPE
+ _FRIBIDI_PROP_TYPES_COUNT
+};
+
+#define fribidi_prop_to_type_ FRIBIDI_NAMESPACE(prop_to_type_)
+/* Maps fribidi_prop_types to fribidi_types */
+extern const FriBidiCharType fribidi_prop_to_type_[];
+
+#if DEBUG
+
+#define fribidi_char_from_bidi_type FRIBIDI_NAMESPACE(char_from_bidi_type)
+FRIBIDI_ENTRY char fribidi_char_from_bidi_type (
+ FriBidiCharType t /* input bidi type */
+);
+
+#endif /* DEBUG */
+
+#include <fribidi-enddecls.h>
+
+#endif /* !_BIDI_TYPES_H */
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/lib/common.h b/lib/common.h
new file mode 100644
index 0000000..737a1ae
--- /dev/null
+++ b/lib/common.h
@@ -0,0 +1,110 @@
+/* FriBidi
+ * common.h - common include for library sources
+ *
+ * $Id: common.h,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/lib/common.h,v $
+ *
+ * Author:
+ * Behdad Esfahbod, 2004
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+#ifndef _COMMON_H
+#define _COMMON_H
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <fribidi-common.h>
+
+#if WIN32
+# define FRIBIDI_ENTRY __declspec(dllexport)
+#endif /* WIN32 */
+
+#ifndef FALSE
+# define FALSE (0==1)
+#endif /* !FRIBIDI_FALSE */
+
+#ifndef TRUE
+# define TRUE (!FALSE)
+#endif /* !TRUE */
+
+#ifndef NULL
+# define NULL (void *) 0
+#endif /* !NULL */
+
+#if FRIBIDI_USE_GLIB
+# ifndef SIZEOF_LONG
+# define SIZEOF_LONG GLIB_SIZEOF_LONG
+# endif /* !SIZEOF_LONG */
+# ifndef SIZEOF_VOID_P
+# define SIZEOF_VOID_P GLIB_SIZEOF_VOID_P
+# endif /* !SIZEOF_VOID_P */
+# if !__C2MAN__
+# include <glib/gmem.h>
+# endif /* !__C2MAN__ */
+# ifndef fribidi_malloc
+# define fribidi_malloc g_malloc
+# define fribidi_free g_free
+# endif /* !fribidi_malloc */
+#endif /* FRIBIDI_USE_GLIB */
+
+/* fribidi_malloc and fribidi_free should be used instead of malloc and free.
+ * No need to include any headers. */
+#ifndef fribidi_malloc
+# if HAVE_STDLIB_H
+# if !__C2MAN__
+# include <stdlib.h>
+# endif /* __C2MAN__ */
+# define fribidi_malloc malloc
+# else /* !HAVE_STDLIB_H */
+# define fribidi_malloc (void *) malloc
+# endif /* !HAVE_STDLIB_H */
+# define fribidi_free free
+#endif /* !fribidi_malloc */
+
+/* FRIBIDI_CHUNK_SIZE is the number of bytes in each chunk of memory being
+ * allocated for data structure pools. */
+#ifndef FRIBIDI_CHUNK_SIZE
+# define FRIBIDI_CHUNK_SIZE 4096
+#else /* FRIBIDI_CHUNK_SIZE */
+# if FRIBIDI_CHUNK_SIZE < 256
+# error FRIBIDI_CHUNK_SIZE now should define the size of a chunk in bytes.
+# endif /* FRIBIDI_CHUNK_SIZE < 256 */
+#endif /* FRIBIDI_CHUNK_SIZE */
+
+/* FRIBIDI_BEGIN_STMT should be used at the beginning of your macro
+ * definitions that are to behave like simple statements. Use
+ * FRIBIDI_END_STMT at the end of the macro after the semicolon or brace */
+#ifndef FRIBIDI_BEGIN_STMT
+# define FRIBIDI_BEGIN_STMT do {
+# define FRIBIDI_END_STMT } while (0)
+#endif /* !FRIBIDI_BEGIN_STMT */
+
+#include "debug.h"
+
+#endif /* !_COMMON_H */
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/lib/debug.h b/lib/debug.h
new file mode 100644
index 0000000..1ff6d87
--- /dev/null
+++ b/lib/debug.h
@@ -0,0 +1,87 @@
+/* FriBidi
+ * debug.h - debug-only interfaces
+ *
+ * $Id: debug.h,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/lib/debug.h,v $
+ *
+ * Author:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc.
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+#ifndef _DEBUG_H
+#define _DEBUG_H
+
+#include <fribidi-common.h>
+
+#include <fribidi-types.h>
+
+#include "common.h"
+
+#include <fribidi-begindecls.h>
+
+#if DEBUG
+
+#ifndef FRIBIDI_FPRINTF
+# if !__C2MAN__
+# include <stdio.h>
+# endif /* !__C2MAN__ */
+# define FRIBIDI_FPRINTF fprintf
+# define FRIBIDI_STDERR_ stderr,
+#endif /* !FRIBIDI_FPRINTF */
+
+#define MSG(s) FRIBIDI_BEGIN_STMT \
+ FRIBIDI_FPRINTF(FRIBIDI_STDERR_ s); \
+ FRIBIDI_END_STMT
+
+#define MSG2(s, t) FRIBIDI_BEGIN_STMT \
+ FRIBIDI_FPRINTF(FRIBIDI_STDERR_ s, t); \
+ FRIBIDI_END_STMT
+
+#define MSG5(s, t, u, v, w) FRIBIDI_BEGIN_STMT \
+ FRIBIDI_FPRINTF(FRIBIDI_STDERR_ s, t, u, v, w); \
+ FRIBIDI_END_STMT
+
+#ifndef DBG
+# define DBG(s) FRIBIDI_BEGIN_STMT \
+ if (fribidi_debug_status()) MSG(FRIBIDI ": " s "\n"); \
+ FRIBIDI_END_STMT
+# define DBG2(s, t) FRIBIDI_BEGIN_STMT \
+ if (fribidi_debug_status()) MSG2(FRIBIDI ": " s "\n", t); \
+ FRIBIDI_END_STMT
+#endif /* !DBG */
+
+#else /* !DEBUG */
+
+#define DBG(s) /* empty */
+#define DBG2(s, t) /* empty */
+
+#endif /* !DEBUG */
+
+#include <fribidi-enddecls.h>
+
+#endif /* !_DEBUG_H */
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/lib/fribidi-begindecls.h b/lib/fribidi-begindecls.h
new file mode 100644
index 0000000..00f0ec9
--- /dev/null
+++ b/lib/fribidi-begindecls.h
@@ -0,0 +1 @@
+FRIBIDI_BEGIN_DECLS
diff --git a/lib/fribidi-bidi-type.c b/lib/fribidi-bidi-type.c
new file mode 100644
index 0000000..9f1b547
--- /dev/null
+++ b/lib/fribidi-bidi-type.c
@@ -0,0 +1,79 @@
+/* FriBidi
+ * fribidi-char-type.c - get character bidi type
+ *
+ * $Id: fribidi-bidi-type.c,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/lib/Attic/fribidi-bidi-type.c,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+
+#include <fribidi-bidi-type.h>
+
+#include "bidi-types.h"
+#include "bidi-type-table.i"
+
+#include "common.h"
+
+FRIBIDI_ENTRY FriBidiCharType
+fribidi_get_bidi_type (
+ /* input */
+ FriBidiChar ch
+)
+{
+ return get_bidi_type (ch);
+}
+
+/* The following is only defined for binary compatibility */
+#define fribidi_get_type_internal FRIBIDI_NAMESPACE(get_type_internal)
+FRIBIDI_ENTRY FriBidiCharType
+fribidi_get_type_internal (
+ /* input */
+ FriBidiChar ch
+)
+{
+ return get_bidi_type (ch);
+}
+
+FRIBIDI_ENTRY void
+fribidi_get_bidi_types (
+ /* input */
+ const FriBidiChar *str,
+ FriBidiStrIndex len,
+ /* output */
+ FriBidiCharType *type
+)
+{
+ for (; len; len--)
+ *type++ = fribidi_get_bidi_type (*str++);
+}
+
+/* Map fribidi_prop_types to fribidi_types. */
+const FriBidiCharType fribidi_prop_to_type_[] = {
+# define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL) FRIBIDI_TYPE_##TYPE,
+# include "bidi-types-list.h"
+# undef _FRIBIDI_ADD_TYPE
+};
diff --git a/lib/fribidi-bidi-type.h b/lib/fribidi-bidi-type.h
new file mode 100644
index 0000000..6a0f20b
--- /dev/null
+++ b/lib/fribidi-bidi-type.h
@@ -0,0 +1,74 @@
+/* FriBidi
+ * fribidi-bidi-type.h - get character bidi type
+ *
+ * $Id: fribidi-bidi-type.h,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/lib/Attic/fribidi-bidi-type.h,v $
+ *
+ * Author:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+#ifndef _FRIBIDI_BIDI_TYPE_H
+#define _FRIBIDI_BIDI_TYPE_H
+
+#include "fribidi-common.h"
+
+#include "fribidi-types.h"
+#include "fribidi-bidi-types.h"
+
+#include "fribidi-begindecls.h"
+
+/* fribidi_get_type is the old name of fribidi_get_bidi_type */
+#define fribidi_get_type fribidi_get_bidi_type
+
+#define fribidi_get_bidi_type FRIBIDI_NAMESPACE(get_bidi_type)
+/* fribidi_get_bidi_type - get character bidi type
+ *
+ * This function returns the bidi type of a character.
+ */
+FRIBIDI_ENTRY FriBidiCharType fribidi_get_bidi_type (
+ FriBidiChar ch /* input character */
+);
+
+/* fribidi_get_types is the old name of fribidi_get_bidi_types */
+#define fribidi_get_types fribidi_get_bidi_types
+
+#define fribidi_get_bidi_types FRIBIDI_NAMESPACE(get_bidi_types)
+/* fribidi_get_bidi_types - get bidi types for an string of characters
+ *
+ * This function finds the bidi types of an string of characters.
+ */
+FRIBIDI_ENTRY void fribidi_get_bidi_types (
+ const FriBidiChar *str, /* input string */
+ FriBidiStrIndex len, /* input string length */
+ FriBidiCharType *type /* output bidi types */
+);
+
+#include "fribidi-enddecls.h"
+
+#endif /* !_FRIBIDI_BIDI_TYPE_H */
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/lib/fribidi-bidi-types.c b/lib/fribidi-bidi-types.c
new file mode 100644
index 0000000..1c3788d
--- /dev/null
+++ b/lib/fribidi-bidi-types.c
@@ -0,0 +1,76 @@
+/* FriBidi
+ * fribidi-bidi-types.c - character bidi types
+ *
+ * $Id: fribidi-bidi-types.c,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/lib/fribidi-bidi-types.c,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc.
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+
+#include <fribidi-bidi-types.h>
+
+#include "common.h"
+
+#ifdef DEBUG
+
+FRIBIDI_ENTRY char
+fribidi_char_from_bidi_type (
+ /* input */
+ FriBidiCharType t
+)
+{
+ switch (t)
+ {
+# define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL) case FRIBIDI_TYPE_##TYPE: return SYMBOL;
+# include "bidi-types-list.h"
+# undef _FRIBIDI_ADD_TYPE
+ default:
+ return '?';
+ }
+}
+
+#endif
+
+FRIBIDI_ENTRY const char *
+fribidi_bidi_type_name (
+ /* input */
+ FriBidiCharType t
+)
+{
+ switch (t)
+ {
+# define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL) case FRIBIDI_TYPE_##TYPE: return #TYPE;
+# include "bidi-types-list.h"
+# undef _FRIBIDI_ADD_TYPE
+ default:
+ return "?";
+ }
+}
+
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/lib/fribidi-bidi-types.h b/lib/fribidi-bidi-types.h
new file mode 100644
index 0000000..778ef81
--- /dev/null
+++ b/lib/fribidi-bidi-types.h
@@ -0,0 +1,278 @@
+/* FriBidi
+ * fribidi-bidi-types.h - character bidi types
+ *
+ * $Id: fribidi-bidi-types.h,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/lib/fribidi-bidi-types.h,v $
+ *
+ * Author:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc.
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+#ifndef _FRIBIDI_BIDI_TYPES_H
+#define _FRIBIDI_BIDI_TYPES_H
+
+#include "fribidi-common.h"
+
+#include "fribidi-types.h"
+
+#include "fribidi-begindecls.h"
+
+typedef signed char FriBidiLevel;
+
+typedef fribidi_uint32 FriBidiMaskType;
+typedef FriBidiMaskType FriBidiCharType;
+
+/*
+ * Define some bit masks, that character types are based on, each one has
+ * only one bit on.
+ */
+
+/* Do not use enum, because 16bit processors do not allow 32bit enum values. */
+
+#define FRIBIDI_MASK_RTL 0x00000001L /* Is right to left */
+#define FRIBIDI_MASK_ARABIC 0x00000002L /* Is arabic */
+
+/* Each char can be only one of the three following. */
+#define FRIBIDI_MASK_STRONG 0x00000010L /* Is strong */
+#define FRIBIDI_MASK_WEAK 0x00000020L /* Is weak */
+#define FRIBIDI_MASK_NEUTRAL 0x00000040L /* Is neutral */
+#define FRIBIDI_MASK_SENTINEL 0x00000080L /* Is sentinel: SOT, EOT */
+/* Sentinels are not valid chars, just identify the start and end of strings. */
+
+/* Each char can be only one of the five following. */
+#define FRIBIDI_MASK_LETTER 0x00000100L /* Is letter: L, R, AL */
+#define FRIBIDI_MASK_NUMBER 0x00000200L /* Is number: EN, AN */
+#define FRIBIDI_MASK_NUMSEPTER 0x00000400L /* Is number separator or terminator: ES, ET, CS */
+#define FRIBIDI_MASK_SPACE 0x00000800L /* Is space: BN, BS, SS, WS */
+#define FRIBIDI_MASK_EXPLICIT 0x00001000L /* Is expilict mark: LRE, RLE, LRO, RLO, PDF */
+
+/* Can be on only if FRIBIDI_MASK_SPACE is also on. */
+#define FRIBIDI_MASK_SEPARATOR 0x00002000L /* Is test separator: BS, SS */
+/* Can be on only if FRIBIDI_MASK_EXPLICIT is also on. */
+#define FRIBIDI_MASK_OVERRIDE 0x00004000L /* Is explicit override: LRO, RLO */
+
+/* The following must be to make types pairwise different, some of them can
+ be removed but are here because of efficiency (make queries faster). */
+
+#define FRIBIDI_MASK_ES 0x00010000L
+#define FRIBIDI_MASK_ET 0x00020000L
+#define FRIBIDI_MASK_CS 0x00040000L
+
+#define FRIBIDI_MASK_NSM 0x00080000L
+#define FRIBIDI_MASK_BN 0x00100000L
+
+#define FRIBIDI_MASK_BS 0x00200000L
+#define FRIBIDI_MASK_SS 0x00400000L
+#define FRIBIDI_MASK_WS 0x00800000L
+
+/* We reserve the sign bit for user's private use: we will never use it,
+ then negative character types will be never assigned. */
+
+
+/*
+ * Define values for FriBidiCharType
+ */
+
+/* Strong left to right */
+#define FRIBIDI_TYPE_LTR ( FRIBIDI_MASK_STRONG + FRIBIDI_MASK_LETTER )
+/* Right to left characters */
+#define FRIBIDI_TYPE_RTL ( FRIBIDI_MASK_STRONG + FRIBIDI_MASK_LETTER \
+ + FRIBIDI_MASK_RTL)
+/* Arabic characters */
+#define FRIBIDI_TYPE_AL ( FRIBIDI_MASK_STRONG + FRIBIDI_MASK_LETTER \
+ + FRIBIDI_MASK_RTL + FRIBIDI_MASK_ARABIC )
+/* Left-To-Right embedding */
+#define FRIBIDI_TYPE_LRE (FRIBIDI_MASK_STRONG + FRIBIDI_MASK_EXPLICIT)
+/* Right-To-Left embedding */
+#define FRIBIDI_TYPE_RLE ( FRIBIDI_MASK_STRONG + FRIBIDI_MASK_EXPLICIT \
+ + FRIBIDI_MASK_RTL )
+/* Left-To-Right override */
+#define FRIBIDI_TYPE_LRO ( FRIBIDI_MASK_STRONG + FRIBIDI_MASK_EXPLICIT \
+ + FRIBIDI_MASK_OVERRIDE )
+/* Right-To-Left override */
+#define FRIBIDI_TYPE_RLO ( FRIBIDI_MASK_STRONG + FRIBIDI_MASK_EXPLICIT \
+ + FRIBIDI_MASK_RTL + FRIBIDI_MASK_OVERRIDE )
+
+/* Pop directional override */
+#define FRIBIDI_TYPE_PDF ( FRIBIDI_MASK_WEAK + FRIBIDI_MASK_EXPLICIT )
+/* European digit */
+#define FRIBIDI_TYPE_EN ( FRIBIDI_MASK_WEAK + FRIBIDI_MASK_NUMBER )
+/* Arabic digit */
+#define FRIBIDI_TYPE_AN ( FRIBIDI_MASK_WEAK + FRIBIDI_MASK_NUMBER \
+ + FRIBIDI_MASK_ARABIC )
+/* European number separator */
+#define FRIBIDI_TYPE_ES ( FRIBIDI_MASK_WEAK + FRIBIDI_MASK_NUMSEPTER \
+ + FRIBIDI_MASK_ES )
+/* European number terminator */
+#define FRIBIDI_TYPE_ET ( FRIBIDI_MASK_WEAK + FRIBIDI_MASK_NUMSEPTER \
+ + FRIBIDI_MASK_ET )
+/* Common Separator */
+#define FRIBIDI_TYPE_CS ( FRIBIDI_MASK_WEAK + FRIBIDI_MASK_NUMSEPTER \
+ + FRIBIDI_MASK_CS )
+/* Non spacing mark */
+#define FRIBIDI_TYPE_NSM ( FRIBIDI_MASK_WEAK + FRIBIDI_MASK_NSM )
+/* Boundary neutral */
+#define FRIBIDI_TYPE_BN ( FRIBIDI_MASK_WEAK + FRIBIDI_MASK_SPACE \
+ + FRIBIDI_MASK_BN )
+
+/* Block separator */
+#define FRIBIDI_TYPE_BS ( FRIBIDI_MASK_NEUTRAL + FRIBIDI_MASK_SPACE \
+ + FRIBIDI_MASK_SEPARATOR + FRIBIDI_MASK_BS )
+/* Segment separator */
+#define FRIBIDI_TYPE_SS ( FRIBIDI_MASK_NEUTRAL + FRIBIDI_MASK_SPACE \
+ + FRIBIDI_MASK_SEPARATOR + FRIBIDI_MASK_SS )
+/* Whitespace */
+#define FRIBIDI_TYPE_WS ( FRIBIDI_MASK_NEUTRAL + FRIBIDI_MASK_SPACE \
+ + FRIBIDI_MASK_WS )
+/* Other Neutral */
+#define FRIBIDI_TYPE_ON ( FRIBIDI_MASK_NEUTRAL )
+
+/* The following are used to identify the paragraph direction,
+ types L, R, N are not used internally anymore, and recommended to use
+ LTR, RTL and ON instead, didn't removed because of compatability. */
+#define FRIBIDI_TYPE_L ( FRIBIDI_TYPE_LTR )
+#define FRIBIDI_TYPE_R ( FRIBIDI_TYPE_RTL )
+#define FRIBIDI_TYPE_N ( FRIBIDI_TYPE_ON )
+/* Weak left to right */
+#define FRIBIDI_TYPE_WL ( FRIBIDI_MASK_WEAK )
+/* Weak right to left */
+#define FRIBIDI_TYPE_WR ( FRIBIDI_MASK_WEAK + FRIBIDI_MASK_RTL )
+
+/* The following are only used internally */
+
+/* Start of text */
+#define FRIBIDI_TYPE_SOT ( FRIBIDI_MASK_SENTINEL )
+/* End of text */
+#define FRIBIDI_TYPE_EOT ( FRIBIDI_MASK_SENTINEL + FRIBIDI_MASK_RTL )
+
+/*
+ * End of define values for FriBidiCharType
+ */
+
+
+/*
+ * Defining macros for needed queries, It is fully dependent on the
+ * implementation of FriBidiCharType.
+ */
+
+
+/* Is private-use value? */
+#define FRIBIDI_TYPE_PRIVATE(p) ((p) < 0)
+
+/* Return the direction of the level number, FRIBIDI_TYPE_LTR for even and
+ FRIBIDI_TYPE_RTL for odds. */
+#define FRIBIDI_LEVEL_TO_DIR(lev) (FRIBIDI_TYPE_LTR | (lev & 1))
+
+/* Return the minimum level of the direction, 0 for FRIBIDI_TYPE_LTR and
+ 1 for FRIBIDI_TYPE_RTL and FRIBIDI_TYPE_AL. */
+#define FRIBIDI_DIR_TO_LEVEL(dir) ((FriBidiLevel)(dir & 1))
+
+/* Is right to left? */
+#define FRIBIDI_IS_RTL(p) ((p) & FRIBIDI_MASK_RTL)
+/* Is arabic? */
+#define FRIBIDI_IS_ARABIC(p) ((p) & FRIBIDI_MASK_ARABIC)
+
+/* Is strong? */
+#define FRIBIDI_IS_STRONG(p) ((p) & FRIBIDI_MASK_STRONG)
+/* Is weak? */
+#define FRIBIDI_IS_WEAK(p) ((p) & FRIBIDI_MASK_WEAK)
+/* Is neutral? */
+#define FRIBIDI_IS_NEUTRAL(p) ((p) & FRIBIDI_MASK_NEUTRAL)
+/* Is sentinel? */
+#define FRIBIDI_IS_SENTINEL(p) ((p) & FRIBIDI_MASK_SENTINEL)
+
+/* Is letter: L, R, AL? */
+#define FRIBIDI_IS_LETTER(p) ((p) & FRIBIDI_MASK_LETTER)
+/* Is number: EN, AN? */
+#define FRIBIDI_IS_NUMBER(p) ((p) & FRIBIDI_MASK_NUMBER)
+/* Is number separator or terminator: ES, ET, CS? */
+#define FRIBIDI_IS_NUMBER_SEPARATOR_OR_TERMINATOR(p) \
+ ((p) & FRIBIDI_MASK_NUMSEPTER)
+/* Is space: BN, BS, SS, WS? */
+#define FRIBIDI_IS_SPACE(p) ((p) & FRIBIDI_MASK_SPACE)
+/* Is explicit mark: LRE, RLE, LRO, RLO, PDF? */
+#define FRIBIDI_IS_EXPLICIT(p) ((p) & FRIBIDI_MASK_EXPLICIT)
+
+/* Is test separator: BS, SS? */
+#define FRIBIDI_IS_SEPARATOR(p) ((p) & FRIBIDI_MASK_SEPARATOR)
+
+/* Is explicit override: LRO, RLO? */
+#define FRIBIDI_IS_OVERRIDE(p) ((p) & FRIBIDI_MASK_OVERRIDE)
+
+/* Some more: */
+
+/* Is left to right letter: LTR? */
+#define FRIBIDI_IS_LTR_LETTER(p) \
+ ((p) & (FRIBIDI_MASK_LETTER | FRIBIDI_MASK_RTL) == FRIBIDI_MASK_LETTER)
+
+/* Is right to left letter: RTL, AL? */
+#define FRIBIDI_IS_RTL_LETTER(p) \
+ ((p) & (FRIBIDI_MASK_LETTER | FRIBIDI_MASK_RTL) \
+ == (FRIBIDI_MASK_LETTER | FRIBIDI_MASK_RTL))
+
+/* Is ES or CS: ES, CS? */
+#define FRIBIDI_IS_ES_OR_CS(p) \
+ ((p) & (FRIBIDI_MASK_ES | FRIBIDI_MASK_CS))
+
+/* Is explicit or BN: LRE, RLE, LRO, RLO, PDF, BN? */
+#define FRIBIDI_IS_EXPLICIT_OR_BN(p) \
+ ((p) & (FRIBIDI_MASK_EXPLICIT | FRIBIDI_MASK_BN))
+
+/* Is explicit or separator or BN or WS: LRE, RLE, LRO, RLO, PDF, BS, SS, BN, WS? */
+#define FRIBIDI_IS_EXPLICIT_OR_SEPARATOR_OR_BN_OR_WS(p) \
+ ((p) & (FRIBIDI_MASK_EXPLICIT | FRIBIDI_MASK_SEPARATOR \
+ | FRIBIDI_MASK_BN | FRIBIDI_MASK_WS))
+
+/* Define some conversions. */
+
+/* Change numbers: EN, AN to RTL. */
+#define FRIBIDI_CHANGE_NUMBER_TO_RTL(p) \
+ (FRIBIDI_IS_NUMBER(p) ? FRIBIDI_TYPE_RTL : (p))
+
+/* Override status of an explicit mark: LRO->LTR, RLO->RTL, otherwise->ON. */
+#define FRIBIDI_EXPLICIT_TO_OVERRIDE_DIR(p) \
+ (FRIBIDI_IS_OVERRIDE(p) ? FRIBIDI_LEVEL_TO_DIR(FRIBIDI_DIR_TO_LEVEL(p)) \
+ : FRIBIDI_TYPE_ON)
+
+
+/* fribidi_type_name is the old name of fribidi_bidi_type_name */
+#define fribidi_type_name fribidi_bidi_type_name
+
+#define fribidi_bidi_type_name FRIBIDI_NAMESPACE(bidi_type_name)
+/* fribidi_bidi_type_name - get bidi type name
+ *
+ * This function returns the bidi type name of a character type. The
+ * returned string is a static string and should not be freed.
+ */
+FRIBIDI_ENTRY const char *fribidi_bidi_type_name (
+ FriBidiCharType t /* input bidi type */
+);
+
+#include "fribidi-enddecls.h"
+
+#endif /* !_FRIBIDI_BIDI_TYPES_H */
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/lib/fribidi-bidi.c b/lib/fribidi-bidi.c
new file mode 100644
index 0000000..5a9cfcf
--- /dev/null
+++ b/lib/fribidi-bidi.c
@@ -0,0 +1,1424 @@
+/* FriBidi
+ * fribidi-bidi.c - bidirectional algorithm
+ *
+ * $Id: fribidi-bidi.c,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/lib/fribidi-bidi.c,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ * Dov Grobgeld, 1999, 2000
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ * Copyright (C) 1999,2000 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+
+#include <fribidi-bidi.h>
+#include <fribidi-bidi-type.h>
+#include <fribidi-mirroring.h>
+#include <fribidi-unicode.h>
+#include <fribidi-env.h>
+
+#include "mem.h"
+
+#include "common.h"
+
+#undef MAX
+#define MAX(a,b) ((a) > (b) ? (a) : (b))
+
+/*======================================================================
+ * Typedef for the run-length list.
+ *----------------------------------------------------------------------*/
+typedef struct _TypeLink TypeLink;
+
+struct _TypeLink
+{
+ TypeLink *prev;
+ TypeLink *next;
+
+ FriBidiCharType type;
+ FriBidiStrIndex pos, len;
+ FriBidiLevel level;
+};
+
+#define FRIBIDI_LEVEL_REMOVED -3
+#define FRIBIDI_LEVEL_START -2
+#define FRIBIDI_LEVEL_END -1
+
+typedef struct
+{
+ FriBidiCharType override; /* only LTR, RTL and ON are valid */
+ FriBidiLevel level;
+}
+LevelInfo;
+
+static void
+bidi_string_reverse (
+ FriBidiChar *str,
+ FriBidiStrIndex len
+)
+{
+ FriBidiStrIndex 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
+index_array_reverse (
+ FriBidiStrIndex *arr,
+ FriBidiStrIndex len
+)
+{
+ FriBidiStrIndex i;
+ for (i = 0; i < len / 2; i++)
+ {
+ FriBidiStrIndex tmp = arr[i];
+ arr[i] = arr[len - 1 - i];
+ arr[len - 1 - i] = tmp;
+ }
+}
+
+#ifndef USE_SIMPLE_MALLOC
+static TypeLink *free_type_links = NULL;
+#endif /* !USE_SIMPLE_MALLOC */
+
+static TypeLink *
+new_type_link (
+ void
+)
+{
+ TypeLink *link;
+
+#if USE_SIMPLE_MALLOC
+ link = fribidi_malloc (sizeof (TypeLink));
+#else /* !USE_SIMPLE_MALLOC */
+ if (free_type_links)
+ {
+ link = free_type_links;
+ free_type_links = free_type_links->next;
+ }
+ else
+ {
+ static FriBidiMemChunk *mem_chunk = NULL;
+
+ if (!mem_chunk)
+ mem_chunk = fribidi_chunk_new_for_type (TypeLink
+ );
+
+ link = fribidi_chunk_new (TypeLink,
+ mem_chunk
+ );
+ }
+#endif /* !USE_SIMPLE_MALLOC */
+
+ link->len = 0;
+ link->pos = 0;
+ link->level = 0;
+ link->next = NULL;
+ link->prev = NULL;
+ return link;
+}
+
+static void
+free_type_link (
+ TypeLink *link
+)
+{
+#if USE_SIMPLE_MALLOC
+ fribidi_free (link);
+#else /* !USE_SIMPLE_MALLOC */
+ link->next = free_type_links;
+ free_type_links = link;
+#endif /* !USE_SIMPLE_MALLOC */
+}
+
+#define FRIBIDI_ADD_TYPE_LINK(p,q) \
+ FRIBIDI_BEGIN_STMT \
+ (p)->len = (q)->pos - (p)->pos; \
+ (p)->next = (q); \
+ (q)->prev = (p); \
+ (p) = (q); \
+ FRIBIDI_END_STMT
+
+static TypeLink *
+run_length_encode_types (
+ FriBidiCharType *char_type,
+ FriBidiStrIndex type_len
+)
+{
+ TypeLink *list, *last, *link;
+
+ FriBidiStrIndex i;
+
+ /* Add the starting link */
+ list = new_type_link ();
+ list->type = FRIBIDI_TYPE_SOT;
+ list->level = FRIBIDI_LEVEL_START;
+ last = list;
+
+ /* Sweep over the string_type s */
+ for (i = 0; i < type_len; i++)
+ if (char_type[i] != last->type)
+ {
+ link = new_type_link ();
+ link->type = char_type[i];
+ link->pos = i;
+ FRIBIDI_ADD_TYPE_LINK (last, link);
+ }
+
+ /* Add the ending link */
+ link = new_type_link ();
+ link->type = FRIBIDI_TYPE_EOT;
+ link->level = FRIBIDI_LEVEL_END;
+ link->pos = type_len;
+ FRIBIDI_ADD_TYPE_LINK (last, link);
+
+ return list;
+}
+
+/* explicits_list is a list like type_rl_list, that holds the explicit
+ codes that are removed from rl_list, to reinsert them later by calling
+ the override_list.
+*/
+static void
+init_list (
+ TypeLink **start,
+ TypeLink **end
+)
+{
+ TypeLink *list;
+ TypeLink *link;
+
+ /* Add the starting link */
+ list = new_type_link ();
+ list->type = FRIBIDI_TYPE_SOT;
+ list->level = FRIBIDI_LEVEL_START;
+ list->len = 0;
+ list->pos = 0;
+
+ /* Add the ending link */
+ link = new_type_link ();
+ link->type = FRIBIDI_TYPE_EOT;
+ link->level = FRIBIDI_LEVEL_END;
+ link->len = 0;
+ link->pos = 0;
+ list->next = link;
+ link->prev = list;
+
+ *start = list;
+ *end = link;
+}
+
+/* move an element before another element in a list, the list must have a
+ previous element, used to update explicits_list.
+ assuming that p have both prev and next or none of them, also update
+ the list that p is currently in, if any.
+*/
+static void
+move_element_before (
+ TypeLink *p,
+ TypeLink *list
+)
+{
+ if (p->prev)
+ {
+ p->prev->next = p->next;
+ p->next->prev = p->prev;
+ }
+ p->prev = list->prev;
+ list->prev->next = p;
+ p->next = list;
+ list->prev = p;
+}
+
+/* override the rl_list 'base', with the elements in the list 'over', to
+ reinsert the previously-removed explicit codes (at X9) from
+ 'explicits_list' back into 'type_rl_list'. This is used at the end of I2
+ to restore the explicit marks, and also to reset the character types of
+ characters at L1.
+
+ it is assumed that the 'pos' of the first element in 'base' list is not
+ more than the 'pos' of the first element of the 'over' list, and the
+ 'pos' of the last element of the 'base' list is not less than the 'pos'
+ of the last element of the 'over' list. these two conditions are always
+ satisfied for the two usages mentioned above.
+
+ TBD: use some explanatory names instead of p, q, ...
+*/
+static void
+override_list (
+ TypeLink *base,
+ TypeLink *over
+)
+{
+ TypeLink *p = base, *q, *r, *s, *t;
+ FriBidiStrIndex pos = 0, pos2;
+
+ if (!over)
+ return;
+ q = over;
+ while (q)
+ {
+ if (!q->len || q->pos < pos)
+ {
+ t = q;
+ q = q->next;
+ free_type_link (t);
+ continue;
+ }
+ pos = q->pos;
+ while (p->next && p->next->pos <= pos)
+ p = p->next;
+ /* now p is the element that q must be inserted 'in'. */
+ pos2 = pos + q->len;
+ r = p;
+ while (r->next && r->next->pos < pos2)
+ r = r->next;
+ /* now r is the last element that q affects. */
+ if (p == r)
+ {
+ /* split p into at most 3 interval, and insert q in the place of
+ the second interval, set r to be the third part. */
+ /* third part needed? */
+ if (p->next && p->next->pos == pos2)
+ r = r->next;
+ else
+ {
+ r = new_type_link ();
+ *r = *p;
+ if (r->next)
+ {
+ r->next->prev = r;
+ r->len = r->next->pos - pos2;
+ }
+ else
+ r->len -= pos - p->pos;
+ r->pos = pos2;
+ }
+ /* first part needed? */
+ if (p->prev && p->pos == pos)
+ {
+ t = p;
+ p = p->prev;
+ free_type_link (t);
+ }
+ else
+ p->len = pos - p->pos;
+ }
+ else
+ {
+ /* cut the end of p. */
+ p->len = pos - p->pos;
+ /* if all of p is cut, remove it. */
+ if (!p->len && p->prev)
+ p = p->prev;
+
+ /* cut the begining of r. */
+ r->pos = pos2;
+ if (r->next)
+ r->len = r->next->pos - pos2;
+ /* if all of r is cut, remove it. */
+ if (!r->len && r->next)
+ r = r->next;
+
+ /* remove the elements between p and r. */
+ for (s = p->next; s != r;)
+ {
+ t = s;
+ s = s->next;
+ free_type_link (t);
+ }
+ }
+ /* before updating the next and prev links to point to the inserted q,
+ we must remember the next element of q in the 'over' list.
+ */
+ t = q;
+ q = q->next;
+ p->next = t;
+ t->prev = p;
+ t->next = r;
+ r->prev = t;
+ }
+}
+
+/* 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 TypeLink *
+merge_with_prev (
+ TypeLink *second
+)
+{
+ TypeLink *first = second->prev;
+ first->next = second->next;
+ first->next->prev = first;
+ RL_LEN (first) += RL_LEN (second);
+ free_type_link (second);
+ return first;
+}
+
+static void
+compact_list (
+ TypeLink *list
+)
+{
+ if (list->next)
+ for (list = list->next; list; list = list->next)
+ if (RL_TYPE (list->prev) == RL_TYPE (list)
+ && RL_LEVEL (list->prev) == RL_LEVEL (list))
+ list = merge_with_prev (list);
+}
+
+static void
+compact_neutrals (
+ TypeLink *list
+)
+{
+ if (list->next)
+ {
+ for (list = list->next; list; list = list->next)
+ {
+ if (RL_LEVEL (list->prev) == RL_LEVEL (list)
+ &&
+ ((RL_TYPE
+ (list->prev) == RL_TYPE (list)
+ || (FRIBIDI_IS_NEUTRAL (RL_TYPE (list->prev))
+ && FRIBIDI_IS_NEUTRAL (RL_TYPE (list))))))
+ list = merge_with_prev (list);
+ }
+ }
+}
+
+/*=========================================================================
+ * define macros for push and pop the status in to / out of the stack
+ *-------------------------------------------------------------------------*/
+
+/* There's some little points in pushing and poping into the status stack:
+ 1. when the embedding level is not valid (more than FRIBIDI_BIDI_MAX_EXPLICIT_LEVEL=61),
+ you must reject it, and not to push into the stack, but when you see a
+ PDF, you must find the matching code, and if it was pushed in the stack,
+ pop it, it means you must pop if and only if you have pushed the
+ matching code, the over_pushed var counts the number of rejected codes yet.
+ 2. there's a more confusing point too, when the embedding level is exactly
+ FRIBIDI_BIDI_MAX_EXPLICIT_LEVEL-1=60, an LRO or LRE must be rejected because the new
+ level would be FRIBIDI_BIDI_MAX_EXPLICIT_LEVEL+1=62, that is invalid, but an RLO or RLE
+ must be accepted because the new level is FRIBIDI_BIDI_MAX_EXPLICIT_LEVEL=61, that is
+ valid, so the rejected codes may be not continuous in the logical order,
+ in fact there is at most two continuous intervals of codes, with a RLO or
+ RLE between them. To support this case, the first_interval var counts the
+ number of rejected codes in the first interval, when it is 0, means that
+ there is only one interval yet.
+*/
+
+/* a. If this new level would be valid, then this embedding code is valid.
+ Remember (push) the current embedding level and override status.
+ Reset current level to this new level, and reset the override status to
+ new_override.
+ b. If the new level would not be valid, then this code is invalid. Don't
+ change the current level or override status.
+*/
+#define PUSH_STATUS \
+ FRIBIDI_BEGIN_STMT \
+ if (new_level <= FRIBIDI_BIDI_MAX_EXPLICIT_LEVEL) \
+ { \
+ if (level == FRIBIDI_BIDI_MAX_EXPLICIT_LEVEL - 1) \
+ first_interval = over_pushed; \
+ status_stack[stack_size].level = level; \
+ status_stack[stack_size].override = override; \
+ stack_size++; \
+ level = new_level; \
+ override = new_override; \
+ } else \
+ over_pushed++; \
+ FRIBIDI_END_STMT
+
+/* If there was a valid matching code, restore (pop) the last remembered
+ (pushed) embedding level and directional override.
+*/
+#define POP_STATUS \
+ FRIBIDI_BEGIN_STMT \
+ if (over_pushed || stack_size) \
+ { \
+ if (over_pushed > first_interval) \
+ over_pushed--; \
+ else \
+ { \
+ if (over_pushed == first_interval) \
+ first_interval = 0; \
+ stack_size--; \
+ level = status_stack[stack_size].level; \
+ override = status_stack[stack_size].override; \
+ } \
+ } \
+ FRIBIDI_END_STMT
+
+/*==========================================================================
+ * There was no support for sor and eor in the absence of Explicit Embedding
+ * Levels, so define macros, to support them, with as less change as needed.
+ *--------------------------------------------------------------------------*/
+
+/* Return the type of previous char or the sor, if already at the start of
+ a run level. */
+#define PREV_TYPE_OR_SOR(pp) \
+ ( \
+ RL_LEVEL(pp->prev) == RL_LEVEL(pp) ? \
+ RL_TYPE(pp->prev) : \
+ FRIBIDI_LEVEL_TO_DIR(MAX(RL_LEVEL(pp->prev), RL_LEVEL(pp))) \
+ )
+
+/* Return the type of next char or the eor, if already at the end of
+ a run level. */
+#define NEXT_TYPE_OR_EOR(pp) \
+ ( \
+ !pp->next ? \
+ FRIBIDI_LEVEL_TO_DIR(RL_LEVEL(pp)) : \
+ (RL_LEVEL(pp->next) == RL_LEVEL(pp) ? \
+ RL_TYPE(pp->next) : \
+ FRIBIDI_LEVEL_TO_DIR(MAX(RL_LEVEL(pp->next), RL_LEVEL(pp))) \
+ ) \
+ )
+
+
+/* Return the embedding direction of a link. */
+#define FRIBIDI_EMBEDDING_DIRECTION(list) \
+ FRIBIDI_LEVEL_TO_DIR(RL_LEVEL(list))
+
+#if DEBUG
+/*======================================================================
+ * For debugging, define some functions for printing the types and the
+ * levels.
+ *----------------------------------------------------------------------*/
+
+static char char_from_level_array[] = {
+ '!', /* FRIBIDI_LEVEL_REMOVED, internal error, this level shouldn't be seen. */
+ '^', /* FRIBIDI_LEVEL_START, indicating start of string. */
+ '$', /* FRIBIDI_LEVEL_END, indicating end of string. */
+ /* 0-9,a-z,A-Z are the the only valid levels before resolving implicits.
+ after that the level @ may be appear too. */
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
+ 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
+ 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D',
+ 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
+ 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
+ 'Y', 'Z',
+
+ '@', /* only must appear after resolving implicits. */
+ '*', '*', '*' /* overflows, this levels and higher levels show a bug!. */
+};
+
+#define fribidi_char_from_level(level) char_from_level_array[(level) + 3]
+
+static void
+print_types_re (
+ TypeLink *pp
+)
+{
+ MSG (" Run types : ");
+ while (pp)
+ {
+ MSG5 ("%d:l%d(%s)[%d] ",
+ pp->pos, pp->len, fribidi_type_name (pp->type), pp->level);
+ pp = pp->next;
+ }
+ MSG ("\n");
+}
+
+static void
+print_resolved_levels (
+ TypeLink *pp
+)
+{
+ MSG (" Res. levels: ");
+ while (pp)
+ {
+ FriBidiStrIndex i;
+ for (i = RL_LEN (pp); i; i--)
+ MSG2 ("%c", fribidi_char_from_level (RL_LEVEL (pp)));
+ pp = pp->next;
+ }
+ MSG ("\n");
+}
+
+static void
+print_resolved_types (
+ TypeLink *pp
+)
+{
+ MSG (" Res. types : ");
+ while (pp)
+ {
+ FriBidiStrIndex i;
+ for (i = RL_LEN (pp); i; i--)
+ MSG2 ("%c", fribidi_char_from_bidi_type (pp->type));
+ pp = pp->next;
+ }
+ MSG ("\n");
+}
+
+static void
+print_bidi_string (
+ /* input */
+ const FriBidiChar *str,
+ FriBidiStrIndex len
+)
+{
+ MSG (" Org. types : ");
+ for (; len; len--)
+ MSG2 ("%c", fribidi_char_from_bidi_type (fribidi_get_bidi_type (*str++)));
+ MSG ("\n");
+}
+#endif /* DEBUG */
+
+/*======================================================================
+ * This function should follow the Unicode specification closely!
+ *----------------------------------------------------------------------*/
+static void
+fribidi_analyse_string (
+ /* input */
+ const FriBidiChar *str,
+ FriBidiStrIndex len,
+ /* input and output */
+ FriBidiCharType *pbase_dir,
+ /* output */
+ TypeLink **ptype_rl_list,
+ FriBidiLevel *pmax_level
+)
+{
+ FriBidiLevel base_level, max_level;
+ FriBidiCharType base_dir;
+ FriBidiStrIndex i;
+ TypeLink *type_rl_list, *explicits_list, *explicits_list_end, *pp;
+
+ DBG ("Entering fribidi_analyse_string");
+
+ /* Determinate character types */
+ DBG (" Determine character types");
+ {
+ FriBidiCharType *char_type =
+ (FriBidiCharType *) fribidi_malloc (len * sizeof (FriBidiCharType));
+ for (i = 0; i < len; i++)
+ char_type[i] = fribidi_get_type (str[i]);
+
+ /* Run length encode the character types */
+ type_rl_list = run_length_encode_types (char_type, len);
+ fribidi_free (char_type);
+ }
+ DBG (" Determine character types, Done");
+
+ init_list (&explicits_list, &explicits_list_end);
+
+ /* Find base level */
+ DBG (" Finding the base level");
+ if (FRIBIDI_IS_STRONG (*pbase_dir))
+ base_level = FRIBIDI_DIR_TO_LEVEL (*pbase_dir);
+ /* P2. P3. Search for first strong character and use its direction as
+ base direction */
+ else
+ {
+ /* If no strong base_dir was found, resort to the weak direction
+ that was passed on input. */
+ base_level = FRIBIDI_DIR_TO_LEVEL (*pbase_dir);
+ base_dir = FRIBIDI_TYPE_ON;
+ for (pp = type_rl_list; pp; pp = pp->next)
+ if (FRIBIDI_IS_LETTER (RL_TYPE (pp)))
+ {
+ base_level = FRIBIDI_DIR_TO_LEVEL (RL_TYPE (pp));
+ base_dir = FRIBIDI_LEVEL_TO_DIR (base_level);
+ break;
+ }
+ }
+ base_dir = FRIBIDI_LEVEL_TO_DIR (base_level);
+ DBG2 (" Base level : %c", fribidi_char_from_level (base_level));
+ DBG2 (" Base dir : %c", fribidi_char_from_bidi_type (base_dir));
+ DBG (" Finding the base level, Done");
+
+# if DEBUG
+ if (fribidi_debug_status ())
+ {
+ print_types_re (type_rl_list);
+ }
+# endif /* DEBUG */
+
+ /* Explicit Levels and Directions */
+ DBG ("Explicit Levels and Directions");
+ {
+ /* X1. Begin by setting the current embedding level to the paragraph
+ embedding level. Set the directional override status to neutral.
+ Process each character iteratively, applying rules X2 through X9.
+ Only embedding levels from 0 to 61 are valid in this phase. */
+ FriBidiLevel level, new_level;
+ FriBidiCharType override, new_override;
+ FriBidiStrIndex i;
+ int stack_size, over_pushed, first_interval;
+ LevelInfo *status_stack;
+ TypeLink temp_link;
+
+ level = base_level;
+ override = FRIBIDI_TYPE_ON;
+ /* stack */
+ stack_size = 0;
+ over_pushed = 0;
+ first_interval = 0;
+ status_stack =
+ (LevelInfo *) fribidi_malloc (sizeof (LevelInfo) *
+ FRIBIDI_BIDI_MAX_RESOLVED_LEVELS);
+
+ for (pp = type_rl_list->next; pp->next; pp = pp->next)
+ {
+ FriBidiCharType this_type = RL_TYPE (pp);
+ if (FRIBIDI_IS_EXPLICIT_OR_BN (this_type))
+ {
+ if (FRIBIDI_IS_STRONG (this_type))
+ { /* LRE, RLE, LRO, RLO */
+ /* 1. Explicit Embeddings */
+ /* X2. With each RLE, compute the least greater odd embedding level. */
+ /* X3. With each LRE, compute the least greater even embedding level. */
+ /* 2. Explicit Overrides */
+ /* X4. With each RLO, compute the least greater odd embedding level. */
+ /* X5. With each LRO, compute the least greater even embedding level. */
+ new_override = FRIBIDI_EXPLICIT_TO_OVERRIDE_DIR (this_type);
+ for (i = RL_LEN (pp); i; i--)
+ {
+ new_level =
+ ((level + FRIBIDI_DIR_TO_LEVEL (this_type) + 2) & ~1) -
+ FRIBIDI_DIR_TO_LEVEL (this_type);
+ PUSH_STATUS;
+ }
+ }
+ else if (this_type == FRIBIDI_TYPE_PDF)
+ {
+ /* 3. Terminating Embeddings and overrides */
+ /* X7. With each PDF, determine the matching embedding or
+ override code. */
+ for (i = RL_LEN (pp); i; i--)
+ POP_STATUS;
+ }
+ /* X9. Remove all RLE, LRE, RLO, LRO, PDF, and BN codes. */
+ /* Remove element and add it to explicits_list */
+ temp_link.next = pp->next;
+ pp->level = FRIBIDI_LEVEL_REMOVED;
+ move_element_before (pp, explicits_list_end);
+ pp = &temp_link;
+ }
+ else
+ {
+ /* X6. For all typed besides RLE, LRE, RLO, LRO, and PDF:
+ a. Set the level of the current character to the current
+ embedding level.
+ b. Whenever the directional override status is not neutral,
+ reset the current character type to the directional override
+ status. */
+ RL_LEVEL (pp) = level;
+ if (!FRIBIDI_IS_NEUTRAL (override))
+ RL_TYPE (pp) = override;
+ }
+ /* X8. All explicit directional embeddings and overrides are
+ completely terminated at the end of each paragraph. Paragraph
+ separators are not included in the embedding. */
+ /* This function is running on a single paragraph, so we can do
+ X8 after all the input is processed. */
+ }
+
+ /* Implementing X8. It has no effect on a single paragraph! */
+ level = base_level;
+ override = FRIBIDI_TYPE_ON;
+ stack_size = 0;
+ over_pushed = 0;
+
+ fribidi_free (status_stack);
+ }
+ /* X10. The remaining rules are applied to each run of characters at the
+ same level. For each run, determine the start-of-level-run (sor) and
+ end-of-level-run (eor) type, either L or R. This depends on the
+ higher of the two levels on either side of the boundary (at the start
+ or end of the paragraph, the level of the 'other' run is the base
+ embedding level). If the higher level is odd, the type is R, otherwise
+ it is L. */
+ /* Resolving Implicit Levels can be done out of X10 loop, so only change
+ of Resolving Weak Types and Resolving Neutral Types is needed. */
+
+ compact_list (type_rl_list);
+
+# if DEBUG
+ if (fribidi_debug_status ())
+ {
+ print_types_re (type_rl_list);
+ print_bidi_string (str, len);
+ print_resolved_levels (type_rl_list);
+ print_resolved_types (type_rl_list);
+ }
+# endif /* DEBUG */
+
+ /* 4. Resolving weak types */
+ DBG ("Resolving weak types");
+ {
+ FriBidiCharType last_strong, prev_type_org;
+ fribidi_boolean w4;
+
+ last_strong = base_dir;
+
+ for (pp = type_rl_list->next; pp->next; pp = pp->next)
+ {
+ FriBidiCharType prev_type, this_type, next_type;
+
+ prev_type = PREV_TYPE_OR_SOR (pp);
+ this_type = RL_TYPE (pp);
+ next_type = NEXT_TYPE_OR_EOR (pp);
+
+ if (FRIBIDI_IS_STRONG (prev_type))
+ last_strong = prev_type;
+
+ /* W1. NSM
+ Examine each non-spacing mark (NSM) in the level run, and change the
+ type of the NSM to the type of the previous character. If the NSM
+ is at the start of the level run, it will get the type of sor. */
+ /* Implementation note: it is important that if the previous character
+ is not sor, then we should merge this run with the previous,
+ because of rules like W5, that we assume all of a sequence of
+ adjacent ETs are in one TypeLink. */
+ if (this_type == FRIBIDI_TYPE_NSM)
+ {
+ if (RL_LEVEL (pp->prev) == RL_LEVEL (pp))
+ pp = merge_with_prev (pp);
+ else
+ RL_TYPE (pp) = prev_type;
+ continue; /* As we know the next condition cannot be true. */
+ }
+
+ /* W2: European numbers. */
+ if (this_type == FRIBIDI_TYPE_EN && last_strong == FRIBIDI_TYPE_AL)
+ {
+ RL_TYPE (pp) = FRIBIDI_TYPE_AN;
+
+ /* Resolving dependency of loops for rules W1 and W2, so we
+ can merge them in one loop. */
+ if (next_type == FRIBIDI_TYPE_NSM)
+ RL_TYPE (pp->next) = FRIBIDI_TYPE_AN;
+ }
+ }
+
+
+ last_strong = base_dir;
+ /* Resolving dependency of loops for rules W4 and W5, W5 may
+ want to prevent W4 to take effect in the next turn, do this
+ through "w4". */
+ w4 = TRUE;
+ /* Resolving dependency of loops for rules W4 and W5 with W7,
+ W7 may change an EN to L but it sets the prev_type_org if needed,
+ so W4 and W5 in next turn can still do their works. */
+ prev_type_org = FRIBIDI_TYPE_ON;
+
+ for (pp = type_rl_list->next; pp->next; pp = pp->next)
+ {
+ FriBidiCharType prev_type, this_type, next_type;
+
+ prev_type = PREV_TYPE_OR_SOR (pp);
+ this_type = RL_TYPE (pp);
+ next_type = NEXT_TYPE_OR_EOR (pp);
+
+ if (FRIBIDI_IS_STRONG (prev_type))
+ last_strong = prev_type;
+
+ /* W3: Change ALs to R. */
+ if (this_type == FRIBIDI_TYPE_AL)
+ {
+ RL_TYPE (pp) = FRIBIDI_TYPE_RTL;
+ w4 = TRUE;
+ prev_type_org = FRIBIDI_TYPE_ON;
+ continue;
+ }
+
+ /* 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 (w4
+ && RL_LEN (pp) == 1 && FRIBIDI_IS_ES_OR_CS (this_type)
+ && FRIBIDI_IS_NUMBER (prev_type_org) && prev_type_org == next_type
+ && (prev_type_org == FRIBIDI_TYPE_EN
+ || this_type == FRIBIDI_TYPE_CS))
+ {
+ RL_TYPE (pp) = prev_type;
+ this_type = RL_TYPE (pp);
+ }
+ w4 = TRUE;
+
+ /* W5. A sequence of European terminators adjacent to European
+ numbers changes to All European numbers. */
+ if (this_type == FRIBIDI_TYPE_ET
+ && (prev_type_org == FRIBIDI_TYPE_EN
+ || next_type == FRIBIDI_TYPE_EN))
+ {
+ RL_TYPE (pp) = FRIBIDI_TYPE_EN;
+ w4 = FALSE;
+ this_type = RL_TYPE (pp);
+ }
+
+ /* W6. Otherwise change separators and terminators to other neutral. */
+ if (FRIBIDI_IS_NUMBER_SEPARATOR_OR_TERMINATOR (this_type))
+ RL_TYPE (pp) = FRIBIDI_TYPE_ON;
+
+ /* W7. Change european numbers to L. */
+ if (this_type == FRIBIDI_TYPE_EN && last_strong == FRIBIDI_TYPE_LTR)
+ {
+ RL_TYPE (pp) = FRIBIDI_TYPE_LTR;
+ prev_type_org = (RL_LEVEL (pp) == RL_LEVEL (pp->next) ?
+ FRIBIDI_TYPE_EN : FRIBIDI_TYPE_ON);
+ }
+ else
+ prev_type_org = PREV_TYPE_OR_SOR (pp->next);
+ }
+ }
+
+ compact_neutrals (type_rl_list);
+
+# if DEBUG
+ if (fribidi_debug_status ())
+ {
+ print_resolved_levels (type_rl_list);
+ print_resolved_types (type_rl_list);
+ }
+# endif /* DEBUG */
+
+ /* 5. Resolving Neutral Types */
+ DBG ("Resolving neutral types");
+ {
+ /* N1. and N2.
+ For each neutral, resolve it. */
+ for (pp = type_rl_list->next; pp->next; pp = pp->next)
+ {
+ FriBidiCharType prev_type, this_type, next_type;
+
+ /* "European and arabic numbers are treated as though they were R"
+ FRIBIDI_CHANGE_NUMBER_TO_RTL does this. */
+ this_type = FRIBIDI_CHANGE_NUMBER_TO_RTL (RL_TYPE (pp));
+ prev_type = FRIBIDI_CHANGE_NUMBER_TO_RTL (PREV_TYPE_OR_SOR (pp));
+ next_type = FRIBIDI_CHANGE_NUMBER_TO_RTL (NEXT_TYPE_OR_EOR (pp));
+
+ if (FRIBIDI_IS_NEUTRAL (this_type))
+ RL_TYPE (pp) = (prev_type == next_type) ?
+ /* N1. */ prev_type :
+ /* N2. */ FRIBIDI_EMBEDDING_DIRECTION (pp);
+ }
+ }
+
+ compact_list (type_rl_list);
+
+# if DEBUG
+ if (fribidi_debug_status ())
+ {
+ print_resolved_levels (type_rl_list);
+ print_resolved_types (type_rl_list);
+ }
+# endif /* DEBUG */
+
+ /* 6. Resolving implicit levels */
+ DBG ("Resolving implicit levels");
+ {
+ max_level = base_level;
+
+ for (pp = type_rl_list->next; pp->next; pp = pp->next)
+ {
+ FriBidiCharType this_type;
+ int level;
+
+ this_type = RL_TYPE (pp);
+ level = RL_LEVEL (pp);
+
+ /* I1. Even */
+ /* I2. Odd */
+ if (FRIBIDI_IS_NUMBER (this_type))
+ RL_LEVEL (pp) = (level + 2) & ~1;
+ else
+ RL_LEVEL (pp) = (level ^ FRIBIDI_DIR_TO_LEVEL (this_type)) +
+ (level & 1);
+
+ if (RL_LEVEL (pp) > max_level)
+ max_level = RL_LEVEL (pp);
+ }
+ }
+
+ compact_list (type_rl_list);
+
+# if DEBUG
+ if (fribidi_debug_status ())
+ {
+ print_bidi_string (str, len);
+ print_resolved_levels (type_rl_list);
+ print_resolved_types (type_rl_list);
+ }
+# endif /* DEBUG */
+
+/* Reinsert the explicit codes & bn's that already removed, from the
+ explicits_list to type_rl_list. */
+ DBG ("Reinserting explicit codes");
+ {
+ TypeLink *p;
+
+ override_list (type_rl_list, explicits_list);
+ p = type_rl_list->next;
+ if (p->level < 0)
+ p->level = base_level;
+ for (; p->next; p = p->next)
+ if (p->level < 0)
+ p->level = p->prev->level;
+ }
+
+# if DEBUG
+ if (fribidi_debug_status ())
+ {
+ print_types_re (type_rl_list);
+ print_resolved_levels (type_rl_list);
+ print_resolved_types (type_rl_list);
+ }
+# endif /* DEBUG */
+
+ DBG ("Reset the embedding levels");
+ {
+ int j, k, state, pos;
+ TypeLink *p, *q, *list, *list_end;
+
+ /* L1. Reset the embedding levels of some chars. */
+ init_list (&list, &list_end);
+ q = list_end;
+ state = 1;
+ pos = len - 1;
+ for (j = len - 1; j >= -1; j--)
+ {
+ /* if state is on at the very first of string, do this too. */
+ if (j >= 0)
+ k = fribidi_get_type (str[j]);
+ else
+ k = FRIBIDI_TYPE_ON;
+ if (!state && FRIBIDI_IS_SEPARATOR (k))
+ {
+ state = 1;
+ pos = j;
+ }
+ else if (state && !FRIBIDI_IS_EXPLICIT_OR_SEPARATOR_OR_BN_OR_WS (k))
+ {
+ state = 0;
+ p = new_type_link ();
+ p->prev = p->next = NULL;
+ p->pos = j + 1;
+ p->len = pos - j;
+ p->type = base_dir;
+ p->level = base_level;
+ move_element_before (p, q);
+ q = p;
+ }
+ }
+ override_list (type_rl_list, list);
+ }
+
+# if DEBUG
+ if (fribidi_debug_status ())
+ {
+ print_types_re (type_rl_list);
+ print_resolved_levels (type_rl_list);
+ print_resolved_types (type_rl_list);
+ }
+# endif /* DEBUG */
+
+ *ptype_rl_list = type_rl_list;
+ *pmax_level = max_level;
+ *pbase_dir = base_dir;
+
+ DBG ("Leaving fribidi_analyse_string");
+ return;
+}
+
+/*======================================================================
+ * Frees up the rl_list, must be called after each call to
+ * fribidi_analyse_string(), after the list is not needed anymore.
+ *----------------------------------------------------------------------*/
+static void
+free_rl_list (
+ TypeLink *type_rl_list
+)
+{
+
+ TypeLink *pp;
+
+ DBG ("Entering free_rl_list");
+
+ if (!type_rl_list)
+ {
+ DBG ("Leaving free_rl_list");
+ return;
+ }
+
+#if USE_SIMPLE_MALLOC
+ pp = type_rl_list;
+ while (pp)
+ {
+ TypeLink *p;
+
+ p = pp;
+ pp = pp->next;
+ free_type_link (p);
+ };
+#else /* !USE_SIMPLE_MALLOC */
+ for (pp = type_rl_list->next; pp->next; pp = pp->next)
+ /* Nothing */ ;
+ pp->next = free_type_links;
+ free_type_links = type_rl_list;
+ type_rl_list = NULL;
+#endif /* !USE_SIMPLE_MALLOC */
+
+ DBG ("Leaving free_rl_list");
+ return;
+}
+
+/*======================================================================
+ * Here starts the exposed front end functions.
+ *----------------------------------------------------------------------*/
+
+/*======================================================================
+ * fribidi_remove_bidi_marks() removes bidirectional marks, and returns
+ * the new length, updates each of other inputs if not NULL.
+ *----------------------------------------------------------------------*/
+FRIBIDI_ENTRY FriBidiStrIndex
+fribidi_remove_bidi_marks (
+ FriBidiChar *str,
+ FriBidiStrIndex length,
+ FriBidiStrIndex *position_to_this_list,
+ FriBidiStrIndex *position_from_this_list,
+ FriBidiLevel *embedding_level_list
+)
+{
+ FriBidiStrIndex i, j;
+ fribidi_boolean private_from_this = FALSE;
+
+ DBG ("Entering fribidi_remove_bidi_marks");
+
+ /* If to_this is to not null, we must have from_this as well. If it is
+ not given by the caller, we have to make a private instance of it. */
+ if (position_to_this_list && !position_from_this_list)
+ {
+ private_from_this = TRUE;
+ position_from_this_list =
+ (FriBidiStrIndex *) fribidi_malloc (sizeof (FriBidiStrIndex) *
+ length);
+ }
+
+ j = 0;
+ for (i = 0; i < length; i++)
+ if (!FRIBIDI_IS_EXPLICIT (fribidi_get_type (str[i]))
+ && str[i] != FRIBIDI_CHAR_LRM && str[i] != FRIBIDI_CHAR_RLM)
+ {
+ str[j] = str[i];
+ if (embedding_level_list)
+ embedding_level_list[j] = embedding_level_list[i];
+ if (position_from_this_list)
+ position_from_this_list[j] = position_from_this_list[i];
+ j++;
+ }
+
+ /* Convert the from_this list to to_this */
+ if (position_to_this_list)
+ {
+ DBG (" Converting from_this list to to_this");
+ for (i = 0; i < length; i++)
+ position_to_this_list[i] = -1;
+ for (i = 0; i < length; i++)
+ position_to_this_list[position_from_this_list[i]] = i;
+ DBG (" Converting from_this list to to_this, Done");
+ }
+
+ if (private_from_this)
+ fribidi_free (position_from_this_list);
+
+ DBG ("Leaving fribidi_remove_bidi_marks");
+ return j;
+}
+
+
+/*======================================================================
+ * fribidi_log2vis() calls the function_analyse_string() and then
+ * does reordering and fills in the output strings.
+ *----------------------------------------------------------------------*/
+FRIBIDI_ENTRY fribidi_boolean
+fribidi_log2vis (
+ /* input */
+ const FriBidiChar *str,
+ FriBidiStrIndex len,
+ /* input and output */
+ FriBidiCharType *pbase_dir,
+ /* output */
+ FriBidiChar *visual_str,
+ FriBidiStrIndex *position_L_to_V_list,
+ FriBidiStrIndex *position_V_to_L_list,
+ FriBidiLevel *embedding_level_list
+)
+{
+ TypeLink *type_rl_list, *pp = NULL;
+ FriBidiLevel max_level;
+ fribidi_boolean private_V_to_L = FALSE;
+
+ DBG ("Entering fribidi_log2vis()\n");
+
+ if (len == 0)
+ {
+ DBG ("Leaving fribidi_log2vis()\n");
+ return TRUE;
+ }
+
+ /* If l2v is to be calculated we must have v2l as well. If it is not
+ given by the caller, we have to make a private instance of it. */
+ if (position_L_to_V_list && !position_V_to_L_list)
+ {
+ private_V_to_L = TRUE;
+ position_V_to_L_list =
+ (FriBidiStrIndex *) fribidi_malloc (sizeof (FriBidiStrIndex) * len);
+ }
+
+ if (len > FRIBIDI_MAX_STRING_LENGTH && position_V_to_L_list)
+ {
+# if DEBUG
+ MSG2 (FRIBIDI ": cannot handle strings > %ld characters\n",
+ (long) FRIBIDI_MAX_STRING_LENGTH);
+# endif /* DEBUG */
+ return FALSE;
+ }
+ fribidi_analyse_string (str, len, pbase_dir,
+ /* output */
+ &type_rl_list, &max_level);
+
+ /* 7. Reordering resolved levels */
+ DBG ("Reordering resolved levels\n");
+ {
+ FriBidiLevel level_idx;
+ FriBidiStrIndex i;
+
+ /* Set up the ordering array to sorted order */
+ if (position_V_to_L_list)
+ {
+ DBG (" Initialize position_V_to_L_list\n");
+ for (i = 0; i < len; i++)
+ position_V_to_L_list[i] = i;
+ DBG (" Initialize position_V_to_L_list, Done\n");
+ }
+ /* Copy the logical string to the visual */
+ if (visual_str)
+ {
+ DBG (" Initialize visual_str\n");
+ for (i = 0; i < len; i++)
+ visual_str[i] = str[i];
+ visual_str[len] = 0;
+ DBG (" Initialize visual_str, Done\n");
+ }
+
+ /* Assign the embedding level array */
+ if (embedding_level_list)
+ {
+ DBG (" Fill the embedding levels array\n");
+ for (pp = type_rl_list->next; pp->next; pp = pp->next)
+ {
+ FriBidiStrIndex i, pos, len;
+ FriBidiLevel level;
+
+ pos = pp->pos;
+ len = pp->len;
+ level = pp->level;
+ for (i = 0; i < len; i++)
+ embedding_level_list[pos + i] = level;
+ }
+ DBG (" Fill the embedding levels array, Done\n");
+ }
+
+ /* Reorder both the outstring and the order array */
+ if (visual_str || position_V_to_L_list)
+ {
+ if (fribidi_mirroring_status () && visual_str)
+ {
+ /* L4. Mirror all characters that are in odd levels and have mirrors. */
+ DBG (" Mirroring\n");
+ for (pp = type_rl_list->next; pp->next; pp = pp->next)
+ {
+ if (pp->level & 1)
+ {
+ FriBidiStrIndex 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;
+ }
+ }
+ }
+ DBG (" Mirroring, Done\n");
+ }
+
+ if (fribidi_reorder_nsm_status ())
+ {
+ /* L3. Reorder NSMs. */
+ DBG (" Reordering NSM sequences\n");
+ /* We apply this rule before L2, so go backward in odd levels. */
+ for (pp = type_rl_list->next; pp->next; pp = pp->next)
+ {
+ if (pp->level & 1)
+ {
+ FriBidiStrIndex i, seq_end = 0;
+ fribidi_boolean is_nsm_seq;
+
+ is_nsm_seq = FALSE;
+ for (i = RL_POS (pp) + RL_LEN (pp) - 1; i >= RL_POS (pp);
+ i--)
+ {
+ FriBidiCharType this_type;
+
+ this_type = fribidi_get_type (str[i]);
+ if (is_nsm_seq && this_type != FRIBIDI_TYPE_NSM)
+ {
+ if (visual_str)
+ {
+ bidi_string_reverse (visual_str + i,
+ seq_end - i + 1);
+ }
+ if (position_V_to_L_list)
+ {
+ index_array_reverse (position_V_to_L_list + i,
+ seq_end - i + 1);
+ }
+ is_nsm_seq = 0;
+ }
+ else if (!is_nsm_seq && this_type == FRIBIDI_TYPE_NSM)
+ {
+ seq_end = i;
+ is_nsm_seq = 1;
+ }
+ }
+ if (is_nsm_seq)
+ {
+ DBG
+ ("Warning: NSMs at the beggining of run level.\n");
+ }
+ }
+ }
+ DBG (" Reordering NSM sequences, Done\n");
+ }
+
+ /* L2. Reorder. */
+ DBG (" Reordering\n");
+ 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 */
+ FriBidiStrIndex len = RL_LEN (pp), 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_V_to_L_list)
+ index_array_reverse (position_V_to_L_list + pos, len);
+ }
+ }
+ }
+ DBG (" Reordering, Done\n");
+ }
+
+ /* Convert the v2l list to l2v */
+ if (position_L_to_V_list)
+ {
+ DBG (" Converting v2l list to l2v\n");
+ for (i = 0; i < len; i++)
+ position_L_to_V_list[position_V_to_L_list[i]] = i;
+ DBG (" Converting v2l list to l2v, Done\n");
+ }
+ }
+ DBG ("Reordering resolved levels, Done\n");
+
+ if (private_V_to_L)
+ fribidi_free (position_V_to_L_list);
+
+ free_rl_list (type_rl_list);
+
+ DBG ("Leaving fribidi_log2vis()\n");
+ return TRUE;
+
+}
+
+/*======================================================================
+ * fribidi_log2vis_get_embedding_levels() is used in order to just get
+ * the embedding levels.
+ *----------------------------------------------------------------------*/
+FRIBIDI_ENTRY fribidi_boolean
+fribidi_log2vis_get_embedding_levels (
+ /* input */
+ const FriBidiChar *str,
+ FriBidiStrIndex len,
+ /* input and output */
+ FriBidiCharType *pbase_dir,
+ /* output */
+ FriBidiLevel *embedding_level_list
+)
+{
+ TypeLink *type_rl_list, *pp;
+ FriBidiLevel max_level;
+
+ DBG ("Entering fribidi_log2vis_get_embedding_levels()\n");
+
+ if (len == 0)
+ {
+ DBG ("Leaving fribidi_log2vis_get_embedding_levels()\n");
+ return TRUE;
+ }
+
+ fribidi_analyse_string (str, len, pbase_dir,
+ /* output */
+ &type_rl_list, &max_level);
+
+ for (pp = type_rl_list->next; pp->next; pp = pp->next)
+ {
+ FriBidiStrIndex i, pos = RL_POS (pp), len = RL_LEN (pp);
+ FriBidiLevel level = RL_LEVEL (pp);
+ for (i = 0; i < len; i++)
+ embedding_level_list[pos + i] = level;
+ }
+
+ free_rl_list (type_rl_list);
+
+ DBG ("Leaving fribidi_log2vis_get_embedding_levels()\n");
+ return TRUE;
+}
+
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/lib/fribidi-bidi.h b/lib/fribidi-bidi.h
new file mode 100644
index 0000000..abbc59e
--- /dev/null
+++ b/lib/fribidi-bidi.h
@@ -0,0 +1,112 @@
+/* FriBidi
+ * fribidi-bidi.h - bidirectional algorithm
+ *
+ * $Id: fribidi-bidi.h,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/lib/fribidi-bidi.h,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ * Dov Grobgeld, 1999, 2000
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ * Copyright (C) 1999,2000 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+#ifndef _FRIBIDI_BIDI_H
+#define _FRIBIDI_BIDI_H
+
+#include "fribidi-common.h"
+
+#include "fribidi-types.h"
+#include "fribidi-bidi-types.h"
+
+#include "fribidi-begindecls.h"
+
+#define fribidi_log2vis FRIBIDI_NAMESPACE(log2vis)
+/* fribidi_log2vis - get visual string
+ *
+ * This function converts the logical input string to the visual output
+ * strings as specified by the Unicode Bidirectional Algorithm. As a side
+ * effect it also generates mapping lists between the two strings, and the
+ * list of embedding levels as defined by the algorithm. If any of the the
+ * lists are passed as NULL, the list is ignored and not filled.
+ *
+ * Returns: Non-zero if it was successful, or zero if any error occured.
+ */
+FRIBIDI_ENTRY fribidi_boolean fribidi_log2vis (
+ const FriBidiChar *str, /* input logical string */
+ FriBidiStrIndex len, /* input string length */
+ FriBidiCharType *pbase_dir, /* requested and resolved paragraph
+ * base direction */
+ FriBidiChar *visual_str, /* output visual string */
+ FriBidiStrIndex *position_L_to_V_list, /* output mapping from logical to
+ * visual string positions */
+ FriBidiStrIndex *position_V_to_L_list, /* output mapping from visual string
+ * back to the logical string
+ * positions */
+ FriBidiLevel *embedding_level_list /* output list of embedding levels */
+);
+
+#define fribidi_log2vis_get_embedding_levels FRIBIDI_NAMESPACE(log2vis_get_embedding_levels)
+/* fribidi_log2vis_get_embedding_levels - get bidi embedding levels
+ *
+ * This function finds the bidi embedding levels of a single paragraph,
+ * as defined by the Unicode Bidirectional Algorithm.
+ *
+ * Returns: Non-zero if it was successful, or zero if any error occured.
+ */
+FRIBIDI_ENTRY fribidi_boolean fribidi_log2vis_get_embedding_levels (
+ const FriBidiChar *str, /* input logical string */
+ FriBidiStrIndex len, /* input string length */
+ FriBidiCharType *pbase_dir, /* requested and resolved paragraph
+ * base direction */
+ FriBidiLevel *embedding_level_list /* output list of embedding levels */
+);
+
+#define fribidi_remove_bidi_marks FRIBIDI_NAMESPACE(remove_bidi_marks)
+/* fribidi_remove_bidi_marks - remove bidi marks out an string
+ *
+ * This function removes the bidi marks out of an string and the
+ * accompanying lists. If any of the input lists are NULL, the list is
+ * skipped.
+ *
+ * Bugs: It is not clear that if the input string is a logical, or visual
+ * string. It is know to have problems handling position lists. In short,
+ * it should be avoided.
+ *
+ * Returns: New length of the string.
+ */
+FRIBIDI_ENTRY FriBidiStrIndex fribidi_remove_bidi_marks (
+ FriBidiChar *str,
+ FriBidiStrIndex length,
+ FriBidiStrIndex *position_to_this_list,
+ FriBidiStrIndex *position_from_this_list,
+ FriBidiLevel *embedding_level_list
+);
+
+#include "fribidi-enddecls.h"
+
+#endif /* !_FRIBIDI_BIDI_H */
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/lib/fribidi-common.h b/lib/fribidi-common.h
new file mode 100644
index 0000000..0a71af5
--- /dev/null
+++ b/lib/fribidi-common.h
@@ -0,0 +1,83 @@
+/* FriBidi
+ * fribidi-common.h - common include for library headers
+ *
+ * $Id: fribidi-common.h,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/lib/fribidi-common.h,v $
+ *
+ * Author:
+ * Behdad Esfahbod, 2004
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+#ifndef _FRIBIDI_COMMON_H
+#define _FRIBIDI_COMMON_H
+
+#if !DONT_HAVE_FRIBIDI_CONFIG_H
+# include "fribidi-config.h"
+#else /* DONT_HAVE_FRIBIDI_CONFIG_H */
+# define FRIBIDI "fribidi"
+# define FRIBIDI_NAME "fribidi"
+# define FRIBIDI_VERSION "unknown"
+# define FRIBIDI_INTERFACE_VERSION_STRING "unknown"
+#endif /* DONT_HAVE_FRIBIDI_CONFIG_H */
+
+#if HAVE_FRIBIDI_CUSTOM_H
+# include <fribidi-custom.h>
+#endif /* HAVE_FRIBIDI_CUSTOM_H */
+
+/* FRIBIDI_NAMESPACE is a macro used to name library symbols. */
+#ifndef FRIBIDI_NAMESPACE
+# define FRIBIDI_NAMESPACE(SYMBOL) fribidi_##SYMBOL
+#endif /* !FRIBIDI_NAMESPACE */
+
+/* FRIBIDI_ENTRY is a macro used to declare library entry points. */
+#ifndef FRIBIDI_ENTRY
+# ifdef WIN32
+# define FRIBIDI_ENTRY __declspec(dllimport)
+# else /* !WIN32 */
+# define FRIBIDI_ENTRY /* empty */
+# endif /* !WIN32 */
+#endif /* !FRIBIDI_ENTRY */
+
+/* FRIBIDI_BEGIN_DECLS should be used at the beginning of your declarations,
+ * so that C++ compilers don't mangle their names. Use FRIBIDI_END_DECLS at
+ * the end of C declarations. */
+#ifndef FRIBIDI_BEGIN_DECLS
+# ifdef __cplusplus
+# define FRIBIDI_BEGIN_DECLS extern "C" {
+# define FRIBIDI_END_DECLS }
+# else /* !__cplusplus */
+# define FRIBIDI_BEGIN_DECLS /* empty */
+# define FRIBIDI_END_DECLS /* empty */
+# endif /* !__cplusplus */
+#endif /* !FRIBIDI_BEGIN_DECLS */
+
+
+#define fribidi_version_info FRIBIDI_NAMESPACE(version_info)
+/* An string containing the version information of the library. */
+extern const char *fribidi_version_info;
+
+#endif /* !_FRIBIDI_COMMON_H */
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/lib/fribidi-config.h.in b/lib/fribidi-config.h.in
new file mode 100644
index 0000000..2d98aaa
--- /dev/null
+++ b/lib/fribidi-config.h.in
@@ -0,0 +1,22 @@
+#ifndef FRIBIDI_CONFIG_H
+#define FRIBIDI_CONFIG_H
+/* @configure_input@ */
+
+#define FRIBIDI "@PACKAGE@"
+#define FRIBIDI_NAME "@PACKAGE_NAME@"
+#define FRIBIDI_BUGREPORT "@PACKAGE_BUGREPORT@"
+
+#define FRIBIDI_VERSION "@FRIBIDI_VERSION@"
+#define FRIBIDI_MAJOR_VERSION @FRIBIDI_MAJOR_VERSION@
+#define FRIBIDI_MINOR_VERSION @FRIBIDI_MINOR_VERSION@
+#define FRIBIDI_MICRO_VERSION @FRIBIDI_MICRO_VERSION@
+#define FRIBIDI_INTERFACE_VERSION @FRIBIDI_INTERFACE_VERSION@
+#define FRIBIDI_INTERFACE_VERSION_STRING "@FRIBIDI_INTERFACE_VERSION@"
+
+/* Define to 1 if you want charset conversion codes in the library */
+#define FRIBIDI_CHARSETS @FRIBIDI_CHARSETS@
+
+/* Define to 1 if you want to use glib */
+#define FRIBIDI_USE_GLIB @FRIBIDI_USE_GLIB@
+
+#endif /* FRIBIDI_CONFIG_H */
diff --git a/lib/fribidi-enddecls.h b/lib/fribidi-enddecls.h
new file mode 100644
index 0000000..7c35e15
--- /dev/null
+++ b/lib/fribidi-enddecls.h
@@ -0,0 +1 @@
+FRIBIDI_END_DECLS
diff --git a/lib/fribidi-env.c b/lib/fribidi-env.c
new file mode 100644
index 0000000..0a98304
--- /dev/null
+++ b/lib/fribidi-env.c
@@ -0,0 +1,107 @@
+/* FriBidi
+ * fribidi-mirroring.c - get mirrored character
+ *
+ * $Id: fribidi-env.c,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/lib/Attic/fribidi-env.c,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ * Dov Grobgeld, 1999, 2000
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ * Copyright (C) 1999,2000 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+
+#include <fribidi-env.h>
+
+#include "common.h"
+
+#if DEBUG
+static fribidi_boolean flag_debug = FALSE;
+#endif
+
+FRIBIDI_ENTRY fribidi_boolean
+fribidi_debug_status (
+ void
+)
+{
+#if DEBUG
+ return flag_debug;
+#else
+ return 0;
+#endif
+}
+
+FRIBIDI_ENTRY fribidi_boolean
+fribidi_set_debug (
+ fribidi_boolean state
+)
+{
+#if DEBUG
+ return flag_debug = state;
+#else
+ return 0;
+#endif
+}
+
+static fribidi_boolean flag_mirroring = TRUE;
+
+FRIBIDI_ENTRY fribidi_boolean
+fribidi_set_mirroring (
+ fribidi_boolean state
+)
+{
+ return flag_mirroring = state;
+}
+
+FRIBIDI_ENTRY fribidi_boolean
+fribidi_mirroring_status (
+ void
+)
+{
+ return flag_mirroring;
+}
+
+static fribidi_boolean flag_reorder_nsm = FALSE;
+
+FRIBIDI_ENTRY fribidi_boolean
+fribidi_set_reorder_nsm (
+ fribidi_boolean state
+)
+{
+ return flag_reorder_nsm = state;
+}
+
+fribidi_boolean
+fribidi_reorder_nsm_status (
+ void
+)
+{
+ return flag_reorder_nsm;
+}
+
+
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/lib/fribidi-env.h b/lib/fribidi-env.h
new file mode 100644
index 0000000..95722e3
--- /dev/null
+++ b/lib/fribidi-env.h
@@ -0,0 +1,125 @@
+/* FriBidi
+ * fribidi-env.h - state manipulation routines
+ *
+ * $Id: fribidi-env.h,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/lib/Attic/fribidi-env.h,v $
+ *
+ * Author:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ * Dov Grobgeld, 1999, 2000
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ * Copyright (C) 1999,2000 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+#ifndef _FRIBIDI_ENV_H
+#define _FRIBIDI_ENV_H
+
+#include "fribidi-common.h"
+
+#include "fribidi-types.h"
+
+#include "fribidi-begindecls.h"
+
+
+#define fribidi_debug_status FRIBIDI_NAMESPACE(debug_status)
+/* fribidi_debug_status - get current debugging output status */
+FRIBIDI_ENTRY fribidi_boolean fribidi_debug_status (
+ void
+);
+
+#define fribidi_set_debug FRIBIDI_NAMESPACE(set_debug)
+/* fribidi_set_debug - set debugging output on or off
+ *
+ * This function is used to turn debugging output on or off. To
+ * turn it on, the library should have been compiled with debugging
+ * enabled, or it will fail. The debugging output goes to the standard
+ * error output.
+ *
+ * This flag is off by default.
+ *
+ * Returns: the new debugging output status.
+ */
+FRIBIDI_ENTRY fribidi_boolean fribidi_set_debug (
+ fribidi_boolean state /* new state to set */
+);
+
+
+#define fribidi_mirroring_status FRIBIDI_NAMESPACE(mirroring_status)
+/* fribidi_mirroring_status - get current mirroring status */
+FRIBIDI_ENTRY fribidi_boolean fribidi_mirroring_status (
+ void
+);
+
+#define fribidi_set_mirroring FRIBIDI_NAMESPACE(set_mirroring)
+/* fribidi_set_mirroring - set mirroring on or off
+ *
+ * This function is used to turn character mirroring on or off.
+ * Character mirroring is the act of replacing a mirrorable glyph
+ * (character), eg. left paranthesis, with the matching glyph,
+ * eg. right paranthesis, in a right-to-left resolved context.
+ * If your rendering engine does mirroring itself, you may want to
+ * turn it off here.
+ *
+ * This flag is on by default.
+ *
+ * Returns: the new mirroring status.
+ */
+FRIBIDI_ENTRY fribidi_boolean fribidi_set_mirroring (
+ fribidi_boolean state /* new state to set */
+);
+
+
+#define fribidi_reorder_nsm_status FRIBIDI_NAMESPACE(reorder_nsm_status)
+/* fribidi_reorder_nsm_status - get current marks reordering status */
+FRIBIDI_ENTRY fribidi_boolean fribidi_reorder_nsm_status (
+ void
+);
+
+#define fribidi_set_reorder_nsm FRIBIDI_NAMESPACE(set_reorder_nsm)
+/* fribidi_set_reorder_nsm - set marks reordering on or off
+ *
+ * This function is used to turn non-spacing marks reordering on or
+ * off. Reordering non-spacing marks is the act of placing non-spacing
+ * marks (bidi class NSM) after their base character in a right-to-left
+ * resolved context. If your rendering engine expects non-spacing marks
+ * always after the base character in the memory representation of the
+ * visual string, you need this option on. An example of where people
+ * may need it off is when rendering in the console when non-spacing
+ * marks cannot be applied on top of the base character.
+ *
+ * This flag is on by default.
+ *
+ * Returns: the new marks reordering status.
+ */
+FRIBIDI_ENTRY fribidi_boolean fribidi_set_reorder_nsm (
+ fribidi_boolean state /* new state to set */
+);
+
+
+#include "fribidi-enddecls.h"
+
+#endif /* !_FRIBIDI_ENV_H */
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/lib/fribidi-mem.c b/lib/fribidi-mem.c
new file mode 100644
index 0000000..49dd08b
--- /dev/null
+++ b/lib/fribidi-mem.c
@@ -0,0 +1,94 @@
+/* FriBidi
+ * mem.h - memory manipulation routines
+ *
+ * $Id: fribidi-mem.c,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/lib/fribidi-mem.c,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+
+#include "mem.h"
+
+#include "common.h"
+
+#ifndef FRIBIDI_USE_GLIB
+
+struct _FriBidiMemChunk
+{
+ int atom_size;
+ int area_size;
+ int empty_size;
+ void *chunk;
+};
+
+FriBidiMemChunk *
+fribidi_mem_chunk_new (
+ /* input */
+ const char *name,
+ int atom_size,
+ unsigned long area_size,
+ int alloc_type
+)
+{
+ FriBidiMemChunk *m =
+ (FriBidiMemChunk *) fribidi_malloc (sizeof (FriBidiMemChunk));
+
+ m->atom_size = atom_size;
+ m->area_size = area_size;
+ m->empty_size = 0;
+ m->chunk = NULL;
+
+ return m;
+}
+
+void *
+fribidi_mem_chunk_alloc (
+ /* input */
+ FriBidiMemChunk *mem_chunk
+)
+{
+ void *m;
+
+ if (mem_chunk->empty_size < mem_chunk->atom_size)
+ {
+ mem_chunk->chunk = fribidi_malloc (mem_chunk->area_size);
+ mem_chunk->empty_size = mem_chunk->area_size;
+ }
+
+ m = mem_chunk->chunk;
+ mem_chunk->chunk = (void *)
+ ((char *) mem_chunk->chunk + mem_chunk->atom_size);
+ mem_chunk->empty_size -= mem_chunk->atom_size;
+
+ return m;
+}
+
+#endif /* !FRIBIDI_USE_GLIB */
+
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/lib/fribidi-mirroring.c b/lib/fribidi-mirroring.c
new file mode 100644
index 0000000..85df4db
--- /dev/null
+++ b/lib/fribidi-mirroring.c
@@ -0,0 +1,90 @@
+/* FriBidi
+ * fribidi-mirroring.c - get mirrored character
+ *
+ * $Id: fribidi-mirroring.c,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/lib/fribidi-mirroring.c,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ * Dov Grobgeld, 1999, 2000
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ * Copyright (C) 1999,2000 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+
+#include <fribidi-mirroring.h>
+
+#include "mirroring-table.i"
+
+#include "common.h"
+
+FRIBIDI_ENTRY fribidi_boolean
+fribidi_get_mirror_char (
+ /* input */
+ FriBidiChar ch,
+ /* output */
+ FriBidiChar *mirrored_ch
+)
+{
+ int pos, step;
+ fribidi_boolean found;
+
+ 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;
+ }
+ found = FriBidiMirroredChars[pos].ch == ch;
+ if (mirrored_ch)
+ *mirrored_ch = found ? FriBidiMirroredChars[pos].mirrored_ch : ch;
+
+ return found;
+}
+
+/* Editor directions:
+ * Local Variables:
+ * mode:c
+ * c-basic-offset: 2
+ * indent-tabs-mode:t
+ * tab-width: 8
+ * End:
+ * vim: textwidth=78: autoindent: cindent: shiftwidth=2: tabstop=8
+ */
diff --git a/lib/fribidi-mirroring.h b/lib/fribidi-mirroring.h
new file mode 100644
index 0000000..51bde94
--- /dev/null
+++ b/lib/fribidi-mirroring.h
@@ -0,0 +1,67 @@
+/* FriBidi
+ * fribidi-mirroring.h - get mirrored character
+ *
+ * $Id: fribidi-mirroring.h,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/lib/fribidi-mirroring.h,v $
+ *
+ * Author:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+#ifndef _FRIBIDI_MIRRORING_H
+#define _FRIBIDI_MIRRORING_H
+
+#include "fribidi-common.h"
+
+#include "fribidi-types.h"
+
+#include "fribidi-begindecls.h"
+
+#define fribidi_get_mirror_char FRIBIDI_NAMESPACE(get_mirror_char)
+/* fribidi_get_mirror_char - get mirrored character
+ *
+ * This function finds the mirrored of a character. If input character is a
+ * mirroring character, the matching mirrored character is put in the output,
+ * otherwise the input character itself is put.
+ *
+ * Returns: if the character has a mirror or not.
+ */
+FRIBIDI_ENTRY fribidi_boolean fribidi_get_mirror_char (
+ FriBidiChar ch, /* input character */
+ FriBidiChar *mirrored_ch /* output mirrored character */
+);
+
+#include "fribidi-enddecls.h"
+
+#endif /* !_FRIBIDI_MIRRORING_H */
+/* Editor directions:
+ * Local Variables:
+ * mode:c
+ * c-basic-offset: 2
+ * indent-tabs-mode:t
+ * tab-width: 8
+ * End:
+ * vim: textwidth=78: autoindent: cindent: shiftwidth=2: tabstop=8
+ */
diff --git a/lib/fribidi-types.h b/lib/fribidi-types.h
new file mode 100644
index 0000000..aad8320
--- /dev/null
+++ b/lib/fribidi-types.h
@@ -0,0 +1,143 @@
+/* FriBidi
+ * fribidi-types.h - define data types for the rest of the library
+ *
+ * $Id: fribidi-types.h,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/lib/fribidi-types.h,v $
+ *
+ * Author:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc.
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+#ifndef _FRIBIDI_TYPES_H
+#define _FRIBIDI_TYPES_H
+
+#include "fribidi-common.h"
+
+#include "fribidi-begindecls.h"
+
+
+#if !FRIBIDI_USE_GLIB
+# if HAVE_INTTYPES_H
+# if !__C2MAN__
+# include <inttypes.h>
+# endif /* !__C2MAN__ */
+# define FRIBIDI_UINT8_LOCAL uint8_t
+# define FRIBIDI_UINT16_LOCAL uint16_t
+# define FRIBIDI_UINT32_LOCAL uint32_t
+# else /* !HAVE_INTTYPES_H */
+# if HAVE_STDINT_H
+# if !__C2MAN__
+# include <stdint.h>
+# endif /* !__C2MAN__ */
+# define FRIBIDI_UINT8_LOCAL uint8_t
+# define FRIBIDI_UINT16_LOCAL uint16_t
+# define FRIBIDI_UINT32_LOCAL uint32_t
+# else /* !HAVE_STDINT_H */
+# define FRIBIDI_UINT8_LOCAL unsigned char
+# if SIZEOF_SHORT >= 2
+# define FRIBIDI_UINT16_LOCAL unsigned short
+# else /* SIZEOF_SHORT < 2 */
+# define FRIBIDI_UINT16_LOCAL unsigned int
+# endif /* SIZEOF_SHORT < 2 */
+# if SIZEOF_INT >= 4
+# define FRIBIDI_UINT32_LOCAL unsigned int
+# else /* SIZEOF_INT < 4 */
+# define FRIBIDI_UINT32_LOCAL unsigned long
+# endif /* SIZEOF_INT < 4 */
+# endif /* !HAVE_STDINT_H */
+# endif /* !HAVE_INTTYPES_H */
+# if HAVE_STDBOOL_H
+# define FRIBIDI_BOOLEAN_LOCAL bool
+# else /* !HAVE_STDBOOL_H */
+# define FRIBIDI_BOOLEAN_LOCAL int
+# endif /* !HAVE_STDBOOL_H */
+# if SIZEOF_WCHAR_T >= 4
+# if !__C2MAN__
+# if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+# else /* !STDC_HEADERS */
+# if HAVE_STDLIB_H
+# include <stdlib.h>
+# endif /* !HAVE_STDLIB_H */
+# endif /* !STDC_HEADERS */
+# endif /* !__C2MAN__ */
+# define FRIBIDI_UNICHAR_LOCAL wchar_t
+# else /* SIZEOF_WCHAR_T < 4 */
+# define FRIBIDI_UNICHAR_LOCAL fribidi_uint32
+# endif /* SIZEOF_WCHAR_T < 4 */
+#else /* FRIBIDI_USE_GLIB */
+# if !__C2MAN__
+# include <glib/gtypes.h>
+# include <glib/gunicode.h>
+# endif /* !__C2MAN__ */
+# define FRIBIDI_UINT8_LOCAL guint8
+# define FRIBIDI_UINT16_LOCAL guint16
+# define FRIBIDI_UINT32_LOCAL guint32
+# define FRIBIDI_BOOLEAN_LOCAL gboolean
+# define FRIBIDI_UNICHAR_LOCAL gunichar
+#endif /* FRIBIDI_USE_GLIB */
+
+#ifndef FRIBIDI_UINT8
+# define FRIBIDI_UINT8 FRIBIDI_UINT8_LOCAL
+#endif /* !FRIBIDI_UINT8 */
+#ifndef FRIBIDI_UINT16
+# define FRIBIDI_UINT16 FRIBIDI_UINT16_LOCAL
+#endif /* !FRIBIDI_UINT16 */
+#ifndef FRIBIDI_UINT32
+# define FRIBIDI_UINT32 FRIBIDI_UINT32_LOCAL
+#endif /* !FRIBIDI_UINT32 */
+#ifndef FRIBIDI_BOOLEAN
+# define FRIBIDI_BOOLEAN FRIBIDI_BOOLEAN_LOCAL
+#endif /* !FRIBIDI_BOOLEAN */
+#ifndef FRIBIDI_UNICHAR
+# define FRIBIDI_UNICHAR FRIBIDI_UNICHAR_LOCAL
+#endif /* !FRIBIDI_UNICHAR */
+#ifndef FRIBIDI_STR_INDEX
+# define FRIBIDI_STR_INDEX int
+#endif /* FRIBIDI_STR_INDEX */
+
+
+typedef FRIBIDI_UINT8 fribidi_uint8;
+typedef FRIBIDI_UINT16 fribidi_uint16;
+typedef FRIBIDI_UINT32 fribidi_uint32;
+typedef FRIBIDI_BOOLEAN fribidi_boolean;
+
+typedef FRIBIDI_UNICHAR FriBidiChar;
+typedef FRIBIDI_STR_INDEX FriBidiStrIndex;
+
+
+#ifndef FRIBIDI_MAX_STRING_LENGTH
+# define FRIBIDI_MAX_STRING_LENGTH (sizeof (FriBidiStrIndex) == 2 ? \
+ 0x7FFE : (sizeof (FriBidiStrIndex) == 1 ? \
+ 0x7E : 0x8FFFFFFEL))
+#endif
+
+#include "fribidi-enddecls.h"
+
+#endif /* !_FRIBIDI_TYPES_H */
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/lib/fribidi-unicode-version.h b/lib/fribidi-unicode-version.h
new file mode 100644
index 0000000..9e8ab1a
--- /dev/null
+++ b/lib/fribidi-unicode-version.h
@@ -0,0 +1,4 @@
+#define FRIBIDI_UNICODE_VERSION "4.0.1"
+#define FRIBIDI_UNICODE_MAJOR_VERSION 4
+#define FRIBIDI_UNICODE_MINOR_VERSION 0
+#define FRIBIDI_UNICODE_MICRO_VERSION 1
diff --git a/lib/fribidi-unicode.h b/lib/fribidi-unicode.h
new file mode 100644
index 0000000..18156b9
--- /dev/null
+++ b/lib/fribidi-unicode.h
@@ -0,0 +1,101 @@
+/* FriBidi
+ * fribidi-unicode.h - general Unicode definitions
+ *
+ * $Id: fribidi-unicode.h,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/lib/fribidi-unicode.h,v $
+ *
+ * Author:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+#ifndef _FRIBIDI_UNICODE_H
+#define _FRIBIDI_UNICODE_H
+
+#include "fribidi-common.h"
+
+#include "fribidi-types.h"
+
+#include "fribidi-begindecls.h"
+
+/* We do not support surrogates yet */
+#define FRIBIDI_UNICODE_CHARS (sizeof(FriBidiChar) >= 4 ? 0x110000 : 0xFFFE)
+/* Unicode version - FRIBIDI_UNICODE_VERSION */
+#if !DONT_HAVE_FRIBIDI_UNICODE_VERSION_H
+# include "fribidi-unicode-version.h"
+#else /* DONT_HAVE_FRIBIDI_UNICODE_VERSION_H */
+# define FRIBIDI_UNICODE_VERSION "unknown"
+#endif /* DONT_HAVE_FRIBIDI_UNICODE_VERSION_H */
+
+/* The maximum embedding level value assigned by explicit marks */
+#define FRIBIDI_BIDI_MAX_EXPLICIT_LEVEL 61
+/* The maximum *number* of different resolved embedding levels: 0-62 */
+#define FRIBIDI_BIDI_MAX_RESOLVED_LEVELS 63
+
+/* Bidirectional marks */
+#define FRIBIDI_CHAR_LRM 0x200E
+#define FRIBIDI_CHAR_RLM 0x200F
+#define FRIBIDI_CHAR_LRE 0x202A
+#define FRIBIDI_CHAR_RLE 0x202B
+#define FRIBIDI_CHAR_PDF 0x202C
+#define FRIBIDI_CHAR_LRO 0x202D
+#define FRIBIDI_CHAR_RLO 0x202E
+
+/* Line and Paragraph Separators */
+#define FRIBIDI_CHAR_LS 0x2028
+#define FRIBIDI_CHAR_PS 0x2029
+
+/* Arabic Joining marks */
+#define FRIBIDI_CHAR_ZWNJ 0x200C
+#define FRIBIDI_CHAR_ZWJ 0x200D
+
+/* Hebrew and Arabic */
+#define FRIBIDI_CHAR_HEBREW_ALEF 0x05D0
+#define FRIBIDI_CHAR_ARABIC_ALEF 0x0627
+#define FRIBIDI_CHAR_ARABIC_ZERO 0x0660
+#define FRIBIDI_CHAR_PERSIAN_ZERO 0x06F0
+
+/* These are here just for compatibility. */
+#define UNI_MAX_BIDI_LEVEL FRIBIDI_BIDI_MAX_EXPLICIT_LEVEL
+#define UNI_LRM FRIBIDI_CHAR_LRM
+#define UNI_RLM FRIBIDI_CHAR_RLM
+#define UNI_LRE FRIBIDI_CHAR_LRE
+#define UNI_RLE FRIBIDI_CHAR_RLE
+#define UNI_LRO FRIBIDI_CHAR_LRO
+#define UNI_RLO FRIBIDI_CHAR_RLO
+#define UNI_LS FRIBIDI_CHAR_LS
+#define UNI_PS FRIBIDI_CHAR_PS
+#define UNI_ZWNJ FRIBIDI_CHAR_ZWNJ
+#define UNI_ZWJ FRIBIDI_CHAR_ZWJ
+#define UNI_HEBREW_ALEF FRIBIDI_CHAR_HEBREW_ALEF
+#define UNI_ARABIC_ALEF FRIBIDI_CHAR_ARABIC_ALEF
+#define UNI_ARABIC_ZERO FRIBIDI_CHAR_ARABIC_ZERO
+#define UNI_FARSI_ZERO FRIBIDI_CHAR_PERSIAN_ZERO
+
+#include "fribidi-enddecls.h"
+
+#endif /* !_FRIBIDI_UNICODE_H */
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/lib/fribidi.c b/lib/fribidi.c
new file mode 100644
index 0000000..8197137
--- /dev/null
+++ b/lib/fribidi.c
@@ -0,0 +1,68 @@
+/* FriBidi
+ * fribidi.c - Unicode bidirectional and Arabic joining algorithms
+ *
+ * $Id: fribidi.c,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/lib/fribidi.c,v $
+ *
+ * Authors:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ * Dov Grobgeld, 1999, 2000
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ * Copyright (C) 1999,2000 Dov Grobgeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+
+#include <fribidi.h>
+
+#include "common.h"
+
+const char *fribidi_version_info =
+ "(" FRIBIDI_NAME ") " FRIBIDI_VERSION "\n"
+ "Interface version " FRIBIDI_INTERFACE_VERSION_STRING ",\n"
+ "Unicode version " FRIBIDI_UNICODE_VERSION ",\n" "Configure options"
+#if DEBUG
+ " --enable-debug"
+#endif /* DEBUG */
+#if USE_SIMPLE_MALLOC
+ " --enable-malloc"
+#endif /* USE_SIMPLE_MALLOC */
+#if !FRIBIDI_CHARSETS
+ " --disable-charsets"
+#endif /* !FRIBIDI_CHARSETS */
+#if FRIBIDI_USE_GLIB
+ " --with-glib"
+#else /* !FRIBIDI_USE_GLIB */
+ " --without-glib"
+#endif /* !FRIBIDI_USE_GLIB */
+ ".\n\n"
+ "Copyright (C) 2004 Sharif FarsiWeb, Inc.\n"
+ FRIBIDI_NAME " comes with ABSOLUTELY NO WARRANTY.\n"
+ "You may redistribute copies of " FRIBIDI_NAME " under the terms of\n"
+ "the GNU Lesser General Public License.\n"
+ "For more information about these matters, see the file named COPYING.\n"
+ "Written by Behdad Esfahbod.\n";
+
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/lib/fribidi.h b/lib/fribidi.h
new file mode 100644
index 0000000..cbc3a23
--- /dev/null
+++ b/lib/fribidi.h
@@ -0,0 +1,48 @@
+/* FriBidi
+ * fribidi.h - Unicode bidirectional and Arabic joining algorithms
+ *
+ * $Id: fribidi.h,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/lib/fribidi.h,v $
+ *
+ * Author:
+ * Behdad Esfahbod, 2004
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+#ifndef _FRIBIDI_H
+#define _FRIBIDI_H
+
+#include "fribidi-bidi.h"
+#include "fribidi-bidi-type.h"
+#include "fribidi-env.h"
+#include "fribidi-mirroring.h"
+#include "fribidi-types.h"
+#include "fribidi-unicode.h"
+#if FRIBIDI_CHARSETS
+# include "fribidi-char-sets.h"
+#endif /* FRIBIDI_CHARSETS */
+
+#endif /* !_FRIBIDI_H */
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/lib/mem.h b/lib/mem.h
new file mode 100644
index 0000000..80a5a2d
--- /dev/null
+++ b/lib/mem.h
@@ -0,0 +1,90 @@
+/* FriBidi
+ * mem.h - memory manipulation routines
+ *
+ * $Id: mem.h,v 1.1 2004-04-25 18:47:57 behdad Exp $
+ * $Author: behdad $
+ * $Date: 2004-04-25 18:47:57 $
+ * $Revision: 1.1 $
+ * $Source: /home/behdad/src/fdo/fribidi/togit/git/../fribidi/fribidi2/lib/mem.h,v $
+ *
+ * Author:
+ * Behdad Esfahbod, 2001, 2002, 2004
+ *
+ * Copyright (C) 2004 Sharif FarsiWeb, Inc
+ * Copyright (C) 2001,2002 Behdad Esfahbod
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ *
+ * For licensing issues, contact <license@farsiweb.info>.
+ */
+#ifndef _MEM_H
+#define _MEM_H
+
+#include <fribidi-common.h>
+
+#include <fribidi-types.h>
+
+#include "common.h"
+
+#include <fribidi-begindecls.h>
+
+#if !FRIBIDI_USE_GLIB
+
+typedef struct _FriBidiMemChunk FriBidiMemChunk;
+
+#define FRIBIDI_ALLOC_ONLY 1
+
+#define fribidi_mem_chunk_new FRIBIDI_NAMESPACE(mem_chunk_new)
+FriBidiMemChunk *fribidi_mem_chunk_new (
+ const char *name,
+ int atom_size,
+ unsigned long area_size,
+ int alloc_type
+);
+
+#define fribidi_mem_chunk_alloc FRIBIDI_NAMESPACE(mem_chunk_alloc)
+void *fribidi_mem_chunk_alloc (
+ FriBidiMemChunk *mem_chunk
+);
+
+#else /* FRIBIDI_USE_GLIB */
+
+#if !__C2MAN__
+# include <glib/gmem.h>
+#endif /* !__C2MAN__ */
+
+#define FriBidiMemChunk GMemChunk
+#define FRIBIDI_ALLOC_ONLY G_ALLOC_ONLY
+#define fribidi_mem_chunk_new g_mem_chunk_new
+#define fribidi_mem_chunk_alloc g_mem_chunk_alloc
+
+#endif /* FRIBIDI_USE_GLIB */
+
+#define fribidi_chunk_new(type, chunk) ( \
+ (type *) fribidi_mem_chunk_alloc (chunk) \
+ )
+
+#define fribidi_chunk_new_for_type(type) ( \
+ fribidi_mem_chunk_new(FRIBIDI, sizeof (type), \
+ FRIBIDI_CHUNK_SIZE, FRIBIDI_ALLOC_ONLY) \
+ )
+
+#include <fribidi-enddecls.h>
+
+#endif /* !_MEM_H */
+/* Editor directions:
+ * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
+ */
diff --git a/lib/mirroring-table.i b/lib/mirroring-table.i
new file mode 100644
index 0000000..6e47900
--- /dev/null
+++ b/lib/mirroring-table.i
@@ -0,0 +1,358 @@
+/*
+ This file was automatically created from BidiMirroring.txt, version 3.2.0
+ by fribidi_create_mirroring
+*/
+
+#ifndef FRIBIDI_TAB_MIRRORING_I
+#define FRIBIDI_TAB_MIRRORING_I
+
+#include <fribidi-types.h>
+
+/*
+ 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, we'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.
+*/
+
+/* *INDENT-OFF* */
+
+static const 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},
+ {0x2208, 0x220B},
+ {0x2209, 0x220C},
+ {0x220A, 0x220D},
+ {0x220B, 0x2208},
+ {0x220C, 0x2209},
+ {0x220D, 0x220A},
+ {0x2215, 0x29F5},
+ {0x223C, 0x223D},
+ {0x223D, 0x223C},
+ {0x2243, 0x22CD},
+ {0x2252, 0x2253},
+ {0x2253, 0x2252},
+ {0x2254, 0x2255},
+ {0x2255, 0x2254},
+ {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},
+ {0x2276, 0x2277},
+ {0x2277, 0x2276},
+ {0x2278, 0x2279},
+ {0x2279, 0x2278},
+ {0x227A, 0x227B},
+ {0x227B, 0x227A},
+ {0x227C, 0x227D},
+ {0x227D, 0x227C},
+ {0x227E, 0x227F},
+ {0x227F, 0x227E},
+ {0x2280, 0x2281},
+ {0x2281, 0x2280},
+ {0x2282, 0x2283},
+ {0x2283, 0x2282},
+ {0x2284, 0x2285},
+ {0x2285, 0x2284},
+ {0x2286, 0x2287},
+ {0x2287, 0x2286},
+ {0x2288, 0x2289},
+ {0x2289, 0x2288},
+ {0x228A, 0x228B},
+ {0x228B, 0x228A},
+ {0x228F, 0x2290},
+ {0x2290, 0x228F},
+ {0x2291, 0x2292},
+ {0x2292, 0x2291},
+ {0x2298, 0x29B8},
+ {0x22A2, 0x22A3},
+ {0x22A3, 0x22A2},
+ {0x22A6, 0x2ADE},
+ {0x22A8, 0x2AE4},
+ {0x22A9, 0x2AE3},
+ {0x22AB, 0x2AE5},
+ {0x22B0, 0x22B1},
+ {0x22B1, 0x22B0},
+ {0x22B2, 0x22B3},
+ {0x22B3, 0x22B2},
+ {0x22B4, 0x22B5},
+ {0x22B5, 0x22B4},
+ {0x22B6, 0x22B7},
+ {0x22B7, 0x22B6},
+ {0x22C9, 0x22CA},
+ {0x22CA, 0x22C9},
+ {0x22CB, 0x22CC},
+ {0x22CC, 0x22CB},
+ {0x22CD, 0x2243},
+ {0x22D0, 0x22D1},
+ {0x22D1, 0x22D0},
+ {0x22D6, 0x22D7},
+ {0x22D7, 0x22D6},
+ {0x22D8, 0x22D9},
+ {0x22D9, 0x22D8},
+ {0x22DA, 0x22DB},
+ {0x22DB, 0x22DA},
+ {0x22DC, 0x22DD},
+ {0x22DD, 0x22DC},
+ {0x22DE, 0x22DF},
+ {0x22DF, 0x22DE},
+ {0x22E0, 0x22E1},
+ {0x22E1, 0x22E0},
+ {0x22E2, 0x22E3},
+ {0x22E3, 0x22E2},
+ {0x22E4, 0x22E5},
+ {0x22E5, 0x22E4},
+ {0x22E6, 0x22E7},
+ {0x22E7, 0x22E6},
+ {0x22E8, 0x22E9},
+ {0x22E9, 0x22E8},
+ {0x22EA, 0x22EB},
+ {0x22EB, 0x22EA},
+ {0x22EC, 0x22ED},
+ {0x22ED, 0x22EC},
+ {0x22F0, 0x22F1},
+ {0x22F1, 0x22F0},
+ {0x22F2, 0x22FA},
+ {0x22F3, 0x22FB},
+ {0x22F4, 0x22FC},
+ {0x22F6, 0x22FD},
+ {0x22F7, 0x22FE},
+ {0x22FA, 0x22F2},
+ {0x22FB, 0x22F3},
+ {0x22FC, 0x22F4},
+ {0x22FD, 0x22F6},
+ {0x22FE, 0x22F7},
+ {0x2308, 0x2309},
+ {0x2309, 0x2308},
+ {0x230A, 0x230B},
+ {0x230B, 0x230A},
+ {0x2329, 0x232A},
+ {0x232A, 0x2329},
+ {0x2768, 0x2769},
+ {0x2769, 0x2768},
+ {0x276A, 0x276B},
+ {0x276B, 0x276A},
+ {0x276C, 0x276D},
+ {0x276D, 0x276C},
+ {0x276E, 0x276F},
+ {0x276F, 0x276E},
+ {0x2770, 0x2771},
+ {0x2771, 0x2770},
+ {0x2772, 0x2773},
+ {0x2773, 0x2772},
+ {0x2774, 0x2775},
+ {0x2775, 0x2774},
+ {0x27D5, 0x27D6},
+ {0x27D6, 0x27D5},
+ {0x27DD, 0x27DE},
+ {0x27DE, 0x27DD},
+ {0x27E2, 0x27E3},
+ {0x27E3, 0x27E2},
+ {0x27E4, 0x27E5},
+ {0x27E5, 0x27E4},
+ {0x27E6, 0x27E7},
+ {0x27E7, 0x27E6},
+ {0x27E8, 0x27E9},
+ {0x27E9, 0x27E8},
+ {0x27EA, 0x27EB},
+ {0x27EB, 0x27EA},
+ {0x2983, 0x2984},
+ {0x2984, 0x2983},
+ {0x2985, 0x2986},
+ {0x2986, 0x2985},
+ {0x2987, 0x2988},
+ {0x2988, 0x2987},
+ {0x2989, 0x298A},
+ {0x298A, 0x2989},
+ {0x298B, 0x298C},
+ {0x298C, 0x298B},
+ {0x298D, 0x2990},
+ {0x298E, 0x298F},
+ {0x298F, 0x298E},
+ {0x2990, 0x298D},
+ {0x2991, 0x2992},
+ {0x2992, 0x2991},
+ {0x2993, 0x2994},
+ {0x2994, 0x2993},
+ {0x2995, 0x2996},
+ {0x2996, 0x2995},
+ {0x2997, 0x2998},
+ {0x2998, 0x2997},
+ {0x29B8, 0x2298},
+ {0x29C0, 0x29C1},
+ {0x29C1, 0x29C0},
+ {0x29C4, 0x29C5},
+ {0x29C5, 0x29C4},
+ {0x29CF, 0x29D0},
+ {0x29D0, 0x29CF},
+ {0x29D1, 0x29D2},
+ {0x29D2, 0x29D1},
+ {0x29D4, 0x29D5},
+ {0x29D5, 0x29D4},
+ {0x29D8, 0x29D9},
+ {0x29D9, 0x29D8},
+ {0x29DA, 0x29DB},
+ {0x29DB, 0x29DA},
+ {0x29F5, 0x2215},
+ {0x29F8, 0x29F9},
+ {0x29F9, 0x29F8},
+ {0x29FC, 0x29FD},
+ {0x29FD, 0x29FC},
+ {0x2A2B, 0x2A2C},
+ {0x2A2C, 0x2A2D},
+ {0x2A2D, 0x2A2E},
+ {0x2A2E, 0x2A2D},
+ {0x2A34, 0x2A35},
+ {0x2A35, 0x2A34},
+ {0x2A3C, 0x2A3D},
+ {0x2A3D, 0x2A3C},
+ {0x2A64, 0x2A65},
+ {0x2A65, 0x2A64},
+ {0x2A79, 0x2A7A},
+ {0x2A7A, 0x2A79},
+ {0x2A7D, 0x2A7E},
+ {0x2A7E, 0x2A7D},
+ {0x2A7F, 0x2A80},
+ {0x2A80, 0x2A7F},
+ {0x2A81, 0x2A82},
+ {0x2A82, 0x2A81},
+ {0x2A83, 0x2A84},
+ {0x2A84, 0x2A83},
+ {0x2A8B, 0x2A8C},
+ {0x2A8C, 0x2A8B},
+ {0x2A91, 0x2A92},
+ {0x2A92, 0x2A91},
+ {0x2A93, 0x2A94},
+ {0x2A94, 0x2A93},
+ {0x2A95, 0x2A96},
+ {0x2A96, 0x2A95},
+ {0x2A97, 0x2A98},
+ {0x2A98, 0x2A97},
+ {0x2A99, 0x2A9A},
+ {0x2A9A, 0x2A99},
+ {0x2A9B, 0x2A9C},
+ {0x2A9C, 0x2A9B},
+ {0x2AA1, 0x2AA2},
+ {0x2AA2, 0x2AA1},
+ {0x2AA6, 0x2AA7},
+ {0x2AA7, 0x2AA6},
+ {0x2AA8, 0x2AA9},
+ {0x2AA9, 0x2AA8},
+ {0x2AAA, 0x2AAB},
+ {0x2AAB, 0x2AAA},
+ {0x2AAC, 0x2AAD},
+ {0x2AAD, 0x2AAC},
+ {0x2AAF, 0x2AB0},
+ {0x2AB0, 0x2AAF},
+ {0x2AB3, 0x2AB4},
+ {0x2AB4, 0x2AB3},
+ {0x2ABB, 0x2ABC},
+ {0x2ABC, 0x2ABB},
+ {0x2ABD, 0x2ABE},
+ {0x2ABE, 0x2ABD},
+ {0x2ABF, 0x2AC0},
+ {0x2AC0, 0x2ABF},
+ {0x2AC1, 0x2AC2},
+ {0x2AC2, 0x2AC1},
+ {0x2AC3, 0x2AC4},
+ {0x2AC4, 0x2AC3},
+ {0x2AC5, 0x2AC6},
+ {0x2AC6, 0x2AC5},
+ {0x2ACD, 0x2ACE},
+ {0x2ACE, 0x2ACD},
+ {0x2ACF, 0x2AD0},
+ {0x2AD0, 0x2ACF},
+ {0x2AD1, 0x2AD2},
+ {0x2AD2, 0x2AD1},
+ {0x2AD3, 0x2AD4},
+ {0x2AD4, 0x2AD3},
+ {0x2AD5, 0x2AD6},
+ {0x2AD6, 0x2AD5},
+ {0x2ADE, 0x22A6},
+ {0x2AE3, 0x22A9},
+ {0x2AE4, 0x22A8},
+ {0x2AE5, 0x22AB},
+ {0x2AEC, 0x2AED},
+ {0x2AED, 0x2AEC},
+ {0x2AF7, 0x2AF8},
+ {0x2AF8, 0x2AF7},
+ {0x2AF9, 0x2AFA},
+ {0x2AFA, 0x2AF9},
+ {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},
+ {0xFF08, 0xFF09},
+ {0xFF09, 0xFF08},
+ {0xFF1C, 0xFF1E},
+ {0xFF1E, 0xFF1C},
+ {0xFF3B, 0xFF3D},
+ {0xFF3D, 0xFF3B},
+ {0xFF5B, 0xFF5D},
+ {0xFF5D, 0xFF5B},
+ {0xFF5F, 0xFF60},
+ {0xFF60, 0xFF5F},
+ {0xFF62, 0xFF63},
+ {0xFF63, 0xFF62},
+} ;
+
+/* *INDENT-ON* */
+
+static const int nFriBidiMirroredChars = 318;
+
+
+#endif /* FRIBIDI_TAB_MIRRORING_I */
diff --git a/test/Makefile.am b/test/Makefile.am
new file mode 100644
index 0000000..565a5b2
--- /dev/null
+++ b/test/Makefile.am
@@ -0,0 +1,33 @@
+
+TESTS = run.tests
+
+check_SCRIPTS = run.tests
+
+TEST_DATAS = \
+ test_CapRTL_explicit.input \
+ test_CapRTL_explicit.reference \
+ test_CapRTL_implicit.input \
+ test_CapRTL_implicit.reference \
+ test_ISO8859-8_hebrew.input \
+ test_ISO8859-8_hebrew.reference \
+ test_UTF-8_persian.input \
+ test_UTF-8_persian.reference
+
+EXTRA_DIST = \
+ $(TESTS) \
+ $(TEST_DATAS)
+
+test_%.reference: test_%.input
+ testcase="$@" && \
+ charset="`echo "$@" | $(SED) 's/_[^_]*$$//;s/.*_//'`" && \
+ "$(top_builddir)"/src/fribidi --test --charset "$$charset" "$<" > "$@" || \
+ ($(RM) "$@"; false)
+
+test.reference:
+ for testcase in "$(srcdir)"/test_*.input; do \
+ test="`echo "$$testcase" \
+ | $(SED) 's/\.input$$/.reference/i; s|.*/||;'`" && \
+ $(MAKE) "tests/$$test" || \
+ exit 1; \
+ done
+
diff --git a/test/run.tests b/test/run.tests
new file mode 100755
index 0000000..c8bd759
--- /dev/null
+++ b/test/run.tests
@@ -0,0 +1,74 @@
+#!/bin/bash
+# run.tests - Check that the algorithm does what it is supposed to
+# Copyright (C) 1999,2000 Dov Grobgeld, and
+# Copyright (C) 2001,2002 Behdad Esfahbod.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this library, in a file named COPYING; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+# Boston, MA 02111-1307, USA
+#
+# For licensing issues, contact <dov@imagic.weizmann.ac.il> and
+# <fwpg@sharif.edu>.
+
+if test -z "$top_builddir"; then
+ top_builddir=..
+fi
+
+if test -z "$srcdir"; then
+ srcdir=.
+fi
+
+test "${VERBOSE+set}" != "set" && VERBOSE=yes
+
+# See how redirections should work.
+if test -z "$VERBOSE"; then
+ exec > /dev/null 2>&1
+fi
+
+if ! test -f "$top_builddir/bin/fribidi"; then
+ echo "run.tests: you must make fribidi first"
+ exit 1
+fi
+
+TEST () {
+ testcase="$1"
+ test="${testcase##*/}"
+ test="${test%.input}"
+ charset="${testcase#*_}"
+ charset="${charset%%_*}"
+ echo -n "=== $test === "
+ if ! "$top_builddir/bin/fribidi" --charset "$charset" </dev/null >/dev/null 2>&1; then
+ echo " [Character set not supported]"
+ return 0
+ fi
+ "$top_builddir/bin/fribidi" --test --charset "$charset" "$testcase" > "$test.output"
+
+ reference="${testcase%.input}.reference";
+ test -f "$reference" || reference="tests/${reference##*/}"
+ if diff -U 0 "$test.output" "$reference"; then
+ rm "$test.output"
+ echo " [Passed]"
+ return 0
+ else
+ echo " [Failed]"
+ return 1
+ fi
+}
+
+retval=0
+for testcase in "$srcdir"/test_*.input; do
+ TEST "$testcase" || retval=1
+done
+
+exit $retval
diff --git a/test/test_CapRTL_explicit.input b/test/test_CapRTL_explicit.input
new file mode 100644
index 0000000..1cbfac2
--- /dev/null
+++ b/test/test_CapRTL_explicit.input
@@ -0,0 +1,13 @@
+this is _LJUST_o
+a _lsimple _RteST_o th_oat
+HAS A _LPDF missing
+AnD hOw_L AbOuT, 123,987 tHiS_o
+a GOOD - _L_oTEST.
+here_L is_o_o_o _R a good one_o
+And _r 123,987_LTHE_R next_o oNE:
+_R_r and the last _LONE_o IS
+THE _rbest _lONE and
+A REAL BIG_l_o BUG!
+a _L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_Rbug
+AN ARABIC _l_o 123-456 NICE ONE!
+AN ARABIC _l _o 123-456 PAIR
diff --git a/test/test_CapRTL_explicit.reference b/test/test_CapRTL_explicit.reference
new file mode 100644
index 0000000..37fb904
--- /dev/null
+++ b/test/test_CapRTL_explicit.reference
@@ -0,0 +1,13 @@
+this is _LJUST_o => this is JUST
+a _lsimple _RteST_o th_oat => a simple TSet that
+HAS A _LPDF missing => PDF missing A SAH
+AnD hOw_L AbOuT, 123,987 tHiS_o => w AbOuT, 123,987 tHiSOh DnA
+a GOOD - _L_oTEST. => a TSET - DOOG.
+here_L is_o_o_o _R a good one_o => here is eno doog a
+And _r 123,987_LTHE_R next_o oNE: => 987THEtxen oNE:,123 ndA
+_R_r and the last _LONE_o IS => SI and the last ONE
+THE _rbest _lONE and => best ENO and EHT
+A REAL BIG_l_o BUG! => !GUB GIB LAER A
+a _L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_L_Rbug => a gub
+AN ARABIC _l_o 123-456 NICE ONE! => !ENO ECIN 456-123 CIBARA NA
+AN ARABIC _l _o 123-456 PAIR => RIAP 123-456 CIBARA NA
diff --git a/test/test_CapRTL_implicit.input b/test/test_CapRTL_implicit.input
new file mode 100644
index 0000000..cd5fadf
--- /dev/null
+++ b/test/test_CapRTL_implicit.input
@@ -0,0 +1,26 @@
+car is THE CAR in arabic
+CAR IS the car IN ENGLISH
+he said "IT IS 123, 456, OK"
+he said "IT IS (123, 456), OK"
+he said "IT IS 123,456, OK"
+he said "IT IS (123,456), OK"
+HE SAID "it is 123, 456, ok"
+he said "IT IS 789, 678, OK"
+he said "IT IS (789, 678), OK"
+he said "IT IS 789,678, OK"
+he said "IT IS (789,678), OK"
+HE SAID "it is 789, 678, ok"
+<H123>shalom</H123>
+<h123>SALAAM</h123>
+HE SAID "it is a car!" AND RAN
+HE SAID "it is a car!_>" AND RAN
+-2 CELSIUS IS COLD
+SOLVE 1*5 1-5 1/5 1+5
+THE RANGE IS 2.5..5
+IOU $10
+CHANGE -10%
+-10% CHANGE
+A TEST FOR WEAK TYPES: 123+,456
+ANOTHER FOR WEAK TYPES: A123,456
+MORE WEAK TYPES: hooloo123,456
+and TEST|L1 ||too
diff --git a/test/test_CapRTL_implicit.reference b/test/test_CapRTL_implicit.reference
new file mode 100644
index 0000000..6ef244a
--- /dev/null
+++ b/test/test_CapRTL_implicit.reference
@@ -0,0 +1,26 @@
+car is THE CAR in arabic => car is RAC EHT in arabic
+CAR IS the car IN ENGLISH => HSILGNE NI the car SI RAC
+he said "IT IS 123, 456, OK" => he said "KO ,456 ,123 SI TI"
+he said "IT IS (123, 456), OK" => he said "KO ,(456 ,123) SI TI"
+he said "IT IS 123,456, OK" => he said "KO ,123,456 SI TI"
+he said "IT IS (123,456), OK" => he said "KO ,(123,456) SI TI"
+HE SAID "it is 123, 456, ok" => "ok ,it is 123, 456" DIAS EH
+he said "IT IS 789, 678, OK" => he said "KO ,678 ,789 SI TI"
+he said "IT IS (789, 678), OK" => he said "KO ,(678 ,789) SI TI"
+he said "IT IS 789,678, OK" => he said "KO ,789,678 SI TI"
+he said "IT IS (789,678), OK" => he said "KO ,(789,678) SI TI"
+HE SAID "it is 789, 678, ok" => "ok ,678 ,789 it is" DIAS EH
+<H123>shalom</H123> => <123H/>shalom<123H>
+<h123>SALAAM</h123> => <h123>MAALAS</h123>
+HE SAID "it is a car!" AND RAN => NAR DNA "!it is a car" DIAS EH
+HE SAID "it is a car!_>" AND RAN => NAR DNA "it is a car!" DIAS EH
+-2 CELSIUS IS COLD => DLOC SI SUISLEC 2-
+SOLVE 1*5 1-5 1/5 1+5 => 5+1 5/1 5-1 5*1 EVLOS
+THE RANGE IS 2.5..5 => 5..2.5 SI EGNAR EHT
+IOU $10 => $10 UOI
+CHANGE -10% => %10- EGNAHC
+-10% CHANGE => EGNAHC %10-
+A TEST FOR WEAK TYPES: 123+,456 => 456,123+ :SEPYT KAEW ROF TSET A
+ANOTHER FOR WEAK TYPES: A123,456 => 123,456A :SEPYT KAEW ROF REHTONA
+MORE WEAK TYPES: hooloo123,456 => hooloo123,456 :SEPYT KAEW EROM
+and TEST|L1 ||too => and TSET|1L ||too
diff --git a/test/test_ISO8859-8_hebrew.input b/test/test_ISO8859-8_hebrew.input
new file mode 100644
index 0000000..b93617a
--- /dev/null
+++ b/test/test_ISO8859-8_hebrew.input
@@ -0,0 +1,17 @@
+ abc
+abc
+abc cde
+he said: " !"
+he said: " !"
+() abc
+abc ()
+ #@$
+<h1></h1>
+ 23 abc
+ ~~~23%%% abc
+ abc ~~~23%%% abc
+ abc@23@cde
+ abc 23 cde
+ abc 23 abc
+<>Shalom</>
+a 2
diff --git a/test/test_ISO8859-8_hebrew.reference b/test/test_ISO8859-8_hebrew.reference
new file mode 100644
index 0000000..0579b87
--- /dev/null
+++ b/test/test_ISO8859-8_hebrew.reference
@@ -0,0 +1,17 @@
+ abc => abc
+abc => abc
+abc cde => abc cde
+he said: " !" => he said: " !"
+he said: " !" => he said: "! "
+() abc => abc ()
+abc () => abc ()
+ #@$ => $@#
+<h1></h1> => <h1></h1>
+ 23 abc => abc 23
+ ~~~23%%% abc => abc 23%%%~~~
+ abc ~~~23%%% abc => abc abc ~~~23%%%
+ abc@23@cde => abc@23@cde
+ abc 23 cde => abc 23 cde
+ abc 23 abc => abc abc 23
+<>Shalom</> => </>Shalom<>
+a 2 => a 2
diff --git a/test/test_UTF-8_persian.input b/test/test_UTF-8_persian.input
new file mode 100644
index 0000000..194126c
--- /dev/null
+++ b/test/test_UTF-8_persian.input
@@ -0,0 +1,14 @@
+الا يا ايها الساقی ادر کاسا و ناولها
+که عشق آسان نمود اول ولی افتاد مشکل‌ها
+به بوی نافه‌ای کاخر صبا زان طره بگشايد
+ز تاب جعد مشکينش چه خون افتاد در دل‌ها
+مرا در منزل جانان چه امن عيش چون هر دم
+جرس فرياد می‌دارد که بربنديد محمل‌ها
+به می سجاده رنگين کن گرت پير مغان گويد
+که سالک بی‌خبر نبود ز راه و رسم منزل‌ها
+شب تاريک و بيم موج و گردابی چنين هايل
+کجا دانند حال ما سبکباران ساحل‌ها
+همه کارم ز خود کامی به بدنامی کشيد آخر
+نهان کی ماند آن رازی کز او سازند محفل‌ها
+حضوری گر همی‌خواهی از او غايب مشو حافظ
+متی ما تلق من تهوی دع الدنيا و اهملها
diff --git a/test/test_UTF-8_persian.reference b/test/test_UTF-8_persian.reference
new file mode 100644
index 0000000..cd45ac2
--- /dev/null
+++ b/test/test_UTF-8_persian.reference
@@ -0,0 +1,14 @@
+الا يا ايها الساقی ادر کاسا و ناولها => اهلوان و اساک ردا یقاسلا اهيا اي الا
+که عشق آسان نمود اول ولی افتاد مشکل‌ها => اه‌لکشم داتفا یلو لوا دومن ناسآ قشع هک
+به بوی نافه‌ای کاخر صبا زان طره بگشايد => دياشگب هرط ناز ابص رخاک یا‌هفان یوب هب
+ز تاب جعد مشکينش چه خون افتاد در دل‌ها => اه‌لد رد داتفا نوخ هچ شنيکشم دعج بات ز
+مرا در منزل جانان چه امن عيش چون هر دم => مد ره نوچ شيع نما هچ ناناج لزنم رد ارم
+جرس فرياد می‌دارد که بربنديد محمل‌ها => اه‌لمحم ديدنبرب هک دراد‌یم دايرف سرج
+به می سجاده رنگين کن گرت پير مغان گويد => ديوگ ناغم ريپ ترگ نک نيگنر هداجس یم هب
+که سالک بی‌خبر نبود ز راه و رسم منزل‌ها => اه‌لزنم مسر و هار ز دوبن ربخ‌یب کلاس هک
+شب تاريک و بيم موج و گردابی چنين هايل => لياه نينچ یبادرگ و جوم ميب و کيرات بش
+کجا دانند حال ما سبکباران ساحل‌ها => اه‌لحاس نارابکبس ام لاح دنناد اجک
+همه کارم ز خود کامی به بدنامی کشيد آخر => رخآ ديشک یماندب هب یماک دوخ ز مراک همه
+نهان کی ماند آن رازی کز او سازند محفل‌ها => اه‌لفحم دنزاس وا زک یزار نآ دنام یک ناهن
+حضوری گر همی‌خواهی از او غايب مشو حافظ => ظفاح وشم بياغ وا زا یهاوخ‌یمه رگ یروضح
+متی ما تلق من تهوی دع الدنيا و اهملها => اهلمها و ايندلا عد یوهت نم قلت ام یتم
diff --git a/test/test_UTF-8_reordernsm.input b/test/test_UTF-8_reordernsm.input
new file mode 100644
index 0000000..58653a6
--- /dev/null
+++ b/test/test_UTF-8_reordernsm.input
@@ -0,0 +1,7 @@
+بِسْمِ ٱللّٰهِ ٱلرَّحْمٰنِ ٱلرَّحِيمِ
+اَلْحَمْدُ لِلّٰهِ رَبِّ الْعَالَمِينَ
+اَلرَّحْمٰنِ الرَّحِيمِ
+مَالِكِ يَوْمِ الدِّينِ
+اِيَّاكَ نَعْبُدُ وَ اِيَّاكَ نَسْتَعِينُ
+اِهْدِنَا الصِّرَاطَ الْمُسْتَقِيمَ
+صِرَاطَ الَّذِينَ اَنْعَمْتَ عَلَيهِمْ غَيْرِ الْمَغْضُوبِ عَلَيْهِم وَ لَا الضَّٓالِّينَ
diff --git a/test/test_UTF-8_reordernsm.reference b/test/test_UTF-8_reordernsm.reference
new file mode 100644
index 0000000..60e3f51
--- /dev/null
+++ b/test/test_UTF-8_reordernsm.reference
@@ -0,0 +1,7 @@
+بِسْمِ ٱللّٰهِ ٱلرَّحْمٰنِ ٱلرَّحِيمِ => مِيحِرَّلٱ نِمٰحْرَّلٱ هِلّٰلٱ مِسْبِ
+اَلْحَمْدُ لِلّٰهِ رَبِّ الْعَالَمِينَ => نَيمِلَاعَلْا بِّرَ هِلّٰلِ دُمْحَلْاَ
+اَلرَّحْمٰنِ الرَّحِيمِ => مِيحِرَّلا نِمٰحْرَّلاَ
+مَالِكِ يَوْمِ الدِّينِ => نِيدِّلا مِوْيَ كِلِامَ
+اِيَّاكَ نَعْبُدُ وَ اِيَّاكَ نَسْتَعِينُ => نُيعِتَسْنَ كَايَّاِ وَ دُبُعْنَ كَايَّاِ
+اِهْدِنَا الصِّرَاطَ الْمُسْتَقِيمَ => مَيقِتَسْمُلْا طَارَصِّلا انَدِهْاِ
+صِرَاطَ الَّذِينَ اَنْعَمْتَ عَلَيهِمْ غَيْرِ الْمَغْضُوبِ عَلَيْهِم وَ لَا الضَّٓالِّينَ => نَيلِّاضَّٓلا الَ وَ مهِيْلَعَ بِوضُغْمَلْا رِيْغَ مْهِيلَعَ تَمْعَنْاَ نَيذِلَّا طَارَصِ