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