summaryrefslogtreecommitdiff
path: root/src/static_libs
diff options
context:
space:
mode:
authorVincent Torri <vincent.torri@gmail.com>2012-11-04 11:51:42 +0000
committerVincent Torri <vincent.torri@gmail.com>2012-11-04 11:51:42 +0000
commitc15e9c6575c3b5f39ded167dda5259de3de96151 (patch)
tree5115d7ae3620af24c2bc094cd062575af7adeda9 /src/static_libs
parenta5ac6a987caec5a7f7596a25d0a065b9cc94c50c (diff)
merge: and now Evas
I've tested make -j 3 install and it works nicely I've tested expedite with software and opengl xlib, and it works. Not tested other engines, so please report any problems (engines or other) on the ML. TODO: examples and tests, I'll add them later ISSUE: Eina_Unicode size check. It indirectly depends on eina_config.h, which is created at the end of the configure script. So its size is always 0. I don't know how that size is used, so I can't do a lot, for now. SVN revision: 78895
Diffstat (limited to 'src/static_libs')
-rw-r--r--src/static_libs/liblinebreak/AUTHORS8
-rw-r--r--src/static_libs/liblinebreak/ChangeLog397
-rw-r--r--src/static_libs/liblinebreak/LICENCE18
-rw-r--r--src/static_libs/liblinebreak/LineBreak1.sed1
-rw-r--r--src/static_libs/liblinebreak/LineBreak2.sed2
-rw-r--r--src/static_libs/liblinebreak/NEWS37
-rw-r--r--src/static_libs/liblinebreak/README86
-rw-r--r--src/static_libs/liblinebreak/filter_dup.c48
-rwxr-xr-xsrc/static_libs/liblinebreak/gen_linebreak_data.sh11
-rwxr-xr-xsrc/static_libs/liblinebreak/gen_wordbreak_data.sh25
-rw-r--r--src/static_libs/liblinebreak/linebreak.c737
-rw-r--r--src/static_libs/liblinebreak/linebreak.h87
-rw-r--r--src/static_libs/liblinebreak/linebreakdata.c1868
-rw-r--r--src/static_libs/liblinebreak/linebreakdata1.tmpl1
-rw-r--r--src/static_libs/liblinebreak/linebreakdata2.tmpl7
-rw-r--r--src/static_libs/liblinebreak/linebreakdata3.tmpl2
-rw-r--r--src/static_libs/liblinebreak/linebreakdef.c139
-rw-r--r--src/static_libs/liblinebreak/linebreakdef.h149
-rwxr-xr-xsrc/static_libs/liblinebreak/sort_numeric_hex.py6
-rw-r--r--src/static_libs/liblinebreak/wordbreak.c435
-rw-r--r--src/static_libs/liblinebreak/wordbreak.h72
-rw-r--r--src/static_libs/liblinebreak/wordbreakdata.x858
-rw-r--r--src/static_libs/liblinebreak/wordbreakdef.h80
23 files changed, 5074 insertions, 0 deletions
diff --git a/src/static_libs/liblinebreak/AUTHORS b/src/static_libs/liblinebreak/AUTHORS
new file mode 100644
index 0000000..22786d4
--- /dev/null
+++ b/src/static_libs/liblinebreak/AUTHORS
@@ -0,0 +1,8 @@
1Wu Yongwei. Designed and implemented liblinebreak.
2
3Nikolay Pultsin. Put forward the original requirements on liblinebreak,
4performed tests, and made a lot of suggestions on the initial versions.
5
6Thomas Klausner. Autoconfiscated and libtoolized liblinebreak.
7
8Tom Hacohen. Added word boundaries support.
diff --git a/src/static_libs/liblinebreak/ChangeLog b/src/static_libs/liblinebreak/ChangeLog
new file mode 100644
index 0000000..8255c10
--- /dev/null
+++ b/src/static_libs/liblinebreak/ChangeLog
@@ -0,0 +1,397 @@
12010-01-03 Wu Yongwei <wuyongwei@gmail.com>
2
3 * LICENCE: Update the copyright year.
4
52010-01-03 Wu Yongwei <wuyongwei@gmail.com>
6
7 * NEWS: Add information about the 2.0 release.
8
92010-01-03 Wu Yongwei <wuyongwei@gmail.com>
10
11 * Doxyfile (PROJECT_NUMBER): Set to `2.0'.
12 (HAVE_DOT): Set to `YES'.
13
142010-01-03 Wu Yongwei <wuyongwei@gmail.com>
15
16 * linebreak.c: Update the version number in comment to 2.0.
17 * linebreak.h: Ditto.
18 * linebreakdef.c: Ditto.
19 * linebreakdef.h: Ditto.
20
212009-12-17 Wu Yongwei <wuyongwei@gmail.com>
22
23 Change the values of enum BreakAction to the same length.
24 * linebreak.c (DIRECT_BRK): Rename to DIR_BRK.
25 (INDIRECT_BRK): Rename to IND_BRK.
26 (CM_INDIRECT_BRK): Rename to CMI_BRK.
27 (CM_PROHIBITED_BRK): Rename to CMP_BRK.
28 (PROHIBITED_BRK): Rename to PRH_BRK.
29
302009-11-29 Wu Yongwei <wuyongwei@gmail.com>
31
32 * Doxyfile (TAB_SIZE): Set to the correct size `4', as used in the
33 source files.
34
352009-11-29 Wu Yongwei <wuyongwei@gmail.com>
36
37 Update files according to UAX #14-24, for Unicode 5.2.0.
38 * linebreak.c: Update comments about UAX #14.
39 * linebreak.h: Ditto.
40 * linebreakdef.c: Ditto.
41 * linebreakdef.h: Ditto.
42 (LBP_CP): New enumerator for the new `CP' class as defined in
43 UAX #14-24.
44 * linebreak.c (baTable): Update for the new class `CP'.
45 * linebreakdata.c: Regenerate from LineBreak-5.2.0.txt.
46 * README: Update the reference to UAX #14-24, for Unicode 5.2.0.
47
482009-05-03 Wu Yongwei <wuyongwei@gmail.com>
49
50 * NEWS: Add information about the 1.2 release.
51
522009-04-30 Wu Yongwei <wuyongwei@gmail.com>
53
54 Optimize the Doxygen output.
55 * linebreak.c (lb_prop_index): Adjust its definition format
56 slightly.
57
582009-04-30 Wu Yongwei <wuyongwei@gmail.com>
59
60 * Doxyfile (USE_WINDOWS_ENCODING): Remove obsolete tag.
61 (DETAILS_AT_TOP): Ditto.
62 (MAX_DOT_GRAPH_WIDTH): Ditto.
63 (MAX_DOT_GRAPH_HEIGHT): Ditto.
64 (REFERENCED_BY_RELATION): Set to `NO'.
65 (REFERENCES_RELATION): Ditto.
66 (EXCLUDE): Add `filter_dup.c'.
67
682009-04-28 Wu Yongwei <wuyongwei@gmail.com>
69
70 * linebreak.c (lb_get_next_char_utf8): Fix the issue that the index
71 can point to the middle of a UTF-8 sequence if End of String (EOS)
72 is encountered prematurely (thanks to Nikolay Pultsin and Rick Xu).
73 (lb_get_next_char_utf16): Fix the issue that the index can point to
74 the middle of a UTF-16 surrogate pair if EOS is encountered
75 prematurely.
76
772009-04-20 Wu Yongwei <wuyongwei@gmail.com>
78
79 * linebreakdef.c (lb_prop_English): Remove the specialization of
80 right single quotation mark as closing punctuation mark, because it
81 can be used as apostrophe.
82 (lb_prop_Spanish): Ditto.
83 (lb_prop_French): Ditto.
84
852009-04-09 Wu Yongwei <wuyongwei@gmail.com>
86
87 * Makefile.msvc: Make the `clean' target work on MSVC versions other
88 than 6.0; do not use precompiled header.
89
902009-03-07 Wu Yongwei <wuyongwei@gmail.com>
91
92 * linebreak.h: Correct the wrong date in the documentation comment.
93 * linebreakdef.h: Ditto.
94
952009-02-10 Wu Yongwei <wuyongwei@gmail.com>
96
97 * configure.ac (AC_INIT): Increase the version to 2.0.
98 * Makefile.am (liblinebreak_la_LDFLAGS): Set the version-info to
99 `2:0'.
100
1012009-02-10 Wu Yongwei <wuyongwei@gmail.com>
102
103 * linebreak.h (LINEBREAK_VERSION): New macro.
104 (linebreak_version): New global constant declaration.
105 * linebreak.c (linebreak_version): New global constant definition.
106
1072009-02-10 Wu Yongwei <wuyongwei@gmail.com>
108
109 Reduce namespace pollution.
110 * linebreak.c (get_lb_prop_lang): Mark as static.
111 (get_next_char_utf8): Rename to lb_get_next_char_utf8.
112 (get_next_char_utf16): Rename to lb_get_next_char_utf32.
113 (get_next_char_utf32): Rename to lb_get_next_char_utf32.
114 (is_breakable): Rename to is_line_breakable.
115 * linebreak.h (get_next_char_utf8): Remove the function prototype
116 declaration.
117 (get_next_char_utf16): Ditto.
118 (get_next_char_utf32): Ditto.
119 (is_breakable): Rename to is_line_breakable.
120 * linebreakdef.h (lb_get_next_char_utf8): Add the function prototype
121 declaration.
122 (lb_get_next_char_utf16): Ditto.
123 (lb_get_next_char_utf32): Ditto.
124
1252009-02-06 Wu Yongwei <wuyongwei@gmail.com>
126
127 * NEWS: Add information about the 1.1 release.
128
1292009-01-02 Wu Yongwei <wuyongwei@gmail.com>
130
131 * Makefile.am (EXTRA_DIST): Add the missing `LICENCE' file.
132
1332008-12-31 Wu Yongwei <wuyongwei@gmail.com>
134
135 * linebreak.c: Update the version number in comment to 1.0.
136 * linebreak.h: Ditto.
137 * linebreakdef.c: Ditto.
138 * linebreakdef.h: Ditto.
139
1402008-12-31 Wu Yongwei <wuyongwei@gmail.com>
141
142 * NEWS: Update for the 1.0 release.
143
1442008-12-31 Wu Yongwei <wuyongwei@gmail.com>
145
146 * README: Correct two typos.
147
1482008-12-31 Wu Yongwei <wuyongwei@gmail.com>
149
150 * README: Add the online URL reference.
151
1522008-12-30 Wu Yongwei <wuyongwei@gmail.com>
153
154 * README: Update the reference to UAX #14-22, for Unicode 5.1.0.
155
1562008-12-13 Wu Yongwei <wuyongwei@gmail.com>
157
158 Update files according to UAX #14-22, for Unicode 5.1.0.
159 * linebreak.c (baTable): Update according to Table 2 of UAX #14-22.
160 * linebreakdef.c (lb_prop_Spanish): Remove the unnecessary
161 customization for inverted marks in Spanish.
162 * linebreakdata.c: Regenerate from LineBreak-5.1.0.txt.
163 * linebreak.h: Update comment only.
164 * linebreakdef.h: Ditto.
165
1662008-12-12 Wu Yongwei <wuyongwei@gmail.com>
167
168 * README: Update for the new build methods and better readability.
169
1702008-12-12 Wu Yongwei <wuyongwei@gmail.com>
171
172 * Makefile.msvc: Correct the inconsistent naming in the output
173 message.
174
1752008-12-12 Wu Yongwei <wuyongwei@gmail.com>
176
177 * configure.ac (AM_INIT_AUTOMAKE): Mark `foreign'.
178 * bootstrap: New file.
179 * purge: New file.
180 * Makefile.gcc (purge): Remove this target.
181
1822008-12-10 Wu Yongwei <wuyongwei@gmail.com>
183
184 * NEWS: New file.
185
1862008-12-10 Wu Yongwei <wuyongwei@gmail.com>
187
188 * AUTHORS: New file.
189
1902008-12-10 Wu Yongwei <wuyongwei@gmail.com>
191
192 * Makefile.gcc (purge): New phony target to purge files generated by
193 autoconfiscation.
194
1952008-12-10 Thomas Klausner <tk@giga.or.at>
196
197 * configure.ac: New file.
198 * Makefile.am: New file.
199
2002008-12-10 Wu Yongwei <wuyongwei@gmail.com>
201
202 * Doxyfile (OUTPUT_DIRECTORY): Set to `doc'.
203 (ALPHABETICAL_INDEX): Set to `YES'.
204
2052008-12-09 Wu Yongwei <wuyongwei@gmail.com>
206
207 * Makefile.msvc: New file.
208
2092008-12-09 Wu Yongwei <wuyongwei@gmail.com>
210
211 * Makefile: Remove (to become Makefile.gcc).
212 * Makefile.gcc: New file (was Makefile).
213
2142008-12-07 Wu Yongwei <wuyongwei@gmail.com>
215
216 * linebreak.c: Adjust the comment that refers to Unicode Annex 14.
217 * linebreak.h: Ditto.
218 * linebreakdef.c: Ditto.
219 * linebreakdef.h: Ditto.
220
2212008-12-07 Wu Yongwei <wuyongwei@gmail.com>
222
223 Use only POSIX basic regexp to ensure maximum portability (issues
224 have been found on Mac OS X, where GNU extensions do not work).
225 * LineBreak1.sed: Replace `[:xdigit:]' with `0-9A-F', and `\+' with
226 `\{1,\}'.
227 * LineBreak2.sed: Ditto.
228
2292008-12-07 Wu Yongwei <wuyongwei@gmail.com>
230
231 * Makefile: Replace `*.exe' with `filter_dup$(EXEEXT)', since the
232 extension `.exe' is specific to Windows.
233
2342008-04-20 Wu Yongwei <wuyongwei@gmail.com>
235
236 Add README and LICENCE files, as well as a Doxyfile to generate
237 documents.
238 * README: New file.
239 * LICENCE: New file.
240 * Doxyfile: New file.
241 * Makefile (doc): Add new phony target.
242
2432008-04-04 Wu Yongwei <wuyongwei@gmail.com>
244
245 Remove the English override for plus sign: it is better treated in
246 the text breaking program (see ../breaktext/ for an example).
247 * linebreakdef.c (lb_prop_English): Remove the line for plus sign.
248
2492008-03-29 Wu Yongwei <wuyongwei@gmail.com>
250
251 * Makefile: Correct the dependency-making rules when OLDGCC=Y.
252
2532008-03-23 Wu Yongwei <wuyongwei@gmail.com>
254
255 * Makefile (clean): Do not remove *.exe and tags here.
256 (distclean): Remove *.exe and tags.
257
2582008-03-23 Wu Yongwei <wuyongwei@gmail.com>
259
260 Remove the English override for solidus: it is better treated in the
261 text breaking program (see ../breaktext/ for an example).
262 * linebreakdef.c (lb_prop_English): Remove the line for solidus.
263
2642008-03-16 Wu Yongwei <wuyongwei@gmail.com>
265
266 Rename init_linebreak_prop_index to init_linebreak for future
267 safety; make visible certain functions that are potentially useful.
268 * linebreak.c (init_linebreak_prop_index): Rename to init_linebreak.
269 (get_next_char_t): Move to linebreakdef.h.
270 (get_next_char_utf8): Make non-static.
271 (get_next_char_utf16): Ditto.
272 (get_next_char_utf32): Ditto.
273 (set_linebreaks): Ditto.
274 * linebreak.h (init_linebreak_prop_index): Rename to init_linebreak.
275 (get_next_char_utf8): Add the function prototype.
276 (get_next_char_utf16): Ditto.
277 (get_next_char_utf32): Ditto.
278 * linebreakdef.h (get_next_char_t): Add the typedef.
279 (set_linebreaks): Add the function prototype.
280
2812008-03-16 Wu Yongwei <wuyongwei@gmail.com>
282
283 * Makefile (OLDGCC): Add support for GCC 2.95.3 (when OLDGCC=Y).
284
2852008-03-15 Wu Yongwei <wuyongwei@gmail.com>
286
287 * linebreak.c (set_linebreaks): Fix a bug that `==' was wrongly used
288 for `='.
289
2902008-03-05 Wu Yongwei <wuyongwei@gmail.com>
291
292 Improve the performance by reducing the look-ups of the
293 language-specific line breaking properties array from the language
294 name (thanks to Nikolay Pultsin).
295 * linebreak.c (get_lb_prop_lang): New function.
296 (get_char_lb_class_lang): Change the second parameter from the
297 language name to the line breaking properties array.
298 (set_linebreaks): Look up the language-specific line breaking
299 properties array from the language name only once in one function
300 call.
301
3022008-03-03 Wu Yongwei <wuyongwei@gmail.com>
303
304 Make minor adjustments in code and comments.
305 * linebreak.c: Adjust the doc comments.
306 (init_linebreak_prop_index): Modify a conditional to make it more
307 robust and consistent.
308 * linebreakdef.c (lb_prop_lang_map): Replace the pointer
309 lb_prop_default with NULL, since the value is never used.
310
3112008-03-03 Wu Yongwei <wuyongwei@gmail.com>
312
313 Accelerate get_char_lb_class for invalid Unicode code points.
314 * linebreak.c (get_char_lb_class): Adjust the conditionals so that
315 getting the line breaking class for an invalid code point is much
316 faster, which requires the array of line breaking properties be
317 sorted.
318 * linebreakdef.h: Adjust a comment that the array of line break
319 properties must be sorted.
320
3212008-03-02 Wu Yongwei <wuyongwei@gmail.com>
322
323 Change the values of enum BreakAction to more complete forms.
324 * linebreak.c (INDRCT_BRK): Rename to INDIRECT_BRK.
325 (CM_INDRCT_BRK): Rename to CM_INDIRECT_BRK.
326 (CM_PROHIBTD_BRK): Rename to CM_PROHIBITED_BRK.
327 (PROHIBTD_BRK): Rename to PROHIBITED_BRK.
328
3292008-03-02 Wu Yongwei <wuyongwei@gmail.com>
330
331 Implement a two-stage search in get_char_lb_class_default to
332 accelerate the overall performance, especially for non-Latin
333 languages.
334 * linebreak.c (LINEBREAK_INDEX_SIZE): New constant macro.
335 (struct LineBreakPropertiesIndex): New struct.
336 (lb_prop_index): New static variable.
337 (init_linebreak_prop_index): New function.
338 (get_char_lb_class_default): New function.
339 (get_char_lb_class_lang): Use get_char_lb_class_default.
340 * linebreak.h: Detect C++ and add extern "C" guard if necessary.
341 (init_linebreak_prop_index): Add the prototype declaration.
342 * linebreakdef.h: Adjust a comment.
343
3442008-03-02 Wu Yongwei <wuyongwei@gmail.com>
345
346 Split/refactor the code; add (doc) comments.
347 * Makefile (CFILES): Add linebreakdata.c and linebreakdef.c.
348 * linebreak.c: Add and adjust comments.
349 (linebreakdef.h): Add include file.
350 (linebreakdata.c): Remove include file.
351 (EOS): Remove (now in linebreakdef.h).
352 (enum LineBreakClass): Ditto.
353 (struct LineBreakProperties): Ditto.
354 (lbpEnglish): Remove (now in linebreakdef.c as lb_prop_English).
355 (lbpGerman): Remove (now in linebreakdef.c as lb_prop_German).
356 (lbpSpanish): Remove (now in linebreakdef.c as lb_prop_Spanish).
357 (lbpFrench): Remove (now in linebreakdef.c as lb_prop_French).
358 (lbpRussian): Remove (now in linebreakdef.c as lb_prop_Russian).
359 (lbpChinese): Remove (now in linebreakdef.c as lb_prop_Chinese).
360 (struct LineBreakPropertiesLang): Remove (now in linebreakdef.h).
361 (lbpLangs): Remove (now in linebreakdef.c as lb_prop_lang_map).
362 (get_next_char_utf16): Make sure memory access not go beyond len.
363 * linebreak.h: Add copyright information and adjust comments.
364 (stddef.h): Add include file.
365 * linebreakdata.c (linebreak.h): Add include file.
366 (linebreakdef.h): Add include file.
367 (lbpDefault): Make global and rename to lb_prop_default.
368 * linebreakdata2.tmpl: Add two include files, a comment line, and
369 remove `static'.
370 * linebreakdef.c: New file.
371 * linebreakdef.h: New file.
372
3732008-02-26 Wu Yongwei <wuyongwei@gmail.com>
374
375 * linebreak.c (lbpSpanish): New array for Spanish-specific data.
376 (lbpLangs): Update the index array for Spanish.
377 (resolve_lb_class): Resolve AmbIguous class to IDeographic in
378 Chinese, Japanese, and Korean.
379
3802008-02-26 Wu Yongwei <wuyongwei@gmail.com>
381
382 * Makefile (LineBreak.txt): Add new rule to retrieve it from the Web
383 if it is not already there.
384
3852008-02-23 Wu Yongwei <wuyongwei@gmail.com>
386
387 Add files for linebreak.
388 * LineBreak1.sed: New file.
389 * LineBreak2.sed: New file.
390 * Makefile: New file.
391 * filter_dup.c: New file.
392 * linebreak.c: New file.
393 * linebreak.h: New file.
394 * linebreakdata.c: New file.
395 * linebreakdata1.tmpl: New file.
396 * linebreakdata2.tmpl: New file.
397 * linebreakdata3.tmpl: New file.
diff --git a/src/static_libs/liblinebreak/LICENCE b/src/static_libs/liblinebreak/LICENCE
new file mode 100644
index 0000000..9b9984f
--- /dev/null
+++ b/src/static_libs/liblinebreak/LICENCE
@@ -0,0 +1,18 @@
1Copyright (C) 2008-2010 Wu Yongwei <wuyongwei at gmail dot com>
2
3This software is provided 'as-is', without any express or implied
4warranty. In no event will the author be held liable for any damages
5arising from the use of this software.
6
7Permission is granted to anyone to use this software for any purpose,
8including commercial applications, and to alter it and redistribute it
9freely, subject to the following restrictions:
10
111. The origin of this software must not be misrepresented; you must not
12 claim that you wrote the original software. If you use this software
13 in a product, an acknowledgement in the product documentation would
14 be appreciated but is not required.
152. Altered source versions must be plainly marked as such, and must not
16 be misrepresented as being the original software.
173. This notice may not be removed or altered from any source
18 distribution.
diff --git a/src/static_libs/liblinebreak/LineBreak1.sed b/src/static_libs/liblinebreak/LineBreak1.sed
new file mode 100644
index 0000000..1be9651
--- /dev/null
+++ b/src/static_libs/liblinebreak/LineBreak1.sed
@@ -0,0 +1 @@
s/\(^[0-9A-F.]\{1,\};[A-Z][A-Z0-9]\) #.*/\1/p
diff --git a/src/static_libs/liblinebreak/LineBreak2.sed b/src/static_libs/liblinebreak/LineBreak2.sed
new file mode 100644
index 0000000..8165958
--- /dev/null
+++ b/src/static_libs/liblinebreak/LineBreak2.sed
@@ -0,0 +1,2 @@
1s/^\([0-9A-F]\{1,\}\);/\1..\1;/
2s/^\([0-9A-F]\{1,\}\)\.\.\([0-9A-F]\{1,\}\);\([A-Z][A-Z0-9]\)/ { 0x\1, 0x\2, LBP_\3 },/
diff --git a/src/static_libs/liblinebreak/NEWS b/src/static_libs/liblinebreak/NEWS
new file mode 100644
index 0000000..4c55521
--- /dev/null
+++ b/src/static_libs/liblinebreak/NEWS
@@ -0,0 +1,37 @@
1New in 2.0
2
3- Update the algorithm and data according to UAX #14-24 and
4 LineBreak-5.2.0.txt
5- Rename some functions to reduce namespace pollution
6- Make Doxygen documentation better
7
8New in 1.2
9
10- Fix the bug that an assertion in code can fail if an invalid UTF-8 or
11 UTF-16 sequence is encountered near the end of input
12- Remove the specialization of right single quotation mark as closing
13 punctuation mark in English, French, and Spanish, because it can be
14 used as apostrophe
15- Make Doxygen documentation better
16
17New in 1.1
18
19- Make get_lb_prop_lang static and not an exported symbol
20- Define is_line_breakable to alias to is_breakable
21- Declare get_next_char_utf* will be changed to lb_get_next_char_utf*
22- Move the declarations of get_next_char_utf* from linebreak.h to
23 linebreakdef.h
24- Add the function documentation comments to the header files
25
26New in 1.0
27
28- Update the line breaking data according to UAX #14-22 and
29 LineBreak-5.1.0.txt
30- Add autoconfiscation support (./configure, make, make install)
31- Add Makefile for MSVC
32
33First public release (0.9.6, or 20080421)
34
35- Implement line breaking algorithm according to UAX #14-19
36- Line breaking data is generated from LineBreak-5.0.0.txt
37- Makefile only supports GCC
diff --git a/src/static_libs/liblinebreak/README b/src/static_libs/liblinebreak/README
new file mode 100644
index 0000000..9d23651
--- /dev/null
+++ b/src/static_libs/liblinebreak/README
@@ -0,0 +1,86 @@
1NOTICE: This is the original version, that was adapted a bit (mostly
2 build related) in order to work nicely with Evas.
3
4
5 L I B L I N E B R E A K
6 =======================
7
8Overview
9--------
10
11This is the README file for liblinebreak, an implementation of the line
12breaking algorithm as described in Unicode 5.2.0 Standard Annex 14,
13Revision 24, available at
14 <URL:http://www.unicode.org/reports/tr14/tr14-24.html>
15
16Check this URL for up-to-date information:
17 <URL:http://vimgadgets.sourceforge.net/liblinebreak/>
18
19
20Licence
21-------
22
23This library is released under an open-source licence, the zlib/libpng
24licence. Please check the file LICENCE for details.
25
26Apart from using the algorithm, part of the code is derived from the
27data provided under
28 <URL:http://www.unicode.org/Public/>
29
30And the Unicode Terms of Use may apply:
31 <URL:http://www.unicode.org/copyright.html>
32
33
34Installation
35------------
36
37There are three ways to build the library:
38
391) On *NIX systems supported by the autoconfiscation tools, do the
40 normal
41
42 ./configure
43 make
44 sudo make install
45
46 to build and install both the dynamic and static libraries. In
47 addition, one may
48
49 - type `make doc' to generate the doxygen documentation; or
50 - type `make linebreakdata' to regenerate linebreakdata.c from
51 LineBreak.txt.
52
532) On systems where GCC and Binutils are supported, one can type
54
55 cp -p Makefile.gcc Makefile
56 make
57
58 to build the static library. In addition, one may
59
60 - type `make debug' or `make release' to explicitly generate the
61 debug or release build;
62 - type `make doc' to generate the doxygen documentation; or
63 - type `make linebreakdata' to regenerate linebreakdata.c from
64 LineBreak.txt.
65
663) On Windows, apart from using method 1 (Cygwin/MSYS) and method 2
67 (MinGW), MSVC can also be used. Type
68
69 nmake -f Makefile.msvc
70
71 to build the static library. By default the debug release is built.
72 To build the release version
73
74 nmake -f Makefile.msvc CFG="linebreak - Win32 Release"
75
76
77Documentation
78-------------
79
80Check the generated document doc/html/linebreak_8h.html for the public
81interfaces exposed to applications.
82
83
84$Id: README,v 1.6 2009/11/29 08:09:13 adah Exp $
85
86vim:autoindent:expandtab:formatoptions=tcqlmn:textwidth=72:
diff --git a/src/static_libs/liblinebreak/filter_dup.c b/src/static_libs/liblinebreak/filter_dup.c
new file mode 100644
index 0000000..1d1d793
--- /dev/null
+++ b/src/static_libs/liblinebreak/filter_dup.c
@@ -0,0 +1,48 @@
1#include <stdio.h>
2#include <string.h>
3
4int main()
5{
6 char s[80];
7 char beg[16];
8 char end[16];
9 char prop[16];
10 char lastbeg[16];
11 char lastend[16];
12 char lastprop[16];
13 lastprop[0] = 0;
14 for (;;)
15 {
16 if (fgets(s, sizeof s, stdin) == NULL)
17 break;
18 if (strstr(s, "LBP_") == NULL || strstr(s, "LBP_Undef") != NULL)
19 {
20 if (lastprop[0])
21 {
22 printf("\t{ %s %s %s },\n", lastbeg, lastend, lastprop);
23 lastprop[0] = 0;
24 }
25 printf("%s", s);
26 continue;
27 }
28 sscanf(s, "\t{ %s %s %s }", beg, end, prop);
29 /*printf("==>\t{ \"%s\" \"%s\" \"%s\" },\n", beg, end, prop);*/
30 if (lastprop[0] && strcmp(lastprop, prop) != 0)
31 {
32 printf("\t{ %s %s %s },\n", lastbeg, lastend, lastprop);
33 lastprop[0] = 0;
34 }
35 if (lastprop[0] == 0)
36 {
37 strcpy(lastbeg, beg);
38 strcpy(lastprop, prop);
39 }
40 strcpy(lastend, end);
41 }
42 if (lastprop[0])
43 {
44 printf("\t{ %s %s %s },\n", lastbeg, lastend, prop);
45 }
46 return 0;
47}
48
diff --git a/src/static_libs/liblinebreak/gen_linebreak_data.sh b/src/static_libs/liblinebreak/gen_linebreak_data.sh
new file mode 100755
index 0000000..e396db2
--- /dev/null
+++ b/src/static_libs/liblinebreak/gen_linebreak_data.sh
@@ -0,0 +1,11 @@
1#!/bin/sh
2if [ ! -f "LineBreak.txt" ]; then
3 wget http://unicode.org/Public/UNIDATA/LineBreak.txt
4fi
5
6sed -n -f LineBreak1.sed LineBreak.txt > tmp.txt
7sed -f LineBreak2.sed tmp.txt | ./filter_dup > tmp.c
8head -2 LineBreak.txt > tmp.txt
9cat linebreakdata1.tmpl tmp.txt linebreakdata2.tmpl tmp.c linebreakdata3.tmpl > linebreakdata.c
10rm tmp.txt tmp.c
11
diff --git a/src/static_libs/liblinebreak/gen_wordbreak_data.sh b/src/static_libs/liblinebreak/gen_wordbreak_data.sh
new file mode 100755
index 0000000..7c84de2
--- /dev/null
+++ b/src/static_libs/liblinebreak/gen_wordbreak_data.sh
@@ -0,0 +1,25 @@
1#!/bin/sh
2FNAME="WordBreakProperty.txt";
3if [ ! -f ${FNAME} ]; then
4 wget http://www.unicode.org/Public/UNIDATA/auxiliary/WordBreakProperty.txt
5fi
6
7#
8sed -n 's/\(^[0-9A-F.]\+\)/\1/p' ${FNAME} > tmp.txt
9sed -i 's/^\([0-9A-F]\+\)\s\+/\1..\1/' tmp.txt
10sort --numeric-sort tmp.txt > tmp2.txt
11./sort_numeric_hex.py tmp2.txt > tmp.txt
12rm tmp2.txt
13sed -i -n 's/^\([0-9A-F]\+\)..\([0-9A-F]\+\)\s*;\s*\([A-Za-z]\+\).*$/\t{0x\1, 0x\2, WBP_\3},/p' tmp.txt
14
15echo "/* The content of this file is generated from:" > wordbreakdata.x
16head -2 ${FNAME} >> wordbreakdata.x
17echo "*/" >> wordbreakdata.x
18echo '#include "linebreak.h"' >> wordbreakdata.x
19echo '#include "wordbreakdef.h"' >> wordbreakdata.x
20echo "static struct WordBreakProperties wb_prop_default[] = {" >> wordbreakdata.x
21cat tmp.txt >> wordbreakdata.x
22echo " {0xFFFFFFFF, 0xFFFFFFFF, WBP_Undefined}" >> wordbreakdata.x
23echo "};" >> wordbreakdata.x
24rm tmp.txt
25
diff --git a/src/static_libs/liblinebreak/linebreak.c b/src/static_libs/liblinebreak/linebreak.c
new file mode 100644
index 0000000..f9ff9a1
--- /dev/null
+++ b/src/static_libs/liblinebreak/linebreak.c
@@ -0,0 +1,737 @@
1/* vim: set tabstop=4 shiftwidth=4: */
2
3/*
4 * Line breaking in a Unicode sequence. Designed to be used in a
5 * generic text renderer.
6 *
7 * Copyright (C) 2008-2010 Wu Yongwei <wuyongwei at gmail dot com>
8 *
9 * This software is provided 'as-is', without any express or implied
10 * warranty. In no event will the author be held liable for any damages
11 * arising from the use of this software.
12 *
13 * Permission is granted to anyone to use this software for any purpose,
14 * including commercial applications, and to alter it and redistribute
15 * it freely, subject to the following restrictions:
16 *
17 * 1. The origin of this software must not be misrepresented; you must
18 * not claim that you wrote the original software. If you use this
19 * software in a product, an acknowledgement in the product
20 * documentation would be appreciated but is not required.
21 * 2. Altered source versions must be plainly marked as such, and must
22 * not be misrepresented as being the original software.
23 * 3. This notice may not be removed or altered from any source
24 * distribution.
25 *
26 * The main reference is Unicode Standard Annex 14 (UAX #14):
27 * <URL:http://www.unicode.org/reports/tr14/>
28 *
29 * When this library was designed, this annex was at Revision 19, for
30 * Unicode 5.0.0:
31 * <URL:http://www.unicode.org/reports/tr14/tr14-19.html>
32 *
33 * This library has been updated according to Revision 24, for
34 * Unicode 5.2.0:
35 * <URL:http://www.unicode.org/reports/tr14/tr14-24.html>
36 *
37 * The Unicode Terms of Use are available at
38 * <URL:http://www.unicode.org/copyright.html>
39 */
40
41/**
42 * @file linebreak.c
43 *
44 * Implementation of the line breaking algorithm as described in Unicode
45 * Standard Annex 14.
46 *
47 * @version 2.0, 2010/01/03
48 * @author Wu Yongwei
49 */
50
51#include <assert.h>
52#include <stddef.h>
53#include <string.h>
54#include "linebreak.h"
55#include "linebreakdef.h"
56
57/**
58 * Size of the second-level index to the line breaking properties.
59 */
60#define LINEBREAK_INDEX_SIZE 40
61
62/**
63 * Version number of the library.
64 */
65const int linebreak_version = LINEBREAK_VERSION;
66
67/**
68 * Enumeration of break actions. They are used in the break action
69 * pair table below.
70 */
71enum BreakAction
72{
73 DIR_BRK, /**< Direct break opportunity */
74 IND_BRK, /**< Indirect break opportunity */
75 CMI_BRK, /**< Indirect break opportunity for combining marks */
76 CMP_BRK, /**< Prohibited break for combining marks */
77 PRH_BRK /**< Prohibited break */
78};
79
80/**
81 * Break action pair table. This is a direct mapping of Table 2 of
82 * Unicode Standard Annex 14, Revision 24.
83 */
84static enum BreakAction baTable[LBP_JT][LBP_JT] = {
85 { /* OP */
86 PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK,
87 PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK,
88 PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK, CMP_BRK,
89 PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK, PRH_BRK },
90 { /* CL */
91 DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, PRH_BRK, PRH_BRK,
92 PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
93 DIR_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
94 PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
95 { /* CP */
96 DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, PRH_BRK, PRH_BRK,
97 PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, DIR_BRK,
98 DIR_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
99 PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
100 { /* QU */
101 PRH_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
102 PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK,
103 IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK, CMI_BRK,
104 PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK },
105 { /* GL */
106 IND_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
107 PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK,
108 IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK, CMI_BRK,
109 PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK },
110 { /* NS */
111 DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
112 PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
113 DIR_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
114 PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
115 { /* EX */
116 DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
117 PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
118 DIR_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
119 PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
120 { /* SY */
121 DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
122 PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, IND_BRK, DIR_BRK, DIR_BRK,
123 DIR_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
124 PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
125 { /* IS */
126 DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
127 PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, IND_BRK, IND_BRK, DIR_BRK,
128 DIR_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
129 PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
130 { /* PR */
131 IND_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
132 PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, IND_BRK, IND_BRK, IND_BRK,
133 DIR_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
134 PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK },
135 { /* PO */
136 IND_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
137 PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, IND_BRK, IND_BRK, DIR_BRK,
138 DIR_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
139 PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
140 { /* NU */
141 IND_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
142 PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, DIR_BRK,
143 IND_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
144 PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
145 { /* AL */
146 IND_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
147 PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, IND_BRK, IND_BRK, DIR_BRK,
148 IND_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
149 PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
150 { /* ID */
151 DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
152 PRH_BRK, PRH_BRK, DIR_BRK, IND_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
153 IND_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
154 PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
155 { /* IN */
156 DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
157 PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
158 IND_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
159 PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
160 { /* HY */
161 DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, DIR_BRK, IND_BRK, PRH_BRK,
162 PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, IND_BRK, DIR_BRK, DIR_BRK,
163 DIR_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
164 PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
165 { /* BA */
166 DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, DIR_BRK, IND_BRK, PRH_BRK,
167 PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
168 DIR_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
169 PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
170 { /* BB */
171 IND_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
172 PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK,
173 IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK, CMI_BRK,
174 PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK },
175 { /* B2 */
176 DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
177 PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
178 DIR_BRK, IND_BRK, IND_BRK, DIR_BRK, PRH_BRK, PRH_BRK, CMI_BRK,
179 PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
180 { /* ZW */
181 DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
182 DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
183 DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, PRH_BRK, DIR_BRK,
184 DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
185 { /* CM */
186 IND_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
187 PRH_BRK, PRH_BRK, DIR_BRK, DIR_BRK, IND_BRK, IND_BRK, DIR_BRK,
188 IND_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
189 PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK },
190 { /* WJ */
191 IND_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
192 PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK,
193 IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK, CMI_BRK,
194 PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK },
195 { /* H2 */
196 DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
197 PRH_BRK, PRH_BRK, DIR_BRK, IND_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
198 IND_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
199 PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, IND_BRK, IND_BRK },
200 { /* H3 */
201 DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
202 PRH_BRK, PRH_BRK, DIR_BRK, IND_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
203 IND_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
204 PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, IND_BRK },
205 { /* JL */
206 DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
207 PRH_BRK, PRH_BRK, DIR_BRK, IND_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
208 IND_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
209 PRH_BRK, IND_BRK, IND_BRK, IND_BRK, IND_BRK, DIR_BRK },
210 { /* JV */
211 DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
212 PRH_BRK, PRH_BRK, DIR_BRK, IND_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
213 IND_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
214 PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, IND_BRK, IND_BRK },
215 { /* JT */
216 DIR_BRK, PRH_BRK, PRH_BRK, IND_BRK, IND_BRK, IND_BRK, PRH_BRK,
217 PRH_BRK, PRH_BRK, DIR_BRK, IND_BRK, DIR_BRK, DIR_BRK, DIR_BRK,
218 IND_BRK, IND_BRK, IND_BRK, DIR_BRK, DIR_BRK, PRH_BRK, CMI_BRK,
219 PRH_BRK, DIR_BRK, DIR_BRK, DIR_BRK, DIR_BRK, IND_BRK }
220};
221
222/**
223 * Struct for the second-level index to the line breaking properties.
224 */
225struct LineBreakPropertiesIndex
226{
227 utf32_t end; /**< End coding point */
228 struct LineBreakProperties *lbp;/**< Pointer to line breaking properties */
229};
230
231/**
232 * Second-level index to the line breaking properties.
233 */
234static struct LineBreakPropertiesIndex lb_prop_index[LINEBREAK_INDEX_SIZE] =
235{
236 { 0xFFFFFFFF, lb_prop_default }
237};
238
239/**
240 * Initializes the second-level index to the line breaking properties.
241 * If it is not called, the performance of #get_char_lb_class_lang (and
242 * thus the main functionality) can be pretty bad, especially for big
243 * code points like those of Chinese.
244 */
245void init_linebreak(void)
246{
247 size_t i;
248 size_t iPropDefault;
249 size_t len;
250 size_t step;
251
252 len = 0;
253 while (lb_prop_default[len].prop != LBP_Undefined)
254 ++len;
255 step = len / LINEBREAK_INDEX_SIZE;
256 iPropDefault = 0;
257 for (i = 0; i < LINEBREAK_INDEX_SIZE; ++i)
258 {
259 lb_prop_index[i].lbp = lb_prop_default + iPropDefault;
260 iPropDefault += step;
261 lb_prop_index[i].end = lb_prop_default[iPropDefault].start - 1;
262 }
263 lb_prop_index[--i].end = 0xFFFFFFFF;
264}
265
266/**
267 * Gets the language-specific line breaking properties.
268 *
269 * @param lang language of the text
270 * @return pointer to the language-specific line breaking
271 * properties array if found; \c NULL otherwise
272 */
273static struct LineBreakProperties *get_lb_prop_lang(const char *lang)
274{
275 struct LineBreakPropertiesLang *lbplIter;
276 if (lang != NULL)
277 {
278 for (lbplIter = lb_prop_lang_map; lbplIter->lang != NULL; ++lbplIter)
279 {
280 if (strncmp(lang, lbplIter->lang, lbplIter->namelen) == 0)
281 {
282 return lbplIter->lbp;
283 }
284 }
285 }
286 return NULL;
287}
288
289/**
290 * Gets the line breaking class of a character from a line breaking
291 * properties array.
292 *
293 * @param ch character to check
294 * @param lbp pointer to the line breaking properties array
295 * @return the line breaking class if found; \c LBP_XX otherwise
296 */
297static enum LineBreakClass get_char_lb_class(
298 utf32_t ch,
299 struct LineBreakProperties *lbp)
300{
301 while (lbp->prop != LBP_Undefined && ch >= lbp->start)
302 {
303 if (ch <= lbp->end)
304 return lbp->prop;
305 ++lbp;
306 }
307 return LBP_XX;
308}
309
310/**
311 * Gets the line breaking class of a character from the default line
312 * breaking properties array.
313 *
314 * @param ch character to check
315 * @return the line breaking class if found; \c LBP_XX otherwise
316 */
317static enum LineBreakClass get_char_lb_class_default(
318 utf32_t ch)
319{
320 size_t i = 0;
321 while (ch > lb_prop_index[i].end)
322 ++i;
323 assert(i < LINEBREAK_INDEX_SIZE);
324 return get_char_lb_class(ch, lb_prop_index[i].lbp);
325}
326
327/**
328 * Gets the line breaking class of a character for a specific
329 * language. This function will check the language-specific data first,
330 * and then the default data if there is no language-specific property
331 * available for the character.
332 *
333 * @param ch character to check
334 * @param lbpLang pointer to the language-specific line breaking
335 * properties array
336 * @return the line breaking class if found; \c LBP_XX
337 * otherwise
338 */
339static enum LineBreakClass get_char_lb_class_lang(
340 utf32_t ch,
341 struct LineBreakProperties *lbpLang)
342{
343 enum LineBreakClass lbcResult;
344
345 /* Find the language-specific line breaking class for a character */
346 if (lbpLang)
347 {
348 lbcResult = get_char_lb_class(ch, lbpLang);
349 if (lbcResult != LBP_XX)
350 return lbcResult;
351 }
352
353 /* Find the generic language-specific line breaking class, if no
354 * language context is provided, or language-specific data are not
355 * available for the specific character in the specified language */
356 return get_char_lb_class_default(ch);
357}
358
359/**
360 * Resolves the line breaking class for certain ambiguous or complicated
361 * characters. They are treated in a simplistic way in this
362 * implementation.
363 *
364 * @param lbc line breaking class to resolve
365 * @param lang language of the text
366 * @return the resolved line breaking class
367 */
368static enum LineBreakClass resolve_lb_class(
369 enum LineBreakClass lbc,
370 const char *lang)
371{
372 switch (lbc)
373 {
374 case LBP_AI:
375 if (lang != NULL &&
376 (strncmp(lang, "zh", 2) == 0 || /* Chinese */
377 strncmp(lang, "ja", 2) == 0 || /* Japanese */
378 strncmp(lang, "ko", 2) == 0)) /* Korean */
379 {
380 return LBP_ID;
381 }
382 /* Fall through */
383 case LBP_SA:
384 case LBP_SG:
385 case LBP_XX:
386 return LBP_AL;
387 default:
388 return lbc;
389 }
390}
391
392/**
393 * Gets the next Unicode character in a UTF-8 sequence. The index will
394 * be advanced to the next complete character, unless the end of string
395 * is reached in the middle of a UTF-8 sequence.
396 *
397 * @param[in] s input UTF-8 string
398 * @param[in] len length of the string in bytes
399 * @param[in,out] ip pointer to the index
400 * @return the Unicode character beginning at the index; or
401 * #EOS if end of input is encountered
402 */
403utf32_t lb_get_next_char_utf8(
404 const utf8_t *s,
405 size_t len,
406 size_t *ip)
407{
408 utf8_t ch;
409 utf32_t res;
410
411 assert(*ip <= len);
412 if (*ip == len)
413 return EOS;
414 ch = s[*ip];
415
416 if (ch < 0xC2 || ch > 0xF4)
417 { /* One-byte sequence, tail (should not occur), or invalid */
418 *ip += 1;
419 return ch;
420 }
421 else if (ch < 0xE0)
422 { /* Two-byte sequence */
423 if (*ip + 2 > len)
424 return EOS;
425 res = ((ch & 0x1F) << 6) + (s[*ip + 1] & 0x3F);
426 *ip += 2;
427 return res;
428 }
429 else if (ch < 0xF0)
430 { /* Three-byte sequence */
431 if (*ip + 3 > len)
432 return EOS;
433 res = ((ch & 0x0F) << 12) +
434 ((s[*ip + 1] & 0x3F) << 6) +
435 ((s[*ip + 2] & 0x3F));
436 *ip += 3;
437 return res;
438 }
439 else
440 { /* Four-byte sequence */
441 if (*ip + 4 > len)
442 return EOS;
443 res = ((ch & 0x07) << 18) +
444 ((s[*ip + 1] & 0x3F) << 12) +
445 ((s[*ip + 2] & 0x3F) << 6) +
446 ((s[*ip + 3] & 0x3F));
447 *ip += 4;
448 return res;
449 }
450}
451
452/**
453 * Gets the next Unicode character in a UTF-16 sequence. The index will
454 * be advanced to the next complete character, unless the end of string
455 * is reached in the middle of a UTF-16 surrogate pair.
456 *
457 * @param[in] s input UTF-16 string
458 * @param[in] len length of the string in words
459 * @param[in,out] ip pointer to the index
460 * @return the Unicode character beginning at the index; or
461 * #EOS if end of input is encountered
462 */
463utf32_t lb_get_next_char_utf16(
464 const utf16_t *s,
465 size_t len,
466 size_t *ip)
467{
468 utf16_t ch;
469
470 assert(*ip <= len);
471 if (*ip == len)
472 return EOS;
473 ch = s[(*ip)++];
474
475 if (ch < 0xD800 || ch > 0xDBFF)
476 { /* If the character is not a high surrogate */
477 return ch;
478 }
479 if (*ip == len)
480 { /* If the input ends here (an error) */
481 --(*ip);
482 return EOS;
483 }
484 if (s[*ip] < 0xDC00 || s[*ip] > 0xDFFF)
485 { /* If the next character is not the low surrogate (an error) */
486 return ch;
487 }
488 /* Return the constructed character and advance the index again */
489 return (((utf32_t)ch & 0x3FF) << 10) + (s[(*ip)++] & 0x3FF) + 0x10000;
490}
491
492/**
493 * Gets the next Unicode character in a UTF-32 sequence. The index will
494 * be advanced to the next character.
495 *
496 * @param[in] s input UTF-32 string
497 * @param[in] len length of the string in dwords
498 * @param[in,out] ip pointer to the index
499 * @return the Unicode character beginning at the index; or
500 * #EOS if end of input is encountered
501 */
502utf32_t lb_get_next_char_utf32(
503 const utf32_t *s,
504 size_t len,
505 size_t *ip)
506{
507 assert(*ip <= len);
508 if (*ip == len)
509 return EOS;
510 return s[(*ip)++];
511}
512
513/**
514 * Sets the line breaking information for a generic input string.
515 *
516 * @param[in] s input string
517 * @param[in] len length of the input
518 * @param[in] lang language of the input
519 * @param[out] brks pointer to the output breaking data,
520 * containing #LINEBREAK_MUSTBREAK,
521 * #LINEBREAK_ALLOWBREAK, #LINEBREAK_NOBREAK,
522 * or #LINEBREAK_INSIDEACHAR
523 * @param[in] get_next_char function to get the next UTF-32 character
524 */
525void set_linebreaks(
526 const void *s,
527 size_t len,
528 const char *lang,
529 char *brks,
530 get_next_char_t get_next_char)
531{
532 utf32_t ch;
533 enum LineBreakClass lbcCur;
534 enum LineBreakClass lbcNew;
535 enum LineBreakClass lbcLast;
536 struct LineBreakProperties *lbpLang;
537 size_t posCur = 0;
538 size_t posLast = 0;
539
540 --posLast; /* To be ++'d later */
541 ch = get_next_char(s, len, &posCur);
542 if (ch == EOS)
543 return;
544 lbpLang = get_lb_prop_lang(lang);
545 lbcCur = resolve_lb_class(get_char_lb_class_lang(ch, lbpLang), lang);
546 lbcNew = LBP_Undefined;
547
548nextline:
549
550 /* Special treatment for the first character */
551 switch (lbcCur)
552 {
553 case LBP_LF:
554 case LBP_NL:
555 lbcCur = LBP_BK;
556 break;
557 case LBP_CB:
558 lbcCur = LBP_BA;
559 break;
560 case LBP_SP:
561 lbcCur = LBP_WJ;
562 break;
563 default:
564 break;
565 }
566
567 /* Process a line till an explicit break or end of string */
568 for (;;)
569 {
570 for (++posLast; posLast < posCur - 1; ++posLast)
571 {
572 brks[posLast] = LINEBREAK_INSIDEACHAR;
573 }
574 assert(posLast == posCur - 1);
575 lbcLast = lbcNew;
576 ch = get_next_char(s, len, &posCur);
577 if (ch == EOS)
578 break;
579 lbcNew = get_char_lb_class_lang(ch, lbpLang);
580 if (lbcCur == LBP_BK || (lbcCur == LBP_CR && lbcNew != LBP_LF))
581 {
582 brks[posLast] = LINEBREAK_MUSTBREAK;
583 lbcCur = resolve_lb_class(lbcNew, lang);
584 goto nextline;
585 }
586
587 switch (lbcNew)
588 {
589 case LBP_SP:
590 brks[posLast] = LINEBREAK_NOBREAK;
591 continue;
592 case LBP_BK:
593 case LBP_LF:
594 case LBP_NL:
595 brks[posLast] = LINEBREAK_NOBREAK;
596 lbcCur = LBP_BK;
597 continue;
598 case LBP_CR:
599 brks[posLast] = LINEBREAK_NOBREAK;
600 lbcCur = LBP_CR;
601 continue;
602 case LBP_CB:
603 brks[posLast] = LINEBREAK_ALLOWBREAK;
604 lbcCur = LBP_BA;
605 continue;
606 default:
607 break;
608 }
609
610 lbcNew = resolve_lb_class(lbcNew, lang);
611
612 assert(lbcCur <= LBP_JT);
613 assert(lbcNew <= LBP_JT);
614 switch (baTable[lbcCur - 1][lbcNew - 1])
615 {
616 case DIR_BRK:
617 brks[posLast] = LINEBREAK_ALLOWBREAK;
618 break;
619 case CMI_BRK:
620 case IND_BRK:
621 if (lbcLast == LBP_SP)
622 {
623 brks[posLast] = LINEBREAK_ALLOWBREAK;
624 }
625 else
626 {
627 brks[posLast] = LINEBREAK_NOBREAK;
628 }
629 break;
630 case CMP_BRK:
631 brks[posLast] = LINEBREAK_NOBREAK;
632 if (lbcLast != LBP_SP)
633 continue;
634 break;
635 case PRH_BRK:
636 brks[posLast] = LINEBREAK_NOBREAK;
637 break;
638 }
639
640 lbcCur = lbcNew;
641 }
642
643 assert(posLast == posCur - 1 && posCur <= len);
644 /* Break after the last character */
645 brks[posLast] = LINEBREAK_MUSTBREAK;
646 /* When the input contains incomplete sequences */
647 while (posCur < len)
648 {
649 brks[posCur++] = LINEBREAK_INSIDEACHAR;
650 }
651}
652
653/**
654 * Sets the line breaking information for a UTF-8 input string.
655 *
656 * @param[in] s input UTF-8 string
657 * @param[in] len length of the input
658 * @param[in] lang language of the input
659 * @param[out] brks pointer to the output breaking data, containing
660 * #LINEBREAK_MUSTBREAK, #LINEBREAK_ALLOWBREAK,
661 * #LINEBREAK_NOBREAK, or #LINEBREAK_INSIDEACHAR
662 */
663void set_linebreaks_utf8(
664 const utf8_t *s,
665 size_t len,
666 const char *lang,
667 char *brks)
668{
669 set_linebreaks(s, len, lang, brks,
670 (get_next_char_t)lb_get_next_char_utf8);
671}
672
673/**
674 * Sets the line breaking information for a UTF-16 input string.
675 *
676 * @param[in] s input UTF-16 string
677 * @param[in] len length of the input
678 * @param[in] lang language of the input
679 * @param[out] brks pointer to the output breaking data, containing
680 * #LINEBREAK_MUSTBREAK, #LINEBREAK_ALLOWBREAK,
681 * #LINEBREAK_NOBREAK, or #LINEBREAK_INSIDEACHAR
682 */
683void set_linebreaks_utf16(
684 const utf16_t *s,
685 size_t len,
686 const char *lang,
687 char *brks)
688{
689 set_linebreaks(s, len, lang, brks,
690 (get_next_char_t)lb_get_next_char_utf16);
691}
692
693/**
694 * Sets the line breaking information for a UTF-32 input string.
695 *
696 * @param[in] s input UTF-32 string
697 * @param[in] len length of the input
698 * @param[in] lang language of the input
699 * @param[out] brks pointer to the output breaking data, containing
700 * #LINEBREAK_MUSTBREAK, #LINEBREAK_ALLOWBREAK,
701 * #LINEBREAK_NOBREAK, or #LINEBREAK_INSIDEACHAR
702 */
703void set_linebreaks_utf32(
704 const utf32_t *s,
705 size_t len,
706 const char *lang,
707 char *brks)
708{
709 set_linebreaks(s, len, lang, brks,
710 (get_next_char_t)lb_get_next_char_utf32);
711}
712
713/**
714 * Tells whether a line break can occur between two Unicode characters.
715 * This is a wrapper function to expose a simple interface. Generally
716 * speaking, it is better to use #set_linebreaks_utf32 instead, since
717 * complicated cases involving combining marks, spaces, etc. cannot be
718 * correctly processed.
719 *
720 * @param char1 the first Unicode character
721 * @param char2 the second Unicode character
722 * @param lang language of the input
723 * @return one of #LINEBREAK_MUSTBREAK, #LINEBREAK_ALLOWBREAK,
724 * #LINEBREAK_NOBREAK, or #LINEBREAK_INSIDEACHAR
725 */
726int is_line_breakable(
727 utf32_t char1,
728 utf32_t char2,
729 const char* lang)
730{
731 utf32_t s[2];
732 char brks[2];
733 s[0] = char1;
734 s[1] = char2;
735 set_linebreaks_utf32(s, 2, lang, brks);
736 return brks[0];
737}
diff --git a/src/static_libs/liblinebreak/linebreak.h b/src/static_libs/liblinebreak/linebreak.h
new file mode 100644
index 0000000..abc1ae9
--- /dev/null
+++ b/src/static_libs/liblinebreak/linebreak.h
@@ -0,0 +1,87 @@
1/* vim: set tabstop=4 shiftwidth=4: */
2
3/*
4 * Line breaking in a Unicode sequence. Designed to be used in a
5 * generic text renderer.
6 *
7 * Copyright (C) 2008-2010 Wu Yongwei <wuyongwei at gmail dot com>
8 *
9 * This software is provided 'as-is', without any express or implied
10 * warranty. In no event will the author be held liable for any damages
11 * arising from the use of this software.
12 *
13 * Permission is granted to anyone to use this software for any purpose,
14 * including commercial applications, and to alter it and redistribute
15 * it freely, subject to the following restrictions:
16 *
17 * 1. The origin of this software must not be misrepresented; you must
18 * not claim that you wrote the original software. If you use this
19 * software in a product, an acknowledgement in the product
20 * documentation would be appreciated but is not required.
21 * 2. Altered source versions must be plainly marked as such, and must
22 * not be misrepresented as being the original software.
23 * 3. This notice may not be removed or altered from any source
24 * distribution.
25 *
26 * The main reference is Unicode Standard Annex 14 (UAX #14):
27 * <URL:http://www.unicode.org/reports/tr14/>
28 *
29 * When this library was designed, this annex was at Revision 19, for
30 * Unicode 5.0.0:
31 * <URL:http://www.unicode.org/reports/tr14/tr14-19.html>
32 *
33 * This library has been updated according to Revision 24, for
34 * Unicode 5.2.0:
35 * <URL:http://www.unicode.org/reports/tr14/tr14-24.html>
36 *
37 * The Unicode Terms of Use are available at
38 * <URL:http://www.unicode.org/copyright.html>
39 */
40
41/**
42 * @file linebreak.h
43 *
44 * Header file for the line breaking algorithm.
45 *
46 * @version 2.0, 2010/01/03
47 * @author Wu Yongwei
48 */
49
50#ifndef LINEBREAK_H
51#define LINEBREAK_H
52
53#include <stddef.h>
54
55#ifdef __cplusplus
56extern "C" {
57#endif
58
59#define LINEBREAK_VERSION 0x0200 /**< Version of the library linebreak */
60extern const int linebreak_version;
61
62#ifndef LINEBREAK_UTF_TYPES_DEFINED
63#define LINEBREAK_UTF_TYPES_DEFINED
64typedef unsigned char utf8_t; /**< Type for UTF-8 data points */
65typedef unsigned short utf16_t; /**< Type for UTF-16 data points */
66typedef unsigned int utf32_t; /**< Type for UTF-32 data points */
67#endif
68
69#define LINEBREAK_MUSTBREAK 0 /**< Break is mandatory */
70#define LINEBREAK_ALLOWBREAK 1 /**< Break is allowed */
71#define LINEBREAK_NOBREAK 2 /**< No break is possible */
72#define LINEBREAK_INSIDEACHAR 3 /**< A UTF-8/16 sequence is unfinished */
73
74void init_linebreak(void);
75void set_linebreaks_utf8(
76 const utf8_t *s, size_t len, const char* lang, char *brks);
77void set_linebreaks_utf16(
78 const utf16_t *s, size_t len, const char* lang, char *brks);
79void set_linebreaks_utf32(
80 const utf32_t *s, size_t len, const char* lang, char *brks);
81int is_line_breakable(utf32_t char1, utf32_t char2, const char* lang);
82
83#ifdef __cplusplus
84}
85#endif
86
87#endif /* LINEBREAK_H */
diff --git a/src/static_libs/liblinebreak/linebreakdata.c b/src/static_libs/liblinebreak/linebreakdata.c
new file mode 100644
index 0000000..0021479
--- /dev/null
+++ b/src/static_libs/liblinebreak/linebreakdata.c
@@ -0,0 +1,1868 @@
1/* The content of this file is generated from:
2# LineBreak-6.0.0.txt
3# Date: 2010-08-18, 17:25:00 PDT [KW]
4*/
5
6#include "linebreak.h"
7#include "linebreakdef.h"
8
9/** Default line breaking properties as from the Unicode Web site. */
10struct LineBreakProperties lb_prop_default[] = {
11 { 0x0000, 0x0008, LBP_CM },
12 { 0x0009, 0x0009, LBP_BA },
13 { 0x000A, 0x000A, LBP_LF },
14 { 0x000B, 0x000C, LBP_BK },
15 { 0x000D, 0x000D, LBP_CR },
16 { 0x000E, 0x001F, LBP_CM },
17 { 0x0020, 0x0020, LBP_SP },
18 { 0x0021, 0x0021, LBP_EX },
19 { 0x0022, 0x0022, LBP_QU },
20 { 0x0023, 0x0023, LBP_AL },
21 { 0x0024, 0x0024, LBP_PR },
22 { 0x0025, 0x0025, LBP_PO },
23 { 0x0026, 0x0026, LBP_AL },
24 { 0x0027, 0x0027, LBP_QU },
25 { 0x0028, 0x0028, LBP_OP },
26 { 0x0029, 0x0029, LBP_CP },
27 { 0x002A, 0x002A, LBP_AL },
28 { 0x002B, 0x002B, LBP_PR },
29 { 0x002C, 0x002C, LBP_IS },
30 { 0x002D, 0x002D, LBP_HY },
31 { 0x002E, 0x002E, LBP_IS },
32 { 0x002F, 0x002F, LBP_SY },
33 { 0x0030, 0x0039, LBP_NU },
34 { 0x003A, 0x003B, LBP_IS },
35 { 0x003C, 0x003E, LBP_AL },
36 { 0x003F, 0x003F, LBP_EX },
37 { 0x0040, 0x005A, LBP_AL },
38 { 0x005B, 0x005B, LBP_OP },
39 { 0x005C, 0x005C, LBP_PR },
40 { 0x005D, 0x005D, LBP_CP },
41 { 0x005E, 0x007A, LBP_AL },
42 { 0x007B, 0x007B, LBP_OP },
43 { 0x007C, 0x007C, LBP_BA },
44 { 0x007D, 0x007D, LBP_CL },
45 { 0x007E, 0x007E, LBP_AL },
46 { 0x007F, 0x0084, LBP_CM },
47 { 0x0085, 0x0085, LBP_NL },
48 { 0x0086, 0x009F, LBP_CM },
49 { 0x00A0, 0x00A0, LBP_GL },
50 { 0x00A1, 0x00A1, LBP_OP },
51 { 0x00A2, 0x00A2, LBP_PO },
52 { 0x00A3, 0x00A5, LBP_PR },
53 { 0x00A6, 0x00A6, LBP_AL },
54 { 0x00A7, 0x00A8, LBP_AI },
55 { 0x00A9, 0x00A9, LBP_AL },
56 { 0x00AA, 0x00AA, LBP_AI },
57 { 0x00AB, 0x00AB, LBP_QU },
58 { 0x00AC, 0x00AC, LBP_AL },
59 { 0x00AD, 0x00AD, LBP_BA },
60 { 0x00AE, 0x00AF, LBP_AL },
61 { 0x00B0, 0x00B0, LBP_PO },
62 { 0x00B1, 0x00B1, LBP_PR },
63 { 0x00B2, 0x00B3, LBP_AI },
64 { 0x00B4, 0x00B4, LBP_BB },
65 { 0x00B5, 0x00B5, LBP_AL },
66 { 0x00B6, 0x00BA, LBP_AI },
67 { 0x00BB, 0x00BB, LBP_QU },
68 { 0x00BC, 0x00BE, LBP_AI },
69 { 0x00BF, 0x00BF, LBP_OP },
70 { 0x00C0, 0x00D6, LBP_AL },
71 { 0x00D7, 0x00D7, LBP_AI },
72 { 0x00D8, 0x00F6, LBP_AL },
73 { 0x00F7, 0x00F7, LBP_AI },
74 { 0x00F8, 0x02C6, LBP_AL },
75 { 0x02C7, 0x02C7, LBP_AI },
76 { 0x02C8, 0x02C8, LBP_BB },
77 { 0x02C9, 0x02CB, LBP_AI },
78 { 0x02CC, 0x02CC, LBP_BB },
79 { 0x02CD, 0x02CD, LBP_AI },
80 { 0x02CE, 0x02CF, LBP_AL },
81 { 0x02D0, 0x02D0, LBP_AI },
82 { 0x02D1, 0x02D7, LBP_AL },
83 { 0x02D8, 0x02DB, LBP_AI },
84 { 0x02DC, 0x02DC, LBP_AL },
85 { 0x02DD, 0x02DD, LBP_AI },
86 { 0x02DE, 0x02DE, LBP_AL },
87 { 0x02DF, 0x02DF, LBP_BB },
88 { 0x02E0, 0x02FF, LBP_AL },
89 { 0x0300, 0x034E, LBP_CM },
90 { 0x034F, 0x034F, LBP_GL },
91 { 0x0350, 0x035B, LBP_CM },
92 { 0x035C, 0x0362, LBP_GL },
93 { 0x0363, 0x036F, LBP_CM },
94 { 0x0370, 0x037D, LBP_AL },
95 { 0x037E, 0x037E, LBP_IS },
96 { 0x0384, 0x0482, LBP_AL },
97 { 0x0483, 0x0489, LBP_CM },
98 { 0x048A, 0x0587, LBP_AL },
99 { 0x0589, 0x0589, LBP_IS },
100 { 0x058A, 0x058A, LBP_BA },
101 { 0x0591, 0x05BD, LBP_CM },
102 { 0x05BE, 0x05BE, LBP_BA },
103 { 0x05BF, 0x05BF, LBP_CM },
104 { 0x05C0, 0x05C0, LBP_AL },
105 { 0x05C1, 0x05C2, LBP_CM },
106 { 0x05C3, 0x05C3, LBP_AL },
107 { 0x05C4, 0x05C5, LBP_CM },
108 { 0x05C6, 0x05C6, LBP_EX },
109 { 0x05C7, 0x05C7, LBP_CM },
110 { 0x05D0, 0x0608, LBP_AL },
111 { 0x0609, 0x060B, LBP_PO },
112 { 0x060C, 0x060D, LBP_IS },
113 { 0x060E, 0x060F, LBP_AL },
114 { 0x0610, 0x061A, LBP_CM },
115 { 0x061B, 0x061F, LBP_EX },
116 { 0x0620, 0x064A, LBP_AL },
117 { 0x064B, 0x065F, LBP_CM },
118 { 0x0660, 0x0669, LBP_NU },
119 { 0x066A, 0x066A, LBP_PO },
120 { 0x066B, 0x066C, LBP_NU },
121 { 0x066D, 0x066F, LBP_AL },
122 { 0x0670, 0x0670, LBP_CM },
123 { 0x0671, 0x06D3, LBP_AL },
124 { 0x06D4, 0x06D4, LBP_EX },
125 { 0x06D5, 0x06D5, LBP_AL },
126 { 0x06D6, 0x06DC, LBP_CM },
127 { 0x06DD, 0x06DE, LBP_AL },
128 { 0x06DF, 0x06E4, LBP_CM },
129 { 0x06E5, 0x06E6, LBP_AL },
130 { 0x06E7, 0x06E8, LBP_CM },
131 { 0x06E9, 0x06E9, LBP_AL },
132 { 0x06EA, 0x06ED, LBP_CM },
133 { 0x06EE, 0x06EF, LBP_AL },
134 { 0x06F0, 0x06F9, LBP_NU },
135 { 0x06FA, 0x0710, LBP_AL },
136 { 0x0711, 0x0711, LBP_CM },
137 { 0x0712, 0x072F, LBP_AL },
138 { 0x0730, 0x074A, LBP_CM },
139 { 0x074D, 0x07A5, LBP_AL },
140 { 0x07A6, 0x07B0, LBP_CM },
141 { 0x07B1, 0x07B1, LBP_AL },
142 { 0x07C0, 0x07C9, LBP_NU },
143 { 0x07CA, 0x07EA, LBP_AL },
144 { 0x07EB, 0x07F3, LBP_CM },
145 { 0x07F4, 0x07F7, LBP_AL },
146 { 0x07F8, 0x07F8, LBP_IS },
147 { 0x07F9, 0x07F9, LBP_EX },
148 { 0x07FA, 0x0815, LBP_AL },
149 { 0x0816, 0x0819, LBP_CM },
150 { 0x081A, 0x081A, LBP_AL },
151 { 0x081B, 0x0823, LBP_CM },
152 { 0x0824, 0x0824, LBP_AL },
153 { 0x0825, 0x0827, LBP_CM },
154 { 0x0828, 0x0828, LBP_AL },
155 { 0x0829, 0x082D, LBP_CM },
156 { 0x0830, 0x0858, LBP_AL },
157 { 0x0859, 0x085B, LBP_CM },
158 { 0x085E, 0x085E, LBP_AL },
159 { 0x0900, 0x0903, LBP_CM },
160 { 0x0904, 0x0939, LBP_AL },
161 { 0x093A, 0x093C, LBP_CM },
162 { 0x093D, 0x093D, LBP_AL },
163 { 0x093E, 0x094F, LBP_CM },
164 { 0x0950, 0x0950, LBP_AL },
165 { 0x0951, 0x0957, LBP_CM },
166 { 0x0958, 0x0961, LBP_AL },
167 { 0x0962, 0x0963, LBP_CM },
168 { 0x0964, 0x0965, LBP_BA },
169 { 0x0966, 0x096F, LBP_NU },
170 { 0x0970, 0x097F, LBP_AL },
171 { 0x0981, 0x0983, LBP_CM },
172 { 0x0985, 0x09B9, LBP_AL },
173 { 0x09BC, 0x09BC, LBP_CM },
174 { 0x09BD, 0x09BD, LBP_AL },
175 { 0x09BE, 0x09CD, LBP_CM },
176 { 0x09CE, 0x09CE, LBP_AL },
177 { 0x09D7, 0x09D7, LBP_CM },
178 { 0x09DC, 0x09E1, LBP_AL },
179 { 0x09E2, 0x09E3, LBP_CM },
180 { 0x09E6, 0x09EF, LBP_NU },
181 { 0x09F0, 0x09F1, LBP_AL },
182 { 0x09F2, 0x09F3, LBP_PO },
183 { 0x09F4, 0x09F8, LBP_AL },
184 { 0x09F9, 0x09F9, LBP_PO },
185 { 0x09FA, 0x09FA, LBP_AL },
186 { 0x09FB, 0x09FB, LBP_PR },
187 { 0x0A01, 0x0A03, LBP_CM },
188 { 0x0A05, 0x0A39, LBP_AL },
189 { 0x0A3C, 0x0A51, LBP_CM },
190 { 0x0A59, 0x0A5E, LBP_AL },
191 { 0x0A66, 0x0A6F, LBP_NU },
192 { 0x0A70, 0x0A71, LBP_CM },
193 { 0x0A72, 0x0A74, LBP_AL },
194 { 0x0A75, 0x0A83, LBP_CM },
195 { 0x0A85, 0x0AB9, LBP_AL },
196 { 0x0ABC, 0x0ABC, LBP_CM },
197 { 0x0ABD, 0x0ABD, LBP_AL },
198 { 0x0ABE, 0x0ACD, LBP_CM },
199 { 0x0AD0, 0x0AE1, LBP_AL },
200 { 0x0AE2, 0x0AE3, LBP_CM },
201 { 0x0AE6, 0x0AEF, LBP_NU },
202 { 0x0AF1, 0x0AF1, LBP_PR },
203 { 0x0B01, 0x0B03, LBP_CM },
204 { 0x0B05, 0x0B39, LBP_AL },
205 { 0x0B3C, 0x0B3C, LBP_CM },
206 { 0x0B3D, 0x0B3D, LBP_AL },
207 { 0x0B3E, 0x0B57, LBP_CM },
208 { 0x0B5C, 0x0B61, LBP_AL },
209 { 0x0B62, 0x0B63, LBP_CM },
210 { 0x0B66, 0x0B6F, LBP_NU },
211 { 0x0B70, 0x0B77, LBP_AL },
212 { 0x0B82, 0x0B82, LBP_CM },
213 { 0x0B83, 0x0BB9, LBP_AL },
214 { 0x0BBE, 0x0BCD, LBP_CM },
215 { 0x0BD0, 0x0BD0, LBP_AL },
216 { 0x0BD7, 0x0BD7, LBP_CM },
217 { 0x0BE6, 0x0BEF, LBP_NU },
218 { 0x0BF0, 0x0BF8, LBP_AL },
219 { 0x0BF9, 0x0BF9, LBP_PR },
220 { 0x0BFA, 0x0BFA, LBP_AL },
221 { 0x0C01, 0x0C03, LBP_CM },
222 { 0x0C05, 0x0C3D, LBP_AL },
223 { 0x0C3E, 0x0C56, LBP_CM },
224 { 0x0C58, 0x0C61, LBP_AL },
225 { 0x0C62, 0x0C63, LBP_CM },
226 { 0x0C66, 0x0C6F, LBP_NU },
227 { 0x0C78, 0x0C7F, LBP_AL },
228 { 0x0C82, 0x0C83, LBP_CM },
229 { 0x0C85, 0x0CB9, LBP_AL },
230 { 0x0CBC, 0x0CBC, LBP_CM },
231 { 0x0CBD, 0x0CBD, LBP_AL },
232 { 0x0CBE, 0x0CD6, LBP_CM },
233 { 0x0CDE, 0x0CE1, LBP_AL },
234 { 0x0CE2, 0x0CE3, LBP_CM },
235 { 0x0CE6, 0x0CEF, LBP_NU },
236 { 0x0CF1, 0x0CF2, LBP_AL },
237 { 0x0D02, 0x0D03, LBP_CM },
238 { 0x0D05, 0x0D3D, LBP_AL },
239 { 0x0D3E, 0x0D4D, LBP_CM },
240 { 0x0D4E, 0x0D4E, LBP_AL },
241 { 0x0D57, 0x0D57, LBP_CM },
242 { 0x0D60, 0x0D61, LBP_AL },
243 { 0x0D62, 0x0D63, LBP_CM },
244 { 0x0D66, 0x0D6F, LBP_NU },
245 { 0x0D70, 0x0D75, LBP_AL },
246 { 0x0D79, 0x0D79, LBP_PO },
247 { 0x0D7A, 0x0D7F, LBP_AL },
248 { 0x0D82, 0x0D83, LBP_CM },
249 { 0x0D85, 0x0DC6, LBP_AL },
250 { 0x0DCA, 0x0DF3, LBP_CM },
251 { 0x0DF4, 0x0DF4, LBP_AL },
252 { 0x0E01, 0x0E3A, LBP_SA },
253 { 0x0E3F, 0x0E3F, LBP_PR },
254 { 0x0E40, 0x0E4E, LBP_SA },
255 { 0x0E4F, 0x0E4F, LBP_AL },
256 { 0x0E50, 0x0E59, LBP_NU },
257 { 0x0E5A, 0x0E5B, LBP_BA },
258 { 0x0E81, 0x0ECD, LBP_SA },
259 { 0x0ED0, 0x0ED9, LBP_NU },
260 { 0x0EDC, 0x0EDD, LBP_SA },
261 { 0x0F00, 0x0F00, LBP_AL },
262 { 0x0F01, 0x0F04, LBP_BB },
263 { 0x0F05, 0x0F05, LBP_AL },
264 { 0x0F06, 0x0F07, LBP_BB },
265 { 0x0F08, 0x0F08, LBP_GL },
266 { 0x0F09, 0x0F0A, LBP_BB },
267 { 0x0F0B, 0x0F0B, LBP_BA },
268 { 0x0F0C, 0x0F0C, LBP_GL },
269 { 0x0F0D, 0x0F11, LBP_EX },
270 { 0x0F12, 0x0F12, LBP_GL },
271 { 0x0F13, 0x0F13, LBP_AL },
272 { 0x0F14, 0x0F14, LBP_EX },
273 { 0x0F15, 0x0F17, LBP_AL },
274 { 0x0F18, 0x0F19, LBP_CM },
275 { 0x0F1A, 0x0F1F, LBP_AL },
276 { 0x0F20, 0x0F29, LBP_NU },
277 { 0x0F2A, 0x0F33, LBP_AL },
278 { 0x0F34, 0x0F34, LBP_BA },
279 { 0x0F35, 0x0F35, LBP_CM },
280 { 0x0F36, 0x0F36, LBP_AL },
281 { 0x0F37, 0x0F37, LBP_CM },
282 { 0x0F38, 0x0F38, LBP_AL },
283 { 0x0F39, 0x0F39, LBP_CM },
284 { 0x0F3A, 0x0F3A, LBP_OP },
285 { 0x0F3B, 0x0F3B, LBP_CL },
286 { 0x0F3C, 0x0F3C, LBP_OP },
287 { 0x0F3D, 0x0F3D, LBP_CL },
288 { 0x0F3E, 0x0F3F, LBP_CM },
289 { 0x0F40, 0x0F6C, LBP_AL },
290 { 0x0F71, 0x0F7E, LBP_CM },
291 { 0x0F7F, 0x0F7F, LBP_BA },
292 { 0x0F80, 0x0F84, LBP_CM },
293 { 0x0F85, 0x0F85, LBP_BA },
294 { 0x0F86, 0x0F87, LBP_CM },
295 { 0x0F88, 0x0F8C, LBP_AL },
296 { 0x0F8D, 0x0FBC, LBP_CM },
297 { 0x0FBE, 0x0FBF, LBP_BA },
298 { 0x0FC0, 0x0FC5, LBP_AL },
299 { 0x0FC6, 0x0FC6, LBP_CM },
300 { 0x0FC7, 0x0FCF, LBP_AL },
301 { 0x0FD0, 0x0FD1, LBP_BB },
302 { 0x0FD2, 0x0FD2, LBP_BA },
303 { 0x0FD3, 0x0FD3, LBP_BB },
304 { 0x0FD4, 0x0FD8, LBP_AL },
305 { 0x0FD9, 0x0FDA, LBP_GL },
306 { 0x1000, 0x103F, LBP_SA },
307 { 0x1040, 0x1049, LBP_NU },
308 { 0x104A, 0x104B, LBP_BA },
309 { 0x104C, 0x104F, LBP_AL },
310 { 0x1050, 0x108F, LBP_SA },
311 { 0x1090, 0x1099, LBP_NU },
312 { 0x109A, 0x109F, LBP_SA },
313 { 0x10A0, 0x10FC, LBP_AL },
314 { 0x1100, 0x115F, LBP_JL },
315 { 0x1160, 0x11A7, LBP_JV },
316 { 0x11A8, 0x11FF, LBP_JT },
317 { 0x1200, 0x135A, LBP_AL },
318 { 0x135D, 0x135F, LBP_CM },
319 { 0x1360, 0x1360, LBP_AL },
320 { 0x1361, 0x1361, LBP_BA },
321 { 0x1362, 0x13F4, LBP_AL },
322 { 0x1400, 0x1400, LBP_BA },
323 { 0x1401, 0x167F, LBP_AL },
324 { 0x1680, 0x1680, LBP_BA },
325 { 0x1681, 0x169A, LBP_AL },
326 { 0x169B, 0x169B, LBP_OP },
327 { 0x169C, 0x169C, LBP_CL },
328 { 0x16A0, 0x16EA, LBP_AL },
329 { 0x16EB, 0x16ED, LBP_BA },
330 { 0x16EE, 0x1711, LBP_AL },
331 { 0x1712, 0x1714, LBP_CM },
332 { 0x1720, 0x1731, LBP_AL },
333 { 0x1732, 0x1734, LBP_CM },
334 { 0x1735, 0x1736, LBP_BA },
335 { 0x1740, 0x1751, LBP_AL },
336 { 0x1752, 0x1753, LBP_CM },
337 { 0x1760, 0x1770, LBP_AL },
338 { 0x1772, 0x1773, LBP_CM },
339 { 0x1780, 0x17D3, LBP_SA },
340 { 0x17D4, 0x17D5, LBP_BA },
341 { 0x17D6, 0x17D6, LBP_NS },
342 { 0x17D7, 0x17D7, LBP_SA },
343 { 0x17D8, 0x17D8, LBP_BA },
344 { 0x17D9, 0x17D9, LBP_AL },
345 { 0x17DA, 0x17DA, LBP_BA },
346 { 0x17DB, 0x17DB, LBP_PR },
347 { 0x17DC, 0x17DD, LBP_SA },
348 { 0x17E0, 0x17E9, LBP_NU },
349 { 0x17F0, 0x1801, LBP_AL },
350 { 0x1802, 0x1803, LBP_EX },
351 { 0x1804, 0x1805, LBP_BA },
352 { 0x1806, 0x1806, LBP_BB },
353 { 0x1807, 0x1807, LBP_AL },
354 { 0x1808, 0x1809, LBP_EX },
355 { 0x180A, 0x180A, LBP_AL },
356 { 0x180B, 0x180D, LBP_CM },
357 { 0x180E, 0x180E, LBP_GL },
358 { 0x1810, 0x1819, LBP_NU },
359 { 0x1820, 0x18A8, LBP_AL },
360 { 0x18A9, 0x18A9, LBP_CM },
361 { 0x18AA, 0x191C, LBP_AL },
362 { 0x1920, 0x193B, LBP_CM },
363 { 0x1940, 0x1940, LBP_AL },
364 { 0x1944, 0x1945, LBP_EX },
365 { 0x1946, 0x194F, LBP_NU },
366 { 0x1950, 0x19C9, LBP_SA },
367 { 0x19D0, 0x19D9, LBP_NU },
368 { 0x19DA, 0x19DF, LBP_SA },
369 { 0x19E0, 0x1A16, LBP_AL },
370 { 0x1A17, 0x1A1B, LBP_CM },
371 { 0x1A1E, 0x1A1F, LBP_AL },
372 { 0x1A20, 0x1A7C, LBP_SA },
373 { 0x1A7F, 0x1A7F, LBP_CM },
374 { 0x1A80, 0x1A99, LBP_NU },
375 { 0x1AA0, 0x1AAD, LBP_SA },
376 { 0x1B00, 0x1B04, LBP_CM },
377 { 0x1B05, 0x1B33, LBP_AL },
378 { 0x1B34, 0x1B44, LBP_CM },
379 { 0x1B45, 0x1B4B, LBP_AL },
380 { 0x1B50, 0x1B59, LBP_NU },
381 { 0x1B5A, 0x1B5B, LBP_BA },
382 { 0x1B5C, 0x1B5C, LBP_AL },
383 { 0x1B5D, 0x1B60, LBP_BA },
384 { 0x1B61, 0x1B6A, LBP_AL },
385 { 0x1B6B, 0x1B73, LBP_CM },
386 { 0x1B74, 0x1B7C, LBP_AL },
387 { 0x1B80, 0x1B82, LBP_CM },
388 { 0x1B83, 0x1BA0, LBP_AL },
389 { 0x1BA1, 0x1BAA, LBP_CM },
390 { 0x1BAE, 0x1BAF, LBP_AL },
391 { 0x1BB0, 0x1BB9, LBP_NU },
392 { 0x1BC0, 0x1BE5, LBP_AL },
393 { 0x1BE6, 0x1BF3, LBP_CM },
394 { 0x1BFC, 0x1C23, LBP_AL },
395 { 0x1C24, 0x1C37, LBP_CM },
396 { 0x1C3B, 0x1C3F, LBP_BA },
397 { 0x1C40, 0x1C49, LBP_NU },
398 { 0x1C4D, 0x1C4F, LBP_AL },
399 { 0x1C50, 0x1C59, LBP_NU },
400 { 0x1C5A, 0x1C7D, LBP_AL },
401 { 0x1C7E, 0x1C7F, LBP_BA },
402 { 0x1CD0, 0x1CD2, LBP_CM },
403 { 0x1CD3, 0x1CD3, LBP_AL },
404 { 0x1CD4, 0x1CE8, LBP_CM },
405 { 0x1CE9, 0x1CEC, LBP_AL },
406 { 0x1CED, 0x1CED, LBP_CM },
407 { 0x1CEE, 0x1CF1, LBP_AL },
408 { 0x1CF2, 0x1CF2, LBP_CM },
409 { 0x1D00, 0x1DBF, LBP_AL },
410 { 0x1DC0, 0x1DFF, LBP_CM },
411 { 0x1E00, 0x1FFC, LBP_AL },
412 { 0x1FFD, 0x1FFD, LBP_BB },
413 { 0x1FFE, 0x1FFE, LBP_AL },
414 { 0x2000, 0x2006, LBP_BA },
415 { 0x2007, 0x2007, LBP_GL },
416 { 0x2008, 0x200A, LBP_BA },
417 { 0x200B, 0x200B, LBP_ZW },
418 { 0x200C, 0x200F, LBP_CM },
419 { 0x2010, 0x2010, LBP_BA },
420 { 0x2011, 0x2011, LBP_GL },
421 { 0x2012, 0x2013, LBP_BA },
422 { 0x2014, 0x2014, LBP_B2 },
423 { 0x2015, 0x2016, LBP_AI },
424 { 0x2017, 0x2017, LBP_AL },
425 { 0x2018, 0x2019, LBP_QU },
426 { 0x201A, 0x201A, LBP_OP },
427 { 0x201B, 0x201D, LBP_QU },
428 { 0x201E, 0x201E, LBP_OP },
429 { 0x201F, 0x201F, LBP_QU },
430 { 0x2020, 0x2021, LBP_AI },
431 { 0x2022, 0x2023, LBP_AL },
432 { 0x2024, 0x2026, LBP_IN },
433 { 0x2027, 0x2027, LBP_BA },
434 { 0x2028, 0x2029, LBP_BK },
435 { 0x202A, 0x202E, LBP_CM },
436 { 0x202F, 0x202F, LBP_GL },
437 { 0x2030, 0x2037, LBP_PO },
438 { 0x2038, 0x2038, LBP_AL },
439 { 0x2039, 0x203A, LBP_QU },
440 { 0x203B, 0x203B, LBP_AI },
441 { 0x203C, 0x203D, LBP_NS },
442 { 0x203E, 0x2043, LBP_AL },
443 { 0x2044, 0x2044, LBP_IS },
444 { 0x2045, 0x2045, LBP_OP },
445 { 0x2046, 0x2046, LBP_CL },
446 { 0x2047, 0x2049, LBP_NS },
447 { 0x204A, 0x2055, LBP_AL },
448 { 0x2056, 0x2056, LBP_BA },
449 { 0x2057, 0x2057, LBP_AL },
450 { 0x2058, 0x205B, LBP_BA },
451 { 0x205C, 0x205C, LBP_AL },
452 { 0x205D, 0x205F, LBP_BA },
453 { 0x2060, 0x2060, LBP_WJ },
454 { 0x2061, 0x2064, LBP_AL },
455 { 0x206A, 0x206F, LBP_CM },
456 { 0x2070, 0x2071, LBP_AL },
457 { 0x2074, 0x2074, LBP_AI },
458 { 0x2075, 0x207C, LBP_AL },
459 { 0x207D, 0x207D, LBP_OP },
460 { 0x207E, 0x207E, LBP_CL },
461 { 0x207F, 0x207F, LBP_AI },
462 { 0x2080, 0x2080, LBP_AL },
463 { 0x2081, 0x2084, LBP_AI },
464 { 0x2085, 0x208C, LBP_AL },
465 { 0x208D, 0x208D, LBP_OP },
466 { 0x208E, 0x208E, LBP_CL },
467 { 0x2090, 0x209C, LBP_AL },
468 { 0x20A0, 0x20A6, LBP_PR },
469 { 0x20A7, 0x20A7, LBP_PO },
470 { 0x20A8, 0x20B5, LBP_PR },
471 { 0x20B6, 0x20B6, LBP_PO },
472 { 0x20B7, 0x20B9, LBP_PR },
473 { 0x20D0, 0x20F0, LBP_CM },
474 { 0x2100, 0x2102, LBP_AL },
475 { 0x2103, 0x2103, LBP_PO },
476 { 0x2104, 0x2104, LBP_AL },
477 { 0x2105, 0x2105, LBP_AI },
478 { 0x2106, 0x2108, LBP_AL },
479 { 0x2109, 0x2109, LBP_PO },
480 { 0x210A, 0x2112, LBP_AL },
481 { 0x2113, 0x2113, LBP_AI },
482 { 0x2114, 0x2115, LBP_AL },
483 { 0x2116, 0x2116, LBP_PR },
484 { 0x2117, 0x2120, LBP_AL },
485 { 0x2121, 0x2122, LBP_AI },
486 { 0x2123, 0x212A, LBP_AL },
487 { 0x212B, 0x212B, LBP_AI },
488 { 0x212C, 0x2153, LBP_AL },
489 { 0x2154, 0x2155, LBP_AI },
490 { 0x2156, 0x215A, LBP_AL },
491 { 0x215B, 0x215B, LBP_AI },
492 { 0x215C, 0x215D, LBP_AL },
493 { 0x215E, 0x215E, LBP_AI },
494 { 0x215F, 0x215F, LBP_AL },
495 { 0x2160, 0x216B, LBP_AI },
496 { 0x216C, 0x216F, LBP_AL },
497 { 0x2170, 0x2179, LBP_AI },
498 { 0x217A, 0x2188, LBP_AL },
499 { 0x2189, 0x2199, LBP_AI },
500 { 0x219A, 0x21D1, LBP_AL },
501 { 0x21D2, 0x21D2, LBP_AI },
502 { 0x21D3, 0x21D3, LBP_AL },
503 { 0x21D4, 0x21D4, LBP_AI },
504 { 0x21D5, 0x21FF, LBP_AL },
505 { 0x2200, 0x2200, LBP_AI },
506 { 0x2201, 0x2201, LBP_AL },
507 { 0x2202, 0x2203, LBP_AI },
508 { 0x2204, 0x2206, LBP_AL },
509 { 0x2207, 0x2208, LBP_AI },
510 { 0x2209, 0x220A, LBP_AL },
511 { 0x220B, 0x220B, LBP_AI },
512 { 0x220C, 0x220E, LBP_AL },
513 { 0x220F, 0x220F, LBP_AI },
514 { 0x2210, 0x2210, LBP_AL },
515 { 0x2211, 0x2211, LBP_AI },
516 { 0x2212, 0x2213, LBP_PR },
517 { 0x2214, 0x2214, LBP_AL },
518 { 0x2215, 0x2215, LBP_AI },
519 { 0x2216, 0x2219, LBP_AL },
520 { 0x221A, 0x221A, LBP_AI },
521 { 0x221B, 0x221C, LBP_AL },
522 { 0x221D, 0x2220, LBP_AI },
523 { 0x2221, 0x2222, LBP_AL },
524 { 0x2223, 0x2223, LBP_AI },
525 { 0x2224, 0x2224, LBP_AL },
526 { 0x2225, 0x2225, LBP_AI },
527 { 0x2226, 0x2226, LBP_AL },
528 { 0x2227, 0x222C, LBP_AI },
529 { 0x222D, 0x222D, LBP_AL },
530 { 0x222E, 0x222E, LBP_AI },
531 { 0x222F, 0x2233, LBP_AL },
532 { 0x2234, 0x2237, LBP_AI },
533 { 0x2238, 0x223B, LBP_AL },
534 { 0x223C, 0x223D, LBP_AI },
535 { 0x223E, 0x2247, LBP_AL },
536 { 0x2248, 0x2248, LBP_AI },
537 { 0x2249, 0x224B, LBP_AL },
538 { 0x224C, 0x224C, LBP_AI },
539 { 0x224D, 0x2251, LBP_AL },
540 { 0x2252, 0x2252, LBP_AI },
541 { 0x2253, 0x225F, LBP_AL },
542 { 0x2260, 0x2261, LBP_AI },
543 { 0x2262, 0x2263, LBP_AL },
544 { 0x2264, 0x2267, LBP_AI },
545 { 0x2268, 0x2269, LBP_AL },
546 { 0x226A, 0x226B, LBP_AI },
547 { 0x226C, 0x226D, LBP_AL },
548 { 0x226E, 0x226F, LBP_AI },
549 { 0x2270, 0x2281, LBP_AL },
550 { 0x2282, 0x2283, LBP_AI },
551 { 0x2284, 0x2285, LBP_AL },
552 { 0x2286, 0x2287, LBP_AI },
553 { 0x2288, 0x2294, LBP_AL },
554 { 0x2295, 0x2295, LBP_AI },
555 { 0x2296, 0x2298, LBP_AL },
556 { 0x2299, 0x2299, LBP_AI },
557 { 0x229A, 0x22A4, LBP_AL },
558 { 0x22A5, 0x22A5, LBP_AI },
559 { 0x22A6, 0x22BE, LBP_AL },
560 { 0x22BF, 0x22BF, LBP_AI },
561 { 0x22C0, 0x2311, LBP_AL },
562 { 0x2312, 0x2312, LBP_AI },
563 { 0x2313, 0x2328, LBP_AL },
564 { 0x2329, 0x2329, LBP_OP },
565 { 0x232A, 0x232A, LBP_CL },
566 { 0x232B, 0x244A, LBP_AL },
567 { 0x2460, 0x24FE, LBP_AI },
568 { 0x24FF, 0x24FF, LBP_AL },
569 { 0x2500, 0x254B, LBP_AI },
570 { 0x254C, 0x254F, LBP_AL },
571 { 0x2550, 0x2574, LBP_AI },
572 { 0x2575, 0x257F, LBP_AL },
573 { 0x2580, 0x258F, LBP_AI },
574 { 0x2590, 0x2591, LBP_AL },
575 { 0x2592, 0x2595, LBP_AI },
576 { 0x2596, 0x259F, LBP_AL },
577 { 0x25A0, 0x25A1, LBP_AI },
578 { 0x25A2, 0x25A2, LBP_AL },
579 { 0x25A3, 0x25A9, LBP_AI },
580 { 0x25AA, 0x25B1, LBP_AL },
581 { 0x25B2, 0x25B3, LBP_AI },
582 { 0x25B4, 0x25B5, LBP_AL },
583 { 0x25B6, 0x25B7, LBP_AI },
584 { 0x25B8, 0x25BB, LBP_AL },
585 { 0x25BC, 0x25BD, LBP_AI },
586 { 0x25BE, 0x25BF, LBP_AL },
587 { 0x25C0, 0x25C1, LBP_AI },
588 { 0x25C2, 0x25C5, LBP_AL },
589 { 0x25C6, 0x25C8, LBP_AI },
590 { 0x25C9, 0x25CA, LBP_AL },
591 { 0x25CB, 0x25CB, LBP_AI },
592 { 0x25CC, 0x25CD, LBP_AL },
593 { 0x25CE, 0x25D1, LBP_AI },
594 { 0x25D2, 0x25E1, LBP_AL },
595 { 0x25E2, 0x25E5, LBP_AI },
596 { 0x25E6, 0x25EE, LBP_AL },
597 { 0x25EF, 0x25EF, LBP_AI },
598 { 0x25F0, 0x2604, LBP_AL },
599 { 0x2605, 0x2606, LBP_AI },
600 { 0x2607, 0x2608, LBP_AL },
601 { 0x2609, 0x2609, LBP_AI },
602 { 0x260A, 0x260D, LBP_AL },
603 { 0x260E, 0x260F, LBP_AI },
604 { 0x2610, 0x2613, LBP_AL },
605 { 0x2614, 0x2617, LBP_AI },
606 { 0x2618, 0x261B, LBP_AL },
607 { 0x261C, 0x261C, LBP_AI },
608 { 0x261D, 0x261D, LBP_AL },
609 { 0x261E, 0x261E, LBP_AI },
610 { 0x261F, 0x263F, LBP_AL },
611 { 0x2640, 0x2640, LBP_AI },
612 { 0x2641, 0x2641, LBP_AL },
613 { 0x2642, 0x2642, LBP_AI },
614 { 0x2643, 0x265F, LBP_AL },
615 { 0x2660, 0x2661, LBP_AI },
616 { 0x2662, 0x2662, LBP_AL },
617 { 0x2663, 0x2665, LBP_AI },
618 { 0x2666, 0x2666, LBP_AL },
619 { 0x2667, 0x266A, LBP_AI },
620 { 0x266B, 0x266B, LBP_AL },
621 { 0x266C, 0x266D, LBP_AI },
622 { 0x266E, 0x266E, LBP_AL },
623 { 0x266F, 0x266F, LBP_AI },
624 { 0x2670, 0x269D, LBP_AL },
625 { 0x269E, 0x269F, LBP_AI },
626 { 0x26A0, 0x26BD, LBP_AL },
627 { 0x26BE, 0x26BF, LBP_AI },
628 { 0x26C0, 0x26C3, LBP_AL },
629 { 0x26C4, 0x26CD, LBP_AI },
630 { 0x26CE, 0x26CE, LBP_AL },
631 { 0x26CF, 0x26E1, LBP_AI },
632 { 0x26E2, 0x26E2, LBP_AL },
633 { 0x26E3, 0x26E3, LBP_AI },
634 { 0x26E4, 0x26E7, LBP_AL },
635 { 0x26E8, 0x26FF, LBP_AI },
636 { 0x2701, 0x2756, LBP_AL },
637 { 0x2757, 0x2757, LBP_AI },
638 { 0x2758, 0x275A, LBP_AL },
639 { 0x275B, 0x275E, LBP_QU },
640 { 0x275F, 0x2761, LBP_AL },
641 { 0x2762, 0x2763, LBP_EX },
642 { 0x2764, 0x2767, LBP_AL },
643 { 0x2768, 0x2768, LBP_OP },
644 { 0x2769, 0x2769, LBP_CL },
645 { 0x276A, 0x276A, LBP_OP },
646 { 0x276B, 0x276B, LBP_CL },
647 { 0x276C, 0x276C, LBP_OP },
648 { 0x276D, 0x276D, LBP_CL },
649 { 0x276E, 0x276E, LBP_OP },
650 { 0x276F, 0x276F, LBP_CL },
651 { 0x2770, 0x2770, LBP_OP },
652 { 0x2771, 0x2771, LBP_CL },
653 { 0x2772, 0x2772, LBP_OP },
654 { 0x2773, 0x2773, LBP_CL },
655 { 0x2774, 0x2774, LBP_OP },
656 { 0x2775, 0x2775, LBP_CL },
657 { 0x2776, 0x2793, LBP_AI },
658 { 0x2794, 0x27C4, LBP_AL },
659 { 0x27C5, 0x27C5, LBP_OP },
660 { 0x27C6, 0x27C6, LBP_CL },
661 { 0x27C7, 0x27E5, LBP_AL },
662 { 0x27E6, 0x27E6, LBP_OP },
663 { 0x27E7, 0x27E7, LBP_CL },
664 { 0x27E8, 0x27E8, LBP_OP },
665 { 0x27E9, 0x27E9, LBP_CL },
666 { 0x27EA, 0x27EA, LBP_OP },
667 { 0x27EB, 0x27EB, LBP_CL },
668 { 0x27EC, 0x27EC, LBP_OP },
669 { 0x27ED, 0x27ED, LBP_CL },
670 { 0x27EE, 0x27EE, LBP_OP },
671 { 0x27EF, 0x27EF, LBP_CL },
672 { 0x27F0, 0x2982, LBP_AL },
673 { 0x2983, 0x2983, LBP_OP },
674 { 0x2984, 0x2984, LBP_CL },
675 { 0x2985, 0x2985, LBP_OP },
676 { 0x2986, 0x2986, LBP_CL },
677 { 0x2987, 0x2987, LBP_OP },
678 { 0x2988, 0x2988, LBP_CL },
679 { 0x2989, 0x2989, LBP_OP },
680 { 0x298A, 0x298A, LBP_CL },
681 { 0x298B, 0x298B, LBP_OP },
682 { 0x298C, 0x298C, LBP_CL },
683 { 0x298D, 0x298D, LBP_OP },
684 { 0x298E, 0x298E, LBP_CL },
685 { 0x298F, 0x298F, LBP_OP },
686 { 0x2990, 0x2990, LBP_CL },
687 { 0x2991, 0x2991, LBP_OP },
688 { 0x2992, 0x2992, LBP_CL },
689 { 0x2993, 0x2993, LBP_OP },
690 { 0x2994, 0x2994, LBP_CL },
691 { 0x2995, 0x2995, LBP_OP },
692 { 0x2996, 0x2996, LBP_CL },
693 { 0x2997, 0x2997, LBP_OP },
694 { 0x2998, 0x2998, LBP_CL },
695 { 0x2999, 0x29D7, LBP_AL },
696 { 0x29D8, 0x29D8, LBP_OP },
697 { 0x29D9, 0x29D9, LBP_CL },
698 { 0x29DA, 0x29DA, LBP_OP },
699 { 0x29DB, 0x29DB, LBP_CL },
700 { 0x29DC, 0x29FB, LBP_AL },
701 { 0x29FC, 0x29FC, LBP_OP },
702 { 0x29FD, 0x29FD, LBP_CL },
703 { 0x29FE, 0x2B54, LBP_AL },
704 { 0x2B55, 0x2B59, LBP_AI },
705 { 0x2C00, 0x2CEE, LBP_AL },
706 { 0x2CEF, 0x2CF1, LBP_CM },
707 { 0x2CF9, 0x2CF9, LBP_EX },
708 { 0x2CFA, 0x2CFC, LBP_BA },
709 { 0x2CFD, 0x2CFD, LBP_AL },
710 { 0x2CFE, 0x2CFE, LBP_EX },
711 { 0x2CFF, 0x2CFF, LBP_BA },
712 { 0x2D00, 0x2D6F, LBP_AL },
713 { 0x2D70, 0x2D70, LBP_BA },
714 { 0x2D7F, 0x2D7F, LBP_CM },
715 { 0x2D80, 0x2DDE, LBP_AL },
716 { 0x2DE0, 0x2DFF, LBP_CM },
717 { 0x2E00, 0x2E0D, LBP_QU },
718 { 0x2E0E, 0x2E15, LBP_BA },
719 { 0x2E16, 0x2E16, LBP_AL },
720 { 0x2E17, 0x2E17, LBP_BA },
721 { 0x2E18, 0x2E18, LBP_OP },
722 { 0x2E19, 0x2E19, LBP_BA },
723 { 0x2E1A, 0x2E1B, LBP_AL },
724 { 0x2E1C, 0x2E1D, LBP_QU },
725 { 0x2E1E, 0x2E1F, LBP_AL },
726 { 0x2E20, 0x2E21, LBP_QU },
727 { 0x2E22, 0x2E22, LBP_OP },
728 { 0x2E23, 0x2E23, LBP_CL },
729 { 0x2E24, 0x2E24, LBP_OP },
730 { 0x2E25, 0x2E25, LBP_CL },
731 { 0x2E26, 0x2E26, LBP_OP },
732 { 0x2E27, 0x2E27, LBP_CL },
733 { 0x2E28, 0x2E28, LBP_OP },
734 { 0x2E29, 0x2E29, LBP_CL },
735 { 0x2E2A, 0x2E2D, LBP_BA },
736 { 0x2E2E, 0x2E2E, LBP_EX },
737 { 0x2E2F, 0x2E2F, LBP_AL },
738 { 0x2E30, 0x2E31, LBP_BA },
739 { 0x2E80, 0x3000, LBP_ID },
740 { 0x3001, 0x3002, LBP_CL },
741 { 0x3003, 0x3004, LBP_ID },
742 { 0x3005, 0x3005, LBP_NS },
743 { 0x3006, 0x3007, LBP_ID },
744 { 0x3008, 0x3008, LBP_OP },
745 { 0x3009, 0x3009, LBP_CL },
746 { 0x300A, 0x300A, LBP_OP },
747 { 0x300B, 0x300B, LBP_CL },
748 { 0x300C, 0x300C, LBP_OP },
749 { 0x300D, 0x300D, LBP_CL },
750 { 0x300E, 0x300E, LBP_OP },
751 { 0x300F, 0x300F, LBP_CL },
752 { 0x3010, 0x3010, LBP_OP },
753 { 0x3011, 0x3011, LBP_CL },
754 { 0x3012, 0x3013, LBP_ID },
755 { 0x3014, 0x3014, LBP_OP },
756 { 0x3015, 0x3015, LBP_CL },
757 { 0x3016, 0x3016, LBP_OP },
758 { 0x3017, 0x3017, LBP_CL },
759 { 0x3018, 0x3018, LBP_OP },
760 { 0x3019, 0x3019, LBP_CL },
761 { 0x301A, 0x301A, LBP_OP },
762 { 0x301B, 0x301B, LBP_CL },
763 { 0x301C, 0x301C, LBP_NS },
764 { 0x301D, 0x301D, LBP_OP },
765 { 0x301E, 0x301F, LBP_CL },
766 { 0x3020, 0x3029, LBP_ID },
767 { 0x302A, 0x302F, LBP_CM },
768 { 0x3030, 0x303A, LBP_ID },
769 { 0x303B, 0x303C, LBP_NS },
770 { 0x303D, 0x303F, LBP_ID },
771 { 0x3041, 0x3041, LBP_NS },
772 { 0x3042, 0x3042, LBP_ID },
773 { 0x3043, 0x3043, LBP_NS },
774 { 0x3044, 0x3044, LBP_ID },
775 { 0x3045, 0x3045, LBP_NS },
776 { 0x3046, 0x3046, LBP_ID },
777 { 0x3047, 0x3047, LBP_NS },
778 { 0x3048, 0x3048, LBP_ID },
779 { 0x3049, 0x3049, LBP_NS },
780 { 0x304A, 0x3062, LBP_ID },
781 { 0x3063, 0x3063, LBP_NS },
782 { 0x3064, 0x3082, LBP_ID },
783 { 0x3083, 0x3083, LBP_NS },
784 { 0x3084, 0x3084, LBP_ID },
785 { 0x3085, 0x3085, LBP_NS },
786 { 0x3086, 0x3086, LBP_ID },
787 { 0x3087, 0x3087, LBP_NS },
788 { 0x3088, 0x308D, LBP_ID },
789 { 0x308E, 0x308E, LBP_NS },
790 { 0x308F, 0x3094, LBP_ID },
791 { 0x3095, 0x3096, LBP_NS },
792 { 0x3099, 0x309A, LBP_CM },
793 { 0x309B, 0x309E, LBP_NS },
794 { 0x309F, 0x309F, LBP_ID },
795 { 0x30A0, 0x30A1, LBP_NS },
796 { 0x30A2, 0x30A2, LBP_ID },
797 { 0x30A3, 0x30A3, LBP_NS },
798 { 0x30A4, 0x30A4, LBP_ID },
799 { 0x30A5, 0x30A5, LBP_NS },
800 { 0x30A6, 0x30A6, LBP_ID },
801 { 0x30A7, 0x30A7, LBP_NS },
802 { 0x30A8, 0x30A8, LBP_ID },
803 { 0x30A9, 0x30A9, LBP_NS },
804 { 0x30AA, 0x30C2, LBP_ID },
805 { 0x30C3, 0x30C3, LBP_NS },
806 { 0x30C4, 0x30E2, LBP_ID },
807 { 0x30E3, 0x30E3, LBP_NS },
808 { 0x30E4, 0x30E4, LBP_ID },
809 { 0x30E5, 0x30E5, LBP_NS },
810 { 0x30E6, 0x30E6, LBP_ID },
811 { 0x30E7, 0x30E7, LBP_NS },
812 { 0x30E8, 0x30ED, LBP_ID },
813 { 0x30EE, 0x30EE, LBP_NS },
814 { 0x30EF, 0x30F4, LBP_ID },
815 { 0x30F5, 0x30F6, LBP_NS },
816 { 0x30F7, 0x30FA, LBP_ID },
817 { 0x30FB, 0x30FE, LBP_NS },
818 { 0x30FF, 0x31E3, LBP_ID },
819 { 0x31F0, 0x31FF, LBP_NS },
820 { 0x3200, 0x3247, LBP_ID },
821 { 0x3248, 0x324F, LBP_AI },
822 { 0x3250, 0x4DBF, LBP_ID },
823 { 0x4DC0, 0x4DFF, LBP_AL },
824 { 0x4E00, 0xA014, LBP_ID },
825 { 0xA015, 0xA015, LBP_NS },
826 { 0xA016, 0xA4C6, LBP_ID },
827 { 0xA4D0, 0xA4FD, LBP_AL },
828 { 0xA4FE, 0xA4FF, LBP_BA },
829 { 0xA500, 0xA60C, LBP_AL },
830 { 0xA60D, 0xA60D, LBP_BA },
831 { 0xA60E, 0xA60E, LBP_EX },
832 { 0xA60F, 0xA60F, LBP_BA },
833 { 0xA610, 0xA61F, LBP_AL },
834 { 0xA620, 0xA629, LBP_NU },
835 { 0xA62A, 0xA66E, LBP_AL },
836 { 0xA66F, 0xA672, LBP_CM },
837 { 0xA673, 0xA673, LBP_AL },
838 { 0xA67C, 0xA67D, LBP_CM },
839 { 0xA67E, 0xA6EF, LBP_AL },
840 { 0xA6F0, 0xA6F1, LBP_CM },
841 { 0xA6F2, 0xA6F2, LBP_AL },
842 { 0xA6F3, 0xA6F7, LBP_BA },
843 { 0xA700, 0xA801, LBP_AL },
844 { 0xA802, 0xA802, LBP_CM },
845 { 0xA803, 0xA805, LBP_AL },
846 { 0xA806, 0xA806, LBP_CM },
847 { 0xA807, 0xA80A, LBP_AL },
848 { 0xA80B, 0xA80B, LBP_CM },
849 { 0xA80C, 0xA822, LBP_AL },
850 { 0xA823, 0xA827, LBP_CM },
851 { 0xA828, 0xA837, LBP_AL },
852 { 0xA838, 0xA838, LBP_PO },
853 { 0xA839, 0xA873, LBP_AL },
854 { 0xA874, 0xA875, LBP_BB },
855 { 0xA876, 0xA877, LBP_EX },
856 { 0xA880, 0xA881, LBP_CM },
857 { 0xA882, 0xA8B3, LBP_AL },
858 { 0xA8B4, 0xA8C4, LBP_CM },
859 { 0xA8CE, 0xA8CF, LBP_BA },
860 { 0xA8D0, 0xA8D9, LBP_NU },
861 { 0xA8E0, 0xA8F1, LBP_CM },
862 { 0xA8F2, 0xA8FB, LBP_AL },
863 { 0xA900, 0xA909, LBP_NU },
864 { 0xA90A, 0xA925, LBP_AL },
865 { 0xA926, 0xA92D, LBP_CM },
866 { 0xA92E, 0xA92F, LBP_BA },
867 { 0xA930, 0xA946, LBP_AL },
868 { 0xA947, 0xA953, LBP_CM },
869 { 0xA95F, 0xA95F, LBP_AL },
870 { 0xA960, 0xA97C, LBP_JL },
871 { 0xA980, 0xA983, LBP_CM },
872 { 0xA984, 0xA9B2, LBP_AL },
873 { 0xA9B3, 0xA9C0, LBP_CM },
874 { 0xA9C1, 0xA9C6, LBP_AL },
875 { 0xA9C7, 0xA9C9, LBP_BA },
876 { 0xA9CA, 0xA9CF, LBP_AL },
877 { 0xA9D0, 0xA9D9, LBP_NU },
878 { 0xA9DE, 0xAA28, LBP_AL },
879 { 0xAA29, 0xAA36, LBP_CM },
880 { 0xAA40, 0xAA42, LBP_AL },
881 { 0xAA43, 0xAA43, LBP_CM },
882 { 0xAA44, 0xAA4B, LBP_AL },
883 { 0xAA4C, 0xAA4D, LBP_CM },
884 { 0xAA50, 0xAA59, LBP_NU },
885 { 0xAA5C, 0xAA5C, LBP_AL },
886 { 0xAA5D, 0xAA5F, LBP_BA },
887 { 0xAA60, 0xAADF, LBP_SA },
888 { 0xAB01, 0xABE2, LBP_AL },
889 { 0xABE3, 0xABEA, LBP_CM },
890 { 0xABEB, 0xABEB, LBP_BA },
891 { 0xABEC, 0xABED, LBP_CM },
892 { 0xABF0, 0xABF9, LBP_NU },
893 { 0xAC00, 0xAC00, LBP_H2 },
894 { 0xAC01, 0xAC1B, LBP_H3 },
895 { 0xAC1C, 0xAC1C, LBP_H2 },
896 { 0xAC1D, 0xAC37, LBP_H3 },
897 { 0xAC38, 0xAC38, LBP_H2 },
898 { 0xAC39, 0xAC53, LBP_H3 },
899 { 0xAC54, 0xAC54, LBP_H2 },
900 { 0xAC55, 0xAC6F, LBP_H3 },
901 { 0xAC70, 0xAC70, LBP_H2 },
902 { 0xAC71, 0xAC8B, LBP_H3 },
903 { 0xAC8C, 0xAC8C, LBP_H2 },
904 { 0xAC8D, 0xACA7, LBP_H3 },
905 { 0xACA8, 0xACA8, LBP_H2 },
906 { 0xACA9, 0xACC3, LBP_H3 },
907 { 0xACC4, 0xACC4, LBP_H2 },
908 { 0xACC5, 0xACDF, LBP_H3 },
909 { 0xACE0, 0xACE0, LBP_H2 },
910 { 0xACE1, 0xACFB, LBP_H3 },
911 { 0xACFC, 0xACFC, LBP_H2 },
912 { 0xACFD, 0xAD17, LBP_H3 },
913 { 0xAD18, 0xAD18, LBP_H2 },
914 { 0xAD19, 0xAD33, LBP_H3 },
915 { 0xAD34, 0xAD34, LBP_H2 },
916 { 0xAD35, 0xAD4F, LBP_H3 },
917 { 0xAD50, 0xAD50, LBP_H2 },
918 { 0xAD51, 0xAD6B, LBP_H3 },
919 { 0xAD6C, 0xAD6C, LBP_H2 },
920 { 0xAD6D, 0xAD87, LBP_H3 },
921 { 0xAD88, 0xAD88, LBP_H2 },
922 { 0xAD89, 0xADA3, LBP_H3 },
923 { 0xADA4, 0xADA4, LBP_H2 },
924 { 0xADA5, 0xADBF, LBP_H3 },
925 { 0xADC0, 0xADC0, LBP_H2 },
926 { 0xADC1, 0xADDB, LBP_H3 },
927 { 0xADDC, 0xADDC, LBP_H2 },
928 { 0xADDD, 0xADF7, LBP_H3 },
929 { 0xADF8, 0xADF8, LBP_H2 },
930 { 0xADF9, 0xAE13, LBP_H3 },
931 { 0xAE14, 0xAE14, LBP_H2 },
932 { 0xAE15, 0xAE2F, LBP_H3 },
933 { 0xAE30, 0xAE30, LBP_H2 },
934 { 0xAE31, 0xAE4B, LBP_H3 },
935 { 0xAE4C, 0xAE4C, LBP_H2 },
936 { 0xAE4D, 0xAE67, LBP_H3 },
937 { 0xAE68, 0xAE68, LBP_H2 },
938 { 0xAE69, 0xAE83, LBP_H3 },
939 { 0xAE84, 0xAE84, LBP_H2 },
940 { 0xAE85, 0xAE9F, LBP_H3 },
941 { 0xAEA0, 0xAEA0, LBP_H2 },
942 { 0xAEA1, 0xAEBB, LBP_H3 },
943 { 0xAEBC, 0xAEBC, LBP_H2 },
944 { 0xAEBD, 0xAED7, LBP_H3 },
945 { 0xAED8, 0xAED8, LBP_H2 },
946 { 0xAED9, 0xAEF3, LBP_H3 },
947 { 0xAEF4, 0xAEF4, LBP_H2 },
948 { 0xAEF5, 0xAF0F, LBP_H3 },
949 { 0xAF10, 0xAF10, LBP_H2 },
950 { 0xAF11, 0xAF2B, LBP_H3 },
951 { 0xAF2C, 0xAF2C, LBP_H2 },
952 { 0xAF2D, 0xAF47, LBP_H3 },
953 { 0xAF48, 0xAF48, LBP_H2 },
954 { 0xAF49, 0xAF63, LBP_H3 },
955 { 0xAF64, 0xAF64, LBP_H2 },
956 { 0xAF65, 0xAF7F, LBP_H3 },
957 { 0xAF80, 0xAF80, LBP_H2 },
958 { 0xAF81, 0xAF9B, LBP_H3 },
959 { 0xAF9C, 0xAF9C, LBP_H2 },
960 { 0xAF9D, 0xAFB7, LBP_H3 },
961 { 0xAFB8, 0xAFB8, LBP_H2 },
962 { 0xAFB9, 0xAFD3, LBP_H3 },
963 { 0xAFD4, 0xAFD4, LBP_H2 },
964 { 0xAFD5, 0xAFEF, LBP_H3 },
965 { 0xAFF0, 0xAFF0, LBP_H2 },
966 { 0xAFF1, 0xB00B, LBP_H3 },
967 { 0xB00C, 0xB00C, LBP_H2 },
968 { 0xB00D, 0xB027, LBP_H3 },
969 { 0xB028, 0xB028, LBP_H2 },
970 { 0xB029, 0xB043, LBP_H3 },
971 { 0xB044, 0xB044, LBP_H2 },
972 { 0xB045, 0xB05F, LBP_H3 },
973 { 0xB060, 0xB060, LBP_H2 },
974 { 0xB061, 0xB07B, LBP_H3 },
975 { 0xB07C, 0xB07C, LBP_H2 },
976 { 0xB07D, 0xB097, LBP_H3 },
977 { 0xB098, 0xB098, LBP_H2 },
978 { 0xB099, 0xB0B3, LBP_H3 },
979 { 0xB0B4, 0xB0B4, LBP_H2 },
980 { 0xB0B5, 0xB0CF, LBP_H3 },
981 { 0xB0D0, 0xB0D0, LBP_H2 },
982 { 0xB0D1, 0xB0EB, LBP_H3 },
983 { 0xB0EC, 0xB0EC, LBP_H2 },
984 { 0xB0ED, 0xB107, LBP_H3 },
985 { 0xB108, 0xB108, LBP_H2 },
986 { 0xB109, 0xB123, LBP_H3 },
987 { 0xB124, 0xB124, LBP_H2 },
988 { 0xB125, 0xB13F, LBP_H3 },
989 { 0xB140, 0xB140, LBP_H2 },
990 { 0xB141, 0xB15B, LBP_H3 },
991 { 0xB15C, 0xB15C, LBP_H2 },
992 { 0xB15D, 0xB177, LBP_H3 },
993 { 0xB178, 0xB178, LBP_H2 },
994 { 0xB179, 0xB193, LBP_H3 },
995 { 0xB194, 0xB194, LBP_H2 },
996 { 0xB195, 0xB1AF, LBP_H3 },
997 { 0xB1B0, 0xB1B0, LBP_H2 },
998 { 0xB1B1, 0xB1CB, LBP_H3 },
999 { 0xB1CC, 0xB1CC, LBP_H2 },
1000 { 0xB1CD, 0xB1E7, LBP_H3 },
1001 { 0xB1E8, 0xB1E8, LBP_H2 },
1002 { 0xB1E9, 0xB203, LBP_H3 },
1003 { 0xB204, 0xB204, LBP_H2 },
1004 { 0xB205, 0xB21F, LBP_H3 },
1005 { 0xB220, 0xB220, LBP_H2 },
1006 { 0xB221, 0xB23B, LBP_H3 },
1007 { 0xB23C, 0xB23C, LBP_H2 },
1008 { 0xB23D, 0xB257, LBP_H3 },
1009 { 0xB258, 0xB258, LBP_H2 },
1010 { 0xB259, 0xB273, LBP_H3 },
1011 { 0xB274, 0xB274, LBP_H2 },
1012 { 0xB275, 0xB28F, LBP_H3 },
1013 { 0xB290, 0xB290, LBP_H2 },
1014 { 0xB291, 0xB2AB, LBP_H3 },
1015 { 0xB2AC, 0xB2AC, LBP_H2 },
1016 { 0xB2AD, 0xB2C7, LBP_H3 },
1017 { 0xB2C8, 0xB2C8, LBP_H2 },
1018 { 0xB2C9, 0xB2E3, LBP_H3 },
1019 { 0xB2E4, 0xB2E4, LBP_H2 },
1020 { 0xB2E5, 0xB2FF, LBP_H3 },
1021 { 0xB300, 0xB300, LBP_H2 },
1022 { 0xB301, 0xB31B, LBP_H3 },
1023 { 0xB31C, 0xB31C, LBP_H2 },
1024 { 0xB31D, 0xB337, LBP_H3 },
1025 { 0xB338, 0xB338, LBP_H2 },
1026 { 0xB339, 0xB353, LBP_H3 },
1027 { 0xB354, 0xB354, LBP_H2 },
1028 { 0xB355, 0xB36F, LBP_H3 },
1029 { 0xB370, 0xB370, LBP_H2 },
1030 { 0xB371, 0xB38B, LBP_H3 },
1031 { 0xB38C, 0xB38C, LBP_H2 },
1032 { 0xB38D, 0xB3A7, LBP_H3 },
1033 { 0xB3A8, 0xB3A8, LBP_H2 },
1034 { 0xB3A9, 0xB3C3, LBP_H3 },
1035 { 0xB3C4, 0xB3C4, LBP_H2 },
1036 { 0xB3C5, 0xB3DF, LBP_H3 },
1037 { 0xB3E0, 0xB3E0, LBP_H2 },
1038 { 0xB3E1, 0xB3FB, LBP_H3 },
1039 { 0xB3FC, 0xB3FC, LBP_H2 },
1040 { 0xB3FD, 0xB417, LBP_H3 },
1041 { 0xB418, 0xB418, LBP_H2 },
1042 { 0xB419, 0xB433, LBP_H3 },
1043 { 0xB434, 0xB434, LBP_H2 },
1044 { 0xB435, 0xB44F, LBP_H3 },
1045 { 0xB450, 0xB450, LBP_H2 },
1046 { 0xB451, 0xB46B, LBP_H3 },
1047 { 0xB46C, 0xB46C, LBP_H2 },
1048 { 0xB46D, 0xB487, LBP_H3 },
1049 { 0xB488, 0xB488, LBP_H2 },
1050 { 0xB489, 0xB4A3, LBP_H3 },
1051 { 0xB4A4, 0xB4A4, LBP_H2 },
1052 { 0xB4A5, 0xB4BF, LBP_H3 },
1053 { 0xB4C0, 0xB4C0, LBP_H2 },
1054 { 0xB4C1, 0xB4DB, LBP_H3 },
1055 { 0xB4DC, 0xB4DC, LBP_H2 },
1056 { 0xB4DD, 0xB4F7, LBP_H3 },
1057 { 0xB4F8, 0xB4F8, LBP_H2 },
1058 { 0xB4F9, 0xB513, LBP_H3 },
1059 { 0xB514, 0xB514, LBP_H2 },
1060 { 0xB515, 0xB52F, LBP_H3 },
1061 { 0xB530, 0xB530, LBP_H2 },
1062 { 0xB531, 0xB54B, LBP_H3 },
1063 { 0xB54C, 0xB54C, LBP_H2 },
1064 { 0xB54D, 0xB567, LBP_H3 },
1065 { 0xB568, 0xB568, LBP_H2 },
1066 { 0xB569, 0xB583, LBP_H3 },
1067 { 0xB584, 0xB584, LBP_H2 },
1068 { 0xB585, 0xB59F, LBP_H3 },
1069 { 0xB5A0, 0xB5A0, LBP_H2 },
1070 { 0xB5A1, 0xB5BB, LBP_H3 },
1071 { 0xB5BC, 0xB5BC, LBP_H2 },
1072 { 0xB5BD, 0xB5D7, LBP_H3 },
1073 { 0xB5D8, 0xB5D8, LBP_H2 },
1074 { 0xB5D9, 0xB5F3, LBP_H3 },
1075 { 0xB5F4, 0xB5F4, LBP_H2 },
1076 { 0xB5F5, 0xB60F, LBP_H3 },
1077 { 0xB610, 0xB610, LBP_H2 },
1078 { 0xB611, 0xB62B, LBP_H3 },
1079 { 0xB62C, 0xB62C, LBP_H2 },
1080 { 0xB62D, 0xB647, LBP_H3 },
1081 { 0xB648, 0xB648, LBP_H2 },
1082 { 0xB649, 0xB663, LBP_H3 },
1083 { 0xB664, 0xB664, LBP_H2 },
1084 { 0xB665, 0xB67F, LBP_H3 },
1085 { 0xB680, 0xB680, LBP_H2 },
1086 { 0xB681, 0xB69B, LBP_H3 },
1087 { 0xB69C, 0xB69C, LBP_H2 },
1088 { 0xB69D, 0xB6B7, LBP_H3 },
1089 { 0xB6B8, 0xB6B8, LBP_H2 },
1090 { 0xB6B9, 0xB6D3, LBP_H3 },
1091 { 0xB6D4, 0xB6D4, LBP_H2 },
1092 { 0xB6D5, 0xB6EF, LBP_H3 },
1093 { 0xB6F0, 0xB6F0, LBP_H2 },
1094 { 0xB6F1, 0xB70B, LBP_H3 },
1095 { 0xB70C, 0xB70C, LBP_H2 },
1096 { 0xB70D, 0xB727, LBP_H3 },
1097 { 0xB728, 0xB728, LBP_H2 },
1098 { 0xB729, 0xB743, LBP_H3 },
1099 { 0xB744, 0xB744, LBP_H2 },
1100 { 0xB745, 0xB75F, LBP_H3 },
1101 { 0xB760, 0xB760, LBP_H2 },
1102 { 0xB761, 0xB77B, LBP_H3 },
1103 { 0xB77C, 0xB77C, LBP_H2 },
1104 { 0xB77D, 0xB797, LBP_H3 },
1105 { 0xB798, 0xB798, LBP_H2 },
1106 { 0xB799, 0xB7B3, LBP_H3 },
1107 { 0xB7B4, 0xB7B4, LBP_H2 },
1108 { 0xB7B5, 0xB7CF, LBP_H3 },
1109 { 0xB7D0, 0xB7D0, LBP_H2 },
1110 { 0xB7D1, 0xB7EB, LBP_H3 },
1111 { 0xB7EC, 0xB7EC, LBP_H2 },
1112 { 0xB7ED, 0xB807, LBP_H3 },
1113 { 0xB808, 0xB808, LBP_H2 },
1114 { 0xB809, 0xB823, LBP_H3 },
1115 { 0xB824, 0xB824, LBP_H2 },
1116 { 0xB825, 0xB83F, LBP_H3 },
1117 { 0xB840, 0xB840, LBP_H2 },
1118 { 0xB841, 0xB85B, LBP_H3 },
1119 { 0xB85C, 0xB85C, LBP_H2 },
1120 { 0xB85D, 0xB877, LBP_H3 },
1121 { 0xB878, 0xB878, LBP_H2 },
1122 { 0xB879, 0xB893, LBP_H3 },
1123 { 0xB894, 0xB894, LBP_H2 },
1124 { 0xB895, 0xB8AF, LBP_H3 },
1125 { 0xB8B0, 0xB8B0, LBP_H2 },
1126 { 0xB8B1, 0xB8CB, LBP_H3 },
1127 { 0xB8CC, 0xB8CC, LBP_H2 },
1128 { 0xB8CD, 0xB8E7, LBP_H3 },
1129 { 0xB8E8, 0xB8E8, LBP_H2 },
1130 { 0xB8E9, 0xB903, LBP_H3 },
1131 { 0xB904, 0xB904, LBP_H2 },
1132 { 0xB905, 0xB91F, LBP_H3 },
1133 { 0xB920, 0xB920, LBP_H2 },
1134 { 0xB921, 0xB93B, LBP_H3 },
1135 { 0xB93C, 0xB93C, LBP_H2 },
1136 { 0xB93D, 0xB957, LBP_H3 },
1137 { 0xB958, 0xB958, LBP_H2 },
1138 { 0xB959, 0xB973, LBP_H3 },
1139 { 0xB974, 0xB974, LBP_H2 },
1140 { 0xB975, 0xB98F, LBP_H3 },
1141 { 0xB990, 0xB990, LBP_H2 },
1142 { 0xB991, 0xB9AB, LBP_H3 },
1143 { 0xB9AC, 0xB9AC, LBP_H2 },
1144 { 0xB9AD, 0xB9C7, LBP_H3 },
1145 { 0xB9C8, 0xB9C8, LBP_H2 },
1146 { 0xB9C9, 0xB9E3, LBP_H3 },
1147 { 0xB9E4, 0xB9E4, LBP_H2 },
1148 { 0xB9E5, 0xB9FF, LBP_H3 },
1149 { 0xBA00, 0xBA00, LBP_H2 },
1150 { 0xBA01, 0xBA1B, LBP_H3 },
1151 { 0xBA1C, 0xBA1C, LBP_H2 },
1152 { 0xBA1D, 0xBA37, LBP_H3 },
1153 { 0xBA38, 0xBA38, LBP_H2 },
1154 { 0xBA39, 0xBA53, LBP_H3 },
1155 { 0xBA54, 0xBA54, LBP_H2 },
1156 { 0xBA55, 0xBA6F, LBP_H3 },
1157 { 0xBA70, 0xBA70, LBP_H2 },
1158 { 0xBA71, 0xBA8B, LBP_H3 },
1159 { 0xBA8C, 0xBA8C, LBP_H2 },
1160 { 0xBA8D, 0xBAA7, LBP_H3 },
1161 { 0xBAA8, 0xBAA8, LBP_H2 },
1162 { 0xBAA9, 0xBAC3, LBP_H3 },
1163 { 0xBAC4, 0xBAC4, LBP_H2 },
1164 { 0xBAC5, 0xBADF, LBP_H3 },
1165 { 0xBAE0, 0xBAE0, LBP_H2 },
1166 { 0xBAE1, 0xBAFB, LBP_H3 },
1167 { 0xBAFC, 0xBAFC, LBP_H2 },
1168 { 0xBAFD, 0xBB17, LBP_H3 },
1169 { 0xBB18, 0xBB18, LBP_H2 },
1170 { 0xBB19, 0xBB33, LBP_H3 },
1171 { 0xBB34, 0xBB34, LBP_H2 },
1172 { 0xBB35, 0xBB4F, LBP_H3 },
1173 { 0xBB50, 0xBB50, LBP_H2 },
1174 { 0xBB51, 0xBB6B, LBP_H3 },
1175 { 0xBB6C, 0xBB6C, LBP_H2 },
1176 { 0xBB6D, 0xBB87, LBP_H3 },
1177 { 0xBB88, 0xBB88, LBP_H2 },
1178 { 0xBB89, 0xBBA3, LBP_H3 },
1179 { 0xBBA4, 0xBBA4, LBP_H2 },
1180 { 0xBBA5, 0xBBBF, LBP_H3 },
1181 { 0xBBC0, 0xBBC0, LBP_H2 },
1182 { 0xBBC1, 0xBBDB, LBP_H3 },
1183 { 0xBBDC, 0xBBDC, LBP_H2 },
1184 { 0xBBDD, 0xBBF7, LBP_H3 },
1185 { 0xBBF8, 0xBBF8, LBP_H2 },
1186 { 0xBBF9, 0xBC13, LBP_H3 },
1187 { 0xBC14, 0xBC14, LBP_H2 },
1188 { 0xBC15, 0xBC2F, LBP_H3 },
1189 { 0xBC30, 0xBC30, LBP_H2 },
1190 { 0xBC31, 0xBC4B, LBP_H3 },
1191 { 0xBC4C, 0xBC4C, LBP_H2 },
1192 { 0xBC4D, 0xBC67, LBP_H3 },
1193 { 0xBC68, 0xBC68, LBP_H2 },
1194 { 0xBC69, 0xBC83, LBP_H3 },
1195 { 0xBC84, 0xBC84, LBP_H2 },
1196 { 0xBC85, 0xBC9F, LBP_H3 },
1197 { 0xBCA0, 0xBCA0, LBP_H2 },
1198 { 0xBCA1, 0xBCBB, LBP_H3 },
1199 { 0xBCBC, 0xBCBC, LBP_H2 },
1200 { 0xBCBD, 0xBCD7, LBP_H3 },
1201 { 0xBCD8, 0xBCD8, LBP_H2 },
1202 { 0xBCD9, 0xBCF3, LBP_H3 },
1203 { 0xBCF4, 0xBCF4, LBP_H2 },
1204 { 0xBCF5, 0xBD0F, LBP_H3 },
1205 { 0xBD10, 0xBD10, LBP_H2 },
1206 { 0xBD11, 0xBD2B, LBP_H3 },
1207 { 0xBD2C, 0xBD2C, LBP_H2 },
1208 { 0xBD2D, 0xBD47, LBP_H3 },
1209 { 0xBD48, 0xBD48, LBP_H2 },
1210 { 0xBD49, 0xBD63, LBP_H3 },
1211 { 0xBD64, 0xBD64, LBP_H2 },
1212 { 0xBD65, 0xBD7F, LBP_H3 },
1213 { 0xBD80, 0xBD80, LBP_H2 },
1214 { 0xBD81, 0xBD9B, LBP_H3 },
1215 { 0xBD9C, 0xBD9C, LBP_H2 },
1216 { 0xBD9D, 0xBDB7, LBP_H3 },
1217 { 0xBDB8, 0xBDB8, LBP_H2 },
1218 { 0xBDB9, 0xBDD3, LBP_H3 },
1219 { 0xBDD4, 0xBDD4, LBP_H2 },
1220 { 0xBDD5, 0xBDEF, LBP_H3 },
1221 { 0xBDF0, 0xBDF0, LBP_H2 },
1222 { 0xBDF1, 0xBE0B, LBP_H3 },
1223 { 0xBE0C, 0xBE0C, LBP_H2 },
1224 { 0xBE0D, 0xBE27, LBP_H3 },
1225 { 0xBE28, 0xBE28, LBP_H2 },
1226 { 0xBE29, 0xBE43, LBP_H3 },
1227 { 0xBE44, 0xBE44, LBP_H2 },
1228 { 0xBE45, 0xBE5F, LBP_H3 },
1229 { 0xBE60, 0xBE60, LBP_H2 },
1230 { 0xBE61, 0xBE7B, LBP_H3 },
1231 { 0xBE7C, 0xBE7C, LBP_H2 },
1232 { 0xBE7D, 0xBE97, LBP_H3 },
1233 { 0xBE98, 0xBE98, LBP_H2 },
1234 { 0xBE99, 0xBEB3, LBP_H3 },
1235 { 0xBEB4, 0xBEB4, LBP_H2 },
1236 { 0xBEB5, 0xBECF, LBP_H3 },
1237 { 0xBED0, 0xBED0, LBP_H2 },
1238 { 0xBED1, 0xBEEB, LBP_H3 },
1239 { 0xBEEC, 0xBEEC, LBP_H2 },
1240 { 0xBEED, 0xBF07, LBP_H3 },
1241 { 0xBF08, 0xBF08, LBP_H2 },
1242 { 0xBF09, 0xBF23, LBP_H3 },
1243 { 0xBF24, 0xBF24, LBP_H2 },
1244 { 0xBF25, 0xBF3F, LBP_H3 },
1245 { 0xBF40, 0xBF40, LBP_H2 },
1246 { 0xBF41, 0xBF5B, LBP_H3 },
1247 { 0xBF5C, 0xBF5C, LBP_H2 },
1248 { 0xBF5D, 0xBF77, LBP_H3 },
1249 { 0xBF78, 0xBF78, LBP_H2 },
1250 { 0xBF79, 0xBF93, LBP_H3 },
1251 { 0xBF94, 0xBF94, LBP_H2 },
1252 { 0xBF95, 0xBFAF, LBP_H3 },
1253 { 0xBFB0, 0xBFB0, LBP_H2 },
1254 { 0xBFB1, 0xBFCB, LBP_H3 },
1255 { 0xBFCC, 0xBFCC, LBP_H2 },
1256 { 0xBFCD, 0xBFE7, LBP_H3 },
1257 { 0xBFE8, 0xBFE8, LBP_H2 },
1258 { 0xBFE9, 0xC003, LBP_H3 },
1259 { 0xC004, 0xC004, LBP_H2 },
1260 { 0xC005, 0xC01F, LBP_H3 },
1261 { 0xC020, 0xC020, LBP_H2 },
1262 { 0xC021, 0xC03B, LBP_H3 },
1263 { 0xC03C, 0xC03C, LBP_H2 },
1264 { 0xC03D, 0xC057, LBP_H3 },
1265 { 0xC058, 0xC058, LBP_H2 },
1266 { 0xC059, 0xC073, LBP_H3 },
1267 { 0xC074, 0xC074, LBP_H2 },
1268 { 0xC075, 0xC08F, LBP_H3 },
1269 { 0xC090, 0xC090, LBP_H2 },
1270 { 0xC091, 0xC0AB, LBP_H3 },
1271 { 0xC0AC, 0xC0AC, LBP_H2 },
1272 { 0xC0AD, 0xC0C7, LBP_H3 },
1273 { 0xC0C8, 0xC0C8, LBP_H2 },
1274 { 0xC0C9, 0xC0E3, LBP_H3 },
1275 { 0xC0E4, 0xC0E4, LBP_H2 },
1276 { 0xC0E5, 0xC0FF, LBP_H3 },
1277 { 0xC100, 0xC100, LBP_H2 },
1278 { 0xC101, 0xC11B, LBP_H3 },
1279 { 0xC11C, 0xC11C, LBP_H2 },
1280 { 0xC11D, 0xC137, LBP_H3 },
1281 { 0xC138, 0xC138, LBP_H2 },
1282 { 0xC139, 0xC153, LBP_H3 },
1283 { 0xC154, 0xC154, LBP_H2 },
1284 { 0xC155, 0xC16F, LBP_H3 },
1285 { 0xC170, 0xC170, LBP_H2 },
1286 { 0xC171, 0xC18B, LBP_H3 },
1287 { 0xC18C, 0xC18C, LBP_H2 },
1288 { 0xC18D, 0xC1A7, LBP_H3 },
1289 { 0xC1A8, 0xC1A8, LBP_H2 },
1290 { 0xC1A9, 0xC1C3, LBP_H3 },
1291 { 0xC1C4, 0xC1C4, LBP_H2 },
1292 { 0xC1C5, 0xC1DF, LBP_H3 },
1293 { 0xC1E0, 0xC1E0, LBP_H2 },
1294 { 0xC1E1, 0xC1FB, LBP_H3 },
1295 { 0xC1FC, 0xC1FC, LBP_H2 },
1296 { 0xC1FD, 0xC217, LBP_H3 },
1297 { 0xC218, 0xC218, LBP_H2 },
1298 { 0xC219, 0xC233, LBP_H3 },
1299 { 0xC234, 0xC234, LBP_H2 },
1300 { 0xC235, 0xC24F, LBP_H3 },
1301 { 0xC250, 0xC250, LBP_H2 },
1302 { 0xC251, 0xC26B, LBP_H3 },
1303 { 0xC26C, 0xC26C, LBP_H2 },
1304 { 0xC26D, 0xC287, LBP_H3 },
1305 { 0xC288, 0xC288, LBP_H2 },
1306 { 0xC289, 0xC2A3, LBP_H3 },
1307 { 0xC2A4, 0xC2A4, LBP_H2 },
1308 { 0xC2A5, 0xC2BF, LBP_H3 },
1309 { 0xC2C0, 0xC2C0, LBP_H2 },
1310 { 0xC2C1, 0xC2DB, LBP_H3 },
1311 { 0xC2DC, 0xC2DC, LBP_H2 },
1312 { 0xC2DD, 0xC2F7, LBP_H3 },
1313 { 0xC2F8, 0xC2F8, LBP_H2 },
1314 { 0xC2F9, 0xC313, LBP_H3 },
1315 { 0xC314, 0xC314, LBP_H2 },
1316 { 0xC315, 0xC32F, LBP_H3 },
1317 { 0xC330, 0xC330, LBP_H2 },
1318 { 0xC331, 0xC34B, LBP_H3 },
1319 { 0xC34C, 0xC34C, LBP_H2 },
1320 { 0xC34D, 0xC367, LBP_H3 },
1321 { 0xC368, 0xC368, LBP_H2 },
1322 { 0xC369, 0xC383, LBP_H3 },
1323 { 0xC384, 0xC384, LBP_H2 },
1324 { 0xC385, 0xC39F, LBP_H3 },
1325 { 0xC3A0, 0xC3A0, LBP_H2 },
1326 { 0xC3A1, 0xC3BB, LBP_H3 },
1327 { 0xC3BC, 0xC3BC, LBP_H2 },
1328 { 0xC3BD, 0xC3D7, LBP_H3 },
1329 { 0xC3D8, 0xC3D8, LBP_H2 },
1330 { 0xC3D9, 0xC3F3, LBP_H3 },
1331 { 0xC3F4, 0xC3F4, LBP_H2 },
1332 { 0xC3F5, 0xC40F, LBP_H3 },
1333 { 0xC410, 0xC410, LBP_H2 },
1334 { 0xC411, 0xC42B, LBP_H3 },
1335 { 0xC42C, 0xC42C, LBP_H2 },
1336 { 0xC42D, 0xC447, LBP_H3 },
1337 { 0xC448, 0xC448, LBP_H2 },
1338 { 0xC449, 0xC463, LBP_H3 },
1339 { 0xC464, 0xC464, LBP_H2 },
1340 { 0xC465, 0xC47F, LBP_H3 },
1341 { 0xC480, 0xC480, LBP_H2 },
1342 { 0xC481, 0xC49B, LBP_H3 },
1343 { 0xC49C, 0xC49C, LBP_H2 },
1344 { 0xC49D, 0xC4B7, LBP_H3 },
1345 { 0xC4B8, 0xC4B8, LBP_H2 },
1346 { 0xC4B9, 0xC4D3, LBP_H3 },
1347 { 0xC4D4, 0xC4D4, LBP_H2 },
1348 { 0xC4D5, 0xC4EF, LBP_H3 },
1349 { 0xC4F0, 0xC4F0, LBP_H2 },
1350 { 0xC4F1, 0xC50B, LBP_H3 },
1351 { 0xC50C, 0xC50C, LBP_H2 },
1352 { 0xC50D, 0xC527, LBP_H3 },
1353 { 0xC528, 0xC528, LBP_H2 },
1354 { 0xC529, 0xC543, LBP_H3 },
1355 { 0xC544, 0xC544, LBP_H2 },
1356 { 0xC545, 0xC55F, LBP_H3 },
1357 { 0xC560, 0xC560, LBP_H2 },
1358 { 0xC561, 0xC57B, LBP_H3 },
1359 { 0xC57C, 0xC57C, LBP_H2 },
1360 { 0xC57D, 0xC597, LBP_H3 },
1361 { 0xC598, 0xC598, LBP_H2 },
1362 { 0xC599, 0xC5B3, LBP_H3 },
1363 { 0xC5B4, 0xC5B4, LBP_H2 },
1364 { 0xC5B5, 0xC5CF, LBP_H3 },
1365 { 0xC5D0, 0xC5D0, LBP_H2 },
1366 { 0xC5D1, 0xC5EB, LBP_H3 },
1367 { 0xC5EC, 0xC5EC, LBP_H2 },
1368 { 0xC5ED, 0xC607, LBP_H3 },
1369 { 0xC608, 0xC608, LBP_H2 },
1370 { 0xC609, 0xC623, LBP_H3 },
1371 { 0xC624, 0xC624, LBP_H2 },
1372 { 0xC625, 0xC63F, LBP_H3 },
1373 { 0xC640, 0xC640, LBP_H2 },
1374 { 0xC641, 0xC65B, LBP_H3 },
1375 { 0xC65C, 0xC65C, LBP_H2 },
1376 { 0xC65D, 0xC677, LBP_H3 },
1377 { 0xC678, 0xC678, LBP_H2 },
1378 { 0xC679, 0xC693, LBP_H3 },
1379 { 0xC694, 0xC694, LBP_H2 },
1380 { 0xC695, 0xC6AF, LBP_H3 },
1381 { 0xC6B0, 0xC6B0, LBP_H2 },
1382 { 0xC6B1, 0xC6CB, LBP_H3 },
1383 { 0xC6CC, 0xC6CC, LBP_H2 },
1384 { 0xC6CD, 0xC6E7, LBP_H3 },
1385 { 0xC6E8, 0xC6E8, LBP_H2 },
1386 { 0xC6E9, 0xC703, LBP_H3 },
1387 { 0xC704, 0xC704, LBP_H2 },
1388 { 0xC705, 0xC71F, LBP_H3 },
1389 { 0xC720, 0xC720, LBP_H2 },
1390 { 0xC721, 0xC73B, LBP_H3 },
1391 { 0xC73C, 0xC73C, LBP_H2 },
1392 { 0xC73D, 0xC757, LBP_H3 },
1393 { 0xC758, 0xC758, LBP_H2 },
1394 { 0xC759, 0xC773, LBP_H3 },
1395 { 0xC774, 0xC774, LBP_H2 },
1396 { 0xC775, 0xC78F, LBP_H3 },
1397 { 0xC790, 0xC790, LBP_H2 },
1398 { 0xC791, 0xC7AB, LBP_H3 },
1399 { 0xC7AC, 0xC7AC, LBP_H2 },
1400 { 0xC7AD, 0xC7C7, LBP_H3 },
1401 { 0xC7C8, 0xC7C8, LBP_H2 },
1402 { 0xC7C9, 0xC7E3, LBP_H3 },
1403 { 0xC7E4, 0xC7E4, LBP_H2 },
1404 { 0xC7E5, 0xC7FF, LBP_H3 },
1405 { 0xC800, 0xC800, LBP_H2 },
1406 { 0xC801, 0xC81B, LBP_H3 },
1407 { 0xC81C, 0xC81C, LBP_H2 },
1408 { 0xC81D, 0xC837, LBP_H3 },
1409 { 0xC838, 0xC838, LBP_H2 },
1410 { 0xC839, 0xC853, LBP_H3 },
1411 { 0xC854, 0xC854, LBP_H2 },
1412 { 0xC855, 0xC86F, LBP_H3 },
1413 { 0xC870, 0xC870, LBP_H2 },
1414 { 0xC871, 0xC88B, LBP_H3 },
1415 { 0xC88C, 0xC88C, LBP_H2 },
1416 { 0xC88D, 0xC8A7, LBP_H3 },
1417 { 0xC8A8, 0xC8A8, LBP_H2 },
1418 { 0xC8A9, 0xC8C3, LBP_H3 },
1419 { 0xC8C4, 0xC8C4, LBP_H2 },
1420 { 0xC8C5, 0xC8DF, LBP_H3 },
1421 { 0xC8E0, 0xC8E0, LBP_H2 },
1422 { 0xC8E1, 0xC8FB, LBP_H3 },
1423 { 0xC8FC, 0xC8FC, LBP_H2 },
1424 { 0xC8FD, 0xC917, LBP_H3 },
1425 { 0xC918, 0xC918, LBP_H2 },
1426 { 0xC919, 0xC933, LBP_H3 },
1427 { 0xC934, 0xC934, LBP_H2 },
1428 { 0xC935, 0xC94F, LBP_H3 },
1429 { 0xC950, 0xC950, LBP_H2 },
1430 { 0xC951, 0xC96B, LBP_H3 },
1431 { 0xC96C, 0xC96C, LBP_H2 },
1432 { 0xC96D, 0xC987, LBP_H3 },
1433 { 0xC988, 0xC988, LBP_H2 },
1434 { 0xC989, 0xC9A3, LBP_H3 },
1435 { 0xC9A4, 0xC9A4, LBP_H2 },
1436 { 0xC9A5, 0xC9BF, LBP_H3 },
1437 { 0xC9C0, 0xC9C0, LBP_H2 },
1438 { 0xC9C1, 0xC9DB, LBP_H3 },
1439 { 0xC9DC, 0xC9DC, LBP_H2 },
1440 { 0xC9DD, 0xC9F7, LBP_H3 },
1441 { 0xC9F8, 0xC9F8, LBP_H2 },
1442 { 0xC9F9, 0xCA13, LBP_H3 },
1443 { 0xCA14, 0xCA14, LBP_H2 },
1444 { 0xCA15, 0xCA2F, LBP_H3 },
1445 { 0xCA30, 0xCA30, LBP_H2 },
1446 { 0xCA31, 0xCA4B, LBP_H3 },
1447 { 0xCA4C, 0xCA4C, LBP_H2 },
1448 { 0xCA4D, 0xCA67, LBP_H3 },
1449 { 0xCA68, 0xCA68, LBP_H2 },
1450 { 0xCA69, 0xCA83, LBP_H3 },
1451 { 0xCA84, 0xCA84, LBP_H2 },
1452 { 0xCA85, 0xCA9F, LBP_H3 },
1453 { 0xCAA0, 0xCAA0, LBP_H2 },
1454 { 0xCAA1, 0xCABB, LBP_H3 },
1455 { 0xCABC, 0xCABC, LBP_H2 },
1456 { 0xCABD, 0xCAD7, LBP_H3 },
1457 { 0xCAD8, 0xCAD8, LBP_H2 },
1458 { 0xCAD9, 0xCAF3, LBP_H3 },
1459 { 0xCAF4, 0xCAF4, LBP_H2 },
1460 { 0xCAF5, 0xCB0F, LBP_H3 },
1461 { 0xCB10, 0xCB10, LBP_H2 },
1462 { 0xCB11, 0xCB2B, LBP_H3 },
1463 { 0xCB2C, 0xCB2C, LBP_H2 },
1464 { 0xCB2D, 0xCB47, LBP_H3 },
1465 { 0xCB48, 0xCB48, LBP_H2 },
1466 { 0xCB49, 0xCB63, LBP_H3 },
1467 { 0xCB64, 0xCB64, LBP_H2 },
1468 { 0xCB65, 0xCB7F, LBP_H3 },
1469 { 0xCB80, 0xCB80, LBP_H2 },
1470 { 0xCB81, 0xCB9B, LBP_H3 },
1471 { 0xCB9C, 0xCB9C, LBP_H2 },
1472 { 0xCB9D, 0xCBB7, LBP_H3 },
1473 { 0xCBB8, 0xCBB8, LBP_H2 },
1474 { 0xCBB9, 0xCBD3, LBP_H3 },
1475 { 0xCBD4, 0xCBD4, LBP_H2 },
1476 { 0xCBD5, 0xCBEF, LBP_H3 },
1477 { 0xCBF0, 0xCBF0, LBP_H2 },
1478 { 0xCBF1, 0xCC0B, LBP_H3 },
1479 { 0xCC0C, 0xCC0C, LBP_H2 },
1480 { 0xCC0D, 0xCC27, LBP_H3 },
1481 { 0xCC28, 0xCC28, LBP_H2 },
1482 { 0xCC29, 0xCC43, LBP_H3 },
1483 { 0xCC44, 0xCC44, LBP_H2 },
1484 { 0xCC45, 0xCC5F, LBP_H3 },
1485 { 0xCC60, 0xCC60, LBP_H2 },
1486 { 0xCC61, 0xCC7B, LBP_H3 },
1487 { 0xCC7C, 0xCC7C, LBP_H2 },
1488 { 0xCC7D, 0xCC97, LBP_H3 },
1489 { 0xCC98, 0xCC98, LBP_H2 },
1490 { 0xCC99, 0xCCB3, LBP_H3 },
1491 { 0xCCB4, 0xCCB4, LBP_H2 },
1492 { 0xCCB5, 0xCCCF, LBP_H3 },
1493 { 0xCCD0, 0xCCD0, LBP_H2 },
1494 { 0xCCD1, 0xCCEB, LBP_H3 },
1495 { 0xCCEC, 0xCCEC, LBP_H2 },
1496 { 0xCCED, 0xCD07, LBP_H3 },
1497 { 0xCD08, 0xCD08, LBP_H2 },
1498 { 0xCD09, 0xCD23, LBP_H3 },
1499 { 0xCD24, 0xCD24, LBP_H2 },
1500 { 0xCD25, 0xCD3F, LBP_H3 },
1501 { 0xCD40, 0xCD40, LBP_H2 },
1502 { 0xCD41, 0xCD5B, LBP_H3 },
1503 { 0xCD5C, 0xCD5C, LBP_H2 },
1504 { 0xCD5D, 0xCD77, LBP_H3 },
1505 { 0xCD78, 0xCD78, LBP_H2 },
1506 { 0xCD79, 0xCD93, LBP_H3 },
1507 { 0xCD94, 0xCD94, LBP_H2 },
1508 { 0xCD95, 0xCDAF, LBP_H3 },
1509 { 0xCDB0, 0xCDB0, LBP_H2 },
1510 { 0xCDB1, 0xCDCB, LBP_H3 },
1511 { 0xCDCC, 0xCDCC, LBP_H2 },
1512 { 0xCDCD, 0xCDE7, LBP_H3 },
1513 { 0xCDE8, 0xCDE8, LBP_H2 },
1514 { 0xCDE9, 0xCE03, LBP_H3 },
1515 { 0xCE04, 0xCE04, LBP_H2 },
1516 { 0xCE05, 0xCE1F, LBP_H3 },
1517 { 0xCE20, 0xCE20, LBP_H2 },
1518 { 0xCE21, 0xCE3B, LBP_H3 },
1519 { 0xCE3C, 0xCE3C, LBP_H2 },
1520 { 0xCE3D, 0xCE57, LBP_H3 },
1521 { 0xCE58, 0xCE58, LBP_H2 },
1522 { 0xCE59, 0xCE73, LBP_H3 },
1523 { 0xCE74, 0xCE74, LBP_H2 },
1524 { 0xCE75, 0xCE8F, LBP_H3 },
1525 { 0xCE90, 0xCE90, LBP_H2 },
1526 { 0xCE91, 0xCEAB, LBP_H3 },
1527 { 0xCEAC, 0xCEAC, LBP_H2 },
1528 { 0xCEAD, 0xCEC7, LBP_H3 },
1529 { 0xCEC8, 0xCEC8, LBP_H2 },
1530 { 0xCEC9, 0xCEE3, LBP_H3 },
1531 { 0xCEE4, 0xCEE4, LBP_H2 },
1532 { 0xCEE5, 0xCEFF, LBP_H3 },
1533 { 0xCF00, 0xCF00, LBP_H2 },
1534 { 0xCF01, 0xCF1B, LBP_H3 },
1535 { 0xCF1C, 0xCF1C, LBP_H2 },
1536 { 0xCF1D, 0xCF37, LBP_H3 },
1537 { 0xCF38, 0xCF38, LBP_H2 },
1538 { 0xCF39, 0xCF53, LBP_H3 },
1539 { 0xCF54, 0xCF54, LBP_H2 },
1540 { 0xCF55, 0xCF6F, LBP_H3 },
1541 { 0xCF70, 0xCF70, LBP_H2 },
1542 { 0xCF71, 0xCF8B, LBP_H3 },
1543 { 0xCF8C, 0xCF8C, LBP_H2 },
1544 { 0xCF8D, 0xCFA7, LBP_H3 },
1545 { 0xCFA8, 0xCFA8, LBP_H2 },
1546 { 0xCFA9, 0xCFC3, LBP_H3 },
1547 { 0xCFC4, 0xCFC4, LBP_H2 },
1548 { 0xCFC5, 0xCFDF, LBP_H3 },
1549 { 0xCFE0, 0xCFE0, LBP_H2 },
1550 { 0xCFE1, 0xCFFB, LBP_H3 },
1551 { 0xCFFC, 0xCFFC, LBP_H2 },
1552 { 0xCFFD, 0xD017, LBP_H3 },
1553 { 0xD018, 0xD018, LBP_H2 },
1554 { 0xD019, 0xD033, LBP_H3 },
1555 { 0xD034, 0xD034, LBP_H2 },
1556 { 0xD035, 0xD04F, LBP_H3 },
1557 { 0xD050, 0xD050, LBP_H2 },
1558 { 0xD051, 0xD06B, LBP_H3 },
1559 { 0xD06C, 0xD06C, LBP_H2 },
1560 { 0xD06D, 0xD087, LBP_H3 },
1561 { 0xD088, 0xD088, LBP_H2 },
1562 { 0xD089, 0xD0A3, LBP_H3 },
1563 { 0xD0A4, 0xD0A4, LBP_H2 },
1564 { 0xD0A5, 0xD0BF, LBP_H3 },
1565 { 0xD0C0, 0xD0C0, LBP_H2 },
1566 { 0xD0C1, 0xD0DB, LBP_H3 },
1567 { 0xD0DC, 0xD0DC, LBP_H2 },
1568 { 0xD0DD, 0xD0F7, LBP_H3 },
1569 { 0xD0F8, 0xD0F8, LBP_H2 },
1570 { 0xD0F9, 0xD113, LBP_H3 },
1571 { 0xD114, 0xD114, LBP_H2 },
1572 { 0xD115, 0xD12F, LBP_H3 },
1573 { 0xD130, 0xD130, LBP_H2 },
1574 { 0xD131, 0xD14B, LBP_H3 },
1575 { 0xD14C, 0xD14C, LBP_H2 },
1576 { 0xD14D, 0xD167, LBP_H3 },
1577 { 0xD168, 0xD168, LBP_H2 },
1578 { 0xD169, 0xD183, LBP_H3 },
1579 { 0xD184, 0xD184, LBP_H2 },
1580 { 0xD185, 0xD19F, LBP_H3 },
1581 { 0xD1A0, 0xD1A0, LBP_H2 },
1582 { 0xD1A1, 0xD1BB, LBP_H3 },
1583 { 0xD1BC, 0xD1BC, LBP_H2 },
1584 { 0xD1BD, 0xD1D7, LBP_H3 },
1585 { 0xD1D8, 0xD1D8, LBP_H2 },
1586 { 0xD1D9, 0xD1F3, LBP_H3 },
1587 { 0xD1F4, 0xD1F4, LBP_H2 },
1588 { 0xD1F5, 0xD20F, LBP_H3 },
1589 { 0xD210, 0xD210, LBP_H2 },
1590 { 0xD211, 0xD22B, LBP_H3 },
1591 { 0xD22C, 0xD22C, LBP_H2 },
1592 { 0xD22D, 0xD247, LBP_H3 },
1593 { 0xD248, 0xD248, LBP_H2 },
1594 { 0xD249, 0xD263, LBP_H3 },
1595 { 0xD264, 0xD264, LBP_H2 },
1596 { 0xD265, 0xD27F, LBP_H3 },
1597 { 0xD280, 0xD280, LBP_H2 },
1598 { 0xD281, 0xD29B, LBP_H3 },
1599 { 0xD29C, 0xD29C, LBP_H2 },
1600 { 0xD29D, 0xD2B7, LBP_H3 },
1601 { 0xD2B8, 0xD2B8, LBP_H2 },
1602 { 0xD2B9, 0xD2D3, LBP_H3 },
1603 { 0xD2D4, 0xD2D4, LBP_H2 },
1604 { 0xD2D5, 0xD2EF, LBP_H3 },
1605 { 0xD2F0, 0xD2F0, LBP_H2 },
1606 { 0xD2F1, 0xD30B, LBP_H3 },
1607 { 0xD30C, 0xD30C, LBP_H2 },
1608 { 0xD30D, 0xD327, LBP_H3 },
1609 { 0xD328, 0xD328, LBP_H2 },
1610 { 0xD329, 0xD343, LBP_H3 },
1611 { 0xD344, 0xD344, LBP_H2 },
1612 { 0xD345, 0xD35F, LBP_H3 },
1613 { 0xD360, 0xD360, LBP_H2 },
1614 { 0xD361, 0xD37B, LBP_H3 },
1615 { 0xD37C, 0xD37C, LBP_H2 },
1616 { 0xD37D, 0xD397, LBP_H3 },
1617 { 0xD398, 0xD398, LBP_H2 },
1618 { 0xD399, 0xD3B3, LBP_H3 },
1619 { 0xD3B4, 0xD3B4, LBP_H2 },
1620 { 0xD3B5, 0xD3CF, LBP_H3 },
1621 { 0xD3D0, 0xD3D0, LBP_H2 },
1622 { 0xD3D1, 0xD3EB, LBP_H3 },
1623 { 0xD3EC, 0xD3EC, LBP_H2 },
1624 { 0xD3ED, 0xD407, LBP_H3 },
1625 { 0xD408, 0xD408, LBP_H2 },
1626 { 0xD409, 0xD423, LBP_H3 },
1627 { 0xD424, 0xD424, LBP_H2 },
1628 { 0xD425, 0xD43F, LBP_H3 },
1629 { 0xD440, 0xD440, LBP_H2 },
1630 { 0xD441, 0xD45B, LBP_H3 },
1631 { 0xD45C, 0xD45C, LBP_H2 },
1632 { 0xD45D, 0xD477, LBP_H3 },
1633 { 0xD478, 0xD478, LBP_H2 },
1634 { 0xD479, 0xD493, LBP_H3 },
1635 { 0xD494, 0xD494, LBP_H2 },
1636 { 0xD495, 0xD4AF, LBP_H3 },
1637 { 0xD4B0, 0xD4B0, LBP_H2 },
1638 { 0xD4B1, 0xD4CB, LBP_H3 },
1639 { 0xD4CC, 0xD4CC, LBP_H2 },
1640 { 0xD4CD, 0xD4E7, LBP_H3 },
1641 { 0xD4E8, 0xD4E8, LBP_H2 },
1642 { 0xD4E9, 0xD503, LBP_H3 },
1643 { 0xD504, 0xD504, LBP_H2 },
1644 { 0xD505, 0xD51F, LBP_H3 },
1645 { 0xD520, 0xD520, LBP_H2 },
1646 { 0xD521, 0xD53B, LBP_H3 },
1647 { 0xD53C, 0xD53C, LBP_H2 },
1648 { 0xD53D, 0xD557, LBP_H3 },
1649 { 0xD558, 0xD558, LBP_H2 },
1650 { 0xD559, 0xD573, LBP_H3 },
1651 { 0xD574, 0xD574, LBP_H2 },
1652 { 0xD575, 0xD58F, LBP_H3 },
1653 { 0xD590, 0xD590, LBP_H2 },
1654 { 0xD591, 0xD5AB, LBP_H3 },
1655 { 0xD5AC, 0xD5AC, LBP_H2 },
1656 { 0xD5AD, 0xD5C7, LBP_H3 },
1657 { 0xD5C8, 0xD5C8, LBP_H2 },
1658 { 0xD5C9, 0xD5E3, LBP_H3 },
1659 { 0xD5E4, 0xD5E4, LBP_H2 },
1660 { 0xD5E5, 0xD5FF, LBP_H3 },
1661 { 0xD600, 0xD600, LBP_H2 },
1662 { 0xD601, 0xD61B, LBP_H3 },
1663 { 0xD61C, 0xD61C, LBP_H2 },
1664 { 0xD61D, 0xD637, LBP_H3 },
1665 { 0xD638, 0xD638, LBP_H2 },
1666 { 0xD639, 0xD653, LBP_H3 },
1667 { 0xD654, 0xD654, LBP_H2 },
1668 { 0xD655, 0xD66F, LBP_H3 },
1669 { 0xD670, 0xD670, LBP_H2 },
1670 { 0xD671, 0xD68B, LBP_H3 },
1671 { 0xD68C, 0xD68C, LBP_H2 },
1672 { 0xD68D, 0xD6A7, LBP_H3 },
1673 { 0xD6A8, 0xD6A8, LBP_H2 },
1674 { 0xD6A9, 0xD6C3, LBP_H3 },
1675 { 0xD6C4, 0xD6C4, LBP_H2 },
1676 { 0xD6C5, 0xD6DF, LBP_H3 },
1677 { 0xD6E0, 0xD6E0, LBP_H2 },
1678 { 0xD6E1, 0xD6FB, LBP_H3 },
1679 { 0xD6FC, 0xD6FC, LBP_H2 },
1680 { 0xD6FD, 0xD717, LBP_H3 },
1681 { 0xD718, 0xD718, LBP_H2 },
1682 { 0xD719, 0xD733, LBP_H3 },
1683 { 0xD734, 0xD734, LBP_H2 },
1684 { 0xD735, 0xD74F, LBP_H3 },
1685 { 0xD750, 0xD750, LBP_H2 },
1686 { 0xD751, 0xD76B, LBP_H3 },
1687 { 0xD76C, 0xD76C, LBP_H2 },
1688 { 0xD76D, 0xD787, LBP_H3 },
1689 { 0xD788, 0xD788, LBP_H2 },
1690 { 0xD789, 0xD7A3, LBP_H3 },
1691 { 0xD7B0, 0xD7C6, LBP_JV },
1692 { 0xD7CB, 0xD7FB, LBP_JT },
1693 { 0xD800, 0xDFFF, LBP_SG },
1694 { 0xE000, 0xF8FF, LBP_XX },
1695 { 0xF900, 0xFAFF, LBP_ID },
1696 { 0xFB00, 0xFB1D, LBP_AL },
1697 { 0xFB1E, 0xFB1E, LBP_CM },
1698 { 0xFB1F, 0xFD3D, LBP_AL },
1699 { 0xFD3E, 0xFD3E, LBP_OP },
1700 { 0xFD3F, 0xFD3F, LBP_CL },
1701 { 0xFD50, 0xFDFB, LBP_AL },
1702 { 0xFDFC, 0xFDFC, LBP_PO },
1703 { 0xFDFD, 0xFDFD, LBP_AL },
1704 { 0xFE00, 0xFE0F, LBP_CM },
1705 { 0xFE10, 0xFE10, LBP_IS },
1706 { 0xFE11, 0xFE12, LBP_CL },
1707 { 0xFE13, 0xFE14, LBP_IS },
1708 { 0xFE15, 0xFE16, LBP_EX },
1709 { 0xFE17, 0xFE17, LBP_OP },
1710 { 0xFE18, 0xFE18, LBP_CL },
1711 { 0xFE19, 0xFE19, LBP_IN },
1712 { 0xFE20, 0xFE26, LBP_CM },
1713 { 0xFE30, 0xFE34, LBP_ID },
1714 { 0xFE35, 0xFE35, LBP_OP },
1715 { 0xFE36, 0xFE36, LBP_CL },
1716 { 0xFE37, 0xFE37, LBP_OP },
1717 { 0xFE38, 0xFE38, LBP_CL },
1718 { 0xFE39, 0xFE39, LBP_OP },
1719 { 0xFE3A, 0xFE3A, LBP_CL },
1720 { 0xFE3B, 0xFE3B, LBP_OP },
1721 { 0xFE3C, 0xFE3C, LBP_CL },
1722 { 0xFE3D, 0xFE3D, LBP_OP },
1723 { 0xFE3E, 0xFE3E, LBP_CL },
1724 { 0xFE3F, 0xFE3F, LBP_OP },
1725 { 0xFE40, 0xFE40, LBP_CL },
1726 { 0xFE41, 0xFE41, LBP_OP },
1727 { 0xFE42, 0xFE42, LBP_CL },
1728 { 0xFE43, 0xFE43, LBP_OP },
1729 { 0xFE44, 0xFE44, LBP_CL },
1730 { 0xFE45, 0xFE46, LBP_ID },
1731 { 0xFE47, 0xFE47, LBP_OP },
1732 { 0xFE48, 0xFE48, LBP_CL },
1733 { 0xFE49, 0xFE4F, LBP_ID },
1734 { 0xFE50, 0xFE50, LBP_CL },
1735 { 0xFE51, 0xFE51, LBP_ID },
1736 { 0xFE52, 0xFE52, LBP_CL },
1737 { 0xFE54, 0xFE55, LBP_NS },
1738 { 0xFE56, 0xFE57, LBP_EX },
1739 { 0xFE58, 0xFE58, LBP_ID },
1740 { 0xFE59, 0xFE59, LBP_OP },
1741 { 0xFE5A, 0xFE5A, LBP_CL },
1742 { 0xFE5B, 0xFE5B, LBP_OP },
1743 { 0xFE5C, 0xFE5C, LBP_CL },
1744 { 0xFE5D, 0xFE5D, LBP_OP },
1745 { 0xFE5E, 0xFE5E, LBP_CL },
1746 { 0xFE5F, 0xFE68, LBP_ID },
1747 { 0xFE69, 0xFE69, LBP_PR },
1748 { 0xFE6A, 0xFE6A, LBP_PO },
1749 { 0xFE6B, 0xFE6B, LBP_ID },
1750 { 0xFE70, 0xFEFC, LBP_AL },
1751 { 0xFEFF, 0xFEFF, LBP_WJ },
1752 { 0xFF01, 0xFF01, LBP_EX },
1753 { 0xFF02, 0xFF03, LBP_ID },
1754 { 0xFF04, 0xFF04, LBP_PR },
1755 { 0xFF05, 0xFF05, LBP_PO },
1756 { 0xFF06, 0xFF07, LBP_ID },
1757 { 0xFF08, 0xFF08, LBP_OP },
1758 { 0xFF09, 0xFF09, LBP_CL },
1759 { 0xFF0A, 0xFF0B, LBP_ID },
1760 { 0xFF0C, 0xFF0C, LBP_CL },
1761 { 0xFF0D, 0xFF0D, LBP_ID },
1762 { 0xFF0E, 0xFF0E, LBP_CL },
1763 { 0xFF0F, 0xFF19, LBP_ID },
1764 { 0xFF1A, 0xFF1B, LBP_NS },
1765 { 0xFF1C, 0xFF1E, LBP_ID },
1766 { 0xFF1F, 0xFF1F, LBP_EX },
1767 { 0xFF20, 0xFF3A, LBP_ID },
1768 { 0xFF3B, 0xFF3B, LBP_OP },
1769 { 0xFF3C, 0xFF3C, LBP_ID },
1770 { 0xFF3D, 0xFF3D, LBP_CL },
1771 { 0xFF3E, 0xFF5A, LBP_ID },
1772 { 0xFF5B, 0xFF5B, LBP_OP },
1773 { 0xFF5C, 0xFF5C, LBP_ID },
1774 { 0xFF5D, 0xFF5D, LBP_CL },
1775 { 0xFF5E, 0xFF5E, LBP_ID },
1776 { 0xFF5F, 0xFF5F, LBP_OP },
1777 { 0xFF60, 0xFF61, LBP_CL },
1778 { 0xFF62, 0xFF62, LBP_OP },
1779 { 0xFF63, 0xFF64, LBP_CL },
1780 { 0xFF65, 0xFF65, LBP_NS },
1781 { 0xFF66, 0xFF66, LBP_AL },
1782 { 0xFF67, 0xFF70, LBP_NS },
1783 { 0xFF71, 0xFF9D, LBP_AL },
1784 { 0xFF9E, 0xFF9F, LBP_NS },
1785 { 0xFFA0, 0xFFDC, LBP_AL },
1786 { 0xFFE0, 0xFFE0, LBP_PO },
1787 { 0xFFE1, 0xFFE1, LBP_PR },
1788 { 0xFFE2, 0xFFE4, LBP_ID },
1789 { 0xFFE5, 0xFFE6, LBP_PR },
1790 { 0xFFE8, 0xFFEE, LBP_AL },
1791 { 0xFFF9, 0xFFFB, LBP_CM },
1792 { 0xFFFC, 0xFFFC, LBP_CB },
1793 { 0xFFFD, 0xFFFD, LBP_AI },
1794 { 0x10000, 0x100FA, LBP_AL },
1795 { 0x10100, 0x10102, LBP_BA },
1796 { 0x10107, 0x101FC, LBP_AL },
1797 { 0x101FD, 0x101FD, LBP_CM },
1798 { 0x10280, 0x1039D, LBP_AL },
1799 { 0x1039F, 0x1039F, LBP_BA },
1800 { 0x103A0, 0x103CF, LBP_AL },
1801 { 0x103D0, 0x103D0, LBP_BA },
1802 { 0x103D1, 0x1049D, LBP_AL },
1803 { 0x104A0, 0x104A9, LBP_NU },
1804 { 0x10800, 0x10855, LBP_AL },
1805 { 0x10857, 0x10857, LBP_BA },
1806 { 0x10858, 0x1091B, LBP_AL },
1807 { 0x1091F, 0x1091F, LBP_BA },
1808 { 0x10920, 0x10A00, LBP_AL },
1809 { 0x10A01, 0x10A0F, LBP_CM },
1810 { 0x10A10, 0x10A33, LBP_AL },
1811 { 0x10A38, 0x10A3F, LBP_CM },
1812 { 0x10A40, 0x10A47, LBP_AL },
1813 { 0x10A50, 0x10A57, LBP_BA },
1814 { 0x10A58, 0x10B35, LBP_AL },
1815 { 0x10B39, 0x10B3F, LBP_BA },
1816 { 0x10B40, 0x10E7E, LBP_AL },
1817 { 0x11000, 0x11002, LBP_CM },
1818 { 0x11003, 0x11037, LBP_AL },
1819 { 0x11038, 0x11046, LBP_CM },
1820 { 0x11047, 0x11048, LBP_BA },
1821 { 0x11049, 0x11065, LBP_AL },
1822 { 0x11066, 0x1106F, LBP_NU },
1823 { 0x11080, 0x11082, LBP_CM },
1824 { 0x11083, 0x110AF, LBP_AL },
1825 { 0x110B0, 0x110BA, LBP_CM },
1826 { 0x110BB, 0x110BD, LBP_AL },
1827 { 0x110BE, 0x110C1, LBP_BA },
1828 { 0x12000, 0x12462, LBP_AL },
1829 { 0x12470, 0x12473, LBP_BA },
1830 { 0x13000, 0x13257, LBP_AL },
1831 { 0x13258, 0x1325A, LBP_OP },
1832 { 0x1325B, 0x1325D, LBP_CL },
1833 { 0x1325E, 0x13281, LBP_AL },
1834 { 0x13282, 0x13282, LBP_CL },
1835 { 0x13283, 0x13285, LBP_AL },
1836 { 0x13286, 0x13286, LBP_OP },
1837 { 0x13287, 0x13287, LBP_CL },
1838 { 0x13288, 0x13288, LBP_OP },
1839 { 0x13289, 0x13289, LBP_CL },
1840 { 0x1328A, 0x13378, LBP_AL },
1841 { 0x13379, 0x13379, LBP_OP },
1842 { 0x1337A, 0x1337B, LBP_CL },
1843 { 0x1337C, 0x16A38, LBP_AL },
1844 { 0x1B000, 0x1B001, LBP_ID },
1845 { 0x1D000, 0x1D164, LBP_AL },
1846 { 0x1D165, 0x1D169, LBP_CM },
1847 { 0x1D16A, 0x1D16C, LBP_AL },
1848 { 0x1D16D, 0x1D182, LBP_CM },
1849 { 0x1D183, 0x1D184, LBP_AL },
1850 { 0x1D185, 0x1D18B, LBP_CM },
1851 { 0x1D18C, 0x1D1A9, LBP_AL },
1852 { 0x1D1AA, 0x1D1AD, LBP_CM },
1853 { 0x1D1AE, 0x1D241, LBP_AL },
1854 { 0x1D242, 0x1D244, LBP_CM },
1855 { 0x1D245, 0x1D7CB, LBP_AL },
1856 { 0x1D7CE, 0x1D7FF, LBP_NU },
1857 { 0x1F000, 0x1F0DF, LBP_AL },
1858 { 0x1F100, 0x1F12D, LBP_AI },
1859 { 0x1F12E, 0x1F12E, LBP_AL },
1860 { 0x1F130, 0x1F19A, LBP_AI },
1861 { 0x1F1E6, 0x1F1FF, LBP_AL },
1862 { 0x1F200, 0x1F251, LBP_ID },
1863 { 0x1F300, 0x1F773, LBP_AL },
1864 { 0x20000, 0x3FFFD, LBP_ID },
1865 { 0xE0001, 0xE01EF, LBP_CM },
1866 { 0xF0000, 0x10FFFD, LBP_XX },
1867 { 0xFFFFFFFF, 0xFFFFFFFF, LBP_Undefined }
1868};
diff --git a/src/static_libs/liblinebreak/linebreakdata1.tmpl b/src/static_libs/liblinebreak/linebreakdata1.tmpl
new file mode 100644
index 0000000..df06125
--- /dev/null
+++ b/src/static_libs/liblinebreak/linebreakdata1.tmpl
@@ -0,0 +1 @@
/* The content of this file is generated from:
diff --git a/src/static_libs/liblinebreak/linebreakdata2.tmpl b/src/static_libs/liblinebreak/linebreakdata2.tmpl
new file mode 100644
index 0000000..60d0d37
--- /dev/null
+++ b/src/static_libs/liblinebreak/linebreakdata2.tmpl
@@ -0,0 +1,7 @@
1*/
2
3#include "linebreak.h"
4#include "linebreakdef.h"
5
6/** Default line breaking properties as from the Unicode Web site. */
7struct LineBreakProperties lb_prop_default[] = {
diff --git a/src/static_libs/liblinebreak/linebreakdata3.tmpl b/src/static_libs/liblinebreak/linebreakdata3.tmpl
new file mode 100644
index 0000000..a77017c
--- /dev/null
+++ b/src/static_libs/liblinebreak/linebreakdata3.tmpl
@@ -0,0 +1,2 @@
1 { 0xFFFFFFFF, 0xFFFFFFFF, LBP_Undefined }
2};
diff --git a/src/static_libs/liblinebreak/linebreakdef.c b/src/static_libs/liblinebreak/linebreakdef.c
new file mode 100644
index 0000000..9ddb4d9
--- /dev/null
+++ b/src/static_libs/liblinebreak/linebreakdef.c
@@ -0,0 +1,139 @@
1/* vim: set tabstop=4 shiftwidth=4: */
2
3/*
4 * Line breaking in a Unicode sequence. Designed to be used in a
5 * generic text renderer.
6 *
7 * Copyright (C) 2008-2010 Wu Yongwei <wuyongwei at gmail dot com>
8 *
9 * This software is provided 'as-is', without any express or implied
10 * warranty. In no event will the author be held liable for any damages
11 * arising from the use of this software.
12 *
13 * Permission is granted to anyone to use this software for any purpose,
14 * including commercial applications, and to alter it and redistribute
15 * it freely, subject to the following restrictions:
16 *
17 * 1. The origin of this software must not be misrepresented; you must
18 * not claim that you wrote the original software. If you use this
19 * software in a product, an acknowledgement in the product
20 * documentation would be appreciated but is not required.
21 * 2. Altered source versions must be plainly marked as such, and must
22 * not be misrepresented as being the original software.
23 * 3. This notice may not be removed or altered from any source
24 * distribution.
25 *
26 * The main reference is Unicode Standard Annex 14 (UAX #14):
27 * <URL:http://www.unicode.org/reports/tr14/>
28 *
29 * When this library was designed, this annex was at Revision 19, for
30 * Unicode 5.0.0:
31 * <URL:http://www.unicode.org/reports/tr14/tr14-19.html>
32 *
33 * This library has been updated according to Revision 24, for
34 * Unicode 5.2.0:
35 * <URL:http://www.unicode.org/reports/tr14/tr14-24.html>
36 *
37 * The Unicode Terms of Use are available at
38 * <URL:http://www.unicode.org/copyright.html>
39 */
40
41/**
42 * @file linebreakdef.c
43 *
44 * Definition of language-specific data.
45 *
46 * @version 2.0, 2010/01/03
47 * @author Wu Yongwei
48 */
49
50#include "linebreak.h"
51#include "linebreakdef.h"
52
53/**
54 * English-specifc data over the default Unicode rules.
55 */
56static struct LineBreakProperties lb_prop_English[] = {
57 { 0x2018, 0x2018, LBP_OP }, /* Left single quotation mark: opening */
58 { 0x201C, 0x201C, LBP_OP }, /* Left double quotation mark: opening */
59 { 0x201D, 0x201D, LBP_CL }, /* Right double quotation mark: closing */
60 { 0, 0, LBP_Undefined }
61};
62
63/**
64 * German-specifc data over the default Unicode rules.
65 */
66static struct LineBreakProperties lb_prop_German[] = {
67 { 0x00AB, 0x00AB, LBP_CL }, /* Left double angle quotation mark: closing */
68 { 0x00BB, 0x00BB, LBP_OP }, /* Right double angle quotation mark: opening */
69 { 0x2018, 0x2018, LBP_CL }, /* Left single quotation mark: closing */
70 { 0x201C, 0x201C, LBP_CL }, /* Left double quotation mark: closing */
71 { 0x2039, 0x2039, LBP_CL }, /* Left single angle quotation mark: closing */
72 { 0x203A, 0x203A, LBP_OP }, /* Right single angle quotation mark: opening */
73 { 0, 0, LBP_Undefined }
74};
75
76/**
77 * Spanish-specifc data over the default Unicode rules.
78 */
79static struct LineBreakProperties lb_prop_Spanish[] = {
80 { 0x00AB, 0x00AB, LBP_OP }, /* Left double angle quotation mark: opening */
81 { 0x00BB, 0x00BB, LBP_CL }, /* Right double angle quotation mark: closing */
82 { 0x2018, 0x2018, LBP_OP }, /* Left single quotation mark: opening */
83 { 0x201C, 0x201C, LBP_OP }, /* Left double quotation mark: opening */
84 { 0x201D, 0x201D, LBP_CL }, /* Right double quotation mark: closing */
85 { 0x2039, 0x2039, LBP_OP }, /* Left single angle quotation mark: opening */
86 { 0x203A, 0x203A, LBP_CL }, /* Right single angle quotation mark: closing */
87 { 0, 0, LBP_Undefined }
88};
89
90/**
91 * French-specifc data over the default Unicode rules.
92 */
93static struct LineBreakProperties lb_prop_French[] = {
94 { 0x00AB, 0x00AB, LBP_OP }, /* Left double angle quotation mark: opening */
95 { 0x00BB, 0x00BB, LBP_CL }, /* Right double angle quotation mark: closing */
96 { 0x2018, 0x2018, LBP_OP }, /* Left single quotation mark: opening */
97 { 0x201C, 0x201C, LBP_OP }, /* Left double quotation mark: opening */
98 { 0x201D, 0x201D, LBP_CL }, /* Right double quotation mark: closing */
99 { 0x2039, 0x2039, LBP_OP }, /* Left single angle quotation mark: opening */
100 { 0x203A, 0x203A, LBP_CL }, /* Right single angle quotation mark: closing */
101 { 0, 0, LBP_Undefined }
102};
103
104/**
105 * Russian-specifc data over the default Unicode rules.
106 */
107static struct LineBreakProperties lb_prop_Russian[] = {
108 { 0x00AB, 0x00AB, LBP_OP }, /* Left double angle quotation mark: opening */
109 { 0x00BB, 0x00BB, LBP_CL }, /* Right double angle quotation mark: closing */
110 { 0x201C, 0x201C, LBP_CL }, /* Left double quotation mark: closing */
111 { 0, 0, LBP_Undefined }
112};
113
114/**
115 * Chinese-specifc data over the default Unicode rules.
116 */
117static struct LineBreakProperties lb_prop_Chinese[] = {
118 { 0x2018, 0x2018, LBP_OP }, /* Left single quotation mark: opening */
119 { 0x2019, 0x2019, LBP_CL }, /* Right single quotation mark: closing */
120 { 0x201C, 0x201C, LBP_OP }, /* Left double quotation mark: opening */
121 { 0x201D, 0x201D, LBP_CL }, /* Right double quotation mark: closing */
122 { 0, 0, LBP_Undefined }
123};
124
125/**
126 * Association data of language-specific line breaking properties with
127 * language names. This is the definition for the static data in this
128 * file. If you want more flexibility, or do not need the data here,
129 * you may want to redefine \e lb_prop_lang_map in your C source file.
130 */
131struct LineBreakPropertiesLang lb_prop_lang_map[] = {
132 { "en", 2, lb_prop_English },
133 { "de", 2, lb_prop_German },
134 { "es", 2, lb_prop_Spanish },
135 { "fr", 2, lb_prop_French },
136 { "ru", 2, lb_prop_Russian },
137 { "zh", 2, lb_prop_Chinese },
138 { NULL, 0, NULL }
139};
diff --git a/src/static_libs/liblinebreak/linebreakdef.h b/src/static_libs/liblinebreak/linebreakdef.h
new file mode 100644
index 0000000..bc4eee2
--- /dev/null
+++ b/src/static_libs/liblinebreak/linebreakdef.h
@@ -0,0 +1,149 @@
1/* vim: set tabstop=4 shiftwidth=4: */
2
3/*
4 * Line breaking in a Unicode sequence. Designed to be used in a
5 * generic text renderer.
6 *
7 * Copyright (C) 2008-2010 Wu Yongwei <wuyongwei at gmail dot com>
8 *
9 * This software is provided 'as-is', without any express or implied
10 * warranty. In no event will the author be held liable for any damages
11 * arising from the use of this software.
12 *
13 * Permission is granted to anyone to use this software for any purpose,
14 * including commercial applications, and to alter it and redistribute
15 * it freely, subject to the following restrictions:
16 *
17 * 1. The origin of this software must not be misrepresented; you must
18 * not claim that you wrote the original software. If you use this
19 * software in a product, an acknowledgement in the product
20 * documentation would be appreciated but is not required.
21 * 2. Altered source versions must be plainly marked as such, and must
22 * not be misrepresented as being the original software.
23 * 3. This notice may not be removed or altered from any source
24 * distribution.
25 *
26 * The main reference is Unicode Standard Annex 14 (UAX #14):
27 * <URL:http://www.unicode.org/reports/tr14/>
28 *
29 * When this library was designed, this annex was at Revision 19, for
30 * Unicode 5.0.0:
31 * <URL:http://www.unicode.org/reports/tr14/tr14-19.html>
32 *
33 * This library has been updated according to Revision 24, for
34 * Unicode 5.2.0:
35 * <URL:http://www.unicode.org/reports/tr14/tr14-24.html>
36 *
37 * The Unicode Terms of Use are available at
38 * <URL:http://www.unicode.org/copyright.html>
39 */
40
41/**
42 * @file linebreakdef.h
43 *
44 * Definitions of internal data structures, declarations of global
45 * variables, and function prototypes for the line breaking algorithm.
46 *
47 * @version 2.0, 2010/01/03
48 * @author Wu Yongwei
49 */
50