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