Evas: Added liblinebreak (static dep) to the build process.
authortasn <tasn@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 5 May 2011 11:05:44 +0000 (11:05 +0000)
committertasn <tasn@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 5 May 2011 11:05:44 +0000 (11:05 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/evas@59203 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

20 files changed:
configure.ac
src/Makefile.am
src/static_deps/liblinebreak/AUTHORS [new file with mode: 0644]
src/static_deps/liblinebreak/ChangeLog [new file with mode: 0644]
src/static_deps/liblinebreak/LICENCE [new file with mode: 0644]
src/static_deps/liblinebreak/LineBreak1.sed [new file with mode: 0644]
src/static_deps/liblinebreak/LineBreak2.sed [new file with mode: 0644]
src/static_deps/liblinebreak/Makefile.am [new file with mode: 0644]
src/static_deps/liblinebreak/NEWS [new file with mode: 0644]
src/static_deps/liblinebreak/README [new file with mode: 0644]
src/static_deps/liblinebreak/filter_dup.c [new file with mode: 0644]
src/static_deps/liblinebreak/gen_linebreak_data.sh [new file with mode: 0755]
src/static_deps/liblinebreak/linebreak.c [new file with mode: 0644]
src/static_deps/liblinebreak/linebreak.h [new file with mode: 0644]
src/static_deps/liblinebreak/linebreakdata.c [new file with mode: 0644]
src/static_deps/liblinebreak/linebreakdata1.tmpl [new file with mode: 0644]
src/static_deps/liblinebreak/linebreakdata2.tmpl [new file with mode: 0644]
src/static_deps/liblinebreak/linebreakdata3.tmpl [new file with mode: 0644]
src/static_deps/liblinebreak/linebreakdef.c [new file with mode: 0644]
src/static_deps/liblinebreak/linebreakdef.h [new file with mode: 0644]

index 1b0bbc4..7feceef 100644 (file)
@@ -272,6 +272,33 @@ if test "x${want_fontconfig}" = "xyes" -o "x${want_fontconfig}" = "xauto" ; then
       ])
 fi
 
+# linebreak
+have_linebreak="no"
+want_linebreak="yes"
+AC_ARG_ENABLE([liblinebreak],
+   AC_HELP_STRING([--disable-liblinebreak],
+      [disable linking against liblinebreak. @<:@default=enabled@:>@]),
+   [
+    if test "x${enableval}" = "xyes" ; then
+       want_linebreak="yes"
+    else
+       want_linebreak="no"
+    fi
+   ])
+
+
+AM_CONDITIONAL(EVAS_USE_LINEBREAK, test "x${want_linebreak}" = "xyes")
+if test "x${want_linebreak}" = "xyes" ; then
+   have_linebreak="yes"
+   LINEBREAK_CFLAGS='-I$(top_srcdir)/src/static_deps/liblinebreak'
+   LINEBREAK_LIBS='$(top_builddir)/src/static_deps/liblinebreak/liblinebreak.la'
+   AC_SUBST(LINEBREAK_CFLAGS)
+   AC_SUBST(LINEBREAK_LIBS)
+   AC_DEFINE(HAVE_LINEBREAK, 1, [have liblinebreak support])
+else
+   have_linebreak="no"
+fi
+
 # fribidi support
 have_fribidi="no"
 AC_ARG_ENABLE([fribidi],
@@ -1645,6 +1672,8 @@ src/modules/savers/eet/Makefile
 src/modules/savers/jpeg/Makefile
 src/modules/savers/png/Makefile
 src/modules/savers/tiff/Makefile
+src/static_deps/Makefile
+src/static_deps/liblinebreak/Makefile
 src/lib/include/Makefile
 src/examples/Makefile
 README
@@ -1742,6 +1771,7 @@ echo
 echo "Font Rendering Helpers:"
 echo "  Fribidi.................: $have_fribidi"
 echo "  Harfbuzz................: $have_harfbuzz"
+echo "  liblinebreak............: $have_linebreak"
 # FIXME: add non freetype2 font engine support
 # FIXME: make freetype2 optional
 echo
index 8828c78..323da76 100644 (file)
@@ -1,3 +1,3 @@
 MAINTAINERCLEANFILES = Makefile.in
 
-SUBDIRS = lib bin modules examples
+SUBDIRS = static_deps lib bin modules examples
diff --git a/src/static_deps/liblinebreak/AUTHORS b/src/static_deps/liblinebreak/AUTHORS
new file mode 100644 (file)
index 0000000..523106f
--- /dev/null
@@ -0,0 +1,6 @@
+Wu Yongwei.  Designed and implemented liblinebreak.
+
+Nikolay Pultsin.  Put forward the original requirements on liblinebreak,
+performed tests, and made a lot of suggestions on the initial versions.
+
+Thomas Klausner.  Autoconfiscated and libtoolized liblinebreak.
diff --git a/src/static_deps/liblinebreak/ChangeLog b/src/static_deps/liblinebreak/ChangeLog
new file mode 100644 (file)
index 0000000..8255c10
--- /dev/null
@@ -0,0 +1,397 @@
+2010-01-03  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * LICENCE: Update the copyright year.
+
+2010-01-03  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * NEWS: Add information about the 2.0 release.
+
+2010-01-03  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * Doxyfile (PROJECT_NUMBER): Set to `2.0'.
+       (HAVE_DOT): Set to `YES'.
+
+2010-01-03  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * linebreak.c: Update the version number in comment to 2.0.
+       * linebreak.h: Ditto.
+       * linebreakdef.c: Ditto.
+       * linebreakdef.h: Ditto.
+
+2009-12-17  Wu Yongwei  <wuyongwei@gmail.com>
+
+       Change the values of enum BreakAction to the same length.
+       * linebreak.c (DIRECT_BRK): Rename to DIR_BRK.
+       (INDIRECT_BRK): Rename to IND_BRK.
+       (CM_INDIRECT_BRK): Rename to CMI_BRK.
+       (CM_PROHIBITED_BRK): Rename to CMP_BRK.
+       (PROHIBITED_BRK): Rename to PRH_BRK.
+
+2009-11-29  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * Doxyfile (TAB_SIZE): Set to the correct size `4', as used in the
+       source files.
+
+2009-11-29  Wu Yongwei  <wuyongwei@gmail.com>
+
+       Update files according to UAX #14-24, for Unicode 5.2.0.
+       * linebreak.c: Update comments about UAX #14.
+       * linebreak.h: Ditto.
+       * linebreakdef.c: Ditto.
+       * linebreakdef.h: Ditto.
+       (LBP_CP): New enumerator for the new `CP' class as defined in
+       UAX #14-24.
+       * linebreak.c (baTable): Update for the new class `CP'.
+       * linebreakdata.c: Regenerate from LineBreak-5.2.0.txt.
+       * README: Update the reference to UAX #14-24, for Unicode 5.2.0.
+
+2009-05-03  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * NEWS: Add information about the 1.2 release.
+
+2009-04-30  Wu Yongwei  <wuyongwei@gmail.com>
+
+       Optimize the Doxygen output.
+       * linebreak.c (lb_prop_index): Adjust its definition format
+       slightly.
+
+2009-04-30  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * Doxyfile (USE_WINDOWS_ENCODING): Remove obsolete tag.
+       (DETAILS_AT_TOP): Ditto.
+       (MAX_DOT_GRAPH_WIDTH): Ditto.
+       (MAX_DOT_GRAPH_HEIGHT): Ditto.
+       (REFERENCED_BY_RELATION): Set to `NO'.
+       (REFERENCES_RELATION): Ditto.
+       (EXCLUDE): Add `filter_dup.c'.
+
+2009-04-28  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * linebreak.c (lb_get_next_char_utf8): Fix the issue that the index
+       can point to the middle of a UTF-8 sequence if End of String (EOS)
+       is encountered prematurely (thanks to Nikolay Pultsin and Rick Xu).
+       (lb_get_next_char_utf16): Fix the issue that the index can point to
+       the middle of a UTF-16 surrogate pair if EOS is encountered
+       prematurely.
+
+2009-04-20  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * linebreakdef.c (lb_prop_English): Remove the specialization of
+       right single quotation mark as closing punctuation mark, because it
+       can be used as apostrophe.
+       (lb_prop_Spanish): Ditto.
+       (lb_prop_French): Ditto.
+
+2009-04-09  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * Makefile.msvc: Make the `clean' target work on MSVC versions other
+       than 6.0; do not use precompiled header.
+
+2009-03-07  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * linebreak.h: Correct the wrong date in the documentation comment.
+       * linebreakdef.h: Ditto.
+
+2009-02-10  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * configure.ac (AC_INIT): Increase the version to 2.0.
+       * Makefile.am (liblinebreak_la_LDFLAGS): Set the version-info to
+       `2:0'.
+
+2009-02-10  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * linebreak.h (LINEBREAK_VERSION): New macro.
+       (linebreak_version): New global constant declaration.
+       * linebreak.c (linebreak_version): New global constant definition.
+
+2009-02-10  Wu Yongwei  <wuyongwei@gmail.com>
+
+       Reduce namespace pollution.
+       * linebreak.c (get_lb_prop_lang): Mark as static.
+       (get_next_char_utf8): Rename to lb_get_next_char_utf8.
+       (get_next_char_utf16): Rename to lb_get_next_char_utf32.
+       (get_next_char_utf32): Rename to lb_get_next_char_utf32.
+       (is_breakable): Rename to is_line_breakable.
+       * linebreak.h (get_next_char_utf8): Remove the function prototype
+       declaration.
+       (get_next_char_utf16): Ditto.
+       (get_next_char_utf32): Ditto.
+       (is_breakable): Rename to is_line_breakable.
+       * linebreakdef.h (lb_get_next_char_utf8): Add the function prototype
+       declaration.
+       (lb_get_next_char_utf16): Ditto.
+       (lb_get_next_char_utf32): Ditto.
+
+2009-02-06  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * NEWS: Add information about the 1.1 release.
+
+2009-01-02  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * Makefile.am (EXTRA_DIST): Add the missing `LICENCE' file.
+
+2008-12-31  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * linebreak.c: Update the version number in comment to 1.0.
+       * linebreak.h: Ditto.
+       * linebreakdef.c: Ditto.
+       * linebreakdef.h: Ditto.
+
+2008-12-31  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * NEWS: Update for the 1.0 release.
+
+2008-12-31  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * README: Correct two typos.
+
+2008-12-31  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * README: Add the online URL reference.
+
+2008-12-30  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * README: Update the reference to UAX #14-22, for Unicode 5.1.0.
+
+2008-12-13  Wu Yongwei  <wuyongwei@gmail.com>
+
+       Update files according to UAX #14-22, for Unicode 5.1.0.
+       * linebreak.c (baTable): Update according to Table 2 of UAX #14-22.
+       * linebreakdef.c (lb_prop_Spanish): Remove the unnecessary
+       customization for inverted marks in Spanish.
+       * linebreakdata.c: Regenerate from LineBreak-5.1.0.txt.
+       * linebreak.h: Update comment only.
+       * linebreakdef.h: Ditto.
+
+2008-12-12  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * README: Update for the new build methods and better readability.
+
+2008-12-12  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * Makefile.msvc: Correct the inconsistent naming in the output
+       message.
+
+2008-12-12  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * configure.ac (AM_INIT_AUTOMAKE): Mark `foreign'.
+       * bootstrap: New file.
+       * purge: New file.
+       * Makefile.gcc (purge): Remove this target.
+
+2008-12-10  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * NEWS: New file.
+
+2008-12-10  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * AUTHORS: New file.
+
+2008-12-10  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * Makefile.gcc (purge): New phony target to purge files generated by
+       autoconfiscation.
+
+2008-12-10  Thomas Klausner  <tk@giga.or.at>
+
+       * configure.ac: New file.
+       * Makefile.am: New file.
+
+2008-12-10  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * Doxyfile (OUTPUT_DIRECTORY): Set to `doc'.
+       (ALPHABETICAL_INDEX): Set to `YES'.
+
+2008-12-09  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * Makefile.msvc: New file.
+
+2008-12-09  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * Makefile: Remove (to become Makefile.gcc).
+       * Makefile.gcc: New file (was Makefile).
+
+2008-12-07  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * linebreak.c: Adjust the comment that refers to Unicode Annex 14.
+       * linebreak.h: Ditto.
+       * linebreakdef.c: Ditto.
+       * linebreakdef.h: Ditto.
+
+2008-12-07  Wu Yongwei  <wuyongwei@gmail.com>
+
+       Use only POSIX basic regexp to ensure maximum portability (issues
+       have been found on Mac OS X, where GNU extensions do not work).
+       * LineBreak1.sed: Replace `[:xdigit:]' with `0-9A-F', and `\+' with
+       `\{1,\}'.
+       * LineBreak2.sed: Ditto.
+
+2008-12-07  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * Makefile: Replace `*.exe' with `filter_dup$(EXEEXT)', since the
+       extension `.exe' is specific to Windows.
+
+2008-04-20  Wu Yongwei  <wuyongwei@gmail.com>
+
+       Add README and LICENCE files, as well as a Doxyfile to generate
+       documents.
+       * README: New file.
+       * LICENCE: New file.
+       * Doxyfile: New file.
+       * Makefile (doc): Add new phony target.
+
+2008-04-04  Wu Yongwei  <wuyongwei@gmail.com>
+
+       Remove the English override for plus sign: it is better treated in
+       the text breaking program (see ../breaktext/ for an example).
+       * linebreakdef.c (lb_prop_English): Remove the line for plus sign.
+
+2008-03-29  Wu Yongwei <wuyongwei@gmail.com>
+
+       * Makefile: Correct the dependency-making rules when OLDGCC=Y.
+
+2008-03-23  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * Makefile (clean): Do not remove *.exe and tags here.
+       (distclean): Remove *.exe and tags.
+
+2008-03-23  Wu Yongwei  <wuyongwei@gmail.com>
+
+       Remove the English override for solidus: it is better treated in the
+       text breaking program (see ../breaktext/ for an example).
+       * linebreakdef.c (lb_prop_English): Remove the line for solidus.
+
+2008-03-16  Wu Yongwei  <wuyongwei@gmail.com>
+
+       Rename init_linebreak_prop_index to init_linebreak for future
+       safety; make visible certain functions that are potentially useful.
+       * linebreak.c (init_linebreak_prop_index): Rename to init_linebreak.
+       (get_next_char_t): Move to linebreakdef.h.
+       (get_next_char_utf8): Make non-static.
+       (get_next_char_utf16): Ditto.
+       (get_next_char_utf32): Ditto.
+       (set_linebreaks): Ditto.
+       * linebreak.h (init_linebreak_prop_index): Rename to init_linebreak.
+       (get_next_char_utf8): Add the function prototype.
+       (get_next_char_utf16): Ditto.
+       (get_next_char_utf32): Ditto.
+       * linebreakdef.h (get_next_char_t): Add the typedef.
+       (set_linebreaks): Add the function prototype.
+
+2008-03-16  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * Makefile (OLDGCC): Add support for GCC 2.95.3 (when OLDGCC=Y).
+
+2008-03-15  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * linebreak.c (set_linebreaks): Fix a bug that `==' was wrongly used
+       for `='.
+
+2008-03-05  Wu Yongwei  <wuyongwei@gmail.com>
+
+       Improve the performance by reducing the look-ups of the
+       language-specific line breaking properties array from the language
+       name (thanks to Nikolay Pultsin).
+       * linebreak.c (get_lb_prop_lang): New function.
+       (get_char_lb_class_lang): Change the second parameter from the
+       language name to the line breaking properties array.
+       (set_linebreaks): Look up the language-specific line breaking
+       properties array from the language name only once in one function
+       call.
+
+2008-03-03  Wu Yongwei  <wuyongwei@gmail.com>
+
+       Make minor adjustments in code and comments.
+       * linebreak.c: Adjust the doc comments.
+       (init_linebreak_prop_index): Modify a conditional to make it more
+       robust and consistent.
+       * linebreakdef.c (lb_prop_lang_map): Replace the pointer
+       lb_prop_default with NULL, since the value is never used.
+
+2008-03-03  Wu Yongwei  <wuyongwei@gmail.com>
+
+       Accelerate get_char_lb_class for invalid Unicode code points.
+       * linebreak.c (get_char_lb_class): Adjust the conditionals so that
+       getting the line breaking class for an invalid code point is much
+       faster, which requires the array of line breaking properties be
+       sorted.
+       * linebreakdef.h: Adjust a comment that the array of line break
+       properties must be sorted.
+
+2008-03-02  Wu Yongwei  <wuyongwei@gmail.com>
+
+       Change the values of enum BreakAction to more complete forms.
+       * linebreak.c (INDRCT_BRK): Rename to INDIRECT_BRK.
+       (CM_INDRCT_BRK): Rename to CM_INDIRECT_BRK.
+       (CM_PROHIBTD_BRK): Rename to CM_PROHIBITED_BRK.
+       (PROHIBTD_BRK): Rename to PROHIBITED_BRK.
+
+2008-03-02  Wu Yongwei  <wuyongwei@gmail.com>
+
+       Implement a two-stage search in get_char_lb_class_default to
+       accelerate the overall performance, especially for non-Latin
+       languages.
+       * linebreak.c (LINEBREAK_INDEX_SIZE): New constant macro.
+       (struct LineBreakPropertiesIndex): New struct.
+       (lb_prop_index): New static variable.
+       (init_linebreak_prop_index): New function.
+       (get_char_lb_class_default): New function.
+       (get_char_lb_class_lang): Use get_char_lb_class_default.
+       * linebreak.h: Detect C++ and add extern "C" guard if necessary.
+       (init_linebreak_prop_index): Add the prototype declaration.
+       * linebreakdef.h: Adjust a comment.
+
+2008-03-02  Wu Yongwei  <wuyongwei@gmail.com>
+
+       Split/refactor the code; add (doc) comments.
+       * Makefile (CFILES): Add linebreakdata.c and linebreakdef.c.
+       * linebreak.c: Add and adjust comments.
+       (linebreakdef.h): Add include file.
+       (linebreakdata.c): Remove include file.
+       (EOS): Remove (now in linebreakdef.h).
+       (enum LineBreakClass): Ditto.
+       (struct LineBreakProperties): Ditto.
+       (lbpEnglish): Remove (now in linebreakdef.c as lb_prop_English).
+       (lbpGerman): Remove (now in linebreakdef.c as lb_prop_German).
+       (lbpSpanish): Remove (now in linebreakdef.c as lb_prop_Spanish).
+       (lbpFrench): Remove (now in linebreakdef.c as lb_prop_French).
+       (lbpRussian): Remove (now in linebreakdef.c as lb_prop_Russian).
+       (lbpChinese): Remove (now in linebreakdef.c as lb_prop_Chinese).
+       (struct LineBreakPropertiesLang): Remove (now in linebreakdef.h).
+       (lbpLangs): Remove (now in linebreakdef.c as lb_prop_lang_map).
+       (get_next_char_utf16): Make sure memory access not go beyond len.
+       * linebreak.h: Add copyright information and adjust comments.
+       (stddef.h): Add include file.
+       * linebreakdata.c (linebreak.h): Add include file.
+       (linebreakdef.h): Add include file.
+       (lbpDefault): Make global and rename to lb_prop_default.
+       * linebreakdata2.tmpl: Add two include files, a comment line, and
+       remove `static'.
+       * linebreakdef.c: New file.
+       * linebreakdef.h: New file.
+
+2008-02-26  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * linebreak.c (lbpSpanish): New array for Spanish-specific data.
+       (lbpLangs): Update the index array for Spanish.
+       (resolve_lb_class): Resolve AmbIguous class to IDeographic in
+       Chinese, Japanese, and Korean.
+
+2008-02-26  Wu Yongwei  <wuyongwei@gmail.com>
+
+       * Makefile (LineBreak.txt): Add new rule to retrieve it from the Web
+       if it is not already there.
+
+2008-02-23  Wu Yongwei  <wuyongwei@gmail.com>
+
+       Add files for linebreak.
+       * LineBreak1.sed: New file.
+       * LineBreak2.sed: New file.
+       * Makefile: New file.
+       * filter_dup.c: New file.
+       * linebreak.c: New file.
+       * linebreak.h: New file.
+       * linebreakdata.c: New file.
+       * linebreakdata1.tmpl: New file.
+       * linebreakdata2.tmpl: New file.
+       * linebreakdata3.tmpl: New file.
diff --git a/src/static_deps/liblinebreak/LICENCE b/src/static_deps/liblinebreak/LICENCE
new file mode 100644 (file)
index 0000000..9b9984f
--- /dev/null
@@ -0,0 +1,18 @@
+Copyright (C) 2008-2010 Wu Yongwei <wuyongwei at gmail dot com>
+
+This software is provided 'as-is', without any express or implied
+warranty.  In no event will the author be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not
+   claim that you wrote the original software.  If you use this software
+   in a product, an acknowledgement in the product documentation would
+   be appreciated but is not required.
+2. Altered source versions must be plainly marked as such, and must not
+   be misrepresented as being the original software.
+3. This notice may not be removed or altered from any source
+   distribution.
diff --git a/src/static_deps/liblinebreak/LineBreak1.sed b/src/static_deps/liblinebreak/LineBreak1.sed
new file mode 100644 (file)
index 0000000..1be9651
--- /dev/null
@@ -0,0 +1 @@
+s/\(^[0-9A-F.]\{1,\};[A-Z][A-Z0-9]\) #.*/\1/p
diff --git a/src/static_deps/liblinebreak/LineBreak2.sed b/src/static_deps/liblinebreak/LineBreak2.sed
new file mode 100644 (file)
index 0000000..8165958
--- /dev/null
@@ -0,0 +1,2 @@
+s/^\([0-9A-F]\{1,\}\);/\1..\1;/
+s/^\([0-9A-F]\{1,\}\)\.\.\([0-9A-F]\{1,\}\);\([A-Z][A-Z0-9]\)/ { 0x\1, 0x\2, LBP_\3 },/
diff --git a/src/static_deps/liblinebreak/Makefile.am b/src/static_deps/liblinebreak/Makefile.am
new file mode 100644 (file)
index 0000000..e05f72b
--- /dev/null
@@ -0,0 +1,16 @@
+#noinst_PROGRAMS = filter_dup
+include_HEADERS = linebreak.h linebreakdef.h
+noinst_LTLIBRARIES = liblinebreak.la
+
+liblinebreak_la_SOURCES = \
+       linebreak.c \
+       linebreakdata.c \
+       linebreakdef.c
+
+EXTRA_DIST = \
+       LineBreak1.sed \
+       LineBreak2.sed \
+       linebreakdata1.tmpl \
+       linebreakdata2.tmpl \
+       linebreakdata3.tmpl \
+       LICENCE
diff --git a/src/static_deps/liblinebreak/NEWS b/src/static_deps/liblinebreak/NEWS
new file mode 100644 (file)
index 0000000..4c55521
--- /dev/null
@@ -0,0 +1,37 @@
+New in 2.0
+
+- Update the algorithm and data according to UAX #14-24 and
+  LineBreak-5.2.0.txt
+- Rename some functions to reduce namespace pollution
+- Make Doxygen documentation better
+
+New in 1.2
+
+- Fix the bug that an assertion in code can fail if an invalid UTF-8 or
+  UTF-16 sequence is encountered near the end of input
+- Remove the specialization of right single quotation mark as closing
+  punctuation mark in English, French, and Spanish, because it can be
+  used as apostrophe
+- Make Doxygen documentation better
+
+New in 1.1
+
+- Make get_lb_prop_lang static and not an exported symbol
+- Define is_line_breakable to alias to is_breakable
+- Declare get_next_char_utf* will be changed to lb_get_next_char_utf*
+- Move the declarations of get_next_char_utf* from linebreak.h to
+  linebreakdef.h
+- Add the function documentation comments to the header files
+
+New in 1.0
+
+- Update the line breaking data according to UAX #14-22 and
+  LineBreak-5.1.0.txt
+- Add autoconfiscation support (./configure, make, make install)
+- Add Makefile for MSVC
+
+First public release (0.9.6, or 20080421)
+
+- Implement line breaking algorithm according to UAX #14-19
+- Line breaking data is generated from LineBreak-5.0.0.txt
+- Makefile only supports GCC
diff --git a/src/static_deps/liblinebreak/README b/src/static_deps/liblinebreak/README
new file mode 100644 (file)
index 0000000..9d23651
--- /dev/null
@@ -0,0 +1,86 @@
+NOTICE: This is the original version, that was adapted a bit (mostly
+              build related) in order to work nicely with Evas.
+
+
+                        L I B L I N E B R E A K
+                        =======================
+
+Overview
+--------
+
+This is the README file for liblinebreak, an implementation of the line
+breaking algorithm as described in Unicode 5.2.0 Standard Annex 14,
+Revision 24, available at
+         <URL:http://www.unicode.org/reports/tr14/tr14-24.html>
+
+Check this URL for up-to-date information:
+         <URL:http://vimgadgets.sourceforge.net/liblinebreak/>
+
+
+Licence
+-------
+
+This library is released under an open-source licence, the zlib/libpng
+licence.  Please check the file LICENCE for details.
+
+Apart from using the algorithm, part of the code is derived from the
+data provided under
+                  <URL:http://www.unicode.org/Public/>
+
+And the Unicode Terms of Use may apply:
+              <URL:http://www.unicode.org/copyright.html>
+
+
+Installation
+------------
+
+There are three ways to build the library:
+
+1) On *NIX systems supported by the autoconfiscation tools, do the
+   normal
+
+     ./configure
+     make
+     sudo make install
+
+   to build and install both the dynamic and static libraries.  In
+   addition, one may
+
+   - type `make doc' to generate the doxygen documentation; or
+   - type `make linebreakdata' to regenerate linebreakdata.c from
+     LineBreak.txt.
+
+2) On systems where GCC and Binutils are supported, one can type
+
+     cp -p Makefile.gcc Makefile
+     make
+
+   to build the static library.  In addition, one may
+
+   - type `make debug' or `make release' to explicitly generate the
+     debug or release build;
+   - type `make doc' to generate the doxygen documentation; or
+   - type `make linebreakdata' to regenerate linebreakdata.c from
+     LineBreak.txt.
+
+3) On Windows, apart from using method 1 (Cygwin/MSYS) and method 2
+   (MinGW), MSVC can also be used.  Type
+
+     nmake -f Makefile.msvc
+
+   to build the static library.  By default the debug release is built.
+   To build the release version
+
+     nmake -f Makefile.msvc CFG="linebreak - Win32 Release"
+
+
+Documentation
+-------------
+
+Check the generated document doc/html/linebreak_8h.html for the public
+interfaces exposed to applications.
+
+
+$Id: README,v 1.6 2009/11/29 08:09:13 adah Exp $
+
+vim:autoindent:expandtab:formatoptions=tcqlmn:textwidth=72:
diff --git a/src/static_deps/liblinebreak/filter_dup.c b/src/static_deps/liblinebreak/filter_dup.c
new file mode 100644 (file)
index 0000000..1d1d793
--- /dev/null
@@ -0,0 +1,48 @@
+#include <stdio.h>
+#include <string.h>
+
+int main()
+{
+        char s[80];
+        char beg[16];
+        char end[16];
+        char prop[16];
+        char lastbeg[16];
+        char lastend[16];
+        char lastprop[16];
+        lastprop[0] = 0;
+        for (;;)
+        {
+                if (fgets(s, sizeof s, stdin) == NULL)
+                        break;
+                if (strstr(s, "LBP_") == NULL || strstr(s, "LBP_Undef") != NULL)
+                {
+                        if (lastprop[0])
+                        {
+                                printf("\t{ %s %s %s },\n", lastbeg, lastend, lastprop);
+                                lastprop[0] = 0;
+                        }
+                        printf("%s", s);
+                        continue;
+                }
+                sscanf(s, "\t{ %s %s %s }", beg, end, prop);
+                /*printf("==>\t{ \"%s\" \"%s\" \"%s\" },\n", beg, end, prop);*/
+                if (lastprop[0] && strcmp(lastprop, prop) != 0)
+                {
+                        printf("\t{ %s %s %s },\n", lastbeg, lastend, lastprop);
+                        lastprop[0] = 0;
+                }
+                if (lastprop[0] == 0)
+                {
+                        strcpy(lastbeg, beg);
+                        strcpy(lastprop, prop);
+                }
+                strcpy(lastend, end);
+        }
+        if (lastprop[0])
+        {
+                printf("\t{ %s %s %s },\n", lastbeg, lastend, prop);
+        }
+        return 0;
+}
+
diff --git a/src/static_deps/liblinebreak/gen_linebreak_data.sh b/src/static_deps/liblinebreak/gen_linebreak_data.sh
new file mode 100755 (executable)
index 0000000..e396db2
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/sh
+if [ ! -f "LineBreak.txt" ]; then
+   wget http://unicode.org/Public/UNIDATA/LineBreak.txt
+fi
+
+sed -n -f LineBreak1.sed LineBreak.txt > tmp.txt
+sed -f LineBreak2.sed tmp.txt | ./filter_dup > tmp.c
+head -2 LineBreak.txt > tmp.txt
+cat linebreakdata1.tmpl tmp.txt linebreakdata2.tmpl tmp.c linebreakdata3.tmpl > linebreakdata.c
+rm tmp.txt tmp.c
+
diff --git a/src/static_deps/liblinebreak/linebreak.c b/src/static_deps/liblinebreak/linebreak.c
new file mode 100644 (file)
index 0000000..5a4fb57
--- /dev/null
@@ -0,0 +1,734 @@
+/* vim: set tabstop=4 shiftwidth=4: */
+
+/*
+ * Line breaking in a Unicode sequence.  Designed to be used in a
+ * generic text renderer.
+ *
+ * Copyright (C) 2008-2010 Wu Yongwei <wuyongwei at gmail dot com>
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty.  In no event will the author be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute
+ * it freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must
+ *    not claim that you wrote the original software.  If you use this
+ *    software in a product, an acknowledgement in the product
+ *    documentation would be appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must
+ *    not be misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source
+ *    distribution.
+ *
+ * The main reference is Unicode Standard Annex 14 (UAX #14):
+ *             <URL:http://www.unicode.org/reports/tr14/>
+ *
+ * When this library was designed, this annex was at Revision 19, for
+ * Unicode 5.0.0:
+ *             <URL:http://www.unicode.org/reports/tr14/tr14-19.html>
+ *
+ * This library has been updated according to Revision 24, for
+ * Unicode 5.2.0:
+ *             <URL:http://www.unicode.org/reports/tr14/tr14-24.html>
+ *
+ * The Unicode Terms of Use are available at
+ *             <URL:http://www.unicode.org/copyright.html>
+ */
+
+/**
+ * @file       linebreak.c
+ *
+ * Implementation of the line breaking algorithm as described in Unicode
+ * Standard Annex 14.
+ *
+ * @version    2.0, 2010/01/03
+ * @author     Wu Yongwei
+ */
+
+#include <assert.h>
+#include <stddef.h>
+#include <string.h>
+#include "linebreak.h"
+#include "linebreakdef.h"
+
+/**
+ * Size of the second-level index to the line breaking properties.
+ */
+#define LINEBREAK_INDEX_SIZE 40
+
+/**
+ * Version number of the library.
+ */
+const int linebreak_version = LINEBREAK_VERSION;
+
+/**
+ * Enumeration of break actions.  They are used in the break action
+ * pair table below.
+ */
+enum BreakAction
+{
+       DIR_BRK,                /**< Direct break opportunity */
+       IND_BRK,                /**< Indirect break opportunity */
+       CMI_BRK,                /**< Indirect break opportunity for combining marks */
+       CMP_BRK,                /**< Prohibited break for combining marks */
+       PRH_BRK                 /**< Prohibited break */
+};
+
+/**
+ * Break action pair table.  This is a direct mapping of Table 2 of
+ * Unicode Standard Annex 14, Revision 24.
+ */
+static enum BreakAction baTable[LBP_JT][LBP_JT] = {
+       {       /* OP */
+               PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK, CMP_BRK,
+               PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK },
+       {       /* CL */
+               DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, PRH_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
+               DIR_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
+       {       /* CP */
+               DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, PRH_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, DIR_BRK,
+               DIR_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
+       {       /* QU */
+               PRH_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK,
+               IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK },
+       {       /* GL */
+               IND_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK,
+               IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK },
+       {       /* NS */
+               DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
+               DIR_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
+       {       /* EX */
+               DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
+               DIR_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
+       {       /* SY */
+               DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, IND_BRK, DIR_BRK, DIR_BRK,
+               DIR_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
+       {       /* IS */
+               DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, IND_BRK, IND_BRK, DIR_BRK,
+               DIR_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
+       {       /* PR */
+               IND_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, IND_BRK, IND_BRK, IND_BRK,
+               DIR_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK },
+       {       /* PO */
+               IND_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, IND_BRK, IND_BRK, DIR_BRK,
+               DIR_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
+       {       /* NU */
+               IND_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, DIR_BRK,
+               IND_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
+       {       /* AL */
+               IND_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, IND_BRK, IND_BRK, DIR_BRK,
+               IND_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
+       {       /* ID */
+               DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, DIR_BRK, IND_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
+               IND_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
+       {       /* IN */
+               DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
+               IND_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
+       {       /* HY */
+               DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, DIR_BRK, IND_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, IND_BRK, DIR_BRK, DIR_BRK,
+               DIR_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
+       {       /* BA */
+               DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, DIR_BRK, IND_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
+               DIR_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
+       {       /* BB */
+               IND_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK,
+               IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK },
+       {       /* B2 */
+               DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
+               DIR_BRK, IND_BRK, IND_BRK, DIR_BRK, PRH_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
+       {       /* ZW */
+               DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
+               DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
+               DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, PRH_BRK, DIR_BRK,
+               DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
+       {       /* CM */
+               IND_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, IND_BRK, IND_BRK, DIR_BRK,
+               IND_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
+       {       /* WJ */
+               IND_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK,
+               IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK },
+       {       /* H2 */
+               DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, DIR_BRK, IND_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
+               IND_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, IND_BRK, IND_BRK },
+       {       /* H3 */
+               DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, DIR_BRK, IND_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
+               IND_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, IND_BRK },
+       {       /* JL */
+               DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, DIR_BRK, IND_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
+               IND_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, DIR_BRK },
+       {       /* JV */
+               DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, DIR_BRK, IND_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
+               IND_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, IND_BRK, IND_BRK },
+       {       /* JT */
+               DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
+               PRH_BRK, PRH_BRK, DIR_BRK, IND_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
+               IND_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
+               PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, IND_BRK }
+};
+
+/**
+ * Struct for the second-level index to the line breaking properties.
+ */
+struct LineBreakPropertiesIndex
+{
+       utf32_t end;                                    /**< End coding point */
+       struct LineBreakProperties *lbp;/**< Pointer to line breaking properties */
+};
+
+/**
+ * Second-level index to the line breaking properties.
+ */
+static struct LineBreakPropertiesIndex lb_prop_index[LINEBREAK_INDEX_SIZE] =
+{
+       { 0xFFFFFFFF, lb_prop_default }
+};
+
+/**
+ * Initializes the second-level index to the line breaking properties.
+ * If it is not called, the performance of #get_char_lb_class_lang (and
+ * thus the main functionality) can be pretty bad, especially for big
+ * code points like those of Chinese.
+ */
+void init_linebreak(void)
+{
+       size_t i;
+       size_t iPropDefault;
+       size_t len;
+       size_t step;
+
+       len = 0;
+       while (lb_prop_default[len].prop != LBP_Undefined)
+               ++len;
+       step = len / LINEBREAK_INDEX_SIZE;
+       iPropDefault = 0;
+       for (i = 0; i < LINEBREAK_INDEX_SIZE; ++i)
+       {
+               lb_prop_index[i].lbp = lb_prop_default + iPropDefault;
+               iPropDefault += step;
+               lb_prop_index[i].end = lb_prop_default[iPropDefault].start - 1;
+       }
+       lb_prop_index[--i].end = 0xFFFFFFFF;
+}
+
+/**
+ * Gets the language-specific line breaking properties.
+ *
+ * @param lang language of the text
+ * @return             pointer to the language-specific line breaking
+ *                             properties array if found; \c NULL otherwise
+ */
+static struct LineBreakProperties *get_lb_prop_lang(const char *lang)
+{
+       struct LineBreakPropertiesLang *lbplIter;
+       if (lang != NULL)
+       {
+               for (lbplIter = lb_prop_lang_map; lbplIter->lang != NULL; ++lbplIter)
+               {
+                       if (strncmp(lang, lbplIter->lang, lbplIter->namelen) == 0)
+                       {
+                               return lbplIter->lbp;
+                       }
+               }
+       }
+       return NULL;
+}
+
+/**
+ * Gets the line breaking class of a character from a line breaking
+ * properties array.
+ *
+ * @param ch   character to check
+ * @param lbp  pointer to the line breaking properties array
+ * @return             the line breaking class if found; \c LBP_XX otherwise
+ */
+static enum LineBreakClass get_char_lb_class(
+               utf32_t ch,
+               struct LineBreakProperties *lbp)
+{
+       while (lbp->prop != LBP_Undefined && ch >= lbp->start)
+       {
+               if (ch <= lbp->end)
+                       return lbp->prop;
+               ++lbp;
+       }
+       return LBP_XX;
+}
+
+/**
+ * Gets the line breaking class of a character from the default line
+ * breaking properties array.
+ *
+ * @param ch   character to check
+ * @return             the line breaking class if found; \c LBP_XX otherwise
+ */
+static enum LineBreakClass get_char_lb_class_default(
+               utf32_t ch)
+{
+       size_t i = 0;
+       while (ch > lb_prop_index[i].end)
+               ++i;
+       assert(i < LINEBREAK_INDEX_SIZE);
+       return get_char_lb_class(ch, lb_prop_index[i].lbp);
+}
+
+/**
+ * Gets the line breaking class of a character for a specific
+ * language.  This function will check the language-specific data first,
+ * and then the default data if there is no language-specific property
+ * available for the character.
+ *
+ * @param ch           character to check
+ * @param lbpLang      pointer to the language-specific line breaking
+ *                                     properties array
+ * @return                     the line breaking class if found; \c LBP_XX
+ *                                     otherwise
+ */
+static enum LineBreakClass get_char_lb_class_lang(
+               utf32_t ch,
+               struct LineBreakProperties *lbpLang)
+{
+       enum LineBreakClass lbcResult;
+
+       /* Find the language-specific line breaking class for a character */
+       if (lbpLang)
+       {
+               lbcResult = get_char_lb_class(ch, lbpLang);
+               if (lbcResult != LBP_XX)
+                       return lbcResult;
+       }
+
+       /* Find the generic language-specific line breaking class, if no
+        * language context is provided, or language-specific data are not
+        * available for the specific character in the specified language */
+       return get_char_lb_class_default(ch);
+}
+
+/**
+ * Resolves the line breaking class for certain ambiguous or complicated
+ * characters.  They are treated in a simplistic way in this
+ * implementation.
+ *
+ * @param lbc  line breaking class to resolve
+ * @param lang language of the text
+ * @return             the resolved line breaking class
+ */
+static enum LineBreakClass resolve_lb_class(
+               enum LineBreakClass lbc,
+               const char *lang)
+{
+       switch (lbc)
+       {
+       case LBP_AI:
+               if (lang != NULL &&
+                               (strncmp(lang, "zh", 2) == 0 || /* Chinese */
+                                strncmp(lang, "ja", 2) == 0 || /* Japanese */
+                                strncmp(lang, "ko", 2) == 0))  /* Korean */
+               {
+                       return LBP_ID;
+               }
+               /* Fall through */
+       case LBP_SA:
+       case LBP_SG:
+       case LBP_XX:
+               return LBP_AL;
+       default:
+               return lbc;
+       }
+}
+
+/**
+ * Gets the next Unicode character in a UTF-8 sequence.  The index will
+ * be advanced to the next complete character, unless the end of string
+ * is reached in the middle of a UTF-8 sequence.
+ *
+ * @param[in]     s            input UTF-8 string
+ * @param[in]     len  length of the string in bytes
+ * @param[in,out] ip   pointer to the index
+ * @return                             the Unicode character beginning at the index; or
+ *                                             #EOS if end of input is encountered
+ */
+utf32_t lb_get_next_char_utf8(
+               const utf8_t *s,
+               size_t len,
+               size_t *ip)
+{
+       utf8_t ch;
+       utf32_t res;
+
+       assert(*ip <= len);
+       if (*ip == len)
+               return EOS;
+       ch = s[*ip];
+
+       if (ch < 0xC2 || ch > 0xF4)
+       {       /* One-byte sequence, tail (should not occur), or invalid */
+               *ip += 1;
+               return ch;
+       }
+       else if (ch < 0xE0)
+       {       /* Two-byte sequence */
+               if (*ip + 2 > len)
+                       return EOS;
+               res = ((ch & 0x1F) << 6) + (s[*ip + 1] & 0x3F);
+               *ip += 2;
+               return res;
+       }
+       else if (ch < 0xF0)
+       {       /* Three-byte sequence */
+               if (*ip + 3 > len)
+                       return EOS;
+               res = ((ch & 0x0F) << 12) +
+                         ((s[*ip + 1] & 0x3F) << 6) +
+                         ((s[*ip + 2] & 0x3F));
+               *ip += 3;
+               return res;
+       }
+       else
+       {       /* Four-byte sequence */
+               if (*ip + 4 > len)
+                       return EOS;
+               res = ((ch & 0x07) << 18) +
+                         ((s[*ip + 1] & 0x3F) << 12) +
+                         ((s[*ip + 2] & 0x3F) << 6) +
+                         ((s[*ip + 3] & 0x3F));
+               *ip += 4;
+               return res;
+       }
+}
+
+/**
+ * Gets the next Unicode character in a UTF-16 sequence.  The index will
+ * be advanced to the next complete character, unless the end of string
+ * is reached in the middle of a UTF-16 surrogate pair.
+ *
+ * @param[in]     s            input UTF-16 string
+ * @param[in]     len  length of the string in words
+ * @param[in,out] ip   pointer to the index
+ * @return                             the Unicode character beginning at the index; or
+ *                                             #EOS if end of input is encountered
+ */
+utf32_t lb_get_next_char_utf16(
+               const utf16_t *s,
+               size_t len,
+               size_t *ip)
+{
+       utf16_t ch;
+
+       assert(*ip <= len);
+       if (*ip == len)
+               return EOS;
+       ch = s[(*ip)++];
+
+       if (ch < 0xD800 || ch > 0xDBFF)
+       {       /* If the character is not a high surrogate */
+               return ch;
+       }
+       if (*ip == len)
+       {       /* If the input ends here (an error) */
+               --(*ip);
+               return EOS;
+       }
+       if (s[*ip] < 0xDC00 || s[*ip] > 0xDFFF)
+       {       /* If the next character is not the low surrogate (an error) */
+               return ch;
+       }
+       /* Return the constructed character and advance the index again */
+       return (((utf32_t)ch & 0x3FF) << 10) + (s[(*ip)++] & 0x3FF) + 0x10000;
+}
+
+/**
+ * Gets the next Unicode character in a UTF-32 sequence.  The index will
+ * be advanced to the next character.
+ *
+ * @param[in]     s            input UTF-32 string
+ * @param[in]     len  length of the string in dwords
+ * @param[in,out] ip   pointer to the index
+ * @return                             the Unicode character beginning at the index; or
+ *                                             #EOS if end of input is encountered
+ */
+utf32_t lb_get_next_char_utf32(
+               const utf32_t *s,
+               size_t len,
+               size_t *ip)
+{
+       assert(*ip <= len);
+       if (*ip == len)
+               return EOS;
+       return s[(*ip)++];
+}
+
+/**
+ * Sets the line breaking information for a generic input string.
+ *
+ * @param[in]  s                       input string
+ * @param[in]  len                     length of the input
+ * @param[in]  lang                    language of the input
+ * @param[out] brks                    pointer to the output breaking data,
+ *                                                     containing #LINEBREAK_MUSTBREAK,
+ *                                                     #LINEBREAK_ALLOWBREAK, #LINEBREAK_NOBREAK,
+ *                                                     or #LINEBREAK_INSIDEACHAR
+ * @param[in] get_next_char    function to get the next UTF-32 character
+ */
+void set_linebreaks(
+               const void *s,
+               size_t len,
+               const char *lang,
+               char *brks,
+               get_next_char_t get_next_char)
+{
+       utf32_t ch;
+       enum LineBreakClass lbcCur;
+       enum LineBreakClass lbcNew;
+       enum LineBreakClass lbcLast;
+       struct LineBreakProperties *lbpLang;
+       size_t posCur = 0;
+       size_t posLast = 0;
+
+       --posLast;      /* To be ++'d later */
+       ch = get_next_char(s, len, &posCur);
+       if (ch == EOS)
+               return;
+       lbpLang = get_lb_prop_lang(lang);
+       lbcCur = resolve_lb_class(get_char_lb_class_lang(ch, lbpLang), lang);
+       lbcNew = LBP_Undefined;
+
+nextline:
+
+       /* Special treatment for the first character */
+       switch (lbcCur)
+       {
+       case LBP_LF:
+       case LBP_NL:
+               lbcCur = LBP_BK;
+               break;
+       case LBP_SP:
+               lbcCur = LBP_WJ;
+               break;
+       default:
+               break;
+       }
+
+       /* Process a line till an explicit break or end of string */
+       for (;;)
+       {
+               for (++posLast; posLast < posCur - 1; ++posLast)
+               {
+                       brks[posLast] = LINEBREAK_INSIDEACHAR;
+               }
+               assert(posLast == posCur - 1);
+               lbcLast = lbcNew;
+               ch = get_next_char(s, len, &posCur);
+               if (ch == EOS)
+                       break;
+               lbcNew = get_char_lb_class_lang(ch, lbpLang);
+               if (lbcCur == LBP_BK || (lbcCur == LBP_CR && lbcNew != LBP_LF))
+               {
+                       brks[posLast] = LINEBREAK_MUSTBREAK;
+                       lbcCur = resolve_lb_class(lbcNew, lang);
+                       goto nextline;
+               }
+
+               switch (lbcNew)
+               {
+               case LBP_SP:
+                       brks[posLast] = LINEBREAK_NOBREAK;
+                       continue;
+               case LBP_BK:
+               case LBP_LF:
+               case LBP_NL:
+                       brks[posLast] = LINEBREAK_NOBREAK;
+                       lbcCur = LBP_BK;
+                       continue;
+               case LBP_CR:
+                       brks[posLast] = LINEBREAK_NOBREAK;
+                       lbcCur = LBP_CR;
+                       continue;
+               case LBP_CB:
+                       brks[posLast] = LINEBREAK_ALLOWBREAK;
+                       lbcCur = LBP_BA;
+                       continue;
+               default:
+                       break;
+               }
+
+               lbcNew = resolve_lb_class(lbcNew, lang);
+
+               assert(lbcCur <= LBP_JT);
+               assert(lbcNew <= LBP_JT);
+               switch (baTable[lbcCur - 1][lbcNew - 1])
+               {
+               case DIR_BRK:
+                       brks[posLast] = LINEBREAK_ALLOWBREAK;
+                       break;
+               case CMI_BRK:
+               case IND_BRK:
+                       if (lbcLast == LBP_SP)
+                       {
+                               brks[posLast] = LINEBREAK_ALLOWBREAK;
+                       }
+                       else
+                       {
+                               brks[posLast] = LINEBREAK_NOBREAK;
+                       }
+                       break;
+               case CMP_BRK:
+                       brks[posLast] = LINEBREAK_NOBREAK;
+                       if (lbcLast != LBP_SP)
+                               continue;
+                       break;
+               case PRH_BRK:
+                       brks[posLast] = LINEBREAK_NOBREAK;
+                       break;
+               }
+
+               lbcCur = lbcNew;
+       }
+
+       assert(posLast == posCur - 1 && posCur <= len);
+       /* Break after the last character */
+       brks[posLast] = LINEBREAK_MUSTBREAK;
+       /* When the input contains incomplete sequences */
+       while (posCur < len)
+       {
+               brks[posCur++] = LINEBREAK_INSIDEACHAR;
+       }
+}
+
+/**
+ * Sets the line breaking information for a UTF-8 input string.
+ *
+ * @param[in]  s       input UTF-8 string
+ * @param[in]  len     length of the input
+ * @param[in]  lang    language of the input
+ * @param[out] brks    pointer to the output breaking data, containing
+ *                                     #LINEBREAK_MUSTBREAK, #LINEBREAK_ALLOWBREAK,
+ *                                     #LINEBREAK_NOBREAK, or #LINEBREAK_INSIDEACHAR
+ */
+void set_linebreaks_utf8(
+               const utf8_t *s,
+               size_t len,
+               const char *lang,
+               char *brks)
+{
+       set_linebreaks(s, len, lang, brks,
+                                  (get_next_char_t)lb_get_next_char_utf8);
+}
+
+/**
+ * Sets the line breaking information for a UTF-16 input string.
+ *
+ * @param[in]  s       input UTF-16 string
+ * @param[in]  len     length of the input
+ * @param[in]  lang    language of the input
+ * @param[out] brks    pointer to the output breaking data, containing
+ *                                     #LINEBREAK_MUSTBREAK, #LINEBREAK_ALLOWBREAK,
+ *                                     #LINEBREAK_NOBREAK, or #LINEBREAK_INSIDEACHAR
+ */
+void set_linebreaks_utf16(
+               const utf16_t *s,
+               size_t len,
+               const char *lang,
+               char *brks)
+{
+       set_linebreaks(s, len, lang, brks,
+                                  (get_next_char_t)lb_get_next_char_utf16);
+}
+
+/**
+ * Sets the line breaking information for a UTF-32 input string.
+ *
+ * @param[in]  s       input UTF-32 string
+ * @param[in]  len     length of the input
+ * @param[in]  lang    language of the input
+ * @param[out] brks    pointer to the output breaking data, containing
+ *                                     #LINEBREAK_MUSTBREAK, #LINEBREAK_ALLOWBREAK,
+ *                                     #LINEBREAK_NOBREAK, or #LINEBREAK_INSIDEACHAR
+ */
+void set_linebreaks_utf32(
+               const utf32_t *s,
+               size_t len,
+               const char *lang,
+               char *brks)
+{
+       set_linebreaks(s, len, lang, brks,
+                                  (get_next_char_t)lb_get_next_char_utf32);
+}
+
+/**
+ * Tells whether a line break can occur between two Unicode characters.
+ * This is a wrapper function to expose a simple interface.  Generally
+ * speaking, it is better to use #set_linebreaks_utf32 instead, since
+ * complicated cases involving combining marks, spaces, etc. cannot be
+ * correctly processed.
+ *
+ * @param char1 the first Unicode character
+ * @param char2 the second Unicode character
+ * @param lang  language of the input
+ * @return      one of #LINEBREAK_MUSTBREAK, #LINEBREAK_ALLOWBREAK,
+ *                             #LINEBREAK_NOBREAK, or #LINEBREAK_INSIDEACHAR
+ */
+int is_line_breakable(
+               utf32_t char1,
+               utf32_t char2,
+               const char* lang)
+{
+       utf32_t s[2];
+       char brks[2];
+       s[0] = char1;
+       s[1] = char2;
+       set_linebreaks_utf32(s, 2, lang, brks);
+       return brks[0];
+}
diff --git a/src/static_deps/liblinebreak/linebreak.h b/src/static_deps/liblinebreak/linebreak.h
new file mode 100644 (file)
index 0000000..abc1ae9
--- /dev/null
@@ -0,0 +1,87 @@
+/* vim: set tabstop=4 shiftwidth=4: */
+
+/*
+ * Line breaking in a Unicode sequence.  Designed to be used in a
+ * generic text renderer.
+ *
+ * Copyright (C) 2008-2010 Wu Yongwei <wuyongwei at gmail dot com>
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty.  In no event will the author be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute
+ * it freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must
+ *    not claim that you wrote the original software.  If you use this
+ *    software in a product, an acknowledgement in the product
+ *    documentation would be appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must
+ *    not be misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source
+ *    distribution.
+ *
+ * The main reference is Unicode Standard Annex 14 (UAX #14):
+ *             <URL:http://www.unicode.org/reports/tr14/>
+ *
+ * When this library was designed, this annex was at Revision 19, for
+ * Unicode 5.0.0:
+ *             <URL:http://www.unicode.org/reports/tr14/tr14-19.html>
+ *
+ * This library has been updated according to Revision 24, for
+ * Unicode 5.2.0:
+ *             <URL:http://www.unicode.org/reports/tr14/tr14-24.html>
+ *
+ * The Unicode Terms of Use are available at
+ *             <URL:http://www.unicode.org/copyright.html>
+ */
+
+/**
+ * @file       linebreak.h
+ *
+ * Header file for the line breaking algorithm.
+ *
+ * @version    2.0, 2010/01/03
+ * @author     Wu Yongwei
+ */
+
+#ifndef LINEBREAK_H
+#define LINEBREAK_H
+
+#include <stddef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define LINEBREAK_VERSION      0x0200  /**< Version of the library linebreak */
+extern const int linebreak_version;
+
+#ifndef LINEBREAK_UTF_TYPES_DEFINED
+#define LINEBREAK_UTF_TYPES_DEFINED
+typedef unsigned char  utf8_t;         /**< Type for UTF-8 data points */
+typedef unsigned short utf16_t;        /**< Type for UTF-16 data points */
+typedef unsigned int   utf32_t;        /**< Type for UTF-32 data points */
+#endif
+
+#define LINEBREAK_MUSTBREAK            0       /**< Break is mandatory */
+#define LINEBREAK_ALLOWBREAK   1       /**< Break is allowed */
+#define LINEBREAK_NOBREAK              2       /**< No break is possible */
+#define LINEBREAK_INSIDEACHAR  3       /**< A UTF-8/16 sequence is unfinished */
+
+void init_linebreak(void);
+void set_linebreaks_utf8(
+               const utf8_t *s, size_t len, const char* lang, char *brks);
+void set_linebreaks_utf16(
+               const utf16_t *s, size_t len, const char* lang, char *brks);
+void set_linebreaks_utf32(
+               const utf32_t *s, size_t len, const char* lang, char *brks);
+int is_line_breakable(utf32_t char1, utf32_t char2, const char* lang);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LINEBREAK_H */
diff --git a/src/static_deps/liblinebreak/linebreakdata.c b/src/static_deps/liblinebreak/linebreakdata.c
new file mode 100644 (file)
index 0000000..0021479
--- /dev/null
@@ -0,0 +1,1868 @@
+/* The content of this file is generated from:
+# LineBreak-6.0.0.txt
+# Date: 2010-08-18, 17:25:00 PDT [KW]
+*/
+
+#include "linebreak.h"
+#include "linebreakdef.h"
+
+/** Default line breaking properties as from the Unicode Web site. */
+struct LineBreakProperties lb_prop_default[] = {
+       { 0x0000, 0x0008, LBP_CM },
+       { 0x0009, 0x0009, LBP_BA },
+       { 0x000A, 0x000A, LBP_LF },
+       { 0x000B, 0x000C, LBP_BK },
+       { 0x000D, 0x000D, LBP_CR },
+       { 0x000E, 0x001F, LBP_CM },
+       { 0x0020, 0x0020, LBP_SP },
+       { 0x0021, 0x0021, LBP_EX },
+       { 0x0022, 0x0022, LBP_QU },
+       { 0x0023, 0x0023, LBP_AL },
+       { 0x0024, 0x0024, LBP_PR },
+       { 0x0025, 0x0025, LBP_PO },
+       { 0x0026, 0x0026, LBP_AL },
+       { 0x0027, 0x0027, LBP_QU },
+       { 0x0028, 0x0028, LBP_OP },
+       { 0x0029, 0x0029, LBP_CP },
+       { 0x002A, 0x002A, LBP_AL },
+       { 0x002B, 0x002B, LBP_PR },
+       { 0x002C, 0x002C, LBP_IS },
+       { 0x002D, 0x002D, LBP_HY },
+       { 0x002E, 0x002E, LBP_IS },
+       { 0x002F, 0x002F, LBP_SY },
+       { 0x0030, 0x0039, LBP_NU },
+       { 0x003A, 0x003B, LBP_IS },
+       { 0x003C, 0x003E, LBP_AL },
+       { 0x003F, 0x003F, LBP_EX },
+       { 0x0040, 0x005A, LBP_AL },
+       { 0x005B, 0x005B, LBP_OP },
+       { 0x005C, 0x005C, LBP_PR },
+       { 0x005D, 0x005D, LBP_CP },
+       { 0x005E, 0x007A, LBP_AL },
+       { 0x007B, 0x007B, LBP_OP },
+       { 0x007C, 0x007C, LBP_BA },
+       { 0x007D, 0x007D, LBP_CL },
+       { 0x007E, 0x007E, LBP_AL },
+       { 0x007F, 0x0084, LBP_CM },
+       { 0x0085, 0x0085, LBP_NL },
+       { 0x0086, 0x009F, LBP_CM },
+       { 0x00A0, 0x00A0, LBP_GL },
+       { 0x00A1, 0x00A1, LBP_OP },
+       { 0x00A2, 0x00A2, LBP_PO },
+       { 0x00A3, 0x00A5, LBP_PR },
+       { 0x00A6, 0x00A6, LBP_AL },
+       { 0x00A7, 0x00A8, LBP_AI },
+       { 0x00A9, 0x00A9, LBP_AL },
+       { 0x00AA, 0x00AA, LBP_AI },
+       { 0x00AB, 0x00AB, LBP_QU },
+       { 0x00AC, 0x00AC, LBP_AL },
+       { 0x00AD, 0x00AD, LBP_BA },
+       { 0x00AE, 0x00AF, LBP_AL },
+       { 0x00B0, 0x00B0, LBP_PO },
+       { 0x00B1, 0x00B1, LBP_PR },
+       { 0x00B2, 0x00B3, LBP_AI },
+       { 0x00B4, 0x00B4, LBP_BB },
+       { 0x00B5, 0x00B5, LBP_AL },
+       { 0x00B6, 0x00BA, LBP_AI },
+       { 0x00BB, 0x00BB, LBP_QU },
+       { 0x00BC, 0x00BE, LBP_AI },
+       { 0x00BF, 0x00BF, LBP_OP },
+       { 0x00C0, 0x00D6, LBP_AL },
+       { 0x00D7, 0x00D7, LBP_AI },
+       { 0x00D8, 0x00F6, LBP_AL },
+       { 0x00F7, 0x00F7, LBP_AI },
+       { 0x00F8, 0x02C6, LBP_AL },
+       { 0x02C7, 0x02C7, LBP_AI },
+       { 0x02C8, 0x02C8, LBP_BB },
+       { 0x02C9, 0x02CB, LBP_AI },
+       { 0x02CC, 0x02CC, LBP_BB },
+       { 0x02CD, 0x02CD, LBP_AI },
+       { 0x02CE, 0x02CF, LBP_AL },
+       { 0x02D0, 0x02D0, LBP_AI },
+       { 0x02D1, 0x02D7, LBP_AL },
+       { 0x02D8, 0x02DB, LBP_AI },
+       { 0x02DC, 0x02DC, LBP_AL },
+       { 0x02DD, 0x02DD, LBP_AI },
+       { 0x02DE, 0x02DE, LBP_AL },
+       { 0x02DF, 0x02DF, LBP_BB },
+       { 0x02E0, 0x02FF, LBP_AL },
+       { 0x0300, 0x034E, LBP_CM },
+       { 0x034F, 0x034F, LBP_GL },
+       { 0x0350, 0x035B, LBP_CM },
+       { 0x035C, 0x0362, LBP_GL },
+       { 0x0363, 0x036F, LBP_CM },
+       { 0x0370, 0x037D, LBP_AL },
+       { 0x037E, 0x037E, LBP_IS },
+       { 0x0384, 0x0482, LBP_AL },
+       { 0x0483, 0x0489, LBP_CM },
+       { 0x048A, 0x0587, LBP_AL },
+       { 0x0589, 0x0589, LBP_IS },
+       { 0x058A, 0x058A, LBP_BA },
+       { 0x0591, 0x05BD, LBP_CM },
+       { 0x05BE, 0x05BE, LBP_BA },
+       { 0x05BF, 0x05BF, LBP_CM },
+       { 0x05C0, 0x05C0, LBP_AL },
+       { 0x05C1, 0x05C2, LBP_CM },
+       { 0x05C3, 0x05C3, LBP_AL },
+       { 0x05C4, 0x05C5, LBP_CM },
+       { 0x05C6, 0x05C6, LBP_EX },
+       { 0x05C7, 0x05C7, LBP_CM },
+       { 0x05D0, 0x0608, LBP_AL },
+       { 0x0609, 0x060B, LBP_PO },
+       { 0x060C, 0x060D, LBP_IS },
+       { 0x060E, 0x060F, LBP_AL },
+       { 0x0610, 0x061A, LBP_CM },
+       { 0x061B, 0x061F, LBP_EX },
+       { 0x0620, 0x064A, LBP_AL },
+       { 0x064B, 0x065F, LBP_CM },
+       { 0x0660, 0x0669, LBP_NU },
+       { 0x066A, 0x066A, LBP_PO },
+       { 0x066B, 0x066C, LBP_NU },
+       { 0x066D, 0x066F, LBP_AL },
+       { 0x0670, 0x0670, LBP_CM },
+       { 0x0671, 0x06D3, LBP_AL },
+       { 0x06D4, 0x06D4, LBP_EX },
+       { 0x06D5, 0x06D5, LBP_AL },
+       { 0x06D6, 0x06DC, LBP_CM },
+       { 0x06DD, 0x06DE, LBP_AL },
+       { 0x06DF, 0x06E4, LBP_CM },
+       { 0x06E5, 0x06E6, LBP_AL },
+       { 0x06E7, 0x06E8, LBP_CM },
+       { 0x06E9, 0x06E9, LBP_AL },
+       { 0x06EA, 0x06ED, LBP_CM },
+       { 0x06EE, 0x06EF, LBP_AL },
+       { 0x06F0, 0x06F9, LBP_NU },
+       { 0x06FA, 0x0710, LBP_AL },
+       { 0x0711, 0x0711, LBP_CM },
+       { 0x0712, 0x072F, LBP_AL },
+       { 0x0730, 0x074A, LBP_CM },
+       { 0x074D, 0x07A5, LBP_AL },
+       { 0x07A6, 0x07B0, LBP_CM },
+       { 0x07B1, 0x07B1, LBP_AL },
+       { 0x07C0, 0x07C9, LBP_NU },
+       { 0x07CA, 0x07EA, LBP_AL },
+       { 0x07EB, 0x07F3, LBP_CM },
+       { 0x07F4, 0x07F7, LBP_AL },
+       { 0x07F8, 0x07F8, LBP_IS },
+       { 0x07F9, 0x07F9, LBP_EX },
+       { 0x07FA, 0x0815, LBP_AL },
+       { 0x0816, 0x0819, LBP_CM },
+       { 0x081A, 0x081A, LBP_AL },
+       { 0x081B, 0x0823, LBP_CM },
+       { 0x0824, 0x0824, LBP_AL },
+       { 0x0825, 0x0827, LBP_CM },
+       { 0x0828, 0x0828, LBP_AL },
+       { 0x0829, 0x082D, LBP_CM },
+       { 0x0830, 0x0858, LBP_AL },
+       { 0x0859, 0x085B, LBP_CM },
+       { 0x085E, 0x085E, LBP_AL },
+       { 0x0900, 0x0903, LBP_CM },
+       { 0x0904, 0x0939, LBP_AL },
+       { 0x093A, 0x093C, LBP_CM },
+       { 0x093D, 0x093D, LBP_AL },
+       { 0x093E, 0x094F, LBP_CM },
+       { 0x0950, 0x0950, LBP_AL },
+       { 0x0951, 0x0957, LBP_CM },
+       { 0x0958, 0x0961, LBP_AL },
+       { 0x0962, 0x0963, LBP_CM },
+       { 0x0964, 0x0965, LBP_BA },
+       { 0x0966, 0x096F, LBP_NU },
+       { 0x0970, 0x097F, LBP_AL },
+       { 0x0981, 0x0983, LBP_CM },
+       { 0x0985, 0x09B9, LBP_AL },
+       { 0x09BC, 0x09BC, LBP_CM },
+       { 0x09BD, 0x09BD, LBP_AL },
+       { 0x09BE, 0x09CD, LBP_CM },
+       { 0x09CE, 0x09CE, LBP_AL },
+       { 0x09D7, 0x09D7, LBP_CM },
+       { 0x09DC, 0x09E1, LBP_AL },
+       { 0x09E2, 0x09E3, LBP_CM },
+       { 0x09E6, 0x09EF, LBP_NU },
+       { 0x09F0, 0x09F1, LBP_AL },
+       { 0x09F2, 0x09F3, LBP_PO },
+       { 0x09F4, 0x09F8, LBP_AL },
+       { 0x09F9, 0x09F9, LBP_PO },
+       { 0x09FA, 0x09FA, LBP_AL },
+       { 0x09FB, 0x09FB, LBP_PR },
+       { 0x0A01, 0x0A03, LBP_CM },
+       { 0x0A05, 0x0A39, LBP_AL },
+       { 0x0A3C, 0x0A51, LBP_CM },
+       { 0x0A59, 0x0A5E, LBP_AL },
+       { 0x0A66, 0x0A6F, LBP_NU },
+       { 0x0A70, 0x0A71, LBP_CM },
+       { 0x0A72, 0x0A74, LBP_AL },
+       { 0x0A75, 0x0A83, LBP_CM },
+       { 0x0A85, 0x0AB9, LBP_AL },
+       { 0x0ABC, 0x0ABC, LBP_CM },
+       { 0x0ABD, 0x0ABD, LBP_AL },
+       { 0x0ABE, 0x0ACD, LBP_CM },
+       { 0x0AD0, 0x0AE1, LBP_AL },
+       { 0x0AE2, 0x0AE3, LBP_CM },
+       { 0x0AE6, 0x0AEF, LBP_NU },
+       { 0x0AF1, 0x0AF1, LBP_PR },
+       { 0x0B01, 0x0B03, LBP_CM },
+       { 0x0B05, 0x0B39, LBP_AL },
+       { 0x0B3C, 0x0B3C, LBP_CM },
+       { 0x0B3D, 0x0B3D, LBP_AL },
+       { 0x0B3E, 0x0B57, LBP_CM },
+       { 0x0B5C, 0x0B61, LBP_AL },
+       { 0x0B62, 0x0B63, LBP_CM },
+       { 0x0B66, 0x0B6F, LBP_NU },
+       { 0x0B70, 0x0B77, LBP_AL },
+       { 0x0B82, 0x0B82, LBP_CM },
+       { 0x0B83, 0x0BB9, LBP_AL },
+       { 0x0BBE, 0x0BCD, LBP_CM },
+       { 0x0BD0, 0x0BD0, LBP_AL },
+       { 0x0BD7, 0x0BD7, LBP_CM },
+       { 0x0BE6, 0x0BEF, LBP_NU },
+       { 0x0BF0, 0x0BF8, LBP_AL },
+       { 0x0BF9, 0x0BF9, LBP_PR },
+       { 0x0BFA, 0x0BFA, LBP_AL },
+       { 0x0C01, 0x0C03, LBP_CM },
+       { 0x0C05, 0x0C3D, LBP_AL },
+       { 0x0C3E, 0x0C56, LBP_CM },
+       { 0x0C58, 0x0C61, LBP_AL },
+       { 0x0C62, 0x0C63, LBP_CM },
+       { 0x0C66, 0x0C6F, LBP_NU },
+       { 0x0C78, 0x0C7F, LBP_AL },
+       { 0x0C82, 0x0C83, LBP_CM },
+       { 0x0C85, 0x0CB9, LBP_AL },
+       { 0x0CBC, 0x0CBC, LBP_CM },
+       { 0x0CBD, 0x0CBD, LBP_AL },
+       { 0x0CBE, 0x0CD6, LBP_CM },
+       { 0x0CDE, 0x0CE1, LBP_AL },
+       { 0x0CE2, 0x0CE3, LBP_CM },
+       { 0x0CE6, 0x0CEF, LBP_NU },
+       { 0x0CF1, 0x0CF2, LBP_AL },
+       { 0x0D02, 0x0D03, LBP_CM },
+       { 0x0D05, 0x0D3D, LBP_AL },
+       { 0x0D3E, 0x0D4D, LBP_CM },
+       { 0x0D4E, 0x0D4E, LBP_AL },
+       { 0x0D57, 0x0D57, LBP_CM },
+       { 0x0D60, 0x0D61, LBP_AL },
+       { 0x0D62, 0x0D63, LBP_CM },
+       { 0x0D66, 0x0D6F, LBP_NU },
+       { 0x0D70, 0x0D75, LBP_AL },
+       { 0x0D79, 0x0D79, LBP_PO },
+       { 0x0D7A, 0x0D7F, LBP_AL },
+       { 0x0D82, 0x0D83, LBP_CM },
+       { 0x0D85, 0x0DC6, LBP_AL },
+       { 0x0DCA, 0x0DF3, LBP_CM },
+       { 0x0DF4, 0x0DF4, LBP_AL },
+       { 0x0E01, 0x0E3A, LBP_SA },
+       { 0x0E3F, 0x0E3F, LBP_PR },
+       { 0x0E40, 0x0E4E, LBP_SA },
+       { 0x0E4F, 0x0E4F, LBP_AL },
+       { 0x0E50, 0x0E59, LBP_NU },
+       { 0x0E5A, 0x0E5B, LBP_BA },
+       { 0x0E81, 0x0ECD, LBP_SA },
+       { 0x0ED0, 0x0ED9, LBP_NU },
+       { 0x0EDC, 0x0EDD, LBP_SA },
+       { 0x0F00, 0x0F00, LBP_AL },
+       { 0x0F01, 0x0F04, LBP_BB },
+       { 0x0F05, 0x0F05, LBP_AL },
+       { 0x0F06, 0x0F07, LBP_BB },
+       { 0x0F08, 0x0F08, LBP_GL },
+       { 0x0F09, 0x0F0A, LBP_BB },
+       { 0x0F0B, 0x0F0B, LBP_BA },
+       { 0x0F0C, 0x0F0C, LBP_GL },
+       { 0x0F0D, 0x0F11, LBP_EX },
+       { 0x0F12, 0x0F12, LBP_GL },
+       { 0x0F13, 0x0F13, LBP_AL },
+       { 0x0F14, 0x0F14, LBP_EX },
+       { 0x0F15, 0x0F17, LBP_AL },
+       { 0x0F18, 0x0F19, LBP_CM },
+       { 0x0F1A, 0x0F1F, LBP_AL },
+       { 0x0F20, 0x0F29, LBP_NU },
+       { 0x0F2A, 0x0F33, LBP_AL },
+       { 0x0F34, 0x0F34, LBP_BA },
+       { 0x0F35, 0x0F35, LBP_CM },
+       { 0x0F36, 0x0F36, LBP_AL },
+       { 0x0F37, 0x0F37, LBP_CM },
+       { 0x0F38, 0x0F38, LBP_AL },
+       { 0x0F39, 0x0F39, LBP_CM },
+       { 0x0F3A, 0x0F3A, LBP_OP },
+       { 0x0F3B, 0x0F3B, LBP_CL },
+       { 0x0F3C, 0x0F3C, LBP_OP },
+       { 0x0F3D, 0x0F3D, LBP_CL },
+       { 0x0F3E, 0x0F3F, LBP_CM },
+       { 0x0F40, 0x0F6C, LBP_AL },
+       { 0x0F71, 0x0F7E, LBP_CM },
+       { 0x0F7F, 0x0F7F, LBP_BA },
+       { 0x0F80, 0x0F84, LBP_CM },
+       { 0x0F85, 0x0F85, LBP_BA },
+       { 0x0F86, 0x0F87, LBP_CM },
+       { 0x0F88, 0x0F8C, LBP_AL },
+       { 0x0F8D, 0x0FBC, LBP_CM },
+       { 0x0FBE, 0x0FBF, LBP_BA },
+       { 0x0FC0, 0x0FC5, LBP_AL },
+       { 0x0FC6, 0x0FC6, LBP_CM },
+       { 0x0FC7, 0x0FCF, LBP_AL },
+       { 0x0FD0, 0x0FD1, LBP_BB },
+       { 0x0FD2, 0x0FD2, LBP_BA },
+       { 0x0FD3, 0x0FD3, LBP_BB },
+       { 0x0FD4, 0x0FD8, LBP_AL },
+       { 0x0FD9, 0x0FDA, LBP_GL },
+       { 0x1000, 0x103F, LBP_SA },
+       { 0x1040, 0x1049, LBP_NU },
+       { 0x104A, 0x104B, LBP_BA },
+       { 0x104C, 0x104F, LBP_AL },
+       { 0x1050, 0x108F, LBP_SA },
+       { 0x1090, 0x1099, LBP_NU },
+       { 0x109A, 0x109F, LBP_SA },
+       { 0x10A0, 0x10FC, LBP_AL },
+       { 0x1100, 0x115F, LBP_JL },
+       { 0x1160, 0x11A7, LBP_JV },
+       { 0x11A8, 0x11FF, LBP_JT },
+       { 0x1200, 0x135A, LBP_AL },
+       { 0x135D, 0x135F, LBP_CM },
+       { 0x1360, 0x1360, LBP_AL },
+       { 0x1361, 0x1361, LBP_BA },
+       { 0x1362, 0x13F4, LBP_AL },
+       { 0x1400, 0x1400, LBP_BA },
+       { 0x1401, 0x167F, LBP_AL },
+       { 0x1680, 0x1680, LBP_BA },
+       { 0x1681, 0x169A, LBP_AL },
+       { 0x169B, 0x169B, LBP_OP },
+       { 0x169C, 0x169C, LBP_CL },
+       { 0x16A0, 0x16EA, LBP_AL },
+       { 0x16EB, 0x16ED, LBP_BA },
+       { 0x16EE, 0x1711, LBP_AL },
+       { 0x1712, 0x1714, LBP_CM },
+       { 0x1720, 0x1731, LBP_AL },
+       { 0x1732, 0x1734, LBP_CM },
+       { 0x1735, 0x1736, LBP_BA },
+       { 0x1740, 0x1751, LBP_AL },
+       { 0x1752, 0x1753, LBP_CM },
+       { 0x1760, 0x1770, LBP_AL },
+       { 0x1772, 0x1773, LBP_CM },
+       { 0x1780, 0x17D3, LBP_SA },
+       { 0x17D4, 0x17D5, LBP_BA },
+       { 0x17D6, 0x17D6, LBP_NS },
+       { 0x17D7, 0x17D7, LBP_SA },
+       { 0x17D8, 0x17D8, LBP_BA },
+       { 0x17D9, 0x17D9, LBP_AL },
+       { 0x17DA, 0x17DA, LBP_BA },
+       { 0x17DB, 0x17DB, LBP_PR },
+       { 0x17DC, 0x17DD, LBP_SA },
+       { 0x17E0, 0x17E9, LBP_NU },
+       { 0x17F0, 0x1801, LBP_AL },
+       { 0x1802, 0x1803, LBP_EX },
+       { 0x1804, 0x1805, LBP_BA },
+       { 0x1806, 0x1806, LBP_BB },
+       { 0x1807, 0x1807, LBP_AL },
+       { 0x1808, 0x1809, LBP_EX },
+       { 0x180A, 0x180A, LBP_AL },
+       { 0x180B, 0x180D, LBP_CM },
+       { 0x180E, 0x180E, LBP_GL },
+       { 0x1810, 0x1819, LBP_NU },
+       { 0x1820, 0x18A8, LBP_AL },
+       { 0x18A9, 0x18A9, LBP_CM },
+       { 0x18AA, 0x191C, LBP_AL },
+       { 0x1920, 0x193B, LBP_CM },
+       { 0x1940, 0x1940, LBP_AL },
+       { 0x1944, 0x1945, LBP_EX },
+       { 0x1946, 0x194F, LBP_NU },
+       { 0x1950, 0x19C9, LBP_SA },
+       { 0x19D0, 0x19D9, LBP_NU },
+       { 0x19DA, 0x19DF, LBP_SA },
+       { 0x19E0, 0x1A16, LBP_AL },
+       { 0x1A17, 0x1A1B, LBP_CM },
+       { 0x1A1E, 0x1A1F, LBP_AL },
+       { 0x1A20, 0x1A7C, LBP_SA },
+       { 0x1A7F, 0x1A7F, LBP_CM },
+       { 0x1A80, 0x1A99, LBP_NU },
+       { 0x1AA0, 0x1AAD, LBP_SA },
+       { 0x1B00, 0x1B04, LBP_CM },
+       { 0x1B05, 0x1B33, LBP_AL },
+       { 0x1B34, 0x1B44, LBP_CM },
+       { 0x1B45, 0x1B4B, LBP_AL },
+       { 0x1B50, 0x1B59, LBP_NU },
+       { 0x1B5A, 0x1B5B, LBP_BA },
+       { 0x1B5C, 0x1B5C, LBP_AL },
+       { 0x1B5D, 0x1B60, LBP_BA },
+       { 0x1B61, 0x1B6A, LBP_AL },
+       { 0x1B6B, 0x1B73, LBP_CM },
+       { 0x1B74, 0x1B7C, LBP_AL },
+       { 0x1B80, 0x1B82, LBP_CM },
+       { 0x1B83, 0x1BA0, LBP_AL },
+       { 0x1BA1, 0x1BAA, LBP_CM },
+       { 0x1BAE, 0x1BAF, LBP_AL },
+       { 0x1BB0, 0x1BB9, LBP_NU },
+       { 0x1BC0, 0x1BE5, LBP_AL },
+       { 0x1BE6, 0x1BF3, LBP_CM },
+       { 0x1BFC, 0x1C23, LBP_AL },
+       { 0x1C24, 0x1C37, LBP_CM },
+       { 0x1C3B, 0x1C3F, LBP_BA },
+       { 0x1C40, 0x1C49, LBP_NU },
+       { 0x1C4D, 0x1C4F, LBP_AL },
+       { 0x1C50, 0x1C59, LBP_NU },
+       { 0x1C5A, 0x1C7D, LBP_AL },
+       { 0x1C7E, 0x1C7F, LBP_BA },
+       { 0x1CD0, 0x1CD2, LBP_CM },
+       { 0x1CD3, 0x1CD3, LBP_AL },
+       { 0x1CD4, 0x1CE8, LBP_CM },
+       { 0x1CE9, 0x1CEC, LBP_AL },
+       { 0x1CED, 0x1CED, LBP_CM },
+       { 0x1CEE, 0x1CF1, LBP_AL },
+       { 0x1CF2, 0x1CF2, LBP_CM },
+       { 0x1D00, 0x1DBF, LBP_AL },
+       { 0x1DC0, 0x1DFF, LBP_CM },
+       { 0x1E00, 0x1FFC, LBP_AL },
+       { 0x1FFD, 0x1FFD, LBP_BB },
+       { 0x1FFE, 0x1FFE, LBP_AL },
+       { 0x2000, 0x2006, LBP_BA },
+       { 0x2007, 0x2007, LBP_GL },
+       { 0x2008, 0x200A, LBP_BA },
+       { 0x200B, 0x200B, LBP_ZW },
+       { 0x200C, 0x200F, LBP_CM },
+       { 0x2010, 0x2010, LBP_BA },
+       { 0x2011, 0x2011, LBP_GL },
+       { 0x2012, 0x2013, LBP_BA },
+       { 0x2014, 0x2014, LBP_B2 },
+       { 0x2015, 0x2016, LBP_AI },
+       { 0x2017, 0x2017, LBP_AL },
+       { 0x2018, 0x2019, LBP_QU },
+       { 0x201A, 0x201A, LBP_OP },
+       { 0x201B, 0x201D, LBP_QU },
+       { 0x201E, 0x201E, LBP_OP },
+       { 0x201F, 0x201F, LBP_QU },
+       { 0x2020, 0x2021, LBP_AI },
+       { 0x2022, 0x2023, LBP_AL },
+       { 0x2024, 0x2026, LBP_IN },
+       { 0x2027, 0x2027, LBP_BA },
+       { 0x2028, 0x2029, LBP_BK },
+       { 0x202A, 0x202E, LBP_CM },
+       { 0x202F, 0x202F, LBP_GL },
+       { 0x2030, 0x2037, LBP_PO },
+       { 0x2038, 0x2038, LBP_AL },
+       { 0x2039, 0x203A, LBP_QU },
+       { 0x203B, 0x203B, LBP_AI },
+       { 0x203C, 0x203D, LBP_NS },
+       { 0x203E, 0x2043, LBP_AL },
+       { 0x2044, 0x2044, LBP_IS },
+       { 0x2045, 0x2045, LBP_OP },
+       { 0x2046, 0x2046, LBP_CL },
+       { 0x2047, 0x2049, LBP_NS },
+       { 0x204A, 0x2055, LBP_AL },
+       { 0x2056, 0x2056, LBP_BA },
+       { 0x2057, 0x2057, LBP_AL },
+       { 0x2058, 0x205B, LBP_BA },
+       { 0x205C, 0x205C, LBP_AL },
+       { 0x205D, 0x205F, LBP_BA },
+       { 0x2060, 0x2060, LBP_WJ },
+       { 0x2061, 0x2064, LBP_AL },
+       { 0x206A, 0x206F, LBP_CM },
+       { 0x2070, 0x2071, LBP_AL },
+       { 0x2074, 0x2074, LBP_AI },
+       { 0x2075, 0x207C, LBP_AL },
+       { 0x207D, 0x207D, LBP_OP },
+       { 0x207E, 0x207E, LBP_CL },
+       { 0x207F, 0x207F, LBP_AI },
+       { 0x2080, 0x2080, LBP_AL },
+       { 0x2081, 0x2084, LBP_AI },
+       { 0x2085, 0x208C, LBP_AL },
+       { 0x208D, 0x208D, LBP_OP },
+       { 0x208E, 0x208E, LBP_CL },
+       { 0x2090, 0x209C, LBP_AL },
+       { 0x20A0, 0x20A6, LBP_PR },
+       { 0x20A7, 0x20A7, LBP_PO },
+       { 0x20A8, 0x20B5, LBP_PR },
+       { 0x20B6, 0x20B6, LBP_PO },
+       { 0x20B7, 0x20B9, LBP_PR },
+       { 0x20D0, 0x20F0, LBP_CM },
+       { 0x2100, 0x2102, LBP_AL },
+       { 0x2103, 0x2103, LBP_PO },
+       { 0x2104, 0x2104, LBP_AL },
+       { 0x2105, 0x2105, LBP_AI },
+       { 0x2106, 0x2108, LBP_AL },
+       { 0x2109, 0x2109, LBP_PO },
+       { 0x210A, 0x2112, LBP_AL },
+       { 0x2113, 0x2113, LBP_AI },
+       { 0x2114, 0x2115, LBP_AL },
+       { 0x2116, 0x2116, LBP_PR },
+       { 0x2117, 0x2120, LBP_AL },
+       { 0x2121, 0x2122, LBP_AI },
+       { 0x2123, 0x212A, LBP_AL },
+       { 0x212B, 0x212B, LBP_AI },
+       { 0x212C, 0x2153, LBP_AL },
+       { 0x2154, 0x2155, LBP_AI },
+       { 0x2156, 0x215A, LBP_AL },
+       { 0x215B, 0x215B, LBP_AI },
+       { 0x215C, 0x215D, LBP_AL },
+       { 0x215E, 0x215E, LBP_AI },
+       { 0x215F, 0x215F, LBP_AL },
+       { 0x2160, 0x216B, LBP_AI },
+       { 0x216C, 0x216F, LBP_AL },
+       { 0x2170, 0x2179, LBP_AI },
+       { 0x217A, 0x2188, LBP_AL },
+       { 0x2189, 0x2199, LBP_AI },
+       { 0x219A, 0x21D1, LBP_AL },
+       { 0x21D2, 0x21D2, LBP_AI },
+       { 0x21D3, 0x21D3, LBP_AL },
+       { 0x21D4, 0x21D4, LBP_AI },
+       { 0x21D5, 0x21FF, LBP_AL },
+       { 0x2200, 0x2200, LBP_AI },
+       { 0x2201, 0x2201, LBP_AL },
+       { 0x2202, 0x2203, LBP_AI },
+       { 0x2204, 0x2206, LBP_AL },
+       { 0x2207, 0x2208, LBP_AI },
+       { 0x2209, 0x220A, LBP_AL },
+       { 0x220B, 0x220B, LBP_AI },
+       { 0x220C, 0x220E, LBP_AL },
+       { 0x220F, 0x220F, LBP_AI },
+       { 0x2210, 0x2210, LBP_AL },
+       { 0x2211, 0x2211, LBP_AI },
+       { 0x2212, 0x2213, LBP_PR },
+       { 0x2214, 0x2214, LBP_AL },
+       { 0x2215, 0x2215, LBP_AI },
+       { 0x2216, 0x2219, LBP_AL },
+       { 0x221A, 0x221A, LBP_AI },
+       { 0x221B, 0x221C, LBP_AL },
+       { 0x221D, 0x2220, LBP_AI },
+       { 0x2221, 0x2222, LBP_AL },
+       { 0x2223, 0x2223, LBP_AI },
+       { 0x2224, 0x2224, LBP_AL },
+       { 0x2225, 0x2225, LBP_AI },
+       { 0x2226, 0x2226, LBP_AL },
+       { 0x2227, 0x222C, LBP_AI },
+       { 0x222D, 0x222D, LBP_AL },
+       { 0x222E, 0x222E, LBP_AI },
+       { 0x222F, 0x2233, LBP_AL },
+       { 0x2234, 0x2237, LBP_AI },
+       { 0x2238, 0x223B, LBP_AL },
+       { 0x223C, 0x223D, LBP_AI },
+       { 0x223E, 0x2247, LBP_AL },
+       { 0x2248, 0x2248, LBP_AI },
+       { 0x2249, 0x224B, LBP_AL },
+       { 0x224C, 0x224C, LBP_AI },
+       { 0x224D, 0x2251, LBP_AL },
+       { 0x2252, 0x2252, LBP_AI },
+       { 0x2253, 0x225F, LBP_AL },
+       { 0x2260, 0x2261, LBP_AI },
+       { 0x2262, 0x2263, LBP_AL },
+       { 0x2264, 0x2267, LBP_AI },
+       { 0x2268, 0x2269, LBP_AL },
+       { 0x226A, 0x226B, LBP_AI },
+       { 0x226C, 0x226D, LBP_AL },
+       { 0x226E, 0x226F, LBP_AI },
+       { 0x2270, 0x2281, LBP_AL },
+       { 0x2282, 0x2283, LBP_AI },
+       { 0x2284, 0x2285, LBP_AL },
+       { 0x2286, 0x2287, LBP_AI },
+       { 0x2288, 0x2294, LBP_AL },
+       { 0x2295, 0x2295, LBP_AI },
+       { 0x2296, 0x2298, LBP_AL },
+       { 0x2299, 0x2299, LBP_AI },
+       { 0x229A, 0x22A4, LBP_AL },
+       { 0x22A5, 0x22A5, LBP_AI },
+       { 0x22A6, 0x22BE, LBP_AL },
+       { 0x22BF, 0x22BF, LBP_AI },
+       { 0x22C0, 0x2311, LBP_AL },
+       { 0x2312, 0x2312, LBP_AI },
+       { 0x2313, 0x2328, LBP_AL },
+       { 0x2329, 0x2329, LBP_OP },
+       { 0x232A, 0x232A, LBP_CL },
+       { 0x232B, 0x244A, LBP_AL },
+       { 0x2460, 0x24FE, LBP_AI },
+       { 0x24FF, 0x24FF, LBP_AL },
+       { 0x2500, 0x254B, LBP_AI },
+       { 0x254C, 0x254F, LBP_AL },
+       { 0x2550, 0x2574, LBP_AI },
+       { 0x2575, 0x257F, LBP_AL },
+       { 0x2580, 0x258F, LBP_AI },
+       { 0x2590, 0x2591, LBP_AL },
+       { 0x2592, 0x2595, LBP_AI },
+       { 0x2596, 0x259F, LBP_AL },
+       { 0x25A0, 0x25A1, LBP_AI },
+       { 0x25A2, 0x25A2, LBP_AL },
+       { 0x25A3, 0x25A9, LBP_AI },
+       { 0x25AA, 0x25B1, LBP_AL },
+       { 0x25B2, 0x25B3, LBP_AI },
+       { 0x25B4, 0x25B5, LBP_AL },
+       { 0x25B6, 0x25B7, LBP_AI },
+       { 0x25B8, 0x25BB, LBP_AL },
+       { 0x25BC, 0x25BD, LBP_AI },
+       { 0x25BE, 0x25BF, LBP_AL },
+       { 0x25C0, 0x25C1, LBP_AI },
+       { 0x25C2, 0x25C5, LBP_AL },
+       { 0x25C6, 0x25C8, LBP_AI },
+       { 0x25C9, 0x25CA, LBP_AL },
+       { 0x25CB, 0x25CB, LBP_AI },
+       { 0x25CC, 0x25CD, LBP_AL },
+       { 0x25CE, 0x25D1, LBP_AI },
+       { 0x25D2, 0x25E1, LBP_AL },
+       { 0x25E2, 0x25E5, LBP_AI },
+       { 0x25E6, 0x25EE, LBP_AL },
+       { 0x25EF, 0x25EF, LBP_AI },
+       { 0x25F0, 0x2604, LBP_AL },
+       { 0x2605, 0x2606, LBP_AI },
+       { 0x2607, 0x2608, LBP_AL },
+       { 0x2609, 0x2609, LBP_AI },
+       { 0x260A, 0x260D, LBP_AL },
+       { 0x260E, 0x260F, LBP_AI },
+       { 0x2610, 0x2613, LBP_AL },
+       { 0x2614, 0x2617, LBP_AI },
+       { 0x2618, 0x261B, LBP_AL },
+       { 0x261C, 0x261C, LBP_AI },
+       { 0x261D, 0x261D, LBP_AL },
+       { 0x261E, 0x261E, LBP_AI },
+       { 0x261F, 0x263F, LBP_AL },
+       { 0x2640, 0x2640, LBP_AI },
+       { 0x2641, 0x2641, LBP_AL },
+       { 0x2642, 0x2642, LBP_AI },
+       { 0x2643, 0x265F, LBP_AL },
+       { 0x2660, 0x2661, LBP_AI },
+       { 0x2662, 0x2662, LBP_AL },
+       { 0x2663, 0x2665, LBP_AI },
+       { 0x2666, 0x2666, LBP_AL },
+       { 0x2667, 0x266A, LBP_AI },
+       { 0x266B, 0x266B, LBP_AL },
+       { 0x266C, 0x266D, LBP_AI },
+       { 0x266E, 0x266E, LBP_AL },
+       { 0x266F, 0x266F, LBP_AI },
+       { 0x2670, 0x269D, LBP_AL },
+       { 0x269E, 0x269F, LBP_AI },
+       { 0x26A0, 0x26BD, LBP_AL },
+       { 0x26BE, 0x26BF, LBP_AI },
+       { 0x26C0, 0x26C3, LBP_AL },
+       { 0x26C4, 0x26CD, LBP_AI },
+       { 0x26CE, 0x26CE, LBP_AL },
+       { 0x26CF, 0x26E1, LBP_AI },
+       { 0x26E2, 0x26E2, LBP_AL },
+       { 0x26E3, 0x26E3, LBP_AI },
+       { 0x26E4, 0x26E7, LBP_AL },
+       { 0x26E8, 0x26FF, LBP_AI },
+       { 0x2701, 0x2756, LBP_AL },
+       { 0x2757, 0x2757, LBP_AI },
+       { 0x2758, 0x275A, LBP_AL },
+       { 0x275B, 0x275E, LBP_QU },
+       { 0x275F, 0x2761, LBP_AL },
+       { 0x2762, 0x2763, LBP_EX },
+       { 0x2764, 0x2767, LBP_AL },
+       { 0x2768, 0x2768, LBP_OP },
+       { 0x2769, 0x2769, LBP_CL },
+       { 0x276A, 0x276A, LBP_OP },
+       { 0x276B, 0x276B, LBP_CL },
+       { 0x276C, 0x276C, LBP_OP },
+       { 0x276D, 0x276D, LBP_CL },
+       { 0x276E, 0x276E, LBP_OP },
+       { 0x276F, 0x276F, LBP_CL },
+       { 0x2770, 0x2770, LBP_OP },
+       { 0x2771, 0x2771, LBP_CL },
+       { 0x2772, 0x2772, LBP_OP },
+       { 0x2773, 0x2773, LBP_CL },
+       { 0x2774, 0x2774, LBP_OP },
+       { 0x2775, 0x2775, LBP_CL },
+       { 0x2776, 0x2793, LBP_AI },
+       { 0x2794, 0x27C4, LBP_AL },
+       { 0x27C5, 0x27C5, LBP_OP },
+       { 0x27C6, 0x27C6, LBP_CL },
+       { 0x27C7, 0x27E5, LBP_AL },
+       { 0x27E6, 0x27E6, LBP_OP },
+       { 0x27E7, 0x27E7, LBP_CL },
+       { 0x27E8, 0x27E8, LBP_OP },
+       { 0x27E9, 0x27E9, LBP_CL },
+       { 0x27EA, 0x27EA, LBP_OP },
+       { 0x27EB, 0x27EB, LBP_CL },
+       { 0x27EC, 0x27EC, LBP_OP },
+       { 0x27ED, 0x27ED, LBP_CL },
+       { 0x27EE, 0x27EE, LBP_OP },
+       { 0x27EF, 0x27EF, LBP_CL },
+       { 0x27F0, 0x2982, LBP_AL },
+       { 0x2983, 0x2983, LBP_OP },
+       { 0x2984, 0x2984, LBP_CL },
+       { 0x2985, 0x2985, LBP_OP },
+       { 0x2986, 0x2986, LBP_CL },
+       { 0x2987, 0x2987, LBP_OP },
+       { 0x2988, 0x2988, LBP_CL },
+       { 0x2989, 0x2989, LBP_OP },
+       { 0x298A, 0x298A, LBP_CL },
+       { 0x298B, 0x298B, LBP_OP },
+       { 0x298C, 0x298C, LBP_CL },
+       { 0x298D, 0x298D, LBP_OP },
+       { 0x298E, 0x298E, LBP_CL },
+       { 0x298F, 0x298F, LBP_OP },
+       { 0x2990, 0x2990, LBP_CL },
+       { 0x2991, 0x2991, LBP_OP },
+       { 0x2992, 0x2992, LBP_CL },
+       { 0x2993, 0x2993, LBP_OP },
+       { 0x2994, 0x2994, LBP_CL },
+       { 0x2995, 0x2995, LBP_OP },
+       { 0x2996, 0x2996, LBP_CL },
+       { 0x2997, 0x2997, LBP_OP },
+       { 0x2998, 0x2998, LBP_CL },
+       { 0x2999, 0x29D7, LBP_AL },
+       { 0x29D8, 0x29D8, LBP_OP },
+       { 0x29D9, 0x29D9, LBP_CL },
+       { 0x29DA, 0x29DA, LBP_OP },
+       { 0x29DB, 0x29DB, LBP_CL },
+       { 0x29DC, 0x29FB, LBP_AL },
+       { 0x29FC, 0x29FC, LBP_OP },
+       { 0x29FD, 0x29FD, LBP_CL },
+       { 0x29FE, 0x2B54, LBP_AL },
+       { 0x2B55, 0x2B59, LBP_AI },
+       { 0x2C00, 0x2CEE, LBP_AL },
+       { 0x2CEF, 0x2CF1, LBP_CM },
+       { 0x2CF9, 0x2CF9, LBP_EX },
+       { 0x2CFA, 0x2CFC, LBP_BA },
+       { 0x2CFD, 0x2CFD, LBP_AL },
+       { 0x2CFE, 0x2CFE, LBP_EX },
+       { 0x2CFF, 0x2CFF, LBP_BA },
+       { 0x2D00, 0x2D6F, LBP_AL },
+       { 0x2D70, 0x2D70, LBP_BA },
+       { 0x2D7F, 0x2D7F, LBP_CM },
+       { 0x2D80, 0x2DDE, LBP_AL },
+       { 0x2DE0, 0x2DFF, LBP_CM },
+       { 0x2E00, 0x2E0D, LBP_QU },
+       { 0x2E0E, 0x2E15, LBP_BA },
+       { 0x2E16, 0x2E16, LBP_AL },
+       { 0x2E17, 0x2E17, LBP_BA },
+       { 0x2E18, 0x2E18, LBP_OP },
+       { 0x2E19, 0x2E19, LBP_BA },
+       { 0x2E1A, 0x2E1B, LBP_AL },
+       { 0x2E1C, 0x2E1D, LBP_QU },
+       { 0x2E1E, 0x2E1F, LBP_AL },
+       { 0x2E20, 0x2E21, LBP_QU },
+       { 0x2E22, 0x2E22, LBP_OP },
+       { 0x2E23, 0x2E23, LBP_CL },
+       { 0x2E24, 0x2E24, LBP_OP },
+       { 0x2E25, 0x2E25, LBP_CL },
+       { 0x2E26, 0x2E26, LBP_OP },
+       { 0x2E27, 0x2E27, LBP_CL },
+       { 0x2E28, 0x2E28, LBP_OP },
+       { 0x2E29, 0x2E29, LBP_CL },
+       { 0x2E2A, 0x2E2D, LBP_BA },
+       { 0x2E2E, 0x2E2E, LBP_EX },
+       { 0x2E2F, 0x2E2F, LBP_AL },
+       { 0x2E30, 0x2E31, LBP_BA },
+       { 0x2E80, 0x3000, LBP_ID },
+       { 0x3001, 0x3002, LBP_CL },
+       { 0x3003, 0x3004, LBP_ID },
+       { 0x3005, 0x3005, LBP_NS },
+       { 0x3006, 0x3007, LBP_ID },
+       { 0x3008, 0x3008, LBP_OP },
+       { 0x3009, 0x3009, LBP_CL },
+       { 0x300A, 0x300A, LBP_OP },
+       { 0x300B, 0x300B, LBP_CL },
+       { 0x300C, 0x300C, LBP_OP },
+       { 0x300D, 0x300D, LBP_CL },
+       { 0x300E, 0x300E, LBP_OP },
+       { 0x300F, 0x300F, LBP_CL },
+       { 0x3010, 0x3010, LBP_OP },
+       { 0x3011, 0x3011, LBP_CL },
+       { 0x3012, 0x3013, LBP_ID },
+       { 0x3014, 0x3014, LBP_OP },
+       { 0x3015, 0x3015, LBP_CL },
+       { 0x3016, 0x3016, LBP_OP },
+       { 0x3017, 0x3017, LBP_CL },
+       { 0x3018, 0x3018, LBP_OP },
+       { 0x3019, 0x3019, LBP_CL },
+       { 0x301A, 0x301A, LBP_OP },
+       { 0x301B, 0x301B, LBP_CL },
+       { 0x301C, 0x301C, LBP_NS },
+       { 0x301D, 0x301D, LBP_OP },
+       { 0x301E, 0x301F, LBP_CL },
+       { 0x3020, 0x3029, LBP_ID },
+       { 0x302A, 0x302F, LBP_CM },
+       { 0x3030, 0x303A, LBP_ID },
+       { 0x303B, 0x303C, LBP_NS },
+       { 0x303D, 0x303F, LBP_ID },
+       { 0x3041, 0x3041, LBP_NS },
+       { 0x3042, 0x3042, LBP_ID },
+       { 0x3043, 0x3043, LBP_NS },
+       { 0x3044, 0x3044, LBP_ID },
+       { 0x3045, 0x3045, LBP_NS },
+       { 0x3046, 0x3046, LBP_ID },
+       { 0x3047, 0x3047, LBP_NS },
+       { 0x3048, 0x3048, LBP_ID },
+       { 0x3049, 0x3049, LBP_NS },
+       { 0x304A, 0x3062, LBP_ID },
+       { 0x3063, 0x3063, LBP_NS },
+       { 0x3064, 0x3082, LBP_ID },
+       { 0x3083, 0x3083, LBP_NS },
+       { 0x3084, 0x3084, LBP_ID },
+       { 0x3085, 0x3085, LBP_NS },
+       { 0x3086, 0x3086, LBP_ID },
+       { 0x3087, 0x3087, LBP_NS },
+       { 0x3088, 0x308D, LBP_ID },
+       { 0x308E, 0x308E, LBP_NS },
+       { 0x308F, 0x3094, LBP_ID },
+       { 0x3095, 0x3096, LBP_NS },
+       { 0x3099, 0x309A, LBP_CM },
+       { 0x309B, 0x309E, LBP_NS },
+       { 0x309F, 0x309F, LBP_ID },
+       { 0x30A0, 0x30A1, LBP_NS },
+       { 0x30A2, 0x30A2, LBP_ID },
+       { 0x30A3, 0x30A3, LBP_NS },
+       { 0x30A4, 0x30A4, LBP_ID },
+       { 0x30A5, 0x30A5, LBP_NS },
+       { 0x30A6, 0x30A6, LBP_ID },
+       { 0x30A7, 0x30A7, LBP_NS },
+       { 0x30A8, 0x30A8, LBP_ID },
+       { 0x30A9, 0x30A9, LBP_NS },
+       { 0x30AA, 0x30C2, LBP_ID },
+       { 0x30C3, 0x30C3, LBP_NS },
+       { 0x30C4, 0x30E2, LBP_ID },
+       { 0x30E3, 0x30E3, LBP_NS },
+       { 0x30E4, 0x30E4, LBP_ID },
+       { 0x30E5, 0x30E5, LBP_NS },
+       { 0x30E6, 0x30E6, LBP_ID },
+       { 0x30E7, 0x30E7, LBP_NS },
+       { 0x30E8, 0x30ED, LBP_ID },
+       { 0x30EE, 0x30EE, LBP_NS },
+       { 0x30EF, 0x30F4, LBP_ID },
+       { 0x30F5, 0x30F6, LBP_NS },
+       { 0x30F7, 0x30FA, LBP_ID },
+       { 0x30FB, 0x30FE, LBP_NS },
+       { 0x30FF, 0x31E3, LBP_ID },
+       { 0x31F0, 0x31FF, LBP_NS },
+       { 0x3200, 0x3247, LBP_ID },
+       { 0x3248, 0x324F, LBP_AI },
+       { 0x3250, 0x4DBF, LBP_ID },
+       { 0x4DC0, 0x4DFF, LBP_AL },
+       { 0x4E00, 0xA014, LBP_ID },
+       { 0xA015, 0xA015, LBP_NS },
+       { 0xA016, 0xA4C6, LBP_ID },
+       { 0xA4D0, 0xA4FD, LBP_AL },
+       { 0xA4FE, 0xA4FF, LBP_BA },
+       { 0xA500, 0xA60C, LBP_AL },
+       { 0xA60D, 0xA60D, LBP_BA },
+       { 0xA60E, 0xA60E, LBP_EX },
+       { 0xA60F, 0xA60F, LBP_BA },
+       { 0xA610, 0xA61F, LBP_AL },
+       { 0xA620, 0xA629, LBP_NU },
+       { 0xA62A, 0xA66E, LBP_AL },
+       { 0xA66F, 0xA672, LBP_CM },
+       { 0xA673, 0xA673, LBP_AL },
+       { 0xA67C, 0xA67D, LBP_CM },
+       { 0xA67E, 0xA6EF, LBP_AL },
+       { 0xA6F0, 0xA6F1, LBP_CM },
+       { 0xA6F2, 0xA6F2, LBP_AL },
+       { 0xA6F3, 0xA6F7, LBP_BA },
+       { 0xA700, 0xA801, LBP_AL },
+       { 0xA802, 0xA802, LBP_CM },
+       { 0xA803, 0xA805, LBP_AL },
+       { 0xA806, 0xA806, LBP_CM },
+       { 0xA807, 0xA80A, LBP_AL },
+       { 0xA80B, 0xA80B, LBP_CM },
+       { 0xA80C, 0xA822, LBP_AL },
+       { 0xA823, 0xA827, LBP_CM },
+       { 0xA828, 0xA837, LBP_AL },
+       { 0xA838, 0xA838, LBP_PO },
+       { 0xA839, 0xA873, LBP_AL },
+       { 0xA874, 0xA875, LBP_BB },
+       { 0xA876, 0xA877, LBP_EX },
+       { 0xA880, 0xA881, LBP_CM },
+       { 0xA882, 0xA8B3, LBP_AL },
+       { 0xA8B4, 0xA8C4, LBP_CM },
+       { 0xA8CE, 0xA8CF, LBP_BA },
+       { 0xA8D0, 0xA8D9, LBP_NU },
+       { 0xA8E0, 0xA8F1, LBP_CM },
+       { 0xA8F2, 0xA8FB, LBP_AL },
+       { 0xA900, 0xA909, LBP_NU },
+       { 0xA90A, 0xA925, LBP_AL },
+       { 0xA926, 0xA92D, LBP_CM },
+       { 0xA92E, 0xA92F, LBP_BA },
+       { 0xA930, 0xA946, LBP_AL },
+       { 0xA947, 0xA953, LBP_CM },
+       { 0xA95F, 0xA95F, LBP_AL },
+       { 0xA960, 0xA97C, LBP_JL },
+       { 0xA980, 0xA983, LBP_CM },
+       { 0xA984, 0xA9B2, LBP_AL },
+       { 0xA9B3, 0xA9C0, LBP_CM },
+       { 0xA9C1, 0xA9C6, LBP_AL },
+       { 0xA9C7, 0xA9C9, LBP_BA },
+       { 0xA9CA, 0xA9CF, LBP_AL },
+       { 0xA9D0, 0xA9D9, LBP_NU },
+       { 0xA9DE, 0xAA28, LBP_AL },
+       { 0xAA29, 0xAA36, LBP_CM },
+       { 0xAA40, 0xAA42, LBP_AL },
+       { 0xAA43, 0xAA43, LBP_CM },
+       { 0xAA44, 0xAA4B, LBP_AL },
+       { 0xAA4C, 0xAA4D, LBP_CM },
+       { 0xAA50, 0xAA59, LBP_NU },
+       { 0xAA5C, 0xAA5C, LBP_AL },
+       { 0xAA5D, 0xAA5F, LBP_BA },
+       { 0xAA60, 0xAADF, LBP_SA },
+       { 0xAB01, 0xABE2, LBP_AL },
+       { 0xABE3, 0xABEA, LBP_CM },
+       { 0xABEB, 0xABEB, LBP_BA },
+       { 0xABEC, 0xABED, LBP_CM },
+       { 0xABF0, 0xABF9, LBP_NU },
+       { 0xAC00, 0xAC00, LBP_H2 },
+       { 0xAC01, 0xAC1B, LBP_H3 },
+       { 0xAC1C, 0xAC1C, LBP_H2 },
+       { 0xAC1D, 0xAC37, LBP_H3 },
+       { 0xAC38, 0xAC38, LBP_H2 },
+       { 0xAC39, 0xAC53, LBP_H3 },
+       { 0xAC54, 0xAC54, LBP_H2 },
+       { 0xAC55, 0xAC6F, LBP_H3 },
+       { 0xAC70, 0xAC70, LBP_H2 },
+       { 0xAC71, 0xAC8B, LBP_H3 },
+       { 0xAC8C, 0xAC8C, LBP_H2 },
+       { 0xAC8D, 0xACA7, LBP_H3 },
+       { 0xACA8, 0xACA8, LBP_H2 },
+       { 0xACA9, 0xACC3, LBP_H3 },
+       { 0xACC4, 0xACC4, LBP_H2 },
+       { 0xACC5, 0xACDF, LBP_H3 },
+       { 0xACE0, 0xACE0, LBP_H2 },
+       { 0xACE1, 0xACFB, LBP_H3 },
+       { 0xACFC, 0xACFC, LBP_H2 },
+       { 0xACFD, 0xAD17, LBP_H3 },
+       { 0xAD18, 0xAD18, LBP_H2 },
+       { 0xAD19, 0xAD33, LBP_H3 },
+       { 0xAD34, 0xAD34, LBP_H2 },
+       { 0xAD35, 0xAD4F, LBP_H3 },
+       { 0xAD50, 0xAD50, LBP_H2 },
+       { 0xAD51, 0xAD6B, LBP_H3 },
+       { 0xAD6C, 0xAD6C, LBP_H2 },
+       { 0xAD6D, 0xAD87, LBP_H3 },
+       { 0xAD88, 0xAD88, LBP_H2 },
+       { 0xAD89, 0xADA3, LBP_H3 },
+       { 0xADA4, 0xADA4, LBP_H2 },
+       { 0xADA5, 0xADBF, LBP_H3 },
+       { 0xADC0, 0xADC0, LBP_H2 },
+       { 0xADC1, 0xADDB, LBP_H3 },
+       { 0xADDC, 0xADDC, LBP_H2 },
+       { 0xADDD, 0xADF7, LBP_H3 },
+       { 0xADF8, 0xADF8, LBP_H2 },
+       { 0xADF9, 0xAE13, LBP_H3 },
+       { 0xAE14, 0xAE14, LBP_H2 },
+       { 0xAE15, 0xAE2F, LBP_H3 },
+       { 0xAE30, 0xAE30, LBP_H2 },
+       { 0xAE31, 0xAE4B, LBP_H3 },
+       { 0xAE4C, 0xAE4C, LBP_H2 },
+       { 0xAE4D, 0xAE67, LBP_H3 },
+       { 0xAE68, 0xAE68, LBP_H2 },
+       { 0xAE69, 0xAE83, LBP_H3 },
+       { 0xAE84, 0xAE84, LBP_H2 },
+       { 0xAE85, 0xAE9F, LBP_H3 },
+       { 0xAEA0, 0xAEA0, LBP_H2 },
+       { 0xAEA1, 0xAEBB, LBP_H3 },
+       { 0xAEBC, 0xAEBC, LBP_H2 },
+       { 0xAEBD, 0xAED7, LBP_H3 },
+       { 0xAED8, 0xAED8, LBP_H2 },
+       { 0xAED9, 0xAEF3, LBP_H3 },
+       { 0xAEF4, 0xAEF4, LBP_H2 },
+       { 0xAEF5, 0xAF0F, LBP_H3 },
+       { 0xAF10, 0xAF10, LBP_H2 },
+       { 0xAF11, 0xAF2B, LBP_H3 },
+       { 0xAF2C, 0xAF2C, LBP_H2 },
+       { 0xAF2D, 0xAF47, LBP_H3 },
+       { 0xAF48, 0xAF48, LBP_H2 },
+       { 0xAF49, 0xAF63, LBP_H3 },
+       { 0xAF64, 0xAF64, LBP_H2 },
+       { 0xAF65, 0xAF7F, LBP_H3 },
+       { 0xAF80, 0xAF80, LBP_H2 },
+       { 0xAF81, 0xAF9B, LBP_H3 },
+       { 0xAF9C, 0xAF9C, LBP_H2 },
+       { 0xAF9D, 0xAFB7, LBP_H3 },
+       { 0xAFB8, 0xAFB8, LBP_H2 },
+       { 0xAFB9, 0xAFD3, LBP_H3 },
+       { 0xAFD4, 0xAFD4, LBP_H2 },
+       { 0xAFD5, 0xAFEF, LBP_H3 },
+       { 0xAFF0, 0xAFF0, LBP_H2 },
+       { 0xAFF1, 0xB00B, LBP_H3 },
+       { 0xB00C, 0xB00C, LBP_H2 },
+       { 0xB00D, 0xB027, LBP_H3 },
+       { 0xB028, 0xB028, LBP_H2 },
+       { 0xB029, 0xB043, LBP_H3 },
+       { 0xB044, 0xB044, LBP_H2 },
+       { 0xB045, 0xB05F, LBP_H3 },
+       { 0xB060, 0xB060, LBP_H2 },
+       { 0xB061, 0xB07B, LBP_H3 },
+       { 0xB07C, 0xB07C, LBP_H2 },
+       { 0xB07D, 0xB097, LBP_H3 },
+       { 0xB098, 0xB098, LBP_H2 },
+       { 0xB099, 0xB0B3, LBP_H3 },
+       { 0xB0B4, 0xB0B4, LBP_H2 },
+       { 0xB0B5, 0xB0CF, LBP_H3 },
+       { 0xB0D0, 0xB0D0, LBP_H2 },
+       { 0xB0D1, 0xB0EB, LBP_H3 },
+       { 0xB0EC, 0xB0EC, LBP_H2 },
+       { 0xB0ED, 0xB107, LBP_H3 },
+       { 0xB108, 0xB108, LBP_H2 },
+       { 0xB109, 0xB123, LBP_H3 },
+       { 0xB124, 0xB124, LBP_H2 },
+       { 0xB125, 0xB13F, LBP_H3 },
+       { 0xB140, 0xB140, LBP_H2 },
+       { 0xB141, 0xB15B, LBP_H3 },
+       { 0xB15C, 0xB15C, LBP_H2 },
+       { 0xB15D, 0xB177, LBP_H3 },
+       { 0xB178, 0xB178, LBP_H2 },
+       { 0xB179, 0xB193, LBP_H3 },
+       { 0xB194, 0xB194, LBP_H2 },
+       { 0xB195, 0xB1AF, LBP_H3 },
+       { 0xB1B0, 0xB1B0, LBP_H2 },
+       { 0xB1B1, 0xB1CB, LBP_H3 },
+       { 0xB1CC, 0xB1CC, LBP_H2 },
+       { 0xB1CD, 0xB1E7, LBP_H3 },
+       { 0xB1E8, 0xB1E8, LBP_H2 },
+       { 0xB1E9, 0xB203, LBP_H3 },
+       { 0xB204, 0xB204, LBP_H2 },
+       { 0xB205, 0xB21F, LBP_H3 },
+       { 0xB220, 0xB220, LBP_H2 },
+       { 0xB221, 0xB23B, LBP_H3 },
+       { 0xB23C, 0xB23C, LBP_H2 },
+       { 0xB23D, 0xB257, LBP_H3 },
+       { 0xB258, 0xB258, LBP_H2 },
+       { 0xB259, 0xB273, LBP_H3 },
+       { 0xB274, 0xB274, LBP_H2 },
+       { 0xB275, 0xB28F, LBP_H3 },
+       { 0xB290, 0xB290, LBP_H2 },
+       { 0xB291, 0xB2AB, LBP_H3 },
+       { 0xB2AC, 0xB2AC, LBP_H2 },
+       { 0xB2AD, 0xB2C7, LBP_H3 },
+       { 0xB2C8, 0xB2C8, LBP_H2 },
+       { 0xB2C9, 0xB2E3, LBP_H3 },
+       { 0xB2E4, 0xB2E4, LBP_H2 },
+       { 0xB2E5, 0xB2FF, LBP_H3 },
+       { 0xB300, 0xB300, LBP_H2 },
+       { 0xB301, 0xB31B, LBP_H3 },
+       { 0xB31C, 0xB31C, LBP_H2 },
+       { 0xB31D, 0xB337, LBP_H3 },
+       { 0xB338, 0xB338, LBP_H2 },
+       { 0xB339, 0xB353, LBP_H3 },
+       { 0xB354, 0xB354, LBP_H2 },
+       { 0xB355, 0xB36F, LBP_H3 },
+       { 0xB370, 0xB370, LBP_H2 },
+       { 0xB371, 0xB38B, LBP_H3 },
+       { 0xB38C, 0xB38C, LBP_H2 },
+       { 0xB38D, 0xB3A7, LBP_H3 },
+       { 0xB3A8, 0xB3A8, LBP_H2 },
+       { 0xB3A9, 0xB3C3, LBP_H3 },
+       { 0xB3C4, 0xB3C4, LBP_H2 },
+       { 0xB3C5, 0xB3DF, LBP_H3 },
+       { 0xB3E0, 0xB3E0, LBP_H2 },
+       { 0xB3E1, 0xB3FB, LBP_H3 },
+       { 0xB3FC, 0xB3FC, LBP_H2 },
+       { 0xB3FD, 0xB417, LBP_H3 },
+       { 0xB418, 0xB418, LBP_H2 },
+       { 0xB419, 0xB433, LBP_H3 },
+       { 0xB434, 0xB434, LBP_H2 },
+       { 0xB435, 0xB44F, LBP_H3 },
+       { 0xB450, 0xB450, LBP_H2 },
+       { 0xB451, 0xB46B, LBP_H3 },
+       { 0xB46C, 0xB46C, LBP_H2 },
+       { 0xB46D, 0xB487, LBP_H3 },
+       { 0xB488, 0xB488, LBP_H2 },
+       { 0xB489, 0xB4A3, LBP_H3 },
+       { 0xB4A4, 0xB4A4, LBP_H2 },
+       { 0xB4A5, 0xB4BF, LBP_H3 },
+       { 0xB4C0, 0xB4C0, LBP_H2 },
+       { 0xB4C1, 0xB4DB, LBP_H3 },
+       { 0xB4DC, 0xB4DC, LBP_H2 },
+       { 0xB4DD, 0xB4F7, LBP_H3 },
+       { 0xB4F8, 0xB4F8, LBP_H2 },
+       { 0xB4F9, 0xB513, LBP_H3 },
+       { 0xB514, 0xB514, LBP_H2 },
+       { 0xB515, 0xB52F, LBP_H3 },
+       { 0xB530, 0xB530, LBP_H2 },
+       { 0xB531, 0xB54B, LBP_H3 },
+       { 0xB54C, 0xB54C, LBP_H2 },
+       { 0xB54D, 0xB567, LBP_H3 },
+       { 0xB568, 0xB568, LBP_H2 },
+       { 0xB569, 0xB583, LBP_H3 },
+       { 0xB584, 0xB584, LBP_H2 },
+       { 0xB585, 0xB59F, LBP_H3 },
+       { 0xB5A0, 0xB5A0, LBP_H2 },
+       { 0xB5A1, 0xB5BB, LBP_H3 },
+       { 0xB5BC, 0xB5BC, LBP_H2 },
+       { 0xB5BD, 0xB5D7, LBP_H3 },
+       { 0xB5D8, 0xB5D8, LBP_H2 },
+       { 0xB5D9, 0xB5F3, LBP_H3 },
+       { 0xB5F4, 0xB5F4, LBP_H2 },
+       { 0xB5F5, 0xB60F, LBP_H3 },
+       { 0xB610, 0xB610, LBP_H2 },
+       { 0xB611, 0xB62B, LBP_H3 },
+       { 0xB62C, 0xB62C, LBP_H2 },
+       { 0xB62D, 0xB647, LBP_H3 },
+       { 0xB648, 0xB648, LBP_H2 },
+       { 0xB649, 0xB663, LBP_H3 },
+       { 0xB664, 0xB664, LBP_H2 },
+       { 0xB665, 0xB67F, LBP_H3 },
+       { 0xB680, 0xB680, LBP_H2 },
+       { 0xB681, 0xB69B, LBP_H3 },
+       { 0xB69C, 0xB69C, LBP_H2 },
+       { 0xB69D, 0xB6B7, LBP_H3 },
+       { 0xB6B8, 0xB6B8, LBP_H2 },
+       { 0xB6B9, 0xB6D3, LBP_H3 },
+       { 0xB6D4, 0xB6D4, LBP_H2 },
+       { 0xB6D5, 0xB6EF, LBP_H3 },
+       { 0xB6F0, 0xB6F0, LBP_H2 },
+       { 0xB6F1, 0xB70B, LBP_H3 },
+       { 0xB70C, 0xB70C, LBP_H2 },
+       { 0xB70D, 0xB727, LBP_H3 },
+       { 0xB728, 0xB728, LBP_H2 },
+       { 0xB729, 0xB743, LBP_H3 },
+       { 0xB744, 0xB744, LBP_H2 },
+       { 0xB745, 0xB75F, LBP_H3 },
+       { 0xB760, 0xB760, LBP_H2 },
+       { 0xB761, 0xB77B, LBP_H3 },
+       { 0xB77C, 0xB77C, LBP_H2 },
+       { 0xB77D, 0xB797, LBP_H3 },
+       { 0xB798, 0xB798, LBP_H2 },
+       { 0xB799, 0xB7B3, LBP_H3 },
+       { 0xB7B4, 0xB7B4, LBP_H2 },
+       { 0xB7B5, 0xB7CF, LBP_H3 },
+       { 0xB7D0, 0xB7D0, LBP_H2 },
+       { 0xB7D1, 0xB7EB, LBP_H3 },
+       { 0xB7EC, 0xB7EC, LBP_H2 },
+       { 0xB7ED, 0xB807, LBP_H3 },
+       { 0xB808, 0xB808, LBP_H2 },
+       { 0xB809, 0xB823, LBP_H3 },
+       { 0xB824, 0xB824, LBP_H2 },
+       { 0xB825, 0xB83F, LBP_H3 },
+       { 0xB840, 0xB840, LBP_H2 },
+       { 0xB841, 0xB85B, LBP_H3 },
+       { 0xB85C, 0xB85C, LBP_H2 },
+       { 0xB85D, 0xB877, LBP_H3 },
+       { 0xB878, 0xB878, LBP_H2 },
+       { 0xB879, 0xB893, LBP_H3 },
+       { 0xB894, 0xB894, LBP_H2 },
+       { 0xB895, 0xB8AF, LBP_H3 },
+       { 0xB8B0, 0xB8B0, LBP_H2 },
+       { 0xB8B1, 0xB8CB, LBP_H3 },
+       { 0xB8CC, 0xB8CC, LBP_H2 },
+       { 0xB8CD, 0xB8E7, LBP_H3 },
+       { 0xB8E8, 0xB8E8, LBP_H2 },
+       { 0xB8E9, 0xB903, LBP_H3 },
+       { 0xB904, 0xB904, LBP_H2 },
+       { 0xB905, 0xB91F, LBP_H3 },
+       { 0xB920, 0xB920, LBP_H2 },
+       { 0xB921, 0xB93B, LBP_H3 },
+       { 0xB93C, 0xB93C, LBP_H2 },
+       { 0xB93D, 0xB957, LBP_H3 },
+       { 0xB958, 0xB958, LBP_H2 },
+       { 0xB959, 0xB973, LBP_H3 },
+       { 0xB974, 0xB974, LBP_H2 },
+       { 0xB975, 0xB98F, LBP_H3 },
+       { 0xB990, 0xB990, LBP_H2 },
+       { 0xB991, 0xB9AB, LBP_H3 },
+       { 0xB9AC, 0xB9AC, LBP_H2 },
+       { 0xB9AD, 0xB9C7, LBP_H3 },
+       { 0xB9C8, 0xB9C8, LBP_H2 },
+       { 0xB9C9, 0xB9E3, LBP_H3 },
+       { 0xB9E4, 0xB9E4, LBP_H2 },
+       { 0xB9E5, 0xB9FF, LBP_H3 },
+       { 0xBA00, 0xBA00, LBP_H2 },
+       { 0xBA01, 0xBA1B, LBP_H3 },
+       { 0xBA1C, 0xBA1C, LBP_H2 },
+       { 0xBA1D, 0xBA37, LBP_H3 },
+       { 0xBA38, 0xBA38, LBP_H2 },
+       { 0xBA39, 0xBA53, LBP_H3 },
+       { 0xBA54, 0xBA54, LBP_H2 },
+       { 0xBA55, 0xBA6F, LBP_H3 },
+       { 0xBA70, 0xBA70, LBP_H2 },
+       { 0xBA71, 0xBA8B, LBP_H3 },
+       { 0xBA8C, 0xBA8C, LBP_H2 },
+       { 0xBA8D, 0xBAA7, LBP_H3 },
+       { 0xBAA8, 0xBAA8, LBP_H2 },
+       { 0xBAA9, 0xBAC3, LBP_H3 },
+       { 0xBAC4, 0xBAC4, LBP_H2 },
+       { 0xBAC5, 0xBADF, LBP_H3 },
+       { 0xBAE0, 0xBAE0, LBP_H2 },
+       { 0xBAE1, 0xBAFB, LBP_H3 },
+       { 0xBAFC, 0xBAFC, LBP_H2 },
+       { 0xBAFD, 0xBB17, LBP_H3 },
+       { 0xBB18, 0xBB18, LBP_H2 },
+       { 0xBB19, 0xBB33, LBP_H3 },
+       { 0xBB34, 0xBB34, LBP_H2 },
+       { 0xBB35, 0xBB4F, LBP_H3 },
+       { 0xBB50, 0xBB50, LBP_H2 },
+       { 0xBB51, 0xBB6B, LBP_H3 },
+       { 0xBB6C, 0xBB6C, LBP_H2 },
+       { 0xBB6D, 0xBB87, LBP_H3 },
+       { 0xBB88, 0xBB88, LBP_H2 },
+       { 0xBB89, 0xBBA3, LBP_H3 },
+       { 0xBBA4, 0xBBA4, LBP_H2 },
+       { 0xBBA5, 0xBBBF, LBP_H3 },
+       { 0xBBC0, 0xBBC0, LBP_H2 },
+       { 0xBBC1, 0xBBDB, LBP_H3 },
+       { 0xBBDC, 0xBBDC, LBP_H2 },
+       { 0xBBDD, 0xBBF7, LBP_H3 },
+       { 0xBBF8, 0xBBF8, LBP_H2 },
+       { 0xBBF9, 0xBC13, LBP_H3 },
+       { 0xBC14, 0xBC14, LBP_H2 },
+       { 0xBC15, 0xBC2F, LBP_H3 },
+       { 0xBC30, 0xBC30, LBP_H2 },
+       { 0xBC31, 0xBC4B, LBP_H3 },
+       { 0xBC4C, 0xBC4C, LBP_H2 },
+       { 0xBC4D, 0xBC67, LBP_H3 },
+       { 0xBC68, 0xBC68, LBP_H2 },
+       { 0xBC69, 0xBC83, LBP_H3 },
+       { 0xBC84, 0xBC84, LBP_H2 },
+       { 0xBC85, 0xBC9F, LBP_H3 },
+       { 0xBCA0, 0xBCA0, LBP_H2 },
+       { 0xBCA1, 0xBCBB, LBP_H3 },
+       { 0xBCBC, 0xBCBC, LBP_H2 },
+       { 0xBCBD, 0xBCD7, LBP_H3 },
+       { 0xBCD8, 0xBCD8, LBP_H2 },
+       { 0xBCD9, 0xBCF3, LBP_H3 },
+       { 0xBCF4, 0xBCF4, LBP_H2 },
+       { 0xBCF5, 0xBD0F, LBP_H3 },
+       { 0xBD10, 0xBD10, LBP_H2 },
+       { 0xBD11, 0xBD2B, LBP_H3 },
+       { 0xBD2C, 0xBD2C, LBP_H2 },
+       { 0xBD2D, 0xBD47, LBP_H3 },
+       { 0xBD48, 0xBD48, LBP_H2 },
+       { 0xBD49, 0xBD63, LBP_H3 },
+       { 0xBD64, 0xBD64, LBP_H2 },
+       { 0xBD65, 0xBD7F, LBP_H3 },
+       { 0xBD80, 0xBD80, LBP_H2 },
+       { 0xBD81, 0xBD9B, LBP_H3 },
+       { 0xBD9C, 0xBD9C, LBP_H2 },
+       { 0xBD9D, 0xBDB7, LBP_H3 },
+       { 0xBDB8, 0xBDB8, LBP_H2 },
+       { 0xBDB9, 0xBDD3, LBP_H3 },
+       { 0xBDD4, 0xBDD4, LBP_H2 },
+       { 0xBDD5, 0xBDEF, LBP_H3 },
+       { 0xBDF0, 0xBDF0, LBP_H2 },
+       { 0xBDF1, 0xBE0B, LBP_H3 },
+       { 0xBE0C, 0xBE0C, LBP_H2 },
+       { 0xBE0D, 0xBE27, LBP_H3 },
+       { 0xBE28, 0xBE28, LBP_H2 },
+       { 0xBE29, 0xBE43, LBP_H3 },
+       { 0xBE44, 0xBE44, LBP_H2 },
+       { 0xBE45, 0xBE5F, LBP_H3 },
+       { 0xBE60, 0xBE60, LBP_H2 },
+       { 0xBE61, 0xBE7B, LBP_H3 },
+       { 0xBE7C, 0xBE7C, LBP_H2 },
+       { 0xBE7D, 0xBE97, LBP_H3 },
+       { 0xBE98, 0xBE98, LBP_H2 },
+       { 0xBE99, 0xBEB3, LBP_H3 },
+       { 0xBEB4, 0xBEB4, LBP_H2 },
+       { 0xBEB5, 0xBECF, LBP_H3 },
+       { 0xBED0, 0xBED0, LBP_H2 },
+       { 0xBED1, 0xBEEB, LBP_H3 },
+       { 0xBEEC, 0xBEEC, LBP_H2 },
+       { 0xBEED, 0xBF07, LBP_H3 },
+       { 0xBF08, 0xBF08, LBP_H2 },
+       { 0xBF09, 0xBF23, LBP_H3 },
+       { 0xBF24, 0xBF24, LBP_H2 },
+       { 0xBF25, 0xBF3F, LBP_H3 },
+       { 0xBF40, 0xBF40, LBP_H2 },
+       { 0xBF41, 0xBF5B, LBP_H3 },
+       { 0xBF5C, 0xBF5C, LBP_H2 },
+       { 0xBF5D, 0xBF77, LBP_H3 },
+       { 0xBF78, 0xBF78, LBP_H2 },
+       { 0xBF79, 0xBF93, LBP_H3 },
+       { 0xBF94, 0xBF94, LBP_H2 },
+       { 0xBF95, 0xBFAF, LBP_H3 },
+       { 0xBFB0, 0xBFB0, LBP_H2 },
+       { 0xBFB1, 0xBFCB, LBP_H3 },
+       { 0xBFCC, 0xBFCC, LBP_H2 },
+       { 0xBFCD, 0xBFE7, LBP_H3 },
+       { 0xBFE8, 0xBFE8, LBP_H2 },
+       { 0xBFE9, 0xC003, LBP_H3 },
+       { 0xC004, 0xC004, LBP_H2 },
+       { 0xC005, 0xC01F, LBP_H3 },
+       { 0xC020, 0xC020, LBP_H2 },
+       { 0xC021, 0xC03B, LBP_H3 },
+       { 0xC03C, 0xC03C, LBP_H2 },
+       { 0xC03D, 0xC057, LBP_H3 },
+       { 0xC058, 0xC058, LBP_H2 },
+       { 0xC059, 0xC073, LBP_H3 },
+       { 0xC074, 0xC074, LBP_H2 },
+       { 0xC075, 0xC08F, LBP_H3 },
+       { 0xC090, 0xC090, LBP_H2 },
+       { 0xC091, 0xC0AB, LBP_H3 },
+       { 0xC0AC, 0xC0AC, LBP_H2 },
+       { 0xC0AD, 0xC0C7, LBP_H3 },
+       { 0xC0C8, 0xC0C8, LBP_H2 },
+       { 0xC0C9, 0xC0E3, LBP_H3 },
+       { 0xC0E4, 0xC0E4, LBP_H2 },
+       { 0xC0E5, 0xC0FF, LBP_H3 },
+       { 0xC100, 0xC100, LBP_H2 },
+       { 0xC101, 0xC11B, LBP_H3 },
+       { 0xC11C, 0xC11C, LBP_H2 },
+       { 0xC11D, 0xC137, LBP_H3 },
+       { 0xC138, 0xC138, LBP_H2 },
+       { 0xC139, 0xC153, LBP_H3 },
+       { 0xC154, 0xC154, LBP_H2 },
+       { 0xC155, 0xC16F, LBP_H3 },
+       { 0xC170, 0xC170, LBP_H2 },
+       { 0xC171, 0xC18B, LBP_H3 },
+       { 0xC18C, 0xC18C, LBP_H2 },
+       { 0xC18D, 0xC1A7, LBP_H3 },
+       { 0xC1A8, 0xC1A8, LBP_H2 },
+       { 0xC1A9, 0xC1C3, LBP_H3 },
+       { 0xC1C4, 0xC1C4, LBP_H2 },
+       { 0xC1C5, 0xC1DF, LBP_H3 },
+       { 0xC1E0, 0xC1E0, LBP_H2 },
+       { 0xC1E1, 0xC1FB, LBP_H3 },
+       { 0xC1FC, 0xC1FC, LBP_H2 },
+       { 0xC1FD, 0xC217, LBP_H3 },
+       { 0xC218, 0xC218, LBP_H2 },
+       { 0xC219, 0xC233, LBP_H3 },
+       { 0xC234, 0xC234, LBP_H2 },
+       { 0xC235, 0xC24F, LBP_H3 },
+       { 0xC250, 0xC250, LBP_H2 },
+       { 0xC251, 0xC26B, LBP_H3 },
+       { 0xC26C, 0xC26C, LBP_H2 },
+       { 0xC26D, 0xC287, LBP_H3 },
+       { 0xC288, 0xC288, LBP_H2 },
+       { 0xC289, 0xC2A3, LBP_H3 },
+       { 0xC2A4, 0xC2A4, LBP_H2 },
+       { 0xC2A5, 0xC2BF, LBP_H3 },
+       { 0xC2C0, 0xC2C0, LBP_H2 },
+       { 0xC2C1, 0xC2DB, LBP_H3 },
+       { 0xC2DC, 0xC2DC, LBP_H2 },
+       { 0xC2DD, 0xC2F7, LBP_H3 },
+       { 0xC2F8, 0xC2F8, LBP_H2 },
+       { 0xC2F9, 0xC313, LBP_H3 },
+       { 0xC314, 0xC314, LBP_H2 },
+       { 0xC315, 0xC32F, LBP_H3 },
+       { 0xC330, 0xC330, LBP_H2 },
+       { 0xC331, 0xC34B, LBP_H3 },
+       { 0xC34C, 0xC34C, LBP_H2 },
+       { 0xC34D, 0xC367, LBP_H3 },
+       { 0xC368, 0xC368, LBP_H2 },
+       { 0xC369, 0xC383, LBP_H3 },
+       { 0xC384, 0xC384, LBP_H2 },
+       { 0xC385, 0xC39F, LBP_H3 },
+       { 0xC3A0, 0xC3A0, LBP_H2 },
+       { 0xC3A1, 0xC3BB, LBP_H3 },
+       { 0xC3BC, 0xC3BC, LBP_H2 },
+       { 0xC3BD, 0xC3D7, LBP_H3 },
+       { 0xC3D8, 0xC3D8, LBP_H2 },
+       { 0xC3D9, 0xC3F3, LBP_H3 },
+       { 0xC3F4, 0xC3F4, LBP_H2 },
+       { 0xC3F5, 0xC40F, LBP_H3 },
+       { 0xC410, 0xC410, LBP_H2 },
+       { 0xC411, 0xC42B, LBP_H3 },
+       { 0xC42C, 0xC42C, LBP_H2 },
+       { 0xC42D, 0xC447, LBP_H3 },
+       { 0xC448, 0xC448, LBP_H2 },
+       { 0xC449, 0xC463, LBP_H3 },
+       { 0xC464, 0xC464, LBP_H2 },
+       { 0xC465, 0xC47F, LBP_H3 },
+       { 0xC480, 0xC480, LBP_H2 },
+       { 0xC481, 0xC49B, LBP_H3 },
+       { 0xC49C, 0xC49C, LBP_H2 },
+       { 0xC49D, 0xC4B7, LBP_H3 },
+       { 0xC4B8, 0xC4B8, LBP_H2 },
+       { 0xC4B9, 0xC4D3, LBP_H3 },
+       { 0xC4D4, 0xC4D4, LBP_H2 },
+       { 0xC4D5, 0xC4EF, LBP_H3 },
+       { 0xC4F0, 0xC4F0, LBP_H2 },
+       { 0xC4F1, 0xC50B, LBP_H3 },
+       { 0xC50C, 0xC50C, LBP_H2 },
+       { 0xC50D, 0xC527, LBP_H3 },
+       { 0xC528, 0xC528, LBP_H2 },
+       { 0xC529, 0xC543, LBP_H3 },
+       { 0xC544, 0xC544, LBP_H2 },
+       { 0xC545, 0xC55F, LBP_H3 },
+       { 0xC560, 0xC560, LBP_H2 },
+       { 0xC561, 0xC57B, LBP_H3 },
+       { 0xC57C, 0xC57C, LBP_H2 },
+       { 0xC57D, 0xC597, LBP_H3 },
+       { 0xC598, 0xC598, LBP_H2 },
+       { 0xC599, 0xC5B3, LBP_H3 },
+       { 0xC5B4, 0xC5B4, LBP_H2 },
+       { 0xC5B5, 0xC5CF, LBP_H3 },
+       { 0xC5D0, 0xC5D0, LBP_H2 },
+       { 0xC5D1, 0xC5EB, LBP_H3 },
+       { 0xC5EC, 0xC5EC, LBP_H2 },
+       { 0xC5ED, 0xC607, LBP_H3 },
+       { 0xC608, 0xC608, LBP_H2 },
+       { 0xC609, 0xC623, LBP_H3 },
+       { 0xC624, 0xC624, LBP_H2 },
+       { 0xC625, 0xC63F, LBP_H3 },
+       { 0xC640, 0xC640, LBP_H2 },
+       { 0xC641, 0xC65B, LBP_H3 },
+       { 0xC65C, 0xC65C, LBP_H2 },
+       { 0xC65D, 0xC677, LBP_H3 },
+       { 0xC678, 0xC678, LBP_H2 },
+       { 0xC679, 0xC693, LBP_H3 },
+       { 0xC694, 0xC694, LBP_H2 },
+       { 0xC695, 0xC6AF, LBP_H3 },
+       { 0xC6B0, 0xC6B0, LBP_H2 },
+       { 0xC6B1, 0xC6CB, LBP_H3 },
+       { 0xC6CC, 0xC6CC, LBP_H2 },
+       { 0xC6CD, 0xC6E7, LBP_H3 },
+       { 0xC6E8, 0xC6E8, LBP_H2 },
+       { 0xC6E9, 0xC703, LBP_H3 },
+       { 0xC704, 0xC704, LBP_H2 },
+       { 0xC705, 0xC71F, LBP_H3 },
+       { 0xC720, 0xC720, LBP_H2 },
+       { 0xC721, 0xC73B, LBP_H3 },
+       { 0xC73C, 0xC73C, LBP_H2 },
+       { 0xC73D, 0xC757, LBP_H3 },
+       { 0xC758, 0xC758, LBP_H2 },
+       { 0xC759, 0xC773, LBP_H3 },
+       { 0xC774, 0xC774, LBP_H2 },
+       { 0xC775, 0xC78F, LBP_H3 },
+       { 0xC790, 0xC790, LBP_H2 },
+       { 0xC791, 0xC7AB, LBP_H3 },
+       { 0xC7AC, 0xC7AC, LBP_H2 },
+       { 0xC7AD, 0xC7C7, LBP_H3 },
+       { 0xC7C8, 0xC7C8, LBP_H2 },
+       { 0xC7C9, 0xC7E3, LBP_H3 },
+       { 0xC7E4, 0xC7E4, LBP_H2 },
+       { 0xC7E5, 0xC7FF, LBP_H3 },
+       { 0xC800, 0xC800, LBP_H2 },
+       { 0xC801, 0xC81B, LBP_H3 },
+       { 0xC81C, 0xC81C, LBP_H2 },
+       { 0xC81D, 0xC837, LBP_H3 },
+       { 0xC838, 0xC838, LBP_H2 },
+       { 0xC839, 0xC853, LBP_H3 },
+       { 0xC854, 0xC854, LBP_H2 },
+       { 0xC855, 0xC86F, LBP_H3 },
+       { 0xC870, 0xC870, LBP_H2 },
+       { 0xC871, 0xC88B, LBP_H3 },
+       { 0xC88C, 0xC88C, LBP_H2 },
+       { 0xC88D, 0xC8A7, LBP_H3 },
+       { 0xC8A8, 0xC8A8, LBP_H2 },
+       { 0xC8A9, 0xC8C3, LBP_H3 },
+       { 0xC8C4, 0xC8C4, LBP_H2 },
+       { 0xC8C5, 0xC8DF, LBP_H3 },
+       { 0xC8E0, 0xC8E0, LBP_H2 },
+       { 0xC8E1, 0xC8FB, LBP_H3 },
+       { 0xC8FC, 0xC8FC, LBP_H2 },
+       { 0xC8FD, 0xC917, LBP_H3 },
+       { 0xC918, 0xC918, LBP_H2 },
+       { 0xC919, 0xC933, LBP_H3 },
+       { 0xC934, 0xC934, LBP_H2 },
+       { 0xC935, 0xC94F, LBP_H3 },
+       { 0xC950, 0xC950, LBP_H2 },
+       { 0xC951, 0xC96B, LBP_H3 },
+       { 0xC96C, 0xC96C, LBP_H2 },
+       { 0xC96D, 0xC987, LBP_H3 },
+       { 0xC988, 0xC988, LBP_H2 },
+       { 0xC989, 0xC9A3, LBP_H3 },
+       { 0xC9A4, 0xC9A4, LBP_H2 },
+       { 0xC9A5, 0xC9BF, LBP_H3 },
+       { 0xC9C0, 0xC9C0, LBP_H2 },
+       { 0xC9C1, 0xC9DB, LBP_H3 },
+       { 0xC9DC, 0xC9DC, LBP_H2 },
+       { 0xC9DD, 0xC9F7, LBP_H3 },
+       { 0xC9F8, 0xC9F8, LBP_H2 },
+       { 0xC9F9, 0xCA13, LBP_H3 },
+       { 0xCA14, 0xCA14, LBP_H2 },
+       { 0xCA15, 0xCA2F, LBP_H3 },
+       { 0xCA30, 0xCA30, LBP_H2 },
+       { 0xCA31, 0xCA4B, LBP_H3 },
+       { 0xCA4C, 0xCA4C, LBP_H2 },
+       { 0xCA4D, 0xCA67, LBP_H3 },
+       { 0xCA68, 0xCA68, LBP_H2 },
+       { 0xCA69, 0xCA83, LBP_H3 },
+       { 0xCA84, 0xCA84, LBP_H2 },
+       { 0xCA85, 0xCA9F, LBP_H3 },
+       { 0xCAA0, 0xCAA0, LBP_H2 },
+       { 0xCAA1, 0xCABB, LBP_H3 },
+       { 0xCABC, 0xCABC, LBP_H2 },
+       { 0xCABD, 0xCAD7, LBP_H3 },
+       { 0xCAD8, 0xCAD8, LBP_H2 },
+       { 0xCAD9, 0xCAF3, LBP_H3 },
+       { 0xCAF4, 0xCAF4, LBP_H2 },
+       { 0xCAF5, 0xCB0F, LBP_H3 },
+       { 0xCB10, 0xCB10, LBP_H2 },
+       { 0xCB11, 0xCB2B, LBP_H3 },
+       { 0xCB2C, 0xCB2C, LBP_H2 },
+       { 0xCB2D, 0xCB47, LBP_H3 },
+       { 0xCB48, 0xCB48, LBP_H2 },
+       { 0xCB49, 0xCB63, LBP_H3 },
+       { 0xCB64, 0xCB64, LBP_H2 },
+       { 0xCB65, 0xCB7F, LBP_H3 },
+       { 0xCB80, 0xCB80, LBP_H2 },
+       { 0xCB81, 0xCB9B, LBP_H3 },
+       { 0xCB9C, 0xCB9C, LBP_H2 },
+       { 0xCB9D, 0xCBB7, LBP_H3 },
+       { 0xCBB8, 0xCBB8, LBP_H2 },
+       { 0xCBB9, 0xCBD3, LBP_H3 },
+       { 0xCBD4, 0xCBD4, LBP_H2 },
+       { 0xCBD5, 0xCBEF, LBP_H3 },
+       { 0xCBF0, 0xCBF0, LBP_H2 },
+       { 0xCBF1, 0xCC0B, LBP_H3 },
+       { 0xCC0C, 0xCC0C, LBP_H2 },
+       { 0xCC0D, 0xCC27, LBP_H3 },
+       { 0xCC28, 0xCC28, LBP_H2 },
+       { 0xCC29, 0xCC43, LBP_H3 },
+       { 0xCC44, 0xCC44, LBP_H2 },
+       { 0xCC45, 0xCC5F, LBP_H3 },
+       { 0xCC60, 0xCC60, LBP_H2 },
+       { 0xCC61, 0xCC7B, LBP_H3 },
+       { 0xCC7C, 0xCC7C, LBP_H2 },
+       { 0xCC7D, 0xCC97, LBP_H3 },
+       { 0xCC98, 0xCC98, LBP_H2 },
+       { 0xCC99, 0xCCB3, LBP_H3 },
+       { 0xCCB4, 0xCCB4, LBP_H2 },
+       { 0xCCB5, 0xCCCF, LBP_H3 },
+       { 0xCCD0, 0xCCD0, LBP_H2 },
+       { 0xCCD1, 0xCCEB, LBP_H3 },
+       { 0xCCEC, 0xCCEC, LBP_H2 },
+       { 0xCCED, 0xCD07, LBP_H3 },
+       { 0xCD08, 0xCD08, LBP_H2 },
+       { 0xCD09, 0xCD23, LBP_H3 },
+       { 0xCD24, 0xCD24, LBP_H2 },
+       { 0xCD25, 0xCD3F, LBP_H3 },
+       { 0xCD40, 0xCD40, LBP_H2 },
+       { 0xCD41, 0xCD5B, LBP_H3 },
+       { 0xCD5C, 0xCD5C, LBP_H2 },
+       { 0xCD5D, 0xCD77, LBP_H3 },
+       { 0xCD78, 0xCD78, LBP_H2 },
+       { 0xCD79, 0xCD93, LBP_H3 },
+       { 0xCD94, 0xCD94, LBP_H2 },
+       { 0xCD95, 0xCDAF, LBP_H3 },
+       { 0xCDB0, 0xCDB0, LBP_H2 },
+       { 0xCDB1, 0xCDCB, LBP_H3 },
+       { 0xCDCC, 0xCDCC, LBP_H2 },
+       { 0xCDCD, 0xCDE7, LBP_H3 },
+       { 0xCDE8, 0xCDE8, LBP_H2 },
+       { 0xCDE9, 0xCE03, LBP_H3 },
+       { 0xCE04, 0xCE04, LBP_H2 },
+       { 0xCE05, 0xCE1F, LBP_H3 },
+       { 0xCE20, 0xCE20, LBP_H2 },
+       { 0xCE21, 0xCE3B, LBP_H3 },
+       { 0xCE3C, 0xCE3C, LBP_H2 },
+       { 0xCE3D, 0xCE57, LBP_H3 },
+       { 0xCE58, 0xCE58, LBP_H2 },
+       { 0xCE59, 0xCE73, LBP_H3 },
+       { 0xCE74, 0xCE74, LBP_H2 },
+       { 0xCE75, 0xCE8F, LBP_H3 },
+       { 0xCE90, 0xCE90, LBP_H2 },
+       { 0xCE91, 0xCEAB, LBP_H3 },
+       { 0xCEAC, 0xCEAC, LBP_H2 },
+       { 0xCEAD, 0xCEC7, LBP_H3 },
+       { 0xCEC8, 0xCEC8, LBP_H2 },
+       { 0xCEC9, 0xCEE3, LBP_H3 },
+       { 0xCEE4, 0xCEE4, LBP_H2 },
+       { 0xCEE5, 0xCEFF, LBP_H3 },
+       { 0xCF00, 0xCF00, LBP_H2 },
+       { 0xCF01, 0xCF1B, LBP_H3 },
+       { 0xCF1C, 0xCF1C, LBP_H2 },
+       { 0xCF1D, 0xCF37, LBP_H3 },
+       { 0xCF38, 0xCF38, LBP_H2 },
+       { 0xCF39, 0xCF53, LBP_H3 },
+       { 0xCF54, 0xCF54, LBP_H2 },
+       { 0xCF55, 0xCF6F, LBP_H3 },
+       { 0xCF70, 0xCF70, LBP_H2 },
+       { 0xCF71, 0xCF8B, LBP_H3 },
+       { 0xCF8C, 0xCF8C, LBP_H2 },
+       { 0xCF8D, 0xCFA7, LBP_H3 },
+       { 0xCFA8, 0xCFA8, LBP_H2 },
+       { 0xCFA9, 0xCFC3, LBP_H3 },
+       { 0xCFC4, 0xCFC4, LBP_H2 },
+       { 0xCFC5, 0xCFDF, LBP_H3 },
+       { 0xCFE0, 0xCFE0, LBP_H2 },
+       { 0xCFE1, 0xCFFB, LBP_H3 },
+       { 0xCFFC, 0xCFFC, LBP_H2 },
+       { 0xCFFD, 0xD017, LBP_H3 },
+       { 0xD018, 0xD018, LBP_H2 },
+       { 0xD019, 0xD033, LBP_H3 },
+       { 0xD034, 0xD034, LBP_H2 },
+       { 0xD035, 0xD04F, LBP_H3 },
+       { 0xD050, 0xD050, LBP_H2 },
+       { 0xD051, 0xD06B, LBP_H3 },
+       { 0xD06C, 0xD06C, LBP_H2 },
+       { 0xD06D, 0xD087, LBP_H3 },
+       { 0xD088, 0xD088, LBP_H2 },
+       { 0xD089, 0xD0A3, LBP_H3 },
+       { 0xD0A4, 0xD0A4, LBP_H2 },
+       { 0xD0A5, 0xD0BF, LBP_H3 },
+       { 0xD0C0, 0xD0C0, LBP_H2 },
+       { 0xD0C1, 0xD0DB, LBP_H3 },
+       { 0xD0DC, 0xD0DC, LBP_H2 },
+       { 0xD0DD, 0xD0F7, LBP_H3 },
+       { 0xD0F8, 0xD0F8, LBP_H2 },
+       { 0xD0F9, 0xD113, LBP_H3 },
+       { 0xD114, 0xD114, LBP_H2 },
+       { 0xD115, 0xD12F, LBP_H3 },
+       { 0xD130, 0xD130, LBP_H2 },
+       { 0xD131, 0xD14B, LBP_H3 },
+       { 0xD14C, 0xD14C, LBP_H2 },
+       { 0xD14D, 0xD167, LBP_H3 },
+       { 0xD168, 0xD168, LBP_H2 },
+       { 0xD169, 0xD183, LBP_H3 },
+       { 0xD184, 0xD184, LBP_H2 },
+       { 0xD185, 0xD19F, LBP_H3 },
+       { 0xD1A0, 0xD1A0, LBP_H2 },
+       { 0xD1A1, 0xD1BB, LBP_H3 },
+       { 0xD1BC, 0xD1BC, LBP_H2 },
+       { 0xD1BD, 0xD1D7, LBP_H3 },
+       { 0xD1D8, 0xD1D8, LBP_H2 },
+       { 0xD1D9, 0xD1F3, LBP_H3 },
+       { 0xD1F4, 0xD1F4, LBP_H2 },
+       { 0xD1F5, 0xD20F, LBP_H3 },
+       { 0xD210, 0xD210, LBP_H2 },
+       { 0xD211, 0xD22B, LBP_H3 },
+       { 0xD22C, 0xD22C, LBP_H2 },
+       { 0xD22D, 0xD247, LBP_H3 },
+       { 0xD248, 0xD248, LBP_H2 },
+       { 0xD249, 0xD263, LBP_H3 },
+       { 0xD264, 0xD264, LBP_H2 },
+       { 0xD265, 0xD27F, LBP_H3 },
+       { 0xD280, 0xD280, LBP_H2 },
+       { 0xD281, 0xD29B, LBP_H3 },
+       { 0xD29C, 0xD29C, LBP_H2 },
+       { 0xD29D, 0xD2B7, LBP_H3 },
+       { 0xD2B8, 0xD2B8, LBP_H2 },
+       { 0xD2B9, 0xD2D3, LBP_H3 },
+       { 0xD2D4, 0xD2D4, LBP_H2 },
+       { 0xD2D5, 0xD2EF, LBP_H3 },
+       { 0xD2F0, 0xD2F0, LBP_H2 },
+       { 0xD2F1, 0xD30B, LBP_H3 },
+       { 0xD30C, 0xD30C, LBP_H2 },
+       { 0xD30D, 0xD327, LBP_H3 },
+       { 0xD328, 0xD328, LBP_H2 },
+       { 0xD329, 0xD343, LBP_H3 },
+       { 0xD344, 0xD344, LBP_H2 },
+       { 0xD345, 0xD35F, LBP_H3 },
+       { 0xD360, 0xD360, LBP_H2 },
+       { 0xD361, 0xD37B, LBP_H3 },
+       { 0xD37C, 0xD37C, LBP_H2 },
+       { 0xD37D, 0xD397, LBP_H3 },
+       { 0xD398, 0xD398, LBP_H2 },
+       { 0xD399, 0xD3B3, LBP_H3 },
+       { 0xD3B4, 0xD3B4, LBP_H2 },
+       { 0xD3B5, 0xD3CF, LBP_H3 },
+       { 0xD3D0, 0xD3D0, LBP_H2 },
+       { 0xD3D1, 0xD3EB, LBP_H3 },
+       { 0xD3EC, 0xD3EC, LBP_H2 },
+       { 0xD3ED, 0xD407, LBP_H3 },
+       { 0xD408, 0xD408, LBP_H2 },
+       { 0xD409, 0xD423, LBP_H3 },
+       { 0xD424, 0xD424, LBP_H2 },
+       { 0xD425, 0xD43F, LBP_H3 },
+       { 0xD440, 0xD440, LBP_H2 },
+       { 0xD441, 0xD45B, LBP_H3 },
+       { 0xD45C, 0xD45C, LBP_H2 },
+       { 0xD45D, 0xD477, LBP_H3 },
+       { 0xD478, 0xD478, LBP_H2 },
+       { 0xD479, 0xD493, LBP_H3 },
+       { 0xD494, 0xD494, LBP_H2 },
+       { 0xD495, 0xD4AF, LBP_H3 },
+       { 0xD4B0, 0xD4B0, LBP_H2 },
+       { 0xD4B1, 0xD4CB, LBP_H3 },
+       { 0xD4CC, 0xD4CC, LBP_H2 },
+       { 0xD4CD, 0xD4E7, LBP_H3 },
+       { 0xD4E8, 0xD4E8, LBP_H2 },
+       { 0xD4E9, 0xD503, LBP_H3 },
+       { 0xD504, 0xD504, LBP_H2 },
+       { 0xD505, 0xD51F, LBP_H3 },
+       { 0xD520, 0xD520, LBP_H2 },
+       { 0xD521, 0xD53B, LBP_H3 },
+       { 0xD53C, 0xD53C, LBP_H2 },
+       { 0xD53D, 0xD557, LBP_H3 },
+       { 0xD558, 0xD558, LBP_H2 },
+       { 0xD559, 0xD573, LBP_H3 },
+       { 0xD574, 0xD574, LBP_H2 },
+       { 0xD575, 0xD58F, LBP_H3 },
+       { 0xD590, 0xD590, LBP_H2 },
+       { 0xD591, 0xD5AB, LBP_H3 },
+       { 0xD5AC, 0xD5AC, LBP_H2 },
+       { 0xD5AD, 0xD5C7, LBP_H3 },
+       { 0xD5C8, 0xD5C8, LBP_H2 },
+       { 0xD5C9, 0xD5E3, LBP_H3 },
+       { 0xD5E4, 0xD5E4, LBP_H2 },
+       { 0xD5E5, 0xD5FF, LBP_H3 },
+       { 0xD600, 0xD600, LBP_H2 },
+       { 0xD601, 0xD61B, LBP_H3 },
+       { 0xD61C, 0xD61C, LBP_H2 },
+       { 0xD61D, 0xD637, LBP_H3 },
+       { 0xD638, 0xD638, LBP_H2 },
+       { 0xD639, 0xD653, LBP_H3 },
+       { 0xD654, 0xD654, LBP_H2 },
+       { 0xD655, 0xD66F, LBP_H3 },
+       { 0xD670, 0xD670, LBP_H2 },
+       { 0xD671, 0xD68B, LBP_H3 },
+       { 0xD68C, 0xD68C, LBP_H2 },
+       { 0xD68D, 0xD6A7, LBP_H3 },
+       { 0xD6A8, 0xD6A8, LBP_H2 },
+       { 0xD6A9, 0xD6C3, LBP_H3 },
+       { 0xD6C4, 0xD6C4, LBP_H2 },
+       { 0xD6C5, 0xD6DF, LBP_H3 },
+       { 0xD6E0, 0xD6E0, LBP_H2 },
+       { 0xD6E1, 0xD6FB, LBP_H3 },
+       { 0xD6FC, 0xD6FC, LBP_H2 },
+       { 0xD6FD, 0xD717, LBP_H3 },
+       { 0xD718, 0xD718, LBP_H2 },
+       { 0xD719, 0xD733, LBP_H3 },
+       { 0xD734, 0xD734, LBP_H2 },
+       { 0xD735, 0xD74F, LBP_H3 },
+       { 0xD750, 0xD750, LBP_H2 },
+       { 0xD751, 0xD76B, LBP_H3 },
+       { 0xD76C, 0xD76C, LBP_H2 },
+       { 0xD76D, 0xD787, LBP_H3 },
+       { 0xD788, 0xD788, LBP_H2 },
+       { 0xD789, 0xD7A3, LBP_H3 },
+       { 0xD7B0, 0xD7C6, LBP_JV },
+       { 0xD7CB, 0xD7FB, LBP_JT },
+       { 0xD800, 0xDFFF, LBP_SG },
+       { 0xE000, 0xF8FF, LBP_XX },
+       { 0xF900, 0xFAFF, LBP_ID },
+       { 0xFB00, 0xFB1D, LBP_AL },
+       { 0xFB1E, 0xFB1E, LBP_CM },
+       { 0xFB1F, 0xFD3D, LBP_AL },
+       { 0xFD3E, 0xFD3E, LBP_OP },
+       { 0xFD3F, 0xFD3F, LBP_CL },
+       { 0xFD50, 0xFDFB, LBP_AL },
+       { 0xFDFC, 0xFDFC, LBP_PO },
+       { 0xFDFD, 0xFDFD, LBP_AL },
+       { 0xFE00, 0xFE0F, LBP_CM },
+       { 0xFE10, 0xFE10, LBP_IS },
+       { 0xFE11, 0xFE12, LBP_CL },
+       { 0xFE13, 0xFE14, LBP_IS },
+       { 0xFE15, 0xFE16, LBP_EX },
+       { 0xFE17, 0xFE17, LBP_OP },
+       { 0xFE18, 0xFE18, LBP_CL },
+       { 0xFE19, 0xFE19, LBP_IN },
+       { 0xFE20, 0xFE26, LBP_CM },
+       { 0xFE30, 0xFE34, LBP_ID },
+       { 0xFE35, 0xFE35, LBP_OP },
+       { 0xFE36, 0xFE36, LBP_CL },
+       { 0xFE37, 0xFE37, LBP_OP },
+       { 0xFE38, 0xFE38, LBP_CL },
+       { 0xFE39, 0xFE39, LBP_OP },
+       { 0xFE3A, 0xFE3A, LBP_CL },
+       { 0xFE3B, 0xFE3B, LBP_OP },
+       { 0xFE3C, 0xFE3C, LBP_CL },
+       { 0xFE3D, 0xFE3D, LBP_OP },
+       { 0xFE3E, 0xFE3E, LBP_CL },
+       { 0xFE3F, 0xFE3F, LBP_OP },
+       { 0xFE40, 0xFE40, LBP_CL },
+       { 0xFE41, 0xFE41, LBP_OP },
+       { 0xFE42, 0xFE42, LBP_CL },
+       { 0xFE43, 0xFE43, LBP_OP },
+       { 0xFE44, 0xFE44, LBP_CL },
+       { 0xFE45, 0xFE46, LBP_ID },
+       { 0xFE47, 0xFE47, LBP_OP },
+       { 0xFE48, 0xFE48, LBP_CL },
+       { 0xFE49, 0xFE4F, LBP_ID },
+       { 0xFE50, 0xFE50, LBP_CL },
+       { 0xFE51, 0xFE51, LBP_ID },
+       { 0xFE52, 0xFE52, LBP_CL },
+       { 0xFE54, 0xFE55, LBP_NS },
+       { 0xFE56, 0xFE57, LBP_EX },
+       { 0xFE58, 0xFE58, LBP_ID },
+       { 0xFE59, 0xFE59, LBP_OP },
+       { 0xFE5A, 0xFE5A, LBP_CL },
+       { 0xFE5B, 0xFE5B, LBP_OP },
+       { 0xFE5C, 0xFE5C, LBP_CL },
+       { 0xFE5D, 0xFE5D, LBP_OP },
+       { 0xFE5E, 0xFE5E, LBP_CL },
+       { 0xFE5F, 0xFE68, LBP_ID },
+       { 0xFE69, 0xFE69, LBP_PR },
+       { 0xFE6A, 0xFE6A, LBP_PO },
+       { 0xFE6B, 0xFE6B, LBP_ID },
+       { 0xFE70, 0xFEFC, LBP_AL },
+       { 0xFEFF, 0xFEFF, LBP_WJ },
+       { 0xFF01, 0xFF01, LBP_EX },
+       { 0xFF02, 0xFF03, LBP_ID },
+       { 0xFF04, 0xFF04, LBP_PR },
+       { 0xFF05, 0xFF05, LBP_PO },
+       { 0xFF06, 0xFF07, LBP_ID },
+       { 0xFF08, 0xFF08, LBP_OP },
+       { 0xFF09, 0xFF09, LBP_CL },
+       { 0xFF0A, 0xFF0B, LBP_ID },
+       { 0xFF0C, 0xFF0C, LBP_CL },
+       { 0xFF0D, 0xFF0D, LBP_ID },
+       { 0xFF0E, 0xFF0E, LBP_CL },
+       { 0xFF0F, 0xFF19, LBP_ID },
+       { 0xFF1A, 0xFF1B, LBP_NS },
+       { 0xFF1C, 0xFF1E, LBP_ID },
+       { 0xFF1F, 0xFF1F, LBP_EX },
+       { 0xFF20, 0xFF3A, LBP_ID },
+       { 0xFF3B, 0xFF3B, LBP_OP },
+       { 0xFF3C, 0xFF3C, LBP_ID },
+       { 0xFF3D, 0xFF3D, LBP_CL },
+       { 0xFF3E, 0xFF5A, LBP_ID },
+       { 0xFF5B, 0xFF5B, LBP_OP },
+       { 0xFF5C, 0xFF5C, LBP_ID },
+       { 0xFF5D, 0xFF5D, LBP_CL },
+       { 0xFF5E, 0xFF5E, LBP_ID },
+       { 0xFF5F, 0xFF5F, LBP_OP },
+       { 0xFF60, 0xFF61, LBP_CL },
+       { 0xFF62, 0xFF62, LBP_OP },
+       { 0xFF63, 0xFF64, LBP_CL },
+       { 0xFF65, 0xFF65, LBP_NS },
+       { 0xFF66, 0xFF66, LBP_AL },
+       { 0xFF67, 0xFF70, LBP_NS },
+       { 0xFF71, 0xFF9D, LBP_AL },
+       { 0xFF9E, 0xFF9F, LBP_NS },
+       { 0xFFA0, 0xFFDC, LBP_AL },
+       { 0xFFE0, 0xFFE0, LBP_PO },
+       { 0xFFE1, 0xFFE1, LBP_PR },
+       { 0xFFE2, 0xFFE4, LBP_ID },
+       { 0xFFE5, 0xFFE6, LBP_PR },
+       { 0xFFE8, 0xFFEE, LBP_AL },
+       { 0xFFF9, 0xFFFB, LBP_CM },
+       { 0xFFFC, 0xFFFC, LBP_CB },
+       { 0xFFFD, 0xFFFD, LBP_AI },
+       { 0x10000, 0x100FA, LBP_AL },
+       { 0x10100, 0x10102, LBP_BA },
+       { 0x10107, 0x101FC, LBP_AL },
+       { 0x101FD, 0x101FD, LBP_CM },
+       { 0x10280, 0x1039D, LBP_AL },
+       { 0x1039F, 0x1039F, LBP_BA },
+       { 0x103A0, 0x103CF, LBP_AL },
+       { 0x103D0, 0x103D0, LBP_BA },
+       { 0x103D1, 0x1049D, LBP_AL },
+       { 0x104A0, 0x104A9, LBP_NU },
+       { 0x10800, 0x10855, LBP_AL },
+       { 0x10857, 0x10857, LBP_BA },
+       { 0x10858, 0x1091B, LBP_AL },
+       { 0x1091F, 0x1091F, LBP_BA },
+       { 0x10920, 0x10A00, LBP_AL },
+       { 0x10A01, 0x10A0F, LBP_CM },
+       { 0x10A10, 0x10A33, LBP_AL },
+       { 0x10A38, 0x10A3F, LBP_CM },
+       { 0x10A40, 0x10A47, LBP_AL },
+       { 0x10A50, 0x10A57, LBP_BA },
+       { 0x10A58, 0x10B35, LBP_AL },
+       { 0x10B39, 0x10B3F, LBP_BA },
+       { 0x10B40, 0x10E7E, LBP_AL },
+       { 0x11000, 0x11002, LBP_CM },
+       { 0x11003, 0x11037, LBP_AL },
+       { 0x11038, 0x11046, LBP_CM },
+       { 0x11047, 0x11048, LBP_BA },
+       { 0x11049, 0x11065, LBP_AL },
+       { 0x11066, 0x1106F, LBP_NU },
+       { 0x11080, 0x11082, LBP_CM },
+       { 0x11083, 0x110AF, LBP_AL },
+       { 0x110B0, 0x110BA, LBP_CM },
+       { 0x110BB, 0x110BD, LBP_AL },
+       { 0x110BE, 0x110C1, LBP_BA },
+       { 0x12000, 0x12462, LBP_AL },
+       { 0x12470, 0x12473, LBP_BA },
+       { 0x13000, 0x13257, LBP_AL },
+       { 0x13258, 0x1325A, LBP_OP },
+       { 0x1325B, 0x1325D, LBP_CL },
+       { 0x1325E, 0x13281, LBP_AL },
+       { 0x13282, 0x13282, LBP_CL },
+       { 0x13283, 0x13285, LBP_AL },
+       { 0x13286, 0x13286, LBP_OP },
+       { 0x13287, 0x13287, LBP_CL },
+       { 0x13288, 0x13288, LBP_OP },
+       { 0x13289, 0x13289, LBP_CL },
+       { 0x1328A, 0x13378, LBP_AL },
+       { 0x13379, 0x13379, LBP_OP },
+       { 0x1337A, 0x1337B, LBP_CL },
+       { 0x1337C, 0x16A38, LBP_AL },
+       { 0x1B000, 0x1B001, LBP_ID },
+       { 0x1D000, 0x1D164, LBP_AL },
+       { 0x1D165, 0x1D169, LBP_CM },
+       { 0x1D16A, 0x1D16C, LBP_AL },
+       { 0x1D16D, 0x1D182, LBP_CM },
+       { 0x1D183, 0x1D184, LBP_AL },
+       { 0x1D185, 0x1D18B, LBP_CM },
+       { 0x1D18C, 0x1D1A9, LBP_AL },
+       { 0x1D1AA, 0x1D1AD, LBP_CM },
+       { 0x1D1AE, 0x1D241, LBP_AL },
+       { 0x1D242, 0x1D244, LBP_CM },
+       { 0x1D245, 0x1D7CB, LBP_AL },
+       { 0x1D7CE, 0x1D7FF, LBP_NU },
+       { 0x1F000, 0x1F0DF, LBP_AL },
+       { 0x1F100, 0x1F12D, LBP_AI },
+       { 0x1F12E, 0x1F12E, LBP_AL },
+       { 0x1F130, 0x1F19A, LBP_AI },
+       { 0x1F1E6, 0x1F1FF, LBP_AL },
+       { 0x1F200, 0x1F251, LBP_ID },
+       { 0x1F300, 0x1F773, LBP_AL },
+       { 0x20000, 0x3FFFD, LBP_ID },
+       { 0xE0001, 0xE01EF, LBP_CM },
+       { 0xF0000, 0x10FFFD, LBP_XX },
+       { 0xFFFFFFFF, 0xFFFFFFFF, LBP_Undefined }
+};
diff --git a/src/static_deps/liblinebreak/linebreakdata1.tmpl b/src/static_deps/liblinebreak/linebreakdata1.tmpl
new file mode 100644 (file)
index 0000000..df06125
--- /dev/null
@@ -0,0 +1 @@
+/* The content of this file is generated from:
diff --git a/src/static_deps/liblinebreak/linebreakdata2.tmpl b/src/static_deps/liblinebreak/linebreakdata2.tmpl
new file mode 100644 (file)
index 0000000..60d0d37
--- /dev/null
@@ -0,0 +1,7 @@
+*/
+
+#include "linebreak.h"
+#include "linebreakdef.h"
+
+/** Default line breaking properties as from the Unicode Web site. */
+struct LineBreakProperties lb_prop_default[] = {
diff --git a/src/static_deps/liblinebreak/linebreakdata3.tmpl b/src/static_deps/liblinebreak/linebreakdata3.tmpl
new file mode 100644 (file)
index 0000000..a77017c
--- /dev/null
@@ -0,0 +1,2 @@
+       { 0xFFFFFFFF, 0xFFFFFFFF, LBP_Undefined }
+};
diff --git a/src/static_deps/liblinebreak/linebreakdef.c b/src/static_deps/liblinebreak/linebreakdef.c
new file mode 100644 (file)
index 0000000..9ddb4d9
--- /dev/null
@@ -0,0 +1,139 @@
+/* vim: set tabstop=4 shiftwidth=4: */
+
+/*
+ * Line breaking in a Unicode sequence.  Designed to be used in a
+ * generic text renderer.
+ *
+ * Copyright (C) 2008-2010 Wu Yongwei <wuyongwei at gmail dot com>
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty.  In no event will the author be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute
+ * it freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must
+ *    not claim that you wrote the original software.  If you use this
+ *    software in a product, an acknowledgement in the product
+ *    documentation would be appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must
+ *    not be misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source
+ *    distribution.
+ *
+ * The main reference is Unicode Standard Annex 14 (UAX #14):
+ *             <URL:http://www.unicode.org/reports/tr14/>
+ *
+ * When this library was designed, this annex was at Revision 19, for
+ * Unicode 5.0.0:
+ *             <URL:http://www.unicode.org/reports/tr14/tr14-19.html>
+ *
+ * This library has been updated according to Revision 24, for
+ * Unicode 5.2.0:
+ *             <URL:http://www.unicode.org/reports/tr14/tr14-24.html>
+ *
+ * The Unicode Terms of Use are available at
+ *             <URL:http://www.unicode.org/copyright.html>
+ */
+
+/**
+ * @file       linebreakdef.c
+ *
+ * Definition of language-specific data.
+ *
+ * @version    2.0, 2010/01/03
+ * @author     Wu Yongwei
+ */
+
+#include "linebreak.h"
+#include "linebreakdef.h"
+
+/**
+ * English-specifc data over the default Unicode rules.
+ */
+static struct LineBreakProperties lb_prop_English[] = {
+       { 0x2018, 0x2018, LBP_OP },     /* Left single quotation mark: opening */
+       { 0x201C, 0x201C, LBP_OP },     /* Left double quotation mark: opening */
+       { 0x201D, 0x201D, LBP_CL },     /* Right double quotation mark: closing */
+       { 0, 0, LBP_Undefined }
+};
+
+/**
+ * German-specifc data over the default Unicode rules.
+ */
+static struct LineBreakProperties lb_prop_German[] = {
+       { 0x00AB, 0x00AB, LBP_CL },     /* Left double angle quotation mark: closing */
+       { 0x00BB, 0x00BB, LBP_OP },     /* Right double angle quotation mark: opening */
+       { 0x2018, 0x2018, LBP_CL },     /* Left single quotation mark: closing */
+       { 0x201C, 0x201C, LBP_CL },     /* Left double quotation mark: closing */
+       { 0x2039, 0x2039, LBP_CL },     /* Left single angle quotation mark: closing */
+       { 0x203A, 0x203A, LBP_OP },     /* Right single angle quotation mark: opening */
+       { 0, 0, LBP_Undefined }
+};
+
+/**
+ * Spanish-specifc data over the default Unicode rules.
+ */
+static struct LineBreakProperties lb_prop_Spanish[] = {
+       { 0x00AB, 0x00AB, LBP_OP },     /* Left double angle quotation mark: opening */
+       { 0x00BB, 0x00BB, LBP_CL },     /* Right double angle quotation mark: closing */
+       { 0x2018, 0x2018, LBP_OP },     /* Left single quotation mark: opening */
+       { 0x201C, 0x201C, LBP_OP },     /* Left double quotation mark: opening */
+       { 0x201D, 0x201D, LBP_CL },     /* Right double quotation mark: closing */
+       { 0x2039, 0x2039, LBP_OP },     /* Left single angle quotation mark: opening */
+       { 0x203A, 0x203A, LBP_CL },     /* Right single angle quotation mark: closing */
+       { 0, 0, LBP_Undefined }
+};
+
+/**
+ * French-specifc data over the default Unicode rules.
+ */
+static struct LineBreakProperties lb_prop_French[] = {
+       { 0x00AB, 0x00AB, LBP_OP },     /* Left double angle quotation mark: opening */
+       { 0x00BB, 0x00BB, LBP_CL },     /* Right double angle quotation mark: closing */
+       { 0x2018, 0x2018, LBP_OP },     /* Left single quotation mark: opening */
+       { 0x201C, 0x201C, LBP_OP },     /* Left double quotation mark: opening */
+       { 0x201D, 0x201D, LBP_CL },     /* Right double quotation mark: closing */
+       { 0x2039, 0x2039, LBP_OP },     /* Left single angle quotation mark: opening */
+       { 0x203A, 0x203A, LBP_CL },     /* Right single angle quotation mark: closing */
+       { 0, 0, LBP_Undefined }
+};
+
+/**
+ * Russian-specifc data over the default Unicode rules.
+ */
+static struct LineBreakProperties lb_prop_Russian[] = {
+       { 0x00AB, 0x00AB, LBP_OP },     /* Left double angle quotation mark: opening */
+       { 0x00BB, 0x00BB, LBP_CL },     /* Right double angle quotation mark: closing */
+       { 0x201C, 0x201C, LBP_CL },     /* Left double quotation mark: closing */
+       { 0, 0, LBP_Undefined }
+};
+
+/**
+ * Chinese-specifc data over the default Unicode rules.
+ */
+static struct LineBreakProperties lb_prop_Chinese[] = {
+       { 0x2018, 0x2018, LBP_OP },     /* Left single quotation mark: opening */
+       { 0x2019, 0x2019, LBP_CL },     /* Right single quotation mark: closing */
+       { 0x201C, 0x201C, LBP_OP },     /* Left double quotation mark: opening */
+       { 0x201D, 0x201D, LBP_CL },     /* Right double quotation mark: closing */
+       { 0, 0, LBP_Undefined }
+};
+
+/**
+ * Association data of language-specific line breaking properties with
+ * language names.  This is the definition for the static data in this
+ * file.  If you want more flexibility, or do not need the data here,
+ * you may want to redefine \e lb_prop_lang_map in your C source file.
+ */
+struct LineBreakPropertiesLang lb_prop_lang_map[] = {
+       { "en", 2, lb_prop_English },
+       { "de", 2, lb_prop_German },
+       { "es", 2, lb_prop_Spanish },
+       { "fr", 2, lb_prop_French },
+       { "ru", 2, lb_prop_Russian },
+       { "zh", 2, lb_prop_Chinese },
+       { NULL, 0, NULL }
+};
diff --git a/src/static_deps/liblinebreak/linebreakdef.h b/src/static_deps/liblinebreak/linebreakdef.h
new file mode 100644 (file)
index 0000000..bc4eee2
--- /dev/null
@@ -0,0 +1,149 @@
+/* vim: set tabstop=4 shiftwidth=4: */
+
+/*
+ * Line breaking in a Unicode sequence.  Designed to be used in a
+ * generic text renderer.
+ *
+ * Copyright (C) 2008-2010 Wu Yongwei <wuyongwei at gmail dot com>
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty.  In no event will the author be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute
+ * it freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must
+ *    not claim that you wrote the original software.  If you use this
+ *    software in a product, an acknowledgement in the product
+ *    documentation would be appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must
+ *    not be misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source
+ *    distribution.
+ *
+ * The main reference is Unicode Standard Annex 14 (UAX #14):
+ *             <URL:http://www.unicode.org/reports/tr14/>
+ *
+ * When this library was designed, this annex was at Revision 19, for
+ * Unicode 5.0.0:
+ *             <URL:http://www.unicode.org/reports/tr14/tr14-19.html>
+ *
+ * This library has been updated according to Revision 24, for
+ * Unicode 5.2.0:
+ *             <URL:http://www.unicode.org/reports/tr14/tr14-24.html>
+ *
+ * The Unicode Terms of Use are available at
+ *             <URL:http://www.unicode.org/copyright.html>
+ */
+
+/**
+ * @file       linebreakdef.h
+ *
+ * Definitions of internal data structures, declarations of global
+ * variables, and function prototypes for the line breaking algorithm.
+ *
+ * @version    2.0, 2010/01/03
+ * @author     Wu Yongwei
+ */
+
+/**
+ * Constant value to mark the end of string.  It is not a valid Unicode
+ * character.
+ */
+#define EOS 0xFFFF
+
+/**
+ * Line break classes.  This is a direct mapping of Table 1 of Unicode
+ * Standard Annex 14, Revision 19.
+ */
+enum LineBreakClass
+{
+       /* This is used to signal an error condition. */
+       LBP_Undefined,  /**< Undefined */
+
+       /* The following break classes are treated in the pair table. */
+       LBP_OP,                 /**< Opening punctuation */
+       LBP_CL,                 /**< Closing punctuation */
+       LBP_CP,                 /**< Closing parenthesis */
+       LBP_QU,                 /**< Ambiguous quotation */
+       LBP_GL,                 /**< Glue */
+       LBP_NS,                 /**< Non-starters */
+       LBP_EX,                 /**< Exclamation/Interrogation */
+       LBP_SY,                 /**< Symbols allowing break after */
+       LBP_IS,                 /**< Infix separator */
+       LBP_PR,                 /**< Prefix */
+       LBP_PO,                 /**< Postfix */
+       LBP_NU,                 /**< Numeric */
+       LBP_AL,                 /**< Alphabetic */
+       LBP_ID,                 /**< Ideographic */
+       LBP_IN,                 /**< Inseparable characters */
+       LBP_HY,                 /**< Hyphen */
+       LBP_BA,                 /**< Break after */
+       LBP_BB,                 /**< Break before */
+       LBP_B2,                 /**< Break on either side (but not pair) */
+       LBP_ZW,                 /**< Zero-width space */
+       LBP_CM,                 /**< Combining marks */
+       LBP_WJ,                 /**< Word joiner */
+       LBP_H2,                 /**< Hangul LV */
+       LBP_H3,                 /**< Hangul LVT */
+       LBP_JL,                 /**< Hangul L Jamo */
+       LBP_JV,                 /**< Hangul V Jamo */
+       LBP_JT,                 /**< Hangul T Jamo */
+
+       /* The following break classes are not treated in the pair table */
+       LBP_AI,                 /**< Ambiguous (alphabetic or ideograph) */
+       LBP_BK,                 /**< Break (mandatory) */
+       LBP_CB,                 /**< Contingent break */
+       LBP_CR,                 /**< Carriage return */
+       LBP_LF,                 /**< Line feed */
+       LBP_NL,                 /**< Next line */
+       LBP_SA,                 /**< South-East Asian */
+       LBP_SG,                 /**< Surrogates */
+       LBP_SP,                 /**< Space */
+       LBP_XX                  /**< Unknown */
+};
+
+/**
+ * Struct for entries of line break properties.  The array of the
+ * entries \e must be sorted.
+ */
+struct LineBreakProperties
+{
+       utf32_t start;                          /**< Starting coding point */
+       utf32_t end;                            /**< End coding point */
+       enum LineBreakClass prop;       /**< The line breaking property */
+};
+
+/**
+ * Struct for association of language-specific line breaking properties
+ * with language names.
+ */
+struct LineBreakPropertiesLang
+{
+       const char *lang;                                       /**< Language name */
+       size_t namelen;                                         /**< Length of name to match */
+       struct LineBreakProperties *lbp;        /**< Pointer to associated data */
+};
+
+/**
+ * Abstract function interface for #lb_get_next_char_utf8,
+ * #lb_get_next_char_utf16, and #lb_get_next_char_utf32.
+ */
+typedef utf32_t (*get_next_char_t)(const void *, size_t, size_t *);
+
+/* Declarations */
+extern struct LineBreakProperties lb_prop_default[];
+extern struct LineBreakPropertiesLang lb_prop_lang_map[];
+
+/* Function Prototype */
+utf32_t lb_get_next_char_utf8(const utf8_t *s, size_t len, size_t *ip);
+utf32_t lb_get_next_char_utf16(const utf16_t *s, size_t len, size_t *ip);
+utf32_t lb_get_next_char_utf32(const utf32_t *s, size_t len, size_t *ip);
+void set_linebreaks(
+               const void *s,
+               size_t len,
+               const char *lang,
+               char *brks,
+               get_next_char_t get_next_char);