summaryrefslogtreecommitdiff
path: root/src/static_libs/libunibreak
diff options
context:
space:
mode:
authorYoungbok Shin <youngb.shin@samsung.com>2018-08-20 07:21:53 -0400
committerMike Blumenkrantz <zmike@samsung.com>2018-08-20 10:29:32 -0400
commit517018e00897f61136418861563a49144a5fe39a (patch)
tree694c299402631380a10a7ad6ddbebfbb774e7e91 /src/static_libs/libunibreak
parent8da56ac873d5bb083b7cfe08aeefdaa2ad9a4b99 (diff)
evas textblock: add/apply cursor cluster APIs based on grapheme cluster
Summary: Add a feature for moving cursor over a grapheme cluster. It is applied to edje_entry.c and elm_entry.c for improving cursor handling just like other modern text editors. ex) gedit The patch on Evas needs to update libunibreak library. So, the patch will update libunibreak, too. @feature Test Plan: 1. Put "ഹലോ" in your entry. 2. Your cursor can reach at the end of text from the beginning only in 2 right key event with this feature. Reviewers: raster, cedric, jpeg, herdsman, zmike, devilhorns Reviewed By: herdsman, zmike Subscribers: #reviewers, #committers, zmike, bowonryu, woohyun Tags: #efl Differential Revision: https://phab.enlightenment.org/D5490
Diffstat (limited to 'src/static_libs/libunibreak')
-rw-r--r--src/static_libs/libunibreak/ChangeLog92
-rw-r--r--src/static_libs/libunibreak/LICENCE5
-rw-r--r--src/static_libs/libunibreak/NEWS7
-rw-r--r--src/static_libs/libunibreak/README.md14
-rw-r--r--src/static_libs/libunibreak/graphemebreak.c283
-rw-r--r--src/static_libs/libunibreak/graphemebreak.h69
-rw-r--r--src/static_libs/libunibreak/graphemebreakdata.c1337
-rw-r--r--src/static_libs/libunibreak/graphemebreakdef.h82
-rw-r--r--src/static_libs/libunibreak/linebreak.c28
-rw-r--r--src/static_libs/libunibreak/linebreak.h1
-rw-r--r--src/static_libs/libunibreak/linebreakdef.c1
-rw-r--r--src/static_libs/libunibreak/linebreakdef.h1
-rw-r--r--src/static_libs/libunibreak/unibreakbase.c3
-rw-r--r--src/static_libs/libunibreak/unibreakbase.h5
-rw-r--r--src/static_libs/libunibreak/unibreakdef.c3
-rw-r--r--src/static_libs/libunibreak/unibreakdef.h3
-rw-r--r--src/static_libs/libunibreak/wordbreak.c33
-rw-r--r--src/static_libs/libunibreak/wordbreak.h9
-rw-r--r--src/static_libs/libunibreak/wordbreakdef.h9
19 files changed, 1929 insertions, 56 deletions
diff --git a/src/static_libs/libunibreak/ChangeLog b/src/static_libs/libunibreak/ChangeLog
index cad33cfd26..8df529f0c9 100644
--- a/src/static_libs/libunibreak/ChangeLog
+++ b/src/static_libs/libunibreak/ChangeLog
@@ -1,3 +1,95 @@
12016-12-15 Wu Yongwei <wuyongwei@gmail.com>
2
3 * src/Makefile.am (include_HEADERS): Move graphemebreakdef.h to
4 EXTRA_DIST.
5 (EXTRA_DIST): Add graphemebreakdef.h and test_skips.h.
6
72016-12-14 Wu Yongwei <wuyongwei@gmail.com>
8
9 * src/linebreak.c: Adjust documentation comment.
10 * src/wordbreak.c: Ditto.
11 * src/graphemebreak.c: Ditto.
12
132016-12-14 Wu Yongwei <wuyongwei@gmail.com>
14
15 * Doxyfile (FULL_PATH_NAMES): Set to `NO'.
16 (DOT_IMAGE_FORMAT): Set to `svg'.
17 (SEARCHENGINE): Set to `YES'.
18
192016-12-10 Wu Yongwei <wuyongwei@gmail.com>
20
21 Update for the libunibreak 4.0 release.
22 * NEWS: Add information about libunibreak 4.0.
23 * Doxyfile (PROJECT_NUMBER): Change to `4.0'.
24 * configure.ac (AC_INIT): Change the library version to `4.0'.
25 * src/Makefile.am (libunibreak_la_LDFLAGS): Set the version-info to
26 `4:0:1'.
27 * src/unibreakbase.h (UNIBREAK_VERSION): Set to 0x0400.
28
292016-12-10 Wu Yongwei <wuyongwei@gmail.com>
30
31 * src/Makefile.am (include_HEADERS): Add a missing file
32 graphemebreakdef.h.
33
342016-12-10 Wu Yongwei <wuyongwei@gmail.com>
35
36 * bootstrap: Add a missing `--copy' argument to glibtoolize.
37
382016-12-10 Wu Yongwei <wuyongwei@gmail.com>
39
40 * README.md: Update for grapheme break and links.
41 * LICENCE: Add Andreas Röver and update copyright information.
42
432016-12-10 Wu Yongwei <wuyongwei@gmail.com>
44
45 * Doxyfile (EXCLUDE): Add `src/tests.c'.
46
472016-12-10 Wu Yongwei <wuyongwei@gmail.com>
48
49 * src/wordbreak.c: Update Unicode version and link information.
50 * src/wordbreak.h: Ditto.
51 * src/wordbreakdef.h: Ditto.
52 * src/graphemebreak.c: Ditto.
53 * src/graphemebreak.h: Ditto.
54 * src/graphemebreakdef.h: Ditto.
55
562016-12-10 Wu Yongwei <wuyongwei@gmail.com>
57
58 * src/linebreak.c: Remove `@version' and update copyright header.
59 * src/linebreak.h: Ditto.
60 * src/linebreakdef.c: Ditto.
61 * src/linebreakdef.h: Ditto.
62 * src/wordbreak.c: Ditto.
63 * src/wordbreak.h: Ditto.
64 * src/wordbreakdef.h: Ditto.
65 * src/graphemebreak.c: Ditto.
66 * src/graphemebreak.h: Ditto.
67 * src/graphemebreakdef.h: Ditto.
68 * src/unibreakbase.c: Ditto.
69 * src/unibreakbase.h: Ditto.
70 * src/unibreakdef.c: Ditto.
71 * src/unibreakdef.h: Ditto.
72
732016-12-10 Wu Yongwei <wuyongwei@gmail.com>
74
75 * src/Makefile.msvc: Add graphemebreak.c.
76 * src/graphemebreak.c: Add a workaround of stdbool.h for MSVC
77 versions earlier than 2013.
78 * src/graphemebreak.h: Make include order consistent.
79 * src/linebreak.c (ends_with): Make the code compile under C89.
80
812016-12-10 Wu Yongwei <wuyongwei@gmail.com>
82
83 * src/Makefile.gcc (CFILES): Add graphemebreak.c.
84 (graphemebreakdata): New phony target.
85 (GraphemeBreakProperty.txt): New target.
86 (distclean): Add WordBreakProperty.txt and GraphemeBreakProperty.txt
87 as well.
88
892016-12-05 Tom Hacohen <tom@stosb.com>
90
91 * src/test_skips.h: New file.
92
12016-12-04 Wu Yongwei <wuyongwei@gmail.com> 932016-12-04 Wu Yongwei <wuyongwei@gmail.com>
2 94
3 Simpify implementation about RI pairing. 95 Simpify implementation about RI pairing.
diff --git a/src/static_libs/libunibreak/LICENCE b/src/static_libs/libunibreak/LICENCE
index 3eda8d5061..3fba16ad53 100644
--- a/src/static_libs/libunibreak/LICENCE
+++ b/src/static_libs/libunibreak/LICENCE
@@ -1,6 +1,7 @@
1Copyright (C) 2008-2015 Wu Yongwei <wuyongwei at gmail dot com> 1Copyright (C) 2008-2016 Wu Yongwei <wuyongwei at gmail dot com>
2Copyright (C) 2012-2015 Tom Hacohen <tom at stosb dot com> 2Copyright (C) 2012-2016 Tom Hacohen <tom at stosb dot com>
3Copyright (C) 2013 Petr Filipsky <philodej at gmail dot com> 3Copyright (C) 2013 Petr Filipsky <philodej at gmail dot com>
4Copyright (C) 2016 Andreas Röver <roever at users dot sf dot net>
4 5
5This software is provided 'as-is', without any express or implied 6This software is provided 'as-is', without any express or implied
6warranty. In no event will the author be held liable for any damages 7warranty. In no event will the author be held liable for any damages
diff --git a/src/static_libs/libunibreak/NEWS b/src/static_libs/libunibreak/NEWS
index 7de7feba18..d217628da8 100644
--- a/src/static_libs/libunibreak/NEWS
+++ b/src/static_libs/libunibreak/NEWS
@@ -1,3 +1,10 @@
1New in libunibreak 4.0
2
3- Update the code and data to conform to Unicode 9.0.0
4- Add grapheme breaking support
5- Tested and enhanced according to the Unicode test suite
6- Make bug fixes
7
1New in libunibreak 3.0 8New in libunibreak 3.0
2 9
3- Update the code and data to conform to Unicode 7.0.0 10- Update the code and data to conform to Unicode 7.0.0
diff --git a/src/static_libs/libunibreak/README.md b/src/static_libs/libunibreak/README.md
index 52cd7388b5..f37fd902aa 100644
--- a/src/static_libs/libunibreak/README.md
+++ b/src/static_libs/libunibreak/README.md
@@ -9,8 +9,8 @@ breaking and word breaking algorithms as described in [Unicode Standard
9Annex 14] [1] and [Unicode Standard Annex 29] [2]. Check the project's 9Annex 14] [1] and [Unicode Standard Annex 29] [2]. Check the project's
10[home page] [3] for up-to-date information. 10[home page] [3] for up-to-date information.
11 11
12 [1]: http://www.unicode.org/reports/tr14/tr14-30.html 12 [1]: http://www.unicode.org/reports/tr14/tr14-37.html
13 [2]: http://www.unicode.org/reports/tr29/tr29-21.html 13 [2]: http://www.unicode.org/reports/tr29/tr29-29.html
14 [3]: https://github.com/adah1972/libunibreak 14 [3]: https://github.com/adah1972/libunibreak
15 15
16 16
@@ -46,6 +46,8 @@ There are three ways to build the library:
46 *LineBreak.txt*. 46 *LineBreak.txt*.
47 - type `make wordbreakdata` to regenerate *wordbreakdata.c* from 47 - type `make wordbreakdata` to regenerate *wordbreakdata.c* from
48 *WordBreakProperty.txt*. 48 *WordBreakProperty.txt*.
49 - type `make graphemebreakdata` to regenerate *graphemebreakdata.c*
50 from *GraphemeBreakProperty.txt*.
49 51
502. On systems where GCC and Binutils are supported, one can type 522. On systems where GCC and Binutils are supported, one can type
51 53
@@ -61,6 +63,8 @@ There are three ways to build the library:
61 *LineBreak.txt*. 63 *LineBreak.txt*.
62 - type `make wordbreakdata` to regenerate *wordbreakdata.c* from 64 - type `make wordbreakdata` to regenerate *wordbreakdata.c* from
63 *WordBreakProperty.txt*. 65 *WordBreakProperty.txt*.
66 - type `make graphemebreakdata` to regenerate *graphemebreakdata.c*
67 from *GraphemeBreakProperty.txt*.
64 68
653. On Windows, apart from using method 1 (Cygwin/MSYS) and method 2 693. On Windows, apart from using method 1 (Cygwin/MSYS) and method 2
66 (MinGW), MSVC can also be used. Type 70 (MinGW), MSVC can also be used. Type
@@ -77,9 +81,9 @@ There are three ways to build the library:
77Documentation 81Documentation
78------------- 82-------------
79 83
80Check the generated document *doc/html/linebreak\_8h.html* and 84Check the generated document *doc/html/linebreak\_8h.html*,
81*doc/html/wordbreak\_8h.html* in the downloaded file for the public 85*doc/html/wordbreak\_8h.html*, and *doc/html/graphemebreak\_8h.html* in
82interfaces exposed to applications. 86the downloaded file for the public interfaces exposed to applications.
83 87
84 88
85<!-- 89<!--
diff --git a/src/static_libs/libunibreak/graphemebreak.c b/src/static_libs/libunibreak/graphemebreak.c
new file mode 100644
index 0000000000..77c3d5f55c
--- /dev/null
+++ b/src/static_libs/libunibreak/graphemebreak.c
@@ -0,0 +1,283 @@
1/*
2 * Grapheme breaking in a Unicode sequence. Designed to be used in a
3 * generic text renderer.
4 *
5 * Copyright (C) 2016 Andreas Röver <roever at users dot sf dot net>
6 *
7 * This software is provided 'as-is', without any express or implied
8 * warranty. In no event will the author be held liable for any damages
9 * arising from the use of this software.
10 *
11 * Permission is granted to anyone to use this software for any purpose,
12 * including commercial applications, and to alter it and redistribute
13 * it freely, subject to the following restrictions:
14 *
15 * 1. The origin of this software must not be misrepresented; you must
16 * not claim that you wrote the original software. If you use this
17 * software in a product, an acknowledgement in the product
18 * documentation would be appreciated but is not required.
19 * 2. Altered source versions must be plainly marked as such, and must
20 * not be misrepresented as being the original software.
21 * 3. This notice may not be removed or altered from any source
22 * distribution.
23 *
24 * The main reference is Unicode Standard Annex 29 (UAX #29):
25 * <URL:http://unicode.org/reports/tr29>
26 *
27 * When this library was designed, this annex was at Revision 29, for
28 * Unicode 9.0.0:
29 * <URL:http://www.unicode.org/reports/tr29/tr29-29.html>
30 *
31 * The Unicode Terms of Use are available at
32 * <URL:http://www.unicode.org/copyright.html>
33 */
34
35/**
36 * @file graphemebreak.c
37 *
38 * Implementation of the grapheme breaking algorithm as described in Unicode
39 * Standard Annex 29.
40 *
41 * @author Andreas Roever
42 */
43
44#if defined(_MSC_VER) && _MSC_VER < 1800
45typedef int bool;
46#define false 0
47#define true 1
48#else
49#include <stdbool.h>
50#endif
51
52#include <string.h>
53#include "graphemebreak.h"
54#include "graphemebreakdata.c"
55#include "unibreakdef.h"
56
57#define ARRAY_LEN(x) (sizeof(x) / sizeof(x[0]))
58
59/**
60 * Initializes the wordbreak internals. It currently does nothing, but
61 * it may in the future.
62 */
63void init_graphemebreak(void)
64{
65}
66
67/**
68 * Gets the grapheme breaking class of a character.
69 *
70 * @param ch character to check
71 * @return the grapheme breaking class if found; \c GBP_Other otherwise
72 */
73static enum GraphemeBreakClass get_char_gb_class(utf32_t ch)
74{
75 int min = 0;
76 int max = ARRAY_LEN(gb_prop_default) - 1;
77 int mid;
78
79 do
80 {
81 mid = (min + max) / 2;
82
83 if (ch < gb_prop_default[mid].start)
84 max = mid - 1;
85 else if (ch > gb_prop_default[mid].end)
86 min = mid + 1;
87 else
88 return gb_prop_default[mid].prop;
89 } while (min <= max);
90
91 return GBP_Other;
92}
93
94/**
95 * Sets the grapheme breaking information for a generic input string.
96 *
97 * @param[in] s input string
98 * @param[in] len length of the input
99 * @param[out] brks pointer to the output breaking data, containing
100 * #GRAPHEMEBREAK_BREAK or #GRAPHEMEBREAK_NOBREAK
101 * @param[in] get_next_char function to get the next UTF-32 character
102 */
103static void set_graphemebreaks(const void *s, size_t len, char *brks,
104 get_next_char_t get_next_char)
105{
106 size_t posNext = 0;
107 bool rule10Left = false; // is the left side of rule 10 fulfilled?
108 bool evenRegionalIndicators = true; // is the number of preceeding
109 // GBP_RegionalIndicator characters
110 // even
111
112 utf32_t ch = get_next_char(s, len, &posNext);
113 enum GraphemeBreakClass current_class = get_char_gb_class(ch);
114
115 // initialize whole output to inside char
116 memset(brks, GRAPHEMEBREAK_INSIDEACHAR, len);
117
118 while (true)
119 {
120 enum GraphemeBreakClass prev_class = current_class;
121
122 // safe position if current character so that we can store the
123 // result there later on
124 size_t brksPos = posNext - 1;
125
126 // get nect character
127 ch = get_next_char(s, len, &posNext);
128
129 if (ch == EOS)
130 {
131 // done, place one final break after the last character as per
132 // algorithm rule GB1
133 brks[brksPos] = GRAPHEMEBREAK_BREAK;
134 break;
135 }
136
137 // get class of current character
138 current_class = get_char_gb_class(ch);
139
140 // update some helper variables
141 if ((prev_class == GBP_E_Base) || (prev_class == GBP_E_Base_GAZ))
142 {
143 rule10Left = true;
144 }
145 else if (prev_class != GBP_Extend)
146 {
147 rule10Left = false;
148 }
149
150 if (prev_class == GBP_Regional_Indicator)
151 {
152 evenRegionalIndicators = !evenRegionalIndicators;
153 }
154 else
155 {
156 evenRegionalIndicators = true;
157 }
158
159 // check all rules
160 if (prev_class == GBP_CR && current_class == GBP_LF)
161 {
162 brks[brksPos] = GRAPHEMEBREAK_NOBREAK; // Rule: GB3
163 }
164 else if ((prev_class == GBP_CR) || (prev_class == GBP_LF) ||
165 (prev_class == GBP_Control) || (current_class == GBP_CR) ||
166 (current_class == GBP_LF) ||
167 (current_class == GBP_Control))
168 {
169 brks[brksPos] = GRAPHEMEBREAK_BREAK; // Rule: GB4 + GB5
170 }
171 else if ((prev_class == GBP_L) &&
172 ((current_class == GBP_L) || (current_class == GBP_V) ||
173 (current_class == GBP_LV) || (current_class == GBP_LVT)))
174 {
175 brks[brksPos] = GRAPHEMEBREAK_NOBREAK; // Rule: GB6
176 }
177 else if (((prev_class == GBP_LV) || (prev_class == GBP_V)) &&
178 ((current_class == GBP_V) || (current_class == GBP_T)))
179 {
180 brks[brksPos] = GRAPHEMEBREAK_NOBREAK; // Rule: GB7
181 }
182 else if (((prev_class == GBP_LVT) || (prev_class == GBP_T)) &&
183 (current_class == GBP_T))
184 {
185 brks[brksPos] = GRAPHEMEBREAK_NOBREAK; // Rule: GB8
186 }
187 else if ((current_class == GBP_Extend) ||
188 (current_class == GBP_ZWJ))
189 {
190 brks[brksPos] = GRAPHEMEBREAK_NOBREAK; // Rule: GB9
191 }
192 else if (current_class == GBP_SpacingMark)
193 {
194 brks[brksPos] = GRAPHEMEBREAK_NOBREAK; // Rule: GB9a
195 }
196 else if (prev_class == GBP_Prepend)
197 {
198 brks[brksPos] = GRAPHEMEBREAK_NOBREAK; // Rule: GB9b
199 }
200 else if (rule10Left && (current_class == GBP_E_Modifier))
201 {
202 brks[brksPos] = GRAPHEMEBREAK_NOBREAK; // Rule: GB10
203 }
204 else if ((prev_class == GBP_ZWJ) &&
205 ((current_class == GBP_Glue_After_Zwj) ||
206 (current_class == GBP_E_Base_GAZ)))
207 {
208 brks[brksPos] = GRAPHEMEBREAK_NOBREAK; // Rule: GB11
209 }
210 else if (!evenRegionalIndicators &&
211 (current_class == GBP_Regional_Indicator))
212 {
213 brks[brksPos] = GRAPHEMEBREAK_NOBREAK; // Rule: GB12 + GB13
214 }
215 else
216 {
217 brks[brksPos] = GRAPHEMEBREAK_BREAK; // Rule: GB999
218 }
219 }
220}
221
222/**
223 * Sets the grapheme breaking information for a UTF-8 input string.
224 *
225 * @param[in] s input UTF-8 string
226 * @param[in] len length of the input
227 * @param[in] lang language of the input (reserved for future use)
228 * @param[out] brks pointer to the output breaking data, containing
229 * #GRAPHEMEBREAK_BREAK or #GRAPHEMEBREAK_NOBREAK.
230 * First element in output array is for the break behind
231 * the first character the pointer must point to an
232 * array with at least as many elements as there
233 * are characters in the string
234 */
235void set_graphemebreaks_utf8(const utf8_t *s, size_t len, const char *lang,
236 char *brks)
237{
238 (void)lang;
239 set_graphemebreaks(s, len, brks,
240 (get_next_char_t)ub_get_next_char_utf8);
241}
242
243/**
244 * Sets the grapheme breaking information for a UTF-16 input string.
245 *
246 * @param[in] s input UTF-16 string
247 * @param[in] len length of the input
248 * @param[in] lang language of the input (reserved for future use)
249 * @param[out] brks pointer to the output breaking data, containing
250 * #GRAPHEMEBREAK_BREAK or #GRAPHEMEBREAK_NOBREAK.
251 * First element in output array is for the break behind
252 * the first character the pointer must point to an
253 * array with at least as many elements as there
254 * are characters in the string
255 */
256void set_graphemebreaks_utf16(const utf16_t *s, size_t len,
257 const char *lang, char *brks)
258{
259 (void)lang;
260 set_graphemebreaks(s, len, brks,
261 (get_next_char_t)ub_get_next_char_utf16);
262}
263
264/**
265 * Sets the grapheme breaking information for a UTF-32 input string.
266 *
267 * @param[in] s input UTF-32 string
268 * @param[in] len length of the input
269 * @param[in] lang language of the input (reserved for future use)
270 * @param[out] brks pointer to the output breaking data, containing
271 * #GRAPHEMEBREAK_BREAK or #GRAPHEMEBREAK_NOBREAK.
272 * First element in output array is for the break behind
273 * the first character the pointer must point to an
274 * array with at least as many elements as there
275 * are characters in the string
276 */
277void set_graphemebreaks_utf32(const utf32_t *s, size_t len,
278 const char *lang, char *brks)
279{
280 (void)lang;
281 set_graphemebreaks(s, len, brks,
282 (get_next_char_t)ub_get_next_char_utf32);
283}
diff --git a/src/static_libs/libunibreak/graphemebreak.h b/src/static_libs/libunibreak/graphemebreak.h
new file mode 100644
index 0000000000..c01768233a
--- /dev/null
+++ b/src/static_libs/libunibreak/graphemebreak.h
@@ -0,0 +1,69 @@
1/*
2 * Grapheme breaking in a Unicode sequence. Designed to be used in a
3 * generic text renderer.
4 *
5 * Copyright (C) 2016 Andreas Röver <roever at users dot sf dot net>
6 *
7 * This software is provided 'as-is', without any express or implied
8 * warranty. In no event will the author be held liable for any damages
9 * arising from the use of this software.
10 *
11 * Permission is granted to anyone to use this software for any purpose,
12 * including commercial applications, and to alter it and redistribute
13 * it freely, subject to the following restrictions:
14 *
15 * 1. The origin of this software must not be misrepresented; you must
16 * not claim that you wrote the original software. If you use this
17 * software in a product, an acknowledgement in the product
18 * documentation would be appreciated but is not required.
19 * 2. Altered source versions must be plainly marked as such, and must
20 * not be misrepresented as being the original software.
21 * 3. This notice may not be removed or altered from any source
22 * distribution.
23 *
24 * The main reference is Unicode Standard Annex 29 (UAX #29):
25 * <URL:http://unicode.org/reports/tr29>
26 *
27 * When this library was designed, this annex was at Revision 29, for
28 * Unicode 9.0.0:
29 * <URL:http://www.unicode.org/reports/tr29/tr29-29.html>
30 *
31 * The Unicode Terms of Use are available at
32 * <URL:http://www.unicode.org/copyright.html>
33 */
34
35/**
36 * @file graphemebreak.h
37 *
38 * Header file for the grapheme breaking algorithm.
39 *
40 * @author Andreas Röver
41 */
42
43#ifndef GRAPHEMEBREAK_H
44#define GRAPHEMEBREAK_H
45
46#include <stddef.h>
47#include "unibreakbase.h"
48
49#ifdef __cplusplus
50extern "C" {
51#endif
52
53#define GRAPHEMEBREAK_BREAK 0 /**< Between 2 graphemes */
54#define GRAPHEMEBREAK_NOBREAK 1 /**< Inside a grapheme */
55#define GRAPHEMEBREAK_INSIDEACHAR 2 /**< Inside a unicode character */
56
57void init_graphemebreak(void);
58void set_graphemebreaks_utf8(const utf8_t *s, size_t len, const char *lang,
59 char *brks);
60void set_graphemebreaks_utf16(const utf16_t *s, size_t len,
61 const char *lang, char *brks);
62void set_graphemebreaks_utf32(const utf32_t *s, size_t len,
63 const char *lang, char *brks);
64
65#ifdef __cplusplus
66}
67#endif
68
69#endif
diff --git a/src/static_libs/libunibreak/graphemebreakdata.c b/src/static_libs/libunibreak/graphemebreakdata.c
new file mode 100644
index 0000000000..cab9bebd80
--- /dev/null
+++ b/src/static_libs/libunibreak/graphemebreakdata.c
@@ -0,0 +1,1337 @@
1/* The content of this file is generated from:
2# GraphemeBreakProperty-9.0.0.txt
3# Date: 2016-06-03, 22:23:55 GMT
4*/
5
6#include "graphemebreakdef.h"
7
8static const struct GraphemeBreakProperties gb_prop_default[] = {
9 {0x0000, 0x0009, GBP_Control},
10 {0x000A, 0x000A, GBP_LF},
11 {0x000B, 0x000C, GBP_Control},
12 {0x000D, 0x000D, GBP_CR},
13 {0x000E, 0x001F, GBP_Control},
14 {0x007F, 0x009F, GBP_Control},
15 {0x00AD, 0x00AD, GBP_Control},
16 {0x0300, 0x036F, GBP_Extend},
17 {0x0483, 0x0487, GBP_Extend},
18 {0x0488, 0x0489, GBP_Extend},
19 {0x0591, 0x05BD, GBP_Extend},
20 {0x05BF, 0x05BF, GBP_Extend},
21 {0x05C1, 0x05C2, GBP_Extend},
22 {0x05C4, 0x05C5, GBP_Extend},
23 {0x05C7, 0x05C7, GBP_Extend},
24 {0x0600, 0x0605, GBP_Prepend},
25 {0x0610, 0x061A, GBP_Extend},
26 {0x061C, 0x061C, GBP_Control},
27 {0x064B, 0x065F, GBP_Extend},
28 {0x0670, 0x0670, GBP_Extend},
29 {0x06D6, 0x06DC, GBP_Extend},
30 {0x06DD, 0x06DD, GBP_Prepend},
31 {0x06DF, 0x06E4, GBP_Extend},
32 {0x06E7, 0x06E8, GBP_Extend},
33 {0x06EA, 0x06ED, GBP_Extend},
34 {0x070F, 0x070F, GBP_Prepend},
35 {0x0711, 0x0711, GBP_Extend},
36 {0x0730, 0x074A, GBP_Extend},
37 {0x07A6, 0x07B0, GBP_Extend},
38 {0x07EB, 0x07F3, GBP_Extend},
39 {0x0816, 0x0819, GBP_Extend},
40 {0x081B, 0x0823, GBP_Extend},
41 {0x0825, 0x0827, GBP_Extend},
42 {0x0829, 0x082D, GBP_Extend},
43 {0x0859, 0x085B, GBP_Extend},
44 {0x08D4, 0x08E1, GBP_Extend},
45 {0x08E2, 0x08E2, GBP_Prepend},
46 {0x08E3, 0x0902, GBP_Extend},
47 {0x0903, 0x0903, GBP_SpacingMark},
48 {0x093A, 0x093A, GBP_Extend},
49 {0x093B, 0x093B, GBP_SpacingMark},
50 {0x093C, 0x093C, GBP_Extend},
51 {0x093E, 0x0940, GBP_SpacingMark},
52 {0x0941, 0x0948, GBP_Extend},
53 {0x0949, 0x094C, GBP_SpacingMark},
54 {0x094D, 0x094D, GBP_Extend},
55 {0x094E, 0x094F, GBP_SpacingMark},
56 {0x0951, 0x0957, GBP_Extend},
57 {0x0962, 0x0963, GBP_Extend},
58 {0x0981, 0x0981, GBP_Extend},
59 {0x0982, 0x0983, GBP_SpacingMark},
60 {0x09BC, 0x09BC, GBP_Extend},
61 {0x09BE, 0x09BE, GBP_Extend},
62 {0x09BF, 0x09C0, GBP_SpacingMark},
63 {0x09C1, 0x09C4, GBP_Extend},
64 {0x09C7, 0x09C8, GBP_SpacingMark},
65 {0x09CB, 0x09CC, GBP_SpacingMark},
66 {0x09CD, 0x09CD, GBP_Extend},
67 {0x09D7, 0x09D7, GBP_Extend},
68 {0x09E2, 0x09E3, GBP_Extend},
69 {0x0A01, 0x0A02, GBP_Extend},
70 {0x0A03, 0x0A03, GBP_SpacingMark},
71 {0x0A3C, 0x0A3C, GBP_Extend},
72 {0x0A3E, 0x0A40, GBP_SpacingMark},
73 {0x0A41, 0x0A42, GBP_Extend},
74 {0x0A47, 0x0A48, GBP_Extend},
75 {0x0A4B, 0x0A4D, GBP_Extend},
76 {0x0A51, 0x0A51, GBP_Extend},
77 {0x0A70, 0x0A71, GBP_Extend},
78 {0x0A75, 0x0A75, GBP_Extend},
79 {0x0A81, 0x0A82, GBP_Extend},
80 {0x0A83, 0x0A83, GBP_SpacingMark},
81 {0x0ABC, 0x0ABC, GBP_Extend},
82 {0x0ABE, 0x0AC0, GBP_SpacingMark},
83 {0x0AC1, 0x0AC5, GBP_Extend},
84 {0x0AC7, 0x0AC8, GBP_Extend},
85 {0x0AC9, 0x0AC9, GBP_SpacingMark},
86 {0x0ACB, 0x0ACC, GBP_SpacingMark},
87 {0x0ACD, 0x0ACD, GBP_Extend},
88 {0x0AE2, 0x0AE3, GBP_Extend},
89 {0x0B01, 0x0B01, GBP_Extend},
90 {0x0B02, 0x0B03, GBP_SpacingMark},
91 {0x0B3C, 0x0B3C, GBP_Extend},
92 {0x0B3E, 0x0B3E, GBP_Extend},
93 {0x0B3F, 0x0B3F, GBP_Extend},
94 {0x0B40, 0x0B40, GBP_SpacingMark},
95 {0x0B41, 0x0B44, GBP_Extend},
96 {0x0B47, 0x0B48, GBP_SpacingMark},
97 {0x0B4B, 0x0B4C, GBP_SpacingMark},
98 {0x0B4D, 0x0B4D, GBP_Extend},
99 {0x0B56, 0x0B56, GBP_Extend},
100 {0x0B57, 0x0B57, GBP_Extend},
101 {0x0B62, 0x0B63, GBP_Extend},
102 {0x0B82, 0x0B82, GBP_Extend},
103 {0x0BBE, 0x0BBE, GBP_Extend},
104 {0x0BBF, 0x0BBF, GBP_SpacingMark},
105 {0x0BC0, 0x0BC0, GBP_Extend},
106 {0x0BC1, 0x0BC2, GBP_SpacingMark},
107 {0x0BC6, 0x0BC8, GBP_SpacingMark},
108 {0x0BCA, 0x0BCC, GBP_SpacingMark},
109 {0x0BCD, 0x0BCD, GBP_Extend},
110 {0x0BD7, 0x0BD7, GBP_Extend},
111 {0x0C00, 0x0C00, GBP_Extend},
112 {0x0C01, 0x0C03, GBP_SpacingMark},
113 {0x0C3E, 0x0C40, GBP_Extend},
114 {0x0C41, 0x0C44, GBP_SpacingMark},
115 {0x0C46, 0x0C48, GBP_Extend},
116 {0x0C4A, 0x0C4D, GBP_Extend},
117 {0x0C55, 0x0C56, GBP_Extend},
118 {0x0C62, 0x0C63, GBP_Extend},
119 {0x0C81, 0x0C81, GBP_Extend},
120 {0x0C82, 0x0C83, GBP_SpacingMark},
121 {0x0CBC, 0x0CBC, GBP_Extend},
122 {0x0CBE, 0x0CBE, GBP_SpacingMark},
123 {0x0CBF, 0x0CBF, GBP_Extend},
124 {0x0CC0, 0x0CC1, GBP_SpacingMark},
125 {0x0CC2, 0x0CC2, GBP_Extend},
126 {0x0CC3, 0x0CC4, GBP_SpacingMark},
127 {0x0CC6, 0x0CC6, GBP_Extend},
128 {0x0CC7, 0x0CC8, GBP_SpacingMark},
129 {0x0CCA, 0x0CCB, GBP_SpacingMark},
130 {0x0CCC, 0x0CCD, GBP_Extend},
131 {0x0CD5, 0x0CD6, GBP_Extend},
132 {0x0CE2, 0x0CE3, GBP_Extend},
133 {0x0D01, 0x0D01, GBP_Extend},
134 {0x0D02, 0x0D03, GBP_SpacingMark},
135 {0x0D3E, 0x0D3E, GBP_Extend},
136 {0x0D3F, 0x0D40, GBP_SpacingMark},
137 {0x0D41, 0x0D44, GBP_Extend},
138 {0x0D46, 0x0D48, GBP_SpacingMark},
139 {0x0D4A, 0x0D4C, GBP_SpacingMark},
140 {0x0D4D, 0x0D4D, GBP_Extend},
141 {0x0D4E, 0x0D4E, GBP_Prepend},
142 {0x0D57, 0x0D57, GBP_Extend},
143 {0x0D62, 0x0D63, GBP_Extend},
144 {0x0D82, 0x0D83, GBP_SpacingMark},
145 {0x0DCA, 0x0DCA, GBP_Extend},
146 {0x0DCF, 0x0DCF, GBP_Extend},
147 {0x0DD0, 0x0DD1, GBP_SpacingMark},
148 {0x0DD2, 0x0DD4, GBP_Extend},
149 {0x0DD6, 0x0DD6, GBP_Extend},
150 {0x0DD8, 0x0DDE, GBP_SpacingMark},
151 {0x0DDF, 0x0DDF, GBP_Extend},
152 {0x0DF2, 0x0DF3, GBP_SpacingMark},
153 {0x0E31, 0x0E31, GBP_Extend},
154 {0x0E33, 0x0E33, GBP_SpacingMark},
155 {0x0E34, 0x0E3A, GBP_Extend},
156 {0x0E47, 0x0E4E, GBP_Extend},
157 {0x0EB1, 0x0EB1, GBP_Extend},
158 {0x0EB3, 0x0EB3, GBP_SpacingMark},
159 {0x0EB4, 0x0EB9, GBP_Extend},
160 {0x0EBB, 0x0EBC, GBP_Extend},
161 {0x0EC8, 0x0ECD, GBP_Extend},
162 {0x0F18, 0x0F19, GBP_Extend},
163 {0x0F35, 0x0F35, GBP_Extend},
164 {0x0F37, 0x0F37, GBP_Extend},
165 {0x0F39, 0x0F39, GBP_Extend},
166 {0x0F3E, 0x0F3F, GBP_SpacingMark},
167 {0x0F71, 0x0F7E, GBP_Extend},
168 {0x0F7F, 0x0F7F, GBP_SpacingMark},
169 {0x0F80, 0x0F84, GBP_Extend},
170 {0x0F86, 0x0F87, GBP_Extend},
171 {0x0F8D, 0x0F97, GBP_Extend},
172 {0x0F99, 0x0FBC, GBP_Extend},
173 {0x0FC6, 0x0FC6, GBP_Extend},
174 {0x102D, 0x1030, GBP_Extend},
175 {0x1031, 0x1031, GBP_SpacingMark},
176 {0x1032, 0x1037, GBP_Extend},
177 {0x1039, 0x103A, GBP_Extend},
178 {0x103B, 0x103C, GBP_SpacingMark},
179 {0x103D, 0x103E, GBP_Extend},
180 {0x1056, 0x1057, GBP_SpacingMark},
181 {0x1058, 0x1059, GBP_Extend},
182 {0x105E, 0x1060, GBP_Extend},
183 {0x1071, 0x1074, GBP_Extend},
184 {0x1082, 0x1082, GBP_Extend},
185 {0x1084, 0x1084, GBP_SpacingMark},
186 {0x1085, 0x1086, GBP_Extend},
187 {0x108D, 0x108D, GBP_Extend},
188 {0x109D, 0x109D, GBP_Extend},
189 {0x1100, 0x115F, GBP_L},
190 {0x1160, 0x11A7, GBP_V},
191 {0x11A8, 0x11FF, GBP_T},
192 {0x135D, 0x135F, GBP_Extend},
193 {0x1712, 0x1714, GBP_Extend},
194 {0x1732, 0x1734, GBP_Extend},
195 {0x1752, 0x1753, GBP_Extend},
196 {0x1772, 0x1773, GBP_Extend},
197 {0x17B4, 0x17B5, GBP_Extend},
198 {0x17B6, 0x17B6, GBP_SpacingMark},
199 {0x17B7, 0x17BD, GBP_Extend},
200 {0x17BE, 0x17C5, GBP_SpacingMark},
201 {0x17C6, 0x17C6, GBP_Extend},
202 {0x17C7, 0x17C8, GBP_SpacingMark},
203 {0x17C9, 0x17D3, GBP_Extend},
204 {0x17DD, 0x17DD, GBP_Extend},
205 {0x180B, 0x180D, GBP_Extend},
206 {0x180E, 0x180E, GBP_Control},
207 {0x1885, 0x1886, GBP_Extend},
208 {0x18A9, 0x18A9, GBP_Extend},
209 {0x1920, 0x1922, GBP_Extend},
210 {0x1923, 0x1926, GBP_SpacingMark},
211 {0x1927, 0x1928, GBP_Extend},
212 {0x1929, 0x192B, GBP_SpacingMark},
213 {0x1930, 0x1931, GBP_SpacingMark},
214 {0x1932, 0x1932, GBP_Extend},
215 {0x1933, 0x1938, GBP_SpacingMark},
216 {0x1939, 0x193B, GBP_Extend},
217 {0x1A17, 0x1A18, GBP_Extend},
218 {0x1A19, 0x1A1A, GBP_SpacingMark},
219 {0x1A1B, 0x1A1B, GBP_Extend},
220 {0x1A55, 0x1A55, GBP_SpacingMark},
221 {0x1A56, 0x1A56, GBP_Extend},
222 {0x1A57, 0x1A57, GBP_SpacingMark},
223 {0x1A58, 0x1A5E, GBP_Extend},
224 {0x1A60, 0x1A60, GBP_Extend},
225 {0x1A62, 0x1A62, GBP_Extend},
226 {0x1A65, 0x1A6C, GBP_Extend},
227 {0x1A6D, 0x1A72, GBP_SpacingMark},
228 {0x1A73, 0x1A7C, GBP_Extend},
229 {0x1A7F, 0x1A7F, GBP_Extend},
230 {0x1AB0, 0x1ABD, GBP_Extend},
231 {0x1ABE, 0x1ABE, GBP_Extend},
232 {0x1B00, 0x1B03, GBP_Extend},
233 {0x1B04, 0x1B04, GBP_SpacingMark},
234 {0x1B34, 0x1B34, GBP_Extend},
235 {0x1B35, 0x1B35, GBP_SpacingMark},
236 {0x1B36, 0x1B3A, GBP_Extend},
237 {0x1B3B, 0x1B3B, GBP_SpacingMark},
238 {0x1B3C, 0x1B3C, GBP_Extend},
239 {0x1B3D, 0x1B41, GBP_SpacingMark},
240 {0x1B42, 0x1B42, GBP_Extend},
241 {0x1B43, 0x1B44, GBP_SpacingMark},
242 {0x1B6B, 0x1B73, GBP_Extend},
243 {0x1B80, 0x1B81, GBP_Extend},
244 {0x1B82, 0x1B82, GBP_SpacingMark},
245 {0x1BA1, 0x1BA1, GBP_SpacingMark},
246 {0x1BA2, 0x1BA5, GBP_Extend},
247 {0x1BA6, 0x1BA7, GBP_SpacingMark},
248 {0x1BA8, 0x1BA9, GBP_Extend},
249 {0x1BAA, 0x1BAA, GBP_SpacingMark},
250 {0x1BAB, 0x1BAD, GBP_Extend},
251 {0x1BE6, 0x1BE6, GBP_Extend},
252 {0x1BE7, 0x1BE7, GBP_SpacingMark},
253 {0x1BE8, 0x1BE9, GBP_Extend},
254 {0x1BEA, 0x1BEC, GBP_SpacingMark},
255 {0x1BED, 0x1BED, GBP_Extend},
256 {0x1BEE, 0x1BEE, GBP_SpacingMark},
257 {0x1BEF, 0x1BF1, GBP_Extend},
258 {0x1BF2, 0x1BF3, GBP_SpacingMark},
259 {0x1C24, 0x1C2B, GBP_SpacingMark},
260 {0x1C2C, 0x1C33, GBP_Extend},
261 {0x1C34, 0x1C35, GBP_SpacingMark},
262 {0x1C36, 0x1C37, GBP_Extend},
263 {0x1CD0, 0x1CD2, GBP_Extend},
264 {0x1CD4, 0x1CE0, GBP_Extend},
265 {0x1CE1, 0x1CE1, GBP_SpacingMark},
266 {0x1CE2, 0x1CE8, GBP_Extend},
267 {0x1CED, 0x1CED, GBP_Extend},
268 {0x1CF2, 0x1CF3, GBP_SpacingMark},
269 {0x1CF4, 0x1CF4, GBP_Extend},
270 {0x1CF8, 0x1CF9, GBP_Extend},
271 {0x1DC0, 0x1DF5, GBP_Extend},
272 {0x1DFB, 0x1DFF, GBP_Extend},
273 {0x200B, 0x200B, GBP_Control},
274 {0x200C, 0x200C, GBP_Extend},
275 {0x200D, 0x200D, GBP_ZWJ},
276 {0x200E, 0x200F, GBP_Control},
277 {0x2028, 0x2028, GBP_Control},
278 {0x2029, 0x2029, GBP_Control},
279 {0x202A, 0x202E, GBP_Control},
280 {0x2060, 0x2064, GBP_Control},
281 {0x2065, 0x2065, GBP_Control},
282 {0x2066, 0x206F, GBP_Control},
283 {0x20D0, 0x20DC, GBP_Extend},
284 {0x20DD, 0x20E0, GBP_Extend},
285 {0x20E1, 0x20E1, GBP_Extend},
286 {0x20E2, 0x20E4, GBP_Extend},
287 {0x20E5, 0x20F0, GBP_Extend},
288 {0x261D, 0x261D, GBP_E_Base},
289 {0x26F9, 0x26F9, GBP_E_Base},
290 {0x270A, 0x270D, GBP_E_Base},
291 {0x2764, 0x2764, GBP_Glue_After_Zwj},
292 {0x2CEF, 0x2CF1, GBP_Extend},
293 {0x2D7F, 0x2D7F, GBP_Extend},
294 {0x2DE0, 0x2DFF, GBP_Extend},
295 {0x302A, 0x302D, GBP_Extend},
296 {0x302E, 0x302F, GBP_Extend},
297 {0x3099, 0x309A, GBP_Extend},
298 {0xA66F, 0xA66F, GBP_Extend},
299 {0xA670, 0xA672, GBP_Extend},
300 {0xA674, 0xA67D, GBP_Extend},
301 {0xA69E, 0xA69F, GBP_Extend},
302 {0xA6F0, 0xA6F1, GBP_Extend},
303 {0xA802, 0xA802, GBP_Extend},
304 {0xA806, 0xA806, GBP_Extend},
305 {0xA80B, 0xA80B, GBP_Extend},
306 {0xA823, 0xA824, GBP_SpacingMark},
307 {0xA825, 0xA826, GBP_Extend},
308 {0xA827, 0xA827, GBP_SpacingMark},
309 {0xA880, 0xA881, GBP_SpacingMark},
310 {0xA8B4, 0xA8C3, GBP_SpacingMark},
311 {0xA8C4, 0xA8C5, GBP_Extend},
312 {0xA8E0, 0xA8F1, GBP_Extend},
313 {0xA926, 0xA92D, GBP_Extend},
314 {0xA947, 0xA951, GBP_Extend},
315 {0xA952, 0xA953, GBP_SpacingMark},
316 {0xA960, 0xA97C, GBP_L},
317 {0xA980, 0xA982, GBP_Extend},
318 {0xA983, 0xA983, GBP_SpacingMark},
319 {0xA9B3, 0xA9B3, GBP_Extend},
320 {0xA9B4, 0xA9B5, GBP_SpacingMark},
321 {0xA9B6, 0xA9B9, GBP_Extend},
322 {0xA9BA, 0xA9BB, GBP_SpacingMark},
323 {0xA9BC, 0xA9BC, GBP_Extend},
324 {0xA9BD, 0xA9C0, GBP_SpacingMark},
325 {0xA9E5, 0xA9E5, GBP_Extend},
326 {0xAA29, 0xAA2E, GBP_Extend},
327 {0xAA2F, 0xAA30, GBP_SpacingMark},
328 {0xAA31, 0xAA32, GBP_Extend},
329 {0xAA33, 0xAA34, GBP_SpacingMark},
330 {0xAA35, 0xAA36, GBP_Extend},
331 {0xAA43, 0xAA43, GBP_Extend},
332 {0xAA4C, 0xAA4C, GBP_Extend},
333 {0xAA4D, 0xAA4D, GBP_SpacingMark},
334 {0xAA7C, 0xAA7C, GBP_Extend},
335 {0xAAB0, 0xAAB0, GBP_Extend},
336 {0xAAB2, 0xAAB4, GBP_Extend},
337 {0xAAB7, 0xAAB8, GBP_Extend},
338 {0xAABE, 0xAABF, GBP_Extend},
339 {0xAAC1, 0xAAC1, GBP_Extend},
340 {0xAAEB, 0xAAEB, GBP_SpacingMark},
341 {0xAAEC, 0xAAED, GBP_Extend},
342 {0xAAEE, 0xAAEF, GBP_SpacingMark},
343 {0xAAF5, 0xAAF5, GBP_SpacingMark},
344 {0xAAF6, 0xAAF6, GBP_Extend},
345 {0xABE3, 0xABE4, GBP_SpacingMark},
346 {0xABE5, 0xABE5, GBP_Extend},
347 {0xABE6, 0xABE7, GBP_SpacingMark},
348 {0xABE8, 0xABE8, GBP_Extend},
349 {0xABE9, 0xABEA, GBP_SpacingMark},
350 {0xABEC, 0xABEC, GBP_SpacingMark},
351 {0xABED, 0xABED, GBP_Extend},
352 {0xAC00, 0xAC00, GBP_LV},
353 {0xAC01, 0xAC1B, GBP_LVT},
354 {0xAC1C, 0xAC1C, GBP_LV},
355 {0xAC1D, 0xAC37, GBP_LVT},
356 {0xAC38, 0xAC38, GBP_LV},
357 {0xAC39, 0xAC53, GBP_LVT},
358 {0xAC54, 0xAC54, GBP_LV},
359 {0xAC55, 0xAC6F, GBP_LVT},
360 {0xAC70, 0xAC70, GBP_LV},
361 {0xAC71, 0xAC8B, GBP_LVT},
362 {0xAC8C, 0xAC8C, GBP_LV},
363 {0xAC8D, 0xACA7, GBP_LVT},
364 {0xACA8, 0xACA8, GBP_LV},
365 {0xACA9, 0xACC3, GBP_LVT},
366 {0xACC4, 0xACC4, GBP_LV},
367 {0xACC5, 0xACDF, GBP_LVT},
368 {0xACE0, 0xACE0, GBP_LV},
369 {0xACE1, 0xACFB, GBP_LVT},
370 {0xACFC, 0xACFC, GBP_LV},
371 {0xACFD, 0xAD17, GBP_LVT},
372 {0xAD18, 0xAD18, GBP_LV},
373 {0xAD19, 0xAD33, GBP_LVT},
374 {0xAD34, 0xAD34, GBP_LV},
375 {0xAD35, 0xAD4F, GBP_LVT},
376 {0xAD50, 0xAD50, GBP_LV},
377 {0xAD51, 0xAD6B, GBP_LVT},
378 {0xAD6C, 0xAD6C, GBP_LV},
379 {0xAD6D, 0xAD87, GBP_LVT},
380 {0xAD88, 0xAD88, GBP_LV},
381 {0xAD89, 0xADA3, GBP_LVT},
382 {0xADA4, 0xADA4, GBP_LV},
383 {0xADA5, 0xADBF, GBP_LVT},
384 {0xADC0, 0xADC0, GBP_LV},
385 {0xADC1, 0xADDB, GBP_LVT},
386 {0xADDC, 0xADDC, GBP_LV},
387 {0xADDD, 0xADF7, GBP_LVT},
388 {0xADF8, 0xADF8, GBP_LV},
389 {0xADF9, 0xAE13, GBP_LVT},
390 {0xAE14, 0xAE14, GBP_LV},
391 {0xAE15, 0xAE2F, GBP_LVT},
392 {0xAE30, 0xAE30, GBP_LV},
393 {0xAE31, 0xAE4B, GBP_LVT},
394 {0xAE4C, 0xAE4C, GBP_LV},
395 {0xAE4D, 0xAE67, GBP_LVT},
396 {0xAE68, 0xAE68, GBP_LV},
397 {0xAE69, 0xAE83, GBP_LVT},
398 {0xAE84, 0xAE84, GBP_LV},
399 {0xAE85, 0xAE9F, GBP_LVT},
400 {0xAEA0, 0xAEA0, GBP_LV},
401 {0xAEA1, 0xAEBB, GBP_LVT},
402 {0xAEBC, 0xAEBC, GBP_LV},
403 {0xAEBD, 0xAED7, GBP_LVT},
404 {0xAED8, 0xAED8, GBP_LV},
405 {0xAED9, 0xAEF3, GBP_LVT},
406 {0xAEF4, 0xAEF4, GBP_LV},
407 {0xAEF5, 0xAF0F, GBP_LVT},
408 {0xAF10, 0xAF10, GBP_LV},
409 {0xAF11, 0xAF2B, GBP_LVT},
410 {0xAF2C, 0xAF2C, GBP_LV},
411 {0xAF2D, 0xAF47, GBP_LVT},
412 {0xAF48, 0xAF48, GBP_LV},
413 {0xAF49, 0xAF63, GBP_LVT},
414 {0xAF64, 0xAF64, GBP_LV},
415 {0xAF65, 0xAF7F, GBP_LVT},
416 {0xAF80, 0xAF80, GBP_LV},
417 {0xAF81, 0xAF9B, GBP_LVT},
418 {0xAF9C, 0xAF9C, GBP_LV},
419 {0xAF9D, 0xAFB7, GBP_LVT},
420 {0xAFB8, 0xAFB8, GBP_LV},
421 {0xAFB9, 0xAFD3, GBP_LVT},
422 {0xAFD4, 0xAFD4, GBP_LV},
423 {0xAFD5, 0xAFEF, GBP_LVT},
424 {0xAFF0, 0xAFF0, GBP_LV},
425 {0xAFF1, 0xB00B, GBP_LVT},
426 {0xB00C, 0xB00C, GBP_LV},
427 {0xB00D, 0xB027, GBP_LVT},
428 {0xB028, 0xB028, GBP_LV},
429 {0xB029, 0xB043, GBP_LVT},
430 {0xB044, 0xB044, GBP_LV},
431 {0xB045, 0xB05F, GBP_LVT},
432 {0xB060, 0xB060, GBP_LV},
433 {0xB061, 0xB07B, GBP_LVT},
434 {0xB07C, 0xB07C, GBP_LV},
435 {0xB07D, 0xB097, GBP_LVT},
436 {0xB098, 0xB098, GBP_LV},
437 {0xB099, 0xB0B3, GBP_LVT},
438 {0xB0B4, 0xB0B4, GBP_LV},
439 {0xB0B5, 0xB0CF, GBP_LVT},
440 {0xB0D0, 0xB0D0, GBP_LV},
441 {0xB0D1, 0xB0EB, GBP_LVT},
442 {0xB0EC, 0xB0EC, GBP_LV},
443 {0xB0ED, 0xB107, GBP_LVT},
444 {0xB108, 0xB108, GBP_LV},
445 {0xB109, 0xB123, GBP_LVT},
446 {0xB124, 0xB124, GBP_LV},
447 {0xB125, 0xB13F, GBP_LVT},
448 {0xB140, 0xB140, GBP_LV},
449 {0xB141, 0xB15B, GBP_LVT},
450 {0xB15C, 0xB15C, GBP_LV},
451 {0xB15D, 0xB177, GBP_LVT},
452 {0xB178, 0xB178, GBP_LV},
453 {0xB179, 0xB193, GBP_LVT},
454 {0xB194, 0xB194, GBP_LV},
455 {0xB195, 0xB1AF, GBP_LVT},
456 {0xB1B0, 0xB1B0, GBP_LV},
457 {0xB1B1, 0xB1CB, GBP_LVT},
458 {0xB1CC, 0xB1CC, GBP_LV},
459 {0xB1CD, 0xB1E7, GBP_LVT},
460 {0xB1E8, 0xB1E8, GBP_LV},
461 {0xB1E9, 0xB203, GBP_LVT},
462 {0xB204, 0xB204, GBP_LV},
463 {0xB205, 0xB21F, GBP_LVT},
464 {0xB220, 0xB220, GBP_LV},
465 {0xB221, 0xB23B, GBP_LVT},
466 {0xB23C, 0xB23C, GBP_LV},
467 {0xB23D, 0xB257, GBP_LVT},
468 {0xB258, 0xB258, GBP_LV},
469 {0xB259, 0xB273, GBP_LVT},
470 {0xB274, 0xB274, GBP_LV},
471 {0xB275, 0xB28F, GBP_LVT},
472 {0xB290, 0xB290, GBP_LV},
473 {0xB291, 0xB2AB, GBP_LVT},
474 {0xB2AC, 0xB2AC, GBP_LV},
475 {0xB2AD, 0xB2C7, GBP_LVT},
476 {0xB2C8, 0xB2C8, GBP_LV},
477 {0xB2C9, 0xB2E3, GBP_LVT},
478 {0xB2E4, 0xB2E4, GBP_LV},
479 {0xB2E5, 0xB2FF, GBP_LVT},
480 {0xB300, 0xB300, GBP_LV},
481 {0xB301, 0xB31B, GBP_LVT},
482 {0xB31C, 0xB31C, GBP_LV},
483 {0xB31D, 0xB337, GBP_LVT},
484 {0xB338, 0xB338, GBP_LV},
485 {0xB339, 0xB353, GBP_LVT},
486 {0xB354, 0xB354, GBP_LV},
487 {0xB355, 0xB36F, GBP_LVT},
488 {0xB370, 0xB370, GBP_LV},
489 {0xB371, 0xB38B, GBP_LVT},
490 {0xB38C, 0xB38C, GBP_LV},
491 {0xB38D, 0xB3A7, GBP_LVT},
492 {0xB3A8, 0xB3A8, GBP_LV},
493 {0xB3A9, 0xB3C3, GBP_LVT},
494 {0xB3C4, 0xB3C4, GBP_LV},
495 {0xB3C5, 0xB3DF, GBP_LVT},
496 {0xB3E0, 0xB3E0, GBP_LV},
497 {0xB3E1, 0xB3FB, GBP_LVT},
498 {0xB3FC, 0xB3FC, GBP_LV},
499 {0xB3FD, 0xB417, GBP_LVT},
500 {0xB418, 0xB418, GBP_LV},
501 {0xB419, 0xB433, GBP_LVT},
502 {0xB434, 0xB434, GBP_LV},
503 {0xB435, 0xB44F, GBP_LVT},
504 {0xB450, 0xB450, GBP_LV},
505 {0xB451, 0xB46B, GBP_LVT},
506 {0xB46C, 0xB46C, GBP_LV},
507 {0xB46D, 0xB487, GBP_LVT},
508 {0xB488, 0xB488, GBP_LV},
509 {0xB489, 0xB4A3, GBP_LVT},
510 {0xB4A4, 0xB4A4, GBP_LV},
511 {0xB4A5, 0xB4BF, GBP_LVT},
512 {0xB4C0, 0xB4C0, GBP_LV},
513 {0xB4C1, 0xB4DB, GBP_LVT},
514 {0xB4DC, 0xB4DC, GBP_LV},
515 {0xB4DD, 0xB4F7, GBP_LVT},
516 {0xB4F8, 0xB4F8, GBP_LV},
517 {0xB4F9, 0xB513, GBP_LVT},
518 {0xB514, 0xB514, GBP_LV},
519 {0xB515, 0xB52F, GBP_LVT},
520 {0xB530, 0xB530, GBP_LV},
521 {0xB531, 0xB54B, GBP_LVT},
522 {0xB54C, 0xB54C, GBP_LV},
523 {0xB54D, 0xB567, GBP_LVT},
524 {0xB568, 0xB568, GBP_LV},
525 {0xB569, 0xB583, GBP_LVT},
526 {0xB584, 0xB584, GBP_LV},
527 {0xB585, 0xB59F, GBP_LVT},
528 {0xB5A0, 0xB5A0, GBP_LV},
529 {0xB5A1, 0xB5BB, GBP_LVT},
530 {0xB5BC, 0xB5BC, GBP_LV},
531 {0xB5BD, 0xB5D7, GBP_LVT},
532 {0xB5D8, 0xB5D8, GBP_LV},
533 {0xB5D9, 0xB5F3, GBP_LVT},
534 {0xB5F4, 0xB5F4, GBP_LV},
535 {0xB5F5, 0xB60F, GBP_LVT},
536 {0xB610, 0xB610, GBP_LV},
537 {0xB611, 0xB62B, GBP_LVT},
538 {0xB62C, 0xB62C, GBP_LV},
539 {0xB62D, 0xB647, GBP_LVT},
540 {0xB648, 0xB648, GBP_LV},
541 {0xB649, 0xB663, GBP_LVT},
542 {0xB664, 0xB664, GBP_LV},
543 {0xB665, 0xB67F, GBP_LVT},
544 {0xB680, 0xB680, GBP_LV},
545 {0xB681, 0xB69B, GBP_LVT},
546 {0xB69C, 0xB69C, GBP_LV},
547 {0xB69D, 0xB6B7, GBP_LVT},
548 {0xB6B8, 0xB6B8, GBP_LV},
549 {0xB6B9, 0xB6D3, GBP_LVT},
550 {0xB6D4, 0xB6D4, GBP_LV},
551 {0xB6D5, 0xB6EF, GBP_LVT},
552 {0xB6F0, 0xB6F0, GBP_LV},
553 {0xB6F1, 0xB70B, GBP_LVT},
554 {0xB70C, 0xB70C, GBP_LV},
555 {0xB70D, 0xB727, GBP_LVT},
556 {0xB728, 0xB728, GBP_LV},
557 {0xB729, 0xB743, GBP_LVT},
558 {0xB744, 0xB744, GBP_LV},
559 {0xB745, 0xB75F, GBP_LVT},
560 {0xB760, 0xB760, GBP_LV},
561 {0xB761, 0xB77B, GBP_LVT},
562 {0xB77C, 0xB77C, GBP_LV},
563 {0xB77D, 0xB797, GBP_LVT},
564 {0xB798, 0xB798, GBP_LV},
565 {0xB799, 0xB7B3, GBP_LVT},
566 {0xB7B4, 0xB7B4, GBP_LV},
567 {0xB7B5, 0xB7CF, GBP_LVT},
568 {0xB7D0, 0xB7D0, GBP_LV},
569 {0xB7D1, 0xB7EB, GBP_LVT},
570 {0xB7EC, 0xB7EC, GBP_LV},
571 {0xB7ED, 0xB807, GBP_LVT},
572 {0xB808, 0xB808, GBP_LV},
573 {0xB809, 0xB823, GBP_LVT},
574 {0xB824, 0xB824, GBP_LV},
575 {0xB825, 0xB83F, GBP_LVT},
576 {0xB840, 0xB840, GBP_LV},
577 {0xB841, 0xB85B, GBP_LVT},
578 {0xB85C, 0xB85C, GBP_LV},
579 {0xB85D, 0xB877, GBP_LVT},
580 {0xB878, 0xB878, GBP_LV},
581 {0xB879, 0xB893, GBP_LVT},
582 {0xB894, 0xB894, GBP_LV},
583 {0xB895, 0xB8AF, GBP_LVT},
584 {0xB8B0, 0xB8B0, GBP_LV},
585 {0xB8B1, 0xB8CB, GBP_LVT},
586 {0xB8CC, 0xB8CC, GBP_LV},
587 {0xB8CD, 0xB8E7, GBP_LVT},
588 {0xB8E8, 0xB8E8, GBP_LV},
589 {0xB8E9, 0xB903, GBP_LVT},
590 {0xB904, 0xB904, GBP_LV},
591 {0xB905, 0xB91F, GBP_LVT},
592 {0xB920, 0xB920, GBP_LV},
593 {0xB921, 0xB93B, GBP_LVT},
594 {0xB93C, 0xB93C, GBP_LV},
595 {0xB93D, 0xB957, GBP_LVT},
596 {0xB958, 0xB958, GBP_LV},
597 {0xB959, 0xB973, GBP_LVT},
598 {0xB974, 0xB974, GBP_LV},
599 {0xB975, 0xB98F, GBP_LVT},
600 {0xB990, 0xB990, GBP_LV},
601 {0xB991, 0xB9AB, GBP_LVT},
602 {0xB9AC, 0xB9AC, GBP_LV},
603 {0xB9AD, 0xB9C7, GBP_LVT},
604 {0xB9C8, 0xB9C8, GBP_LV},
605 {0xB9C9, 0xB9E3, GBP_LVT},
606 {0xB9E4, 0xB9E4, GBP_LV},
607 {0xB9E5, 0xB9FF, GBP_LVT},
608 {0xBA00, 0xBA00, GBP_LV},
609 {0xBA01, 0xBA1B, GBP_LVT},
610 {0xBA1C, 0xBA1C, GBP_LV},
611 {0xBA1D, 0xBA37, GBP_LVT},
612 {0xBA38, 0xBA38, GBP_LV},
613 {0xBA39, 0xBA53, GBP_LVT},
614 {0xBA54, 0xBA54, GBP_LV},
615 {0xBA55, 0xBA6F, GBP_LVT},
616 {0xBA70, 0xBA70, GBP_LV},
617 {0xBA71, 0xBA8B, GBP_LVT},
618 {0xBA8C, 0xBA8C, GBP_LV},
619 {0xBA8D, 0xBAA7, GBP_LVT},
620 {0xBAA8, 0xBAA8, GBP_LV},
621 {0xBAA9, 0xBAC3, GBP_LVT},
622 {0xBAC4, 0xBAC4, GBP_LV},
623 {0xBAC5, 0xBADF, GBP_LVT},
624 {0xBAE0, 0xBAE0, GBP_LV},
625 {0xBAE1, 0xBAFB, GBP_LVT},
626 {0xBAFC, 0xBAFC, GBP_LV},
627 {0xBAFD, 0xBB17, GBP_LVT},
628 {0xBB18, 0xBB18, GBP_LV},
629 {0xBB19, 0xBB33, GBP_LVT},
630 {0xBB34, 0xBB34, GBP_LV},
631 {0xBB35, 0xBB4F, GBP_LVT},
632 {0xBB50, 0xBB50, GBP_LV},
633 {0xBB51, 0xBB6B, GBP_LVT},
634 {0xBB6C, 0xBB6C, GBP_LV},
635 {0xBB6D, 0xBB87, GBP_LVT},
636 {0xBB88, 0xBB88, GBP_LV},
637 {0xBB89, 0xBBA3, GBP_LVT},
638 {0xBBA4, 0xBBA4, GBP_LV},
639 {0xBBA5, 0xBBBF, GBP_LVT},
640 {0xBBC0, 0xBBC0, GBP_LV},
641 {0xBBC1, 0xBBDB, GBP_LVT},
642 {0xBBDC, 0xBBDC, GBP_LV},
643 {0xBBDD, 0xBBF7, GBP_LVT},
644 {0xBBF8, 0xBBF8, GBP_LV},
645 {0xBBF9, 0xBC13, GBP_LVT},
646 {0xBC14, 0xBC14, GBP_LV},
647 {0xBC15, 0xBC2F, GBP_LVT},
648 {0xBC30, 0xBC30, GBP_LV},
649 {0xBC31, 0xBC4B, GBP_LVT},
650 {0xBC4C, 0xBC4C, GBP_LV},
651 {0xBC4D, 0xBC67, GBP_LVT},
652 {0xBC68, 0xBC68, GBP_LV},
653 {0xBC69, 0xBC83, GBP_LVT},
654 {0xBC84, 0xBC84, GBP_LV},
655 {0xBC85, 0xBC9F, GBP_LVT},
656 {0xBCA0, 0xBCA0, GBP_LV},
657 {0xBCA1, 0xBCBB, GBP_LVT},
658 {0xBCBC, 0xBCBC, GBP_LV},
659 {0xBCBD, 0xBCD7, GBP_LVT},
660 {0xBCD8, 0xBCD8, GBP_LV},
661 {0xBCD9, 0xBCF3, GBP_LVT},
662 {0xBCF4, 0xBCF4, GBP_LV},
663 {0xBCF5, 0xBD0F, GBP_LVT},
664 {0xBD10, 0xBD10, GBP_LV},
665 {0xBD11, 0xBD2B, GBP_LVT},
666 {0xBD2C, 0xBD2C, GBP_LV},
667 {0xBD2D, 0xBD47, GBP_LVT},
668 {0xBD48, 0xBD48, GBP_LV},
669 {0xBD49, 0xBD63, GBP_LVT},
670 {0xBD64, 0xBD64, GBP_LV},
671 {0xBD65, 0xBD7F, GBP_LVT},
672 {0xBD80, 0xBD80, GBP_LV},
673 {0xBD81, 0xBD9B, GBP_LVT},
674 {0xBD9C, 0xBD9C, GBP_LV},
675 {0xBD9D, 0xBDB7, GBP_LVT},
676 {0xBDB8, 0xBDB8, GBP_LV},
677 {0xBDB9, 0xBDD3, GBP_LVT},
678 {0xBDD4, 0xBDD4, GBP_LV},
679 {0xBDD5, 0xBDEF, GBP_LVT},
680 {0xBDF0, 0xBDF0, GBP_LV},
681 {0xBDF1, 0xBE0B, GBP_LVT},
682 {0xBE0C, 0xBE0C, GBP_LV},
683 {0xBE0D, 0xBE27, GBP_LVT},
684 {0xBE28, 0xBE28, GBP_LV},
685 {0xBE29, 0xBE43, GBP_LVT},
686 {0xBE44, 0xBE44, GBP_LV},
687 {0xBE45, 0xBE5F, GBP_LVT},
688 {0xBE60, 0xBE60, GBP_LV},
689 {0xBE61, 0xBE7B, GBP_LVT},
690 {0xBE7C, 0xBE7C, GBP_LV},
691 {0xBE7D, 0xBE97, GBP_LVT},
692 {0xBE98, 0xBE98, GBP_LV},
693 {0xBE99, 0xBEB3, GBP_LVT},
694 {0xBEB4, 0xBEB4, GBP_LV},
695 {0xBEB5, 0xBECF, GBP_LVT},
696 {0xBED0, 0xBED0, GBP_LV},
697 {0xBED1, 0xBEEB, GBP_LVT},
698 {0xBEEC, 0xBEEC, GBP_LV},
699 {0xBEED, 0xBF07, GBP_LVT},
700 {0xBF08, 0xBF08, GBP_LV},
701 {0xBF09, 0xBF23, GBP_LVT},
702 {0xBF24, 0xBF24, GBP_LV},
703 {0xBF25, 0xBF3F, GBP_LVT},
704 {0xBF40, 0xBF40, GBP_LV},
705 {0xBF41, 0xBF5B, GBP_LVT},
706 {0xBF5C, 0xBF5C, GBP_LV},
707 {0xBF5D, 0xBF77, GBP_LVT},
708 {0xBF78, 0xBF78, GBP_LV},
709 {0xBF79, 0xBF93, GBP_LVT},
710 {0xBF94, 0xBF94, GBP_LV},
711 {0xBF95, 0xBFAF, GBP_LVT},
712 {0xBFB0, 0xBFB0, GBP_LV},
713 {0xBFB1, 0xBFCB, GBP_LVT},
714 {0xBFCC, 0xBFCC, GBP_LV},
715 {0xBFCD, 0xBFE7, GBP_LVT},
716 {0xBFE8, 0xBFE8, GBP_LV},
717 {0xBFE9, 0xC003, GBP_LVT},
718 {0xC004, 0xC004, GBP_LV},
719 {0xC005, 0xC01F, GBP_LVT},
720 {0xC020, 0xC020, GBP_LV},
721 {0xC021, 0xC03B, GBP_LVT},
722 {0xC03C, 0xC03C, GBP_LV},
723 {0xC03D, 0xC057, GBP_LVT},
724 {0xC058, 0xC058, GBP_LV},
725 {0xC059, 0xC073, GBP_LVT},
726 {0xC074, 0xC074, GBP_LV},
727 {0xC075, 0xC08F, GBP_LVT},
728 {0xC090, 0xC090, GBP_LV},
729 {0xC091, 0xC0AB, GBP_LVT},
730 {0xC0AC, 0xC0AC, GBP_LV},
731 {0xC0AD, 0xC0C7, GBP_LVT},
732 {0xC0C8, 0xC0C8, GBP_LV},
733 {0xC0C9, 0xC0E3, GBP_LVT},
734 {0xC0E4, 0xC0E4, GBP_LV},
735 {0xC0E5, 0xC0FF, GBP_LVT},
736 {0xC100, 0xC100, GBP_LV},
737 {0xC101, 0xC11B, GBP_LVT},
738 {0xC11C, 0xC11C, GBP_LV},
739 {0xC11D, 0xC137, GBP_LVT},
740 {0xC138, 0xC138, GBP_LV},
741 {0xC139, 0xC153, GBP_LVT},
742 {0xC154, 0xC154, GBP_LV},
743 {0xC155, 0xC16F, GBP_LVT},
744 {0xC170, 0xC170, GBP_LV},
745 {0xC171, 0xC18B, GBP_LVT},
746 {0xC18C, 0xC18C, GBP_LV},
747 {0xC18D, 0xC1A7, GBP_LVT},
748 {0xC1A8, 0xC1A8, GBP_LV},
749 {0xC1A9, 0xC1C3, GBP_LVT},
750 {0xC1C4, 0xC1C4, GBP_LV},
751 {0xC1C5, 0xC1DF, GBP_LVT},
752 {0xC1E0, 0xC1E0, GBP_LV},
753 {0xC1E1, 0xC1FB, GBP_LVT},
754 {0xC1FC, 0xC1FC, GBP_LV},
755 {0xC1FD, 0xC217, GBP_LVT},
756 {0xC218, 0xC218, GBP_LV},
757 {0xC219, 0xC233, GBP_LVT},
758 {0xC234, 0xC234, GBP_LV},
759 {0xC235, 0xC24F, GBP_LVT},
760 {0xC250, 0xC250, GBP_LV},
761 {0xC251, 0xC26B, GBP_LVT},
762 {0xC26C, 0xC26C, GBP_LV},
763 {0xC26D, 0xC287, GBP_LVT},
764 {0xC288, 0xC288, GBP_LV},
765 {0xC289, 0xC2A3, GBP_LVT},
766 {0xC2A4, 0xC2A4, GBP_LV},
767 {0xC2A5, 0xC2BF, GBP_LVT},
768 {0xC2C0, 0xC2C0, GBP_LV},
769 {0xC2C1, 0xC2DB, GBP_LVT},
770 {0xC2DC, 0xC2DC, GBP_LV},
771 {0xC2DD, 0xC2F7, GBP_LVT},
772 {0xC2F8, 0xC2F8, GBP_LV},
773 {0xC2F9, 0xC313, GBP_LVT},
774 {0xC314, 0xC314, GBP_LV},
775 {0xC315, 0xC32F, GBP_LVT},
776 {0xC330, 0xC330, GBP_LV},
777 {0xC331, 0xC34B, GBP_LVT},
778 {0xC34C, 0xC34C, GBP_LV},
779 {0xC34D, 0xC367, GBP_LVT},
780 {0xC368, 0xC368, GBP_LV},
781 {0xC369, 0xC383, GBP_LVT},
782 {0xC384, 0xC384, GBP_LV},
783 {0xC385, 0xC39F, GBP_LVT},
784 {0xC3A0, 0xC3A0, GBP_LV},
785 {0xC3A1, 0xC3BB, GBP_LVT},
786 {0xC3BC, 0xC3BC, GBP_LV},
787 {0xC3BD, 0xC3D7, GBP_LVT},
788 {0xC3D8, 0xC3D8, GBP_LV},
789 {0xC3D9, 0xC3F3, GBP_LVT},
790 {0xC3F4, 0xC3F4, GBP_LV},
791 {0xC3F5, 0xC40F, GBP_LVT},
792 {0xC410, 0xC410, GBP_LV},
793 {0xC411, 0xC42B, GBP_LVT},
794 {0xC42C, 0xC42C, GBP_LV},
795 {0xC42D, 0xC447, GBP_LVT},
796 {0xC448, 0xC448, GBP_LV},
797 {0xC449, 0xC463, GBP_LVT},
798 {0xC464, 0xC464, GBP_LV},
799 {0xC465, 0xC47F, GBP_LVT},
800 {0xC480, 0xC480, GBP_LV},
801 {0xC481, 0xC49B, GBP_LVT},
802 {0xC49C, 0xC49C, GBP_LV},
803 {0xC49D, 0xC4B7, GBP_LVT},
804 {0xC4B8, 0xC4B8, GBP_LV},
805 {0xC4B9, 0xC4D3, GBP_LVT},
806 {0xC4D4, 0xC4D4, GBP_LV},
807 {0xC4D5, 0xC4EF, GBP_LVT},
808 {0xC4F0, 0xC4F0, GBP_LV},
809 {0xC4F1, 0xC50B, GBP_LVT},
810 {0xC50C, 0xC50C, GBP_LV},
811 {0xC50D, 0xC527, GBP_LVT},
812 {0xC528, 0xC528, GBP_LV},
813 {0xC529, 0xC543, GBP_LVT},
814 {0xC544, 0xC544, GBP_LV},
815 {0xC545, 0xC55F, GBP_LVT},
816 {0xC560, 0xC560, GBP_LV},
817 {0xC561, 0xC57B, GBP_LVT},
818 {0xC57C, 0xC57C, GBP_LV},
819 {0xC57D, 0xC597, GBP_LVT},
820 {0xC598, 0xC598, GBP_LV},
821 {0xC599, 0xC5B3, GBP_LVT},
822 {0xC5B4, 0xC5B4, GBP_LV},
823 {0xC5B5, 0xC5CF, GBP_LVT},
824 {0xC5D0, 0xC5D0, GBP_LV},
825 {0xC5D1, 0xC5EB, GBP_LVT},
826 {0xC5EC, 0xC5EC, GBP_LV},
827 {0xC5ED, 0xC607, GBP_LVT},
828 {0xC608, 0xC608, GBP_LV},
829 {0xC609, 0xC623, GBP_LVT},
830 {0xC624, 0xC624, GBP_LV},
831 {0xC625, 0xC63F, GBP_LVT},
832 {0xC640, 0xC640, GBP_LV},
833 {0xC641, 0xC65B, GBP_LVT},
834 {0xC65C, 0xC65C, GBP_LV},
835 {0xC65D, 0xC677, GBP_LVT},
836 {0xC678, 0xC678, GBP_LV},
837 {0xC679, 0xC693, GBP_LVT},
838 {0xC694, 0xC694, GBP_LV},
839 {0xC695, 0xC6AF, GBP_LVT},
840 {0xC6B0, 0xC6B0, GBP_LV},
841 {0xC6B1, 0xC6CB, GBP_LVT},
842 {0xC6CC, 0xC6CC, GBP_LV},
843 {0xC6CD, 0xC6E7, GBP_LVT},
844 {0xC6E8, 0xC6E8, GBP_LV},
845 {0xC6E9, 0xC703, GBP_LVT},
846 {0xC704, 0xC704, GBP_LV},
847 {0xC705, 0xC71F, GBP_LVT},
848 {0xC720, 0xC720, GBP_LV},
849 {0xC721, 0xC73B, GBP_LVT},
850 {0xC73C, 0xC73C, GBP_LV},
851 {0xC73D, 0xC757, GBP_LVT},
852 {0xC758, 0xC758, GBP_LV},
853 {0xC759, 0xC773, GBP_LVT},
854 {0xC774, 0xC774, GBP_LV},
855 {0xC775, 0xC78F, GBP_LVT},
856 {0xC790, 0xC790, GBP_LV},
857 {0xC791, 0xC7AB, GBP_LVT},
858 {0xC7AC, 0xC7AC, GBP_LV},
859 {0xC7AD, 0xC7C7, GBP_LVT},
860 {0xC7C8, 0xC7C8, GBP_LV},
861 {0xC7C9, 0xC7E3, GBP_LVT},
862 {0xC7E4, 0xC7E4, GBP_LV},
863 {0xC7E5, 0xC7FF, GBP_LVT},
864 {0xC800, 0xC800, GBP_LV},
865 {0xC801, 0xC81B, GBP_LVT},
866 {0xC81C, 0xC81C, GBP_LV},
867 {0xC81D, 0xC837, GBP_LVT},
868 {0xC838, 0xC838, GBP_LV},
869 {0xC839, 0xC853, GBP_LVT},
870 {0xC854, 0xC854, GBP_LV},
871 {0xC855, 0xC86F, GBP_LVT},
872 {0xC870, 0xC870, GBP_LV},
873 {0xC871, 0xC88B, GBP_LVT},
874 {0xC88C, 0xC88C, GBP_LV},
875 {0xC88D, 0xC8A7, GBP_LVT},
876 {0xC8A8, 0xC8A8, GBP_LV},
877 {0xC8A9, 0xC8C3, GBP_LVT},
878 {0xC8C4, 0xC8C4, GBP_LV},
879 {0xC8C5, 0xC8DF, GBP_LVT},
880 {0xC8E0, 0xC8E0, GBP_LV},
881 {0xC8E1, 0xC8FB, GBP_LVT},
882 {0xC8FC, 0xC8FC, GBP_LV},
883 {0xC8FD, 0xC917, GBP_LVT},
884 {0xC918, 0xC918, GBP_LV},
885 {0xC919, 0xC933, GBP_LVT},
886 {0xC934, 0xC934, GBP_LV},
887 {0xC935, 0xC94F, GBP_LVT},
888 {0xC950, 0xC950, GBP_LV},
889 {0xC951, 0xC96B, GBP_LVT},
890 {0xC96C, 0xC96C, GBP_LV},
891 {0xC96D, 0xC987, GBP_LVT},
892 {0xC988, 0xC988, GBP_LV},
893 {0xC989, 0xC9A3, GBP_LVT},
894 {0xC9A4, 0xC9A4, GBP_LV},
895 {0xC9A5, 0xC9BF, GBP_LVT},
896 {0xC9C0, 0xC9C0, GBP_LV},
897 {0xC9C1, 0xC9DB, GBP_LVT},
898 {0xC9DC, 0xC9DC, GBP_LV},
899 {0xC9DD, 0xC9F7, GBP_LVT},
900 {0xC9F8, 0xC9F8, GBP_LV},
901 {0xC9F9, 0xCA13, GBP_LVT},
902 {0xCA14, 0xCA14, GBP_LV},
903 {0xCA15, 0xCA2F, GBP_LVT},
904 {0xCA30, 0xCA30, GBP_LV},
905 {0xCA31, 0xCA4B, GBP_LVT},
906 {0xCA4C, 0xCA4C, GBP_LV},
907 {0xCA4D, 0xCA67, GBP_LVT},
908 {0xCA68, 0xCA68, GBP_LV},
909 {0xCA69, 0xCA83, GBP_LVT},
910 {0xCA84, 0xCA84, GBP_LV},
911 {0xCA85, 0xCA9F, GBP_LVT},
912 {0xCAA0, 0xCAA0, GBP_LV},
913 {0xCAA1, 0xCABB, GBP_LVT},
914 {0xCABC, 0xCABC, GBP_LV},
915 {0xCABD, 0xCAD7, GBP_LVT},
916 {0xCAD8, 0xCAD8, GBP_LV},
917 {0xCAD9, 0xCAF3, GBP_LVT},
918 {0xCAF4, 0xCAF4, GBP_LV},
919 {0xCAF5, 0xCB0F, GBP_LVT},
920 {0xCB10, 0xCB10, GBP_LV},
921 {0xCB11, 0xCB2B, GBP_LVT},
922 {0xCB2C, 0xCB2C, GBP_LV},
923 {0xCB2D, 0xCB47, GBP_LVT},
924 {0xCB48, 0xCB48, GBP_LV},
925 {0xCB49, 0xCB63, GBP_LVT},
926 {0xCB64, 0xCB64, GBP_LV},
927 {0xCB65, 0xCB7F, GBP_LVT},
928 {0xCB80, 0xCB80, GBP_LV},
929 {0xCB81, 0xCB9B, GBP_LVT},
930 {0xCB9C, 0xCB9C, GBP_LV},
931 {0xCB9D, 0xCBB7, GBP_LVT},
932 {0xCBB8, 0xCBB8, GBP_LV},
933 {0xCBB9, 0xCBD3, GBP_LVT},
934 {0xCBD4, 0xCBD4, GBP_LV},
935 {0xCBD5, 0xCBEF, GBP_LVT},
936 {0xCBF0, 0xCBF0, GBP_LV},
937 {0xCBF1, 0xCC0B, GBP_LVT},
938 {0xCC0C, 0xCC0C, GBP_LV},
939 {0xCC0D, 0xCC27, GBP_LVT},
940 {0xCC28, 0xCC28, GBP_LV},
941 {0xCC29, 0xCC43, GBP_LVT},
942 {0xCC44, 0xCC44, GBP_LV},
943 {0xCC45, 0xCC5F, GBP_LVT},
944 {0xCC60, 0xCC60, GBP_LV},
945 {0xCC61, 0xCC7B, GBP_LVT},
946 {0xCC7C, 0xCC7C, GBP_LV},
947 {0xCC7D, 0xCC97, GBP_LVT},
948 {0xCC98, 0xCC98, GBP_LV},
949 {0xCC99, 0xCCB3, GBP_LVT},
950 {0xCCB4, 0xCCB4, GBP_LV},
951 {0xCCB5, 0xCCCF, GBP_LVT},
952 {0xCCD0, 0xCCD0, GBP_LV},
953 {0xCCD1, 0xCCEB, GBP_LVT},
954 {0xCCEC, 0xCCEC, GBP_LV},
955 {0xCCED, 0xCD07, GBP_LVT},
956 {0xCD08, 0xCD08, GBP_LV},
957 {0xCD09, 0xCD23, GBP_LVT},
958 {0xCD24, 0xCD24, GBP_LV},
959 {0xCD25, 0xCD3F, GBP_LVT},
960 {0xCD40, 0xCD40, GBP_LV},
961 {0xCD41, 0xCD5B, GBP_LVT},
962 {0xCD5C, 0xCD5C, GBP_LV},
963 {0xCD5D, 0xCD77, GBP_LVT},
964 {0xCD78, 0xCD78, GBP_LV},
965 {0xCD79, 0xCD93, GBP_LVT},
966 {0xCD94, 0xCD94, GBP_LV},
967 {0xCD95, 0xCDAF, GBP_LVT},
968 {0xCDB0, 0xCDB0, GBP_LV},
969 {0xCDB1, 0xCDCB, GBP_LVT},
970 {0xCDCC, 0xCDCC, GBP_LV},
971 {0xCDCD, 0xCDE7, GBP_LVT},
972 {0xCDE8, 0xCDE8, GBP_LV},
973 {0xCDE9, 0xCE03, GBP_LVT},
974 {0xCE04, 0xCE04, GBP_LV},
975 {0xCE05, 0xCE1F, GBP_LVT},
976 {0xCE20, 0xCE20, GBP_LV},
977 {0xCE21, 0xCE3B, GBP_LVT},
978 {0xCE3C, 0xCE3C, GBP_LV},
979 {0xCE3D, 0xCE57, GBP_LVT},
980 {0xCE58, 0xCE58, GBP_LV},
981 {0xCE59, 0xCE73, GBP_LVT},
982 {0xCE74, 0xCE74, GBP_LV},
983 {0xCE75, 0xCE8F, GBP_LVT},
984 {0xCE90, 0xCE90, GBP_LV},
985 {0xCE91, 0xCEAB, GBP_LVT},
986 {0xCEAC, 0xCEAC, GBP_LV},
987 {0xCEAD, 0xCEC7, GBP_LVT},
988 {0xCEC8, 0xCEC8, GBP_LV},
989 {0xCEC9, 0xCEE3, GBP_LVT},
990 {0xCEE4, 0xCEE4, GBP_LV},
991 {0xCEE5, 0xCEFF, GBP_LVT},
992 {0xCF00, 0xCF00, GBP_LV},
993 {0xCF01, 0xCF1B, GBP_LVT},
994 {0xCF1C, 0xCF1C, GBP_LV},
995 {0xCF1D, 0xCF37, GBP_LVT},
996 {0xCF38, 0xCF38, GBP_LV},
997 {0xCF39, 0xCF53, GBP_LVT},
998 {0xCF54, 0xCF54, GBP_LV},
999 {0xCF55, 0xCF6F, GBP_LVT},
1000 {0xCF70, 0xCF70, GBP_LV},
1001 {0xCF71, 0xCF8B, GBP_LVT},
1002 {0xCF8C, 0xCF8C, GBP_LV},
1003 {0xCF8D, 0xCFA7, GBP_LVT},
1004 {0xCFA8, 0xCFA8, GBP_LV},
1005 {0xCFA9, 0xCFC3, GBP_LVT},
1006 {0xCFC4, 0xCFC4, GBP_LV},
1007 {0xCFC5, 0xCFDF, GBP_LVT},
1008 {0xCFE0, 0xCFE0, GBP_LV},
1009 {0xCFE1, 0xCFFB, GBP_LVT},
1010 {0xCFFC, 0xCFFC, GBP_LV},
1011 {0xCFFD, 0xD017, GBP_LVT},
1012 {0xD018, 0xD018, GBP_LV},
1013 {0xD019, 0xD033, GBP_LVT},
1014 {0xD034, 0xD034, GBP_LV},
1015 {0xD035, 0xD04F, GBP_LVT},
1016 {0xD050, 0xD050, GBP_LV},
1017 {0xD051, 0xD06B, GBP_LVT},
1018 {0xD06C, 0xD06C, GBP_LV},
1019 {0xD06D, 0xD087, GBP_LVT},
1020 {0xD088, 0xD088, GBP_LV},
1021 {0xD089, 0xD0A3, GBP_LVT},
1022 {0xD0A4, 0xD0A4, GBP_LV},
1023 {0xD0A5, 0xD0BF, GBP_LVT},
1024 {0xD0C0, 0xD0C0, GBP_LV},
1025 {0xD0C1, 0xD0DB, GBP_LVT},
1026 {0xD0DC, 0xD0DC, GBP_LV},
1027 {0xD0DD, 0xD0F7, GBP_LVT},
1028 {0xD0F8, 0xD0F8, GBP_LV},
1029 {0xD0F9, 0xD113, GBP_LVT},
1030 {0xD114, 0xD114, GBP_LV},
1031 {0xD115, 0xD12F, GBP_LVT},
1032 {0xD130, 0xD130, GBP_LV},
1033 {0xD131, 0xD14B, GBP_LVT},
1034 {0xD14C, 0xD14C, GBP_LV},
1035 {0xD14D, 0xD167, GBP_LVT},
1036 {0xD168, 0xD168, GBP_LV},
1037 {0xD169, 0xD183, GBP_LVT},
1038 {0xD184, 0xD184, GBP_LV},
1039 {0xD185, 0xD19F, GBP_LVT},
1040 {0xD1A0, 0xD1A0, GBP_LV},
1041 {0xD1A1, 0xD1BB, GBP_LVT},
1042 {0xD1BC, 0xD1BC, GBP_LV},
1043 {0xD1BD, 0xD1D7, GBP_LVT},
1044 {0xD1D8, 0xD1D8, GBP_LV},
1045 {0xD1D9, 0xD1F3, GBP_LVT},
1046 {0xD1F4, 0xD1F4, GBP_LV},
1047 {0xD1F5, 0xD20F, GBP_LVT},
1048 {0xD210, 0xD210, GBP_LV},
1049 {0xD211, 0xD22B, GBP_LVT},
1050 {0xD22C, 0xD22C, GBP_LV},
1051 {0xD22D, 0xD247, GBP_LVT},
1052 {0xD248, 0xD248, GBP_LV},
1053 {0xD249, 0xD263, GBP_LVT},
1054 {0xD264, 0xD264, GBP_LV},
1055 {0xD265, 0xD27F, GBP_LVT},
1056 {0xD280, 0xD280, GBP_LV},
1057 {0xD281, 0xD29B, GBP_LVT},
1058 {0xD29C, 0xD29C, GBP_LV},
1059 {0xD29D, 0xD2B7, GBP_LVT},
1060 {0xD2B8, 0xD2B8, GBP_LV},
1061 {0xD2B9, 0xD2D3, GBP_LVT},
1062 {0xD2D4, 0xD2D4, GBP_LV},
1063 {0xD2D5, 0xD2EF, GBP_LVT},
1064 {0xD2F0, 0xD2F0, GBP_LV},
1065 {0xD2F1, 0xD30B, GBP_LVT},
1066 {0xD30C, 0xD30C, GBP_LV},
1067 {0xD30D, 0xD327, GBP_LVT},
1068 {0xD328, 0xD328, GBP_LV},
1069 {0xD329, 0xD343, GBP_LVT},
1070 {0xD344, 0xD344, GBP_LV},
1071 {0xD345, 0xD35F, GBP_LVT},
1072 {0xD360, 0xD360, GBP_LV},
1073 {0xD361, 0xD37B, GBP_LVT},
1074 {0xD37C, 0xD37C, GBP_LV},
1075 {0xD37D, 0xD397, GBP_LVT},
1076 {0xD398, 0xD398, GBP_LV},
1077 {0xD399, 0xD3B3, GBP_LVT},
1078 {0xD3B4, 0xD3B4, GBP_LV},
1079 {0xD3B5, 0xD3CF, GBP_LVT},
1080 {0xD3D0, 0xD3D0, GBP_LV},
1081 {0xD3D1, 0xD3EB, GBP_LVT},
1082 {0xD3EC, 0xD3EC, GBP_LV},
1083 {0xD3ED, 0xD407, GBP_LVT},
1084 {0xD408, 0xD408, GBP_LV},
1085 {0xD409, 0xD423, GBP_LVT},
1086 {0xD424, 0xD424, GBP_LV},
1087 {0xD425, 0xD43F, GBP_LVT},
1088 {0xD440, 0xD440, GBP_LV},
1089 {0xD441, 0xD45B, GBP_LVT},
1090 {0xD45C, 0xD45C, GBP_LV},
1091 {0xD45D, 0xD477, GBP_LVT},
1092 {0xD478, 0xD478, GBP_LV},
1093 {0xD479, 0xD493, GBP_LVT},
1094 {0xD494, 0xD494, GBP_LV},
1095 {0xD495, 0xD4AF, GBP_LVT},
1096 {0xD4B0, 0xD4B0, GBP_LV},
1097 {0xD4B1, 0xD4CB, GBP_LVT},
1098 {0xD4CC, 0xD4CC, GBP_LV},
1099 {0xD4CD, 0xD4E7, GBP_LVT},
1100 {0xD4E8, 0xD4E8, GBP_LV},
1101 {0xD4E9, 0xD503, GBP_LVT},
1102 {0xD504, 0xD504, GBP_LV},
1103 {0xD505, 0xD51F, GBP_LVT},
1104 {0xD520, 0xD520, GBP_LV},
1105 {0xD521, 0xD53B, GBP_LVT},
1106 {0xD53C, 0xD53C, GBP_LV},
1107 {0xD53D, 0xD557, GBP_LVT},
1108 {0xD558, 0xD558, GBP_LV},
1109 {0xD559, 0xD573, GBP_LVT},
1110 {0xD574, 0xD574, GBP_LV},
1111 {0xD575, 0xD58F, GBP_LVT},
1112 {0xD590, 0xD590, GBP_LV},
1113 {0xD591, 0xD5AB, GBP_LVT},
1114 {0xD5AC, 0xD5AC, GBP_LV},
1115 {0xD5AD, 0xD5C7, GBP_LVT},
1116 {0xD5C8, 0xD5C8, GBP_LV},
1117 {0xD5C9, 0xD5E3, GBP_LVT},
1118 {0xD5E4, 0xD5E4, GBP_LV},
1119 {0xD5E5, 0xD5FF, GBP_LVT},
1120 {0xD600, 0xD600, GBP_LV},
1121 {0xD601, 0xD61B, GBP_LVT},
1122 {0xD61C, 0xD61C, GBP_LV},
1123 {0xD61D, 0xD637, GBP_LVT},
1124 {0xD638, 0xD638, GBP_LV},
1125 {0xD639, 0xD653, GBP_LVT},
1126 {0xD654, 0xD654, GBP_LV},
1127 {0xD655, 0xD66F, GBP_LVT},
1128 {0xD670, 0xD670, GBP_LV},
1129 {0xD671, 0xD68B, GBP_LVT},
1130 {0xD68C, 0xD68C, GBP_LV},
1131 {0xD68D, 0xD6A7, GBP_LVT},
1132 {0xD6A8, 0xD6A8, GBP_LV},
1133 {0xD6A9, 0xD6C3, GBP_LVT},
1134 {0xD6C4, 0xD6C4, GBP_LV},
1135 {0xD6C5, 0xD6DF, GBP_LVT},
1136 {0xD6E0, 0xD6E0, GBP_LV},
1137 {0xD6E1, 0xD6FB, GBP_LVT},
1138 {0xD6FC, 0xD6FC, GBP_LV},
1139 {0xD6FD, 0xD717, GBP_LVT},
1140 {0xD718, 0xD718, GBP_LV},
1141 {0xD719, 0xD733, GBP_LVT},
1142 {0xD734, 0xD734, GBP_LV},
1143 {0xD735, 0xD74F, GBP_LVT},
1144 {0xD750, 0xD750, GBP_LV},
1145 {0xD751, 0xD76B, GBP_LVT},
1146 {0xD76C, 0xD76C, GBP_LV},
1147 {0xD76D, 0xD787, GBP_LVT},
1148 {0xD788, 0xD788, GBP_LV},
1149 {0xD789, 0xD7A3, GBP_LVT},
1150 {0xD7B0, 0xD7C6, GBP_V},
1151 {0xD7CB, 0xD7FB, GBP_T},
1152 {0xD800, 0xDFFF, GBP_Control},
1153 {0xFB1E, 0xFB1E, GBP_Extend},
1154 {0xFE00, 0xFE0F, GBP_Extend},
1155 {0xFE20, 0xFE2F, GBP_Extend},
1156 {0xFEFF, 0xFEFF, GBP_Control},
1157 {0xFF9E, 0xFF9F, GBP_Extend},
1158 {0xFFF0, 0xFFF8, GBP_Control},
1159 {0xFFF9, 0xFFFB, GBP_Control},
1160 {0x101FD, 0x101FD, GBP_Extend},
1161 {0x102E0, 0x102E0, GBP_Extend},
1162 {0x10376, 0x1037A, GBP_Extend},
1163 {0x10A01, 0x10A03, GBP_Extend},
1164 {0x10A05, 0x10A06, GBP_Extend},
1165 {0x10A0C, 0x10A0F, GBP_Extend},
1166 {0x10A38, 0x10A3A, GBP_Extend},
1167 {0x10A3F, 0x10A3F, GBP_Extend},
1168 {0x10AE5, 0x10AE6, GBP_Extend},
1169 {0x11000, 0x11000, GBP_SpacingMark},
1170 {0x11001, 0x11001, GBP_Extend},
1171 {0x11002, 0x11002, GBP_SpacingMark},
1172 {0x11038, 0x11046, GBP_Extend},
1173 {0x1107F, 0x11081, GBP_Extend},
1174 {0x11082, 0x11082, GBP_SpacingMark},
1175 {0x110B0, 0x110B2, GBP_SpacingMark},
1176 {0x110B3, 0x110B6, GBP_Extend},
1177 {0x110B7, 0x110B8, GBP_SpacingMark},
1178 {0x110B9, 0x110BA, GBP_Extend},
1179 {0x110BD, 0x110BD, GBP_Prepend},
1180 {0x11100, 0x11102, GBP_Extend},
1181 {0x11127, 0x1112B, GBP_Extend},
1182 {0x1112C, 0x1112C, GBP_SpacingMark},
1183 {0x1112D, 0x11134, GBP_Extend},
1184 {0x11173, 0x11173, GBP_Extend},
1185 {0x11180, 0x11181, GBP_Extend},
1186 {0x11182, 0x11182, GBP_SpacingMark},
1187 {0x111B3, 0x111B5, GBP_SpacingMark},
1188 {0x111B6, 0x111BE, GBP_Extend},
1189 {0x111BF, 0x111C0, GBP_SpacingMark},
1190 {0x111C2, 0x111C3, GBP_Prepend},
1191 {0x111CA, 0x111CC, GBP_Extend},
1192 {0x1122C, 0x1122E, GBP_SpacingMark},
1193 {0x1122F, 0x11231, GBP_Extend},
1194 {0x11232, 0x11233, GBP_SpacingMark},
1195 {0x11234, 0x11234, GBP_Extend},
1196 {0x11235, 0x11235, GBP_SpacingMark},
1197 {0x11236, 0x11237, GBP_Extend},
1198 {0x1123E, 0x1123E, GBP_Extend},
1199 {0x112DF, 0x112DF, GBP_Extend},
1200 {0x112E0, 0x112E2, GBP_SpacingMark},
1201 {0x112E3, 0x112EA, GBP_Extend},
1202 {0x11300, 0x11301, GBP_Extend},
1203 {0x11302, 0x11303, GBP_SpacingMark},
1204 {0x1133C, 0x1133C, GBP_Extend},
1205 {0x1133E, 0x1133E, GBP_Extend},
1206 {0x1133F, 0x1133F, GBP_SpacingMark},
1207 {0x11340, 0x11340, GBP_Extend},
1208 {0x11341, 0x11344, GBP_SpacingMark},
1209 {0x11347, 0x11348, GBP_SpacingMark},
1210 {0x1134B, 0x1134D, GBP_SpacingMark},
1211 {0x11357, 0x11357, GBP_Extend},
1212 {0x11362, 0x11363, GBP_SpacingMark},
1213 {0x11366, 0x1136C, GBP_Extend},
1214 {0x11370, 0x11374, GBP_Extend},
1215 {0x11435, 0x11437, GBP_SpacingMark},
1216 {0x11438, 0x1143F, GBP_Extend},
1217 {0x11440, 0x11441, GBP_SpacingMark},
1218 {0x11442, 0x11444, GBP_Extend},
1219 {0x11445, 0x11445, GBP_SpacingMark},
1220 {0x11446, 0x11446, GBP_Extend},
1221 {0x114B0, 0x114B0, GBP_Extend},
1222 {0x114B1, 0x114B2, GBP_SpacingMark},
1223 {0x114B3, 0x114B8, GBP_Extend},
1224 {0x114B9, 0x114B9, GBP_SpacingMark},
1225 {0x114BA, 0x114BA, GBP_Extend},
1226 {0x114BB, 0x114BC, GBP_SpacingMark},
1227 {0x114BD, 0x114BD, GBP_Extend},
1228 {0x114BE, 0x114BE, GBP_SpacingMark},
1229 {0x114BF, 0x114C0, GBP_Extend},
1230 {0x114C1, 0x114C1, GBP_SpacingMark},
1231 {0x114C2, 0x114C3, GBP_Extend},
1232 {0x115AF, 0x115AF, GBP_Extend},
1233 {0x115B0, 0x115B1, GBP_SpacingMark},
1234 {0x115B2, 0x115B5, GBP_Extend},
1235 {0x115B8, 0x115BB, GBP_SpacingMark},
1236 {0x115BC, 0x115BD, GBP_Extend},
1237 {0x115BE, 0x115BE, GBP_SpacingMark},
1238 {0x115BF, 0x115C0, GBP_Extend},
1239 {0x115DC, 0x115DD, GBP_Extend},
1240 {0x11630, 0x11632, GBP_SpacingMark},
1241 {0x11633, 0x1163A, GBP_Extend},
1242 {0x1163B, 0x1163C, GBP_SpacingMark},
1243 {0x1163D, 0x1163D, GBP_Extend},
1244 {0x1163E, 0x1163E, GBP_SpacingMark},
1245 {0x1163F, 0x11640, GBP_Extend},
1246 {0x116AB, 0x116AB, GBP_Extend},
1247 {0x116AC, 0x116AC, GBP_SpacingMark},
1248 {0x116AD, 0x116AD, GBP_Extend},
1249 {0x116AE, 0x116AF, GBP_SpacingMark},
1250 {0x116B0, 0x116B5, GBP_Extend},
1251 {0x116B6, 0x116B6, GBP_SpacingMark},
1252 {0x116B7, 0x116B7, GBP_Extend},
1253 {0x1171D, 0x1171F, GBP_Extend},
1254 {0x11720, 0x11721, GBP_SpacingMark},
1255 {0x11722, 0x11725, GBP_Extend},
1256 {0x11726, 0x11726, GBP_SpacingMark},
1257 {0x11727, 0x1172B, GBP_Extend},
1258 {0x11C2F, 0x11C2F, GBP_SpacingMark},
1259 {0x11C30, 0x11C36, GBP_Extend},
1260 {0x11C38, 0x11C3D, GBP_Extend},
1261 {0x11C3E, 0x11C3E, GBP_SpacingMark},
1262 {0x11C3F, 0x11C3F, GBP_Extend},
1263 {0x11C92, 0x11CA7, GBP_Extend},
1264 {0x11CA9, 0x11CA9, GBP_SpacingMark},
1265 {0x11CAA, 0x11CB0, GBP_Extend},
1266 {0x11CB1, 0x11CB1, GBP_SpacingMark},
1267 {0x11CB2, 0x11CB3, GBP_Extend},
1268 {0x11CB4, 0x11CB4, GBP_SpacingMark},
1269 {0x11CB5, 0x11CB6, GBP_Extend},
1270 {0x16AF0, 0x16AF4, GBP_Extend},
1271 {0x16B30, 0x16B36, GBP_Extend},
1272 {0x16F51, 0x16F7E, GBP_SpacingMark},
1273 {0x16F8F, 0x16F92, GBP_Extend},
1274 {0x1BC9D, 0x1BC9E, GBP_Extend},
1275 {0x1BCA0, 0x1BCA3, GBP_Control},
1276 {0x1D165, 0x1D165, GBP_Extend},
1277 {0x1D166, 0x1D166, GBP_SpacingMark},
1278 {0x1D167, 0x1D169, GBP_Extend},
1279 {0x1D16D, 0x1D16D, GBP_SpacingMark},
1280 {0x1D16E, 0x1D172, GBP_Extend},
1281 {0x1D173, 0x1D17A, GBP_Control},
1282 {0x1D17B, 0x1D182, GBP_Extend},
1283 {0x1D185, 0x1D18B, GBP_Extend},
1284 {0x1D1AA, 0x1D1AD, GBP_Extend},
1285 {0x1D242, 0x1D244, GBP_Extend},
1286 {0x1DA00, 0x1DA36, GBP_Extend},
1287 {0x1DA3B, 0x1DA6C, GBP_Extend},
1288 {0x1DA75, 0x1DA75, GBP_Extend},
1289 {0x1DA84, 0x1DA84, GBP_Extend},
1290 {0x1DA9B, 0x1DA9F, GBP_Extend},
1291 {0x1DAA1, 0x1DAAF, GBP_Extend},
1292 {0x1E000, 0x1E006, GBP_Extend},
1293 {0x1E008, 0x1E018, GBP_Extend},
1294 {0x1E01B, 0x1E021, GBP_Extend},
1295 {0x1E023, 0x1E024, GBP_Extend},
1296 {0x1E026, 0x1E02A, GBP_Extend},
1297 {0x1E8D0, 0x1E8D6, GBP_Extend},
1298 {0x1E944, 0x1E94A, GBP_Extend},
1299 {0x1F1E6, 0x1F1FF, GBP_Regional_Indicator},
1300 {0x1F385, 0x1F385, GBP_E_Base},
1301 {0x1F3C3, 0x1F3C4, GBP_E_Base},
1302 {0x1F3CA, 0x1F3CB, GBP_E_Base},
1303 {0x1F3FB, 0x1F3FF, GBP_E_Modifier},
1304 {0x1F442, 0x1F443, GBP_E_Base},
1305 {0x1F446, 0x1F450, GBP_E_Base},
1306 {0x1F466, 0x1F469, GBP_E_Base_GAZ},
1307 {0x1F46E, 0x1F46E, GBP_E_Base},
1308 {0x1F470, 0x1F478, GBP_E_Base},
1309 {0x1F47C, 0x1F47C, GBP_E_Base},
1310 {0x1F481, 0x1F483, GBP_E_Base},
1311 {0x1F485, 0x1F487, GBP_E_Base},
1312 {0x1F48B, 0x1F48B, GBP_Glue_After_Zwj},
1313 {0x1F4AA, 0x1F4AA, GBP_E_Base},
1314 {0x1F575, 0x1F575, GBP_E_Base},
1315 {0x1F57A, 0x1F57A, GBP_E_Base},
1316 {0x1F590, 0x1F590, GBP_E_Base},
1317 {0x1F595, 0x1F596, GBP_E_Base},
1318 {0x1F5E8, 0x1F5E8, GBP_Glue_After_Zwj},
1319 {0x1F645, 0x1F647, GBP_E_Base},
1320 {0x1F64B, 0x1F64F, GBP_E_Base},
1321 {0x1F6A3, 0x1F6A3, GBP_E_Base},
1322 {0x1F6B4, 0x1F6B6, GBP_E_Base},
1323 {0x1F6C0, 0x1F6C0, GBP_E_Base},
1324 {0x1F918, 0x1F91E, GBP_E_Base},
1325 {0x1F926, 0x1F926, GBP_E_Base},
1326 {0x1F930, 0x1F930, GBP_E_Base},
1327 {0x1F933, 0x1F939, GBP_E_Base},
1328 {0x1F93C, 0x1F93E, GBP_E_Base},
1329 {0xE0000, 0xE0000, GBP_Control},
1330 {0xE0001, 0xE0001, GBP_Control},
1331 {0xE0002, 0xE001F, GBP_Control},
1332 {0xE0020, 0xE007F, GBP_Extend},
1333 {0xE0080, 0xE00FF, GBP_Control},
1334 {0xE0100, 0xE01EF, GBP_Extend},
1335 {0xE01F0, 0xE0FFF, GBP_Control},
1336 {0xFFFFFFFF, 0xFFFFFFFF, GBP_Undefined}
1337};
diff --git a/src/static_libs/libunibreak/graphemebreakdef.h b/src/static_libs/libunibreak/graphemebreakdef.h
new file mode 100644
index 0000000000..0de1f3d623
--- /dev/null
+++ b/src/static_libs/libunibreak/graphemebreakdef.h
@@ -0,0 +1,82 @@
1/*
2 * Grapheme breaking in a Unicode sequence. Designed to be used in a
3 * generic text renderer.
4 *
5 * Copyright (C) 2016 Andreas Röver <roever at users dot sf dot net>
6 *
7 * This software is provided 'as-is', without any express or implied
8 * warranty. In no event will the author be held liable for any damages
9 * arising from the use of this software.
10 *
11 * Permission is granted to anyone to use this software for any purpose,
12 * including commercial applications, and to alter it and redistribute
13 * it freely, subject to the following restrictions:
14 *
15 * 1. The origin of this software must not be misrepresented; you must
16 * not claim that you wrote the original software. If you use this
17 * software in a product, an acknowledgement in the product
18 * documentation would be appreciated but is not required.
19 * 2. Altered source versions must be plainly marked as such, and must
20 * not be misrepresented as being the original software.
21 * 3. This notice may not be removed or altered from any source
22 * distribution.
23 *
24 * The main reference is Unicode Standard Annex 29 (UAX #29):
25 * <URL:http://unicode.org/reports/tr29>
26 *
27 * When this library was designed, this annex was at Revision 29, for
28 * Unicode 9.0.0:
29 * <URL:http://www.unicode.org/reports/tr29/tr29-29.html>
30 *
31 * The Unicode Terms of Use are available at
32 * <URL:http://www.unicode.org/copyright.html>
33 */
34
35/**
36 * @file graphemebreakdef.h
37 *
38 * Definitions of internal data structures, declarations of global
39 * variables, and function prototypes for the grapheme breaking algorithm.
40 *
41 * @author Andreas Röver
42 */
43
44#include "unibreakdef.h"
45
46/**
47 * Word break classes. This is a direct mapping of Table 2 of Unicode
48 * Standard Annex 29
49 */
50enum GraphemeBreakClass
51{
52 GBP_CR,
53 GBP_LF,
54 GBP_Control,
55 GBP_Extend,
56 GBP_ZWJ,
57 GBP_Regional_Indicator,
58 GBP_Prepend,
59 GBP_SpacingMark,
60 GBP_L,
61 GBP_V,
62 GBP_T,
63 GBP_LV,
64 GBP_LVT,
65 GBP_E_Base,
66 GBP_E_Modifier,
67 GBP_Glue_After_Zwj,
68 GBP_E_Base_GAZ,
69 GBP_Other,
70 GBP_Undefined
71};
72
73/**
74 * Struct for entries of grapheme break properties. The array of the
75 * entries \e must be sorted.
76 */
77struct GraphemeBreakProperties
78{
79 utf32_t start; /**< Starting coding point */
80 utf32_t end; /**< End coding point, including */
81 enum GraphemeBreakClass prop; /**< The grapheme breaking property */
82};
diff --git a/src/static_libs/libunibreak/linebreak.c b/src/static_libs/libunibreak/linebreak.c
index 3d87a0413d..41f23c1c08 100644
--- a/src/static_libs/libunibreak/linebreak.c
+++ b/src/static_libs/libunibreak/linebreak.c
@@ -45,7 +45,6 @@
45 * Implementation of the line breaking algorithm as described in Unicode 45 * Implementation of the line breaking algorithm as described in Unicode
46 * Standard Annex 14. 46 * Standard Annex 14.
47 * 47 *
48 * @version 3.2, 2016/12/04
49 * @author Wu Yongwei 48 * @author Wu Yongwei
50 * @author Petr Filipsky 49 * @author Petr Filipsky
51 */ 50 */
@@ -68,7 +67,7 @@
68 67
69/** 68/**
70 * Enumeration of break actions. They are used in the break action 69 * Enumeration of break actions. They are used in the break action
71 * pair table below. 70 * pair table #baTable.
72 */ 71 */
73enum BreakAction 72enum BreakAction
74{ 73{
@@ -81,7 +80,7 @@ enum BreakAction
81 80
82/** 81/**
83 * Break action pair table. This is a direct mapping of Table 2 of 82 * Break action pair table. This is a direct mapping of Table 2 of
84 * Unicode Standard Annex 14, Revision 37. 83 * Unicode Standard Annex 14, Revision 37, except the "CB" part.
85 */ 84 */
86static enum BreakAction baTable[LBP_CB][LBP_CB] = { 85static enum BreakAction baTable[LBP_CB][LBP_CB] = {
87 { /* OP */ 86 { /* OP */
@@ -313,11 +312,12 @@ static struct LineBreakPropertiesIndex lb_prop_index[LINEBREAK_INDEX_SIZE] =
313static __inline int ends_with(const char *str, const char *suffix, 312static __inline int ends_with(const char *str, const char *suffix,
314 unsigned suffixLen) 313 unsigned suffixLen)
315{ 314{
315 unsigned len;
316 if (str == NULL) 316 if (str == NULL)
317 { 317 {
318 return 0; 318 return 0;
319 } 319 }
320 unsigned len = strlen(str); 320 len = strlen(str);
321 if (len >= suffixLen && 321 if (len >= suffixLen &&
322 memcmp(str + len - suffixLen, suffix, suffixLen) == 0) 322 memcmp(str + len - suffixLen, suffix, suffixLen) == 0)
323 { 323 {
@@ -706,6 +706,23 @@ int lb_process_next_char(
706/** 706/**
707 * Sets the line breaking information for a generic input string. 707 * Sets the line breaking information for a generic input string.
708 * 708 *
709 * Currently, this implementation has customization for the following
710 * ISO 639-1 language codes (for \a lang):
711 *
712 * - de (German)
713 * - en (English)
714 * - es (Spanish)
715 * - fr (French)
716 * - ja (Japanese)
717 * - ko (Korean)
718 * - ru (Russian)
719 * - zh (Chinese)
720 *
721 * In addition, a suffix <code>"-strict"</code> may be added to indicate
722 * strict (as versus normal) line-breaking behaviour. See the <a
723 * href="http://www.unicode.org/reports/tr14/#CJ">Conditional Japanese
724 * Starter section of UAX #14</a> for more details.
725 *
709 * @param[in] s input string 726 * @param[in] s input string
710 * @param[in] len length of the input 727 * @param[in] len length of the input
711 * @param[in] lang language of the input 728 * @param[in] lang language of the input
@@ -766,6 +783,7 @@ void set_linebreaks(
766 * @param[out] brks pointer to the output breaking data, containing 783 * @param[out] brks pointer to the output breaking data, containing
767 * #LINEBREAK_MUSTBREAK, #LINEBREAK_ALLOWBREAK, 784 * #LINEBREAK_MUSTBREAK, #LINEBREAK_ALLOWBREAK,
768 * #LINEBREAK_NOBREAK, or #LINEBREAK_INSIDEACHAR 785 * #LINEBREAK_NOBREAK, or #LINEBREAK_INSIDEACHAR
786 * @see #set_linebreaks for a note about \a lang.
769 */ 787 */
770void set_linebreaks_utf8( 788void set_linebreaks_utf8(
771 const utf8_t *s, 789 const utf8_t *s,
@@ -786,6 +804,7 @@ void set_linebreaks_utf8(
786 * @param[out] brks pointer to the output breaking data, containing 804 * @param[out] brks pointer to the output breaking data, containing
787 * #LINEBREAK_MUSTBREAK, #LINEBREAK_ALLOWBREAK, 805 * #LINEBREAK_MUSTBREAK, #LINEBREAK_ALLOWBREAK,
788 * #LINEBREAK_NOBREAK, or #LINEBREAK_INSIDEACHAR 806 * #LINEBREAK_NOBREAK, or #LINEBREAK_INSIDEACHAR
807 * @see #set_linebreaks for a note about \a lang.
789 */ 808 */
790void set_linebreaks_utf16( 809void set_linebreaks_utf16(
791 const utf16_t *s, 810 const utf16_t *s,
@@ -806,6 +825,7 @@ void set_linebreaks_utf16(
806 * @param[out] brks pointer to the output breaking data, containing 825 * @param[out] brks pointer to the output breaking data, containing
807 * #LINEBREAK_MUSTBREAK, #LINEBREAK_ALLOWBREAK, 826 * #LINEBREAK_MUSTBREAK, #LINEBREAK_ALLOWBREAK,
808 * #LINEBREAK_NOBREAK, or #LINEBREAK_INSIDEACHAR 827 * #LINEBREAK_NOBREAK, or #LINEBREAK_INSIDEACHAR
828 * @see #set_linebreaks for a note about \a lang.
809 */ 829 */
810void set_linebreaks_utf32( 830void set_linebreaks_utf32(
811 const utf32_t *s, 831 const utf32_t *s,
diff --git a/src/static_libs/libunibreak/linebreak.h b/src/static_libs/libunibreak/linebreak.h
index 7753b3d83b..fd7351191b 100644
--- a/src/static_libs/libunibreak/linebreak.h
+++ b/src/static_libs/libunibreak/linebreak.h
@@ -43,7 +43,6 @@
43 * 43 *
44 * Header file for the line breaking algorithm. 44 * Header file for the line breaking algorithm.
45 * 45 *
46 * @version 3.1, 2016/09/10
47 * @author Wu Yongwei 46 * @author Wu Yongwei
48 */ 47 */
49 48
diff --git a/src/static_libs/libunibreak/linebreakdef.c b/src/static_libs/libunibreak/linebreakdef.c
index 04c3db3487..6b485cecbd 100644
--- a/src/static_libs/libunibreak/linebreakdef.c
+++ b/src/static_libs/libunibreak/linebreakdef.c
@@ -43,7 +43,6 @@
43 * 43 *
44 * Definition of language-specific data. 44 * Definition of language-specific data.
45 * 45 *
46 * @version 3.1, 2016/09/10
47 * @author Wu Yongwei 46 * @author Wu Yongwei
48 */ 47 */
49 48
diff --git a/src/static_libs/libunibreak/linebreakdef.h b/src/static_libs/libunibreak/linebreakdef.h
index 9432ed3326..37ec7b546e 100644
--- a/src/static_libs/libunibreak/linebreakdef.h
+++ b/src/static_libs/libunibreak/linebreakdef.h
@@ -45,7 +45,6 @@
45 * Definitions of internal data structures, declarations of global 45 * Definitions of internal data structures, declarations of global
46 * variables, and function prototypes for the line breaking algorithm. 46 * variables, and function prototypes for the line breaking algorithm.
47 * 47 *
48 * @version 3.2, 2016/12/03
49 * @author Wu Yongwei 48 * @author Wu Yongwei
50 * @author Petr Filipsky 49 * @author Petr Filipsky
51 */ 50 */
diff --git a/src/static_libs/libunibreak/unibreakbase.c b/src/static_libs/libunibreak/unibreakbase.c
index b0d8f3b729..686852a990 100644
--- a/src/static_libs/libunibreak/unibreakbase.c
+++ b/src/static_libs/libunibreak/unibreakbase.c
@@ -4,7 +4,7 @@
4 * Break processing in a Unicode sequence. Designed to be used in a 4 * Break processing in a Unicode sequence. Designed to be used in a
5 * generic text renderer. 5 * generic text renderer.
6 * 6 *
7 * Copyright (C) 2015 Wu Yongwei <wuyongwei at gmail dot com> 7 * Copyright (C) 2015-2016 Wu Yongwei <wuyongwei at gmail dot com>
8 * 8 *
9 * This software is provided 'as-is', without any express or implied 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 10 * warranty. In no event will the author be held liable for any damages
@@ -29,7 +29,6 @@
29 * 29 *
30 * Definition of basic libunibreak information. 30 * Definition of basic libunibreak information.
31 * 31 *
32 * @version 3.0, 2015/05/10
33 * @author Wu Yongwei 32 * @author Wu Yongwei
34 */ 33 */
35 34
diff --git a/src/static_libs/libunibreak/unibreakbase.h b/src/static_libs/libunibreak/unibreakbase.h
index 08c012737c..ff9a6ce8a9 100644
--- a/src/static_libs/libunibreak/unibreakbase.h
+++ b/src/static_libs/libunibreak/unibreakbase.h
@@ -4,7 +4,7 @@
4 * Break processing in a Unicode sequence. Designed to be used in a 4 * Break processing in a Unicode sequence. Designed to be used in a
5 * generic text renderer. 5 * generic text renderer.
6 * 6 *
7 * Copyright (C) 2015 Wu Yongwei <wuyongwei at gmail dot com> 7 * Copyright (C) 2015-2016 Wu Yongwei <wuyongwei at gmail dot com>
8 * 8 *
9 * This software is provided 'as-is', without any express or implied 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 10 * warranty. In no event will the author be held liable for any damages
@@ -29,7 +29,6 @@
29 * 29 *
30 * Header file for common definitions in the libunibreak library. 30 * Header file for common definitions in the libunibreak library.
31 * 31 *
32 * @version 3.0, 2015/05/10
33 * @author Wu Yongwei 32 * @author Wu Yongwei
34 */ 33 */
35 34
@@ -40,7 +39,7 @@
40extern "C" { 39extern "C" {
41#endif 40#endif
42 41
43#define UNIBREAK_VERSION 0x0300 /**< Version of the library linebreak */ 42#define UNIBREAK_VERSION 0x0400 /**< Version of the library linebreak */
44extern const int unibreak_version; 43extern const int unibreak_version;
45 44
46#ifndef UNIBREAK_UTF_TYPES_DEFINED 45#ifndef UNIBREAK_UTF_TYPES_DEFINED
diff --git a/src/static_libs/libunibreak/unibreakdef.c b/src/static_libs/libunibreak/unibreakdef.c
index 20ce2b3484..4d4f2b2863 100644
--- a/src/static_libs/libunibreak/unibreakdef.c
+++ b/src/static_libs/libunibreak/unibreakdef.c
@@ -4,7 +4,7 @@
4 * Break processing in a Unicode sequence. Designed to be used in a 4 * Break processing in a Unicode sequence. Designed to be used in a
5 * generic text renderer. 5 * generic text renderer.
6 * 6 *
7 * Copyright (C) 2015 Wu Yongwei <wuyongwei at gmail dot com> 7 * Copyright (C) 2015-2016 Wu Yongwei <wuyongwei at gmail dot com>
8 * 8 *
9 * This software is provided 'as-is', without any express or implied 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 10 * warranty. In no event will the author be held liable for any damages
@@ -29,7 +29,6 @@
29 * 29 *
30 * Definition of utility functions used by the libunibreak library. 30 * Definition of utility functions used by the libunibreak library.
31 * 31 *
32 * @version 3.0, 2015/05/10
33 * @author Wu Yongwei 32 * @author Wu Yongwei
34 */ 33 */
35 34
diff --git a/src/static_libs/libunibreak/unibreakdef.h b/src/static_libs/libunibreak/unibreakdef.h
index f5d5744990..e13016d8cd 100644
--- a/src/static_libs/libunibreak/unibreakdef.h
+++ b/src/static_libs/libunibreak/unibreakdef.h
@@ -4,7 +4,7 @@
4 * Break processing in a Unicode sequence. Designed to be used in a 4 * Break processing in a Unicode sequence. Designed to be used in a
5 * generic text renderer. 5 * generic text renderer.
6 * 6 *
7 * Copyright (C) 2015 Wu Yongwei <wuyongwei at gmail dot com> 7 * Copyright (C) 2015-2016 Wu Yongwei <wuyongwei at gmail dot com>
8 * 8 *
9 * This software is provided 'as-is', without any express or implied 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 10 * warranty. In no event will the author be held liable for any damages
@@ -29,7 +29,6 @@
29 * 29 *
30 * Header file for private definitions in the libunibreak library. 30 * Header file for private definitions in the libunibreak library.
31 * 31 *
32 * @version 3.0, 2015/05/10
33 * @author Wu Yongwei 32 * @author Wu Yongwei
34 */ 33 */
35 34
diff --git a/src/static_libs/libunibreak/wordbreak.c b/src/static_libs/libunibreak/wordbreak.c
index d90d77b799..aece4b3c45 100644
--- a/src/static_libs/libunibreak/wordbreak.c
+++ b/src/static_libs/libunibreak/wordbreak.c
@@ -4,7 +4,7 @@
4 * Word breaking in a Unicode sequence. Designed to be used in a 4 * Word breaking in a Unicode sequence. Designed to be used in a
5 * generic text renderer. 5 * generic text renderer.
6 * 6 *
7 * Copyright (C) 2013-2015 Tom Hacohen <tom at stosb dot com> 7 * Copyright (C) 2013-2016 Tom Hacohen <tom at stosb dot com>
8 * 8 *
9 * This software is provided 'as-is', without any express or implied 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 10 * warranty. In no event will the author be held liable for any damages
@@ -30,9 +30,9 @@
30 * Unicode 6.0.0: 30 * Unicode 6.0.0:
31 * <URL:http://www.unicode.org/reports/tr29/tr29-17.html> 31 * <URL:http://www.unicode.org/reports/tr29/tr29-17.html>
32 * 32 *
33 * This library has been updated according to Revision 27, for 33 * This library has been updated according to Revision 29, for
34 * Unicode 8.0.0: 34 * Unicode 9.0.0:
35 * <URL:http://www.unicode.org/reports/tr29/tr29-27.html> 35 * <URL:http://www.unicode.org/reports/tr29/tr29-29.html>
36 * 36 *
37 * The Unicode Terms of Use are available at 37 * The Unicode Terms of Use are available at
38 * <URL:http://www.unicode.org/copyright.html> 38 * <URL:http://www.unicode.org/copyright.html>
@@ -44,7 +44,6 @@
44 * Implementation of the word breaking algorithm as described in Unicode 44 * Implementation of the word breaking algorithm as described in Unicode
45 * Standard Annex 29. 45 * Standard Annex 29.
46 * 46 *
47 * @version 3.1, 2015/05/18
48 * @author Tom Hacohen 47 * @author Tom Hacohen
49 */ 48 */
50 49
@@ -149,7 +148,7 @@ static void set_brks_to(
149 * 148 *
150 * @param[in] s input string 149 * @param[in] s input string
151 * @param[in] len length of the input 150 * @param[in] len length of the input
152 * @param[in] lang language of the input 151 * @param[in] lang language of the input (reserved for future use)
153 * @param[out] brks pointer to the output breaking data, containing 152 * @param[out] brks pointer to the output breaking data, containing
154 * #WORDBREAK_BREAK, #WORDBREAK_NOBREAK, or 153 * #WORDBREAK_BREAK, #WORDBREAK_NOBREAK, or
155 * #WORDBREAK_INSIDEACHAR 154 * #WORDBREAK_INSIDEACHAR
@@ -210,13 +209,7 @@ static void set_wordbreaks(
210 posLast = posCur; 209 posLast = posCur;
211 break; 210 break;
212 } 211 }
213#ifndef __has_attribute 212 /* Fall off */
214# define __has_attribute(x) 0
215#endif
216#if __has_attribute(fallthrough)
217 __attribute__((fallthrough));
218#endif
219 /* Fall off */
220 213
221 case WBP_Newline: 214 case WBP_Newline:
222 /* WB3a,3b */ 215 /* WB3a,3b */
@@ -329,13 +322,7 @@ static void set_wordbreaks(
329 wbcSeqStart = wbcCur; 322 wbcSeqStart = wbcCur;
330 posLast = posCur; 323 posLast = posCur;
331 } 324 }
332#ifndef __has_attribute 325 /* No break on purpose */
333# define __has_attribute(x) 0
334#endif
335#if __has_attribute(fallthrough)
336 __attribute__((fallthrough));
337#endif
338 /* No break on purpose */
339 case WBP_MidNumLet: 326 case WBP_MidNumLet:
340 if (((wbcLast == WBP_ALetter) || 327 if (((wbcLast == WBP_ALetter) ||
341 (wbcLast == WBP_Hebrew_Letter)) || /* WB6,7 */ 328 (wbcLast == WBP_Hebrew_Letter)) || /* WB6,7 */
@@ -511,7 +498,7 @@ static void set_wordbreaks(
511 * 498 *
512 * @param[in] s input UTF-8 string 499 * @param[in] s input UTF-8 string
513 * @param[in] len length of the input 500 * @param[in] len length of the input
514 * @param[in] lang language of the input 501 * @param[in] lang language of the input (reserved for future use)
515 * @param[out] brks pointer to the output breaking data, containing 502 * @param[out] brks pointer to the output breaking data, containing
516 * #WORDBREAK_BREAK, #WORDBREAK_NOBREAK, or 503 * #WORDBREAK_BREAK, #WORDBREAK_NOBREAK, or
517 * #WORDBREAK_INSIDEACHAR 504 * #WORDBREAK_INSIDEACHAR
@@ -531,7 +518,7 @@ void set_wordbreaks_utf8(
531 * 518 *
532 * @param[in] s input UTF-16 string 519 * @param[in] s input UTF-16 string
533 * @param[in] len length of the input 520 * @param[in] len length of the input
534 * @param[in] lang language of the input 521 * @param[in] lang language of the input (reserved for future use)
535 * @param[out] brks pointer to the output breaking data, containing 522 * @param[out] brks pointer to the output breaking data, containing
536 * #WORDBREAK_BREAK, #WORDBREAK_NOBREAK, or 523 * #WORDBREAK_BREAK, #WORDBREAK_NOBREAK, or
537 * #WORDBREAK_INSIDEACHAR 524 * #WORDBREAK_INSIDEACHAR
@@ -551,7 +538,7 @@ void set_wordbreaks_utf16(
551 * 538 *
552 * @param[in] s input UTF-32 string 539 * @param[in] s input UTF-32 string
553 * @param[in] len length of the input 540 * @param[in] len length of the input
554 * @param[in] lang language of the input 541 * @param[in] lang language of the input (reserved for future use)
555 * @param[out] brks pointer to the output breaking data, containing 542 * @param[out] brks pointer to the output breaking data, containing
556 * #WORDBREAK_BREAK, #WORDBREAK_NOBREAK, or 543 * #WORDBREAK_BREAK, #WORDBREAK_NOBREAK, or
557 * #WORDBREAK_INSIDEACHAR 544 * #WORDBREAK_INSIDEACHAR
diff --git a/src/static_libs/libunibreak/wordbreak.h b/src/static_libs/libunibreak/wordbreak.h
index b9124d7b52..1040c13280 100644
--- a/src/static_libs/libunibreak/wordbreak.h
+++ b/src/static_libs/libunibreak/wordbreak.h
@@ -4,7 +4,7 @@
4 * Word breaking in a Unicode sequence. Designed to be used in a 4 * Word breaking in a Unicode sequence. Designed to be used in a
5 * generic text renderer. 5 * generic text renderer.
6 * 6 *
7 * Copyright (C) 2013-2015 Tom Hacohen <tom at stosb dot com> 7 * Copyright (C) 2013-2016 Tom Hacohen <tom at stosb dot com>
8 * 8 *
9 * This software is provided 'as-is', without any express or implied 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 10 * warranty. In no event will the author be held liable for any damages
@@ -30,9 +30,9 @@
30 * Unicode 6.0.0: 30 * Unicode 6.0.0:
31 * <URL:http://www.unicode.org/reports/tr29/tr29-17.html> 31 * <URL:http://www.unicode.org/reports/tr29/tr29-17.html>
32 * 32 *
33 * This library has been updated according to Revision 25, for 33 * This library has been updated according to Revision 29, for
34 * Unicode 7.0.0: 34 * Unicode 9.0.0:
35 * <URL:http://www.unicode.org/reports/tr29/tr29-25.html> 35 * <URL:http://www.unicode.org/reports/tr29/tr29-29.html>
36 * 36 *
37 * The Unicode Terms of Use are available at 37 * The Unicode Terms of Use are available at
38 * <URL:http://www.unicode.org/copyright.html> 38 * <URL:http://www.unicode.org/copyright.html>
@@ -43,7 +43,6 @@
43 * 43 *
44 * Header file for the word breaking (segmentation) algorithm. 44 * Header file for the word breaking (segmentation) algorithm.
45 * 45 *
46 * @version 3.0, 2015/05/10
47 * @author Tom Hacohen 46 * @author Tom Hacohen
48 */ 47 */
49 48
diff --git a/src/static_libs/libunibreak/wordbreakdef.h b/src/static_libs/libunibreak/wordbreakdef.h
index b00aff33e9..82cd98e7c3 100644
--- a/src/static_libs/libunibreak/wordbreakdef.h
+++ b/src/static_libs/libunibreak/wordbreakdef.h
@@ -4,7 +4,7 @@
4 * Word breaking in a Unicode sequence. Designed to be used in a 4 * Word breaking in a Unicode sequence. Designed to be used in a
5 * generic text renderer. 5 * generic text renderer.
6 * 6 *
7 * Copyright (C) 2013-15 Tom Hacohen <tom at stosb dot com> 7 * Copyright (C) 2013-16 Tom Hacohen <tom at stosb dot com>
8 * 8 *
9 * This software is provided 'as-is', without any express or implied 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 10 * warranty. In no event will the author be held liable for any damages
@@ -30,9 +30,9 @@
30 * Unicode 6.0.0: 30 * Unicode 6.0.0:
31 * <URL:http://www.unicode.org/reports/tr29/tr29-17.html> 31 * <URL:http://www.unicode.org/reports/tr29/tr29-17.html>
32 * 32 *
33 * This library has been updated according to Revision 25, for 33 * This library has been updated according to Revision 29, for
34 * Unicode 7.0.0: 34 * Unicode 9.0.0:
35 * <URL:http://www.unicode.org/reports/tr29/tr29-25.html> 35 * <URL:http://www.unicode.org/reports/tr29/tr29-29.html>
36 * 36 *
37 * The Unicode Terms of Use are available at 37 * The Unicode Terms of Use are available at
38 * <URL:http://www.unicode.org/copyright.html> 38 * <URL:http://www.unicode.org/copyright.html>
@@ -44,7 +44,6 @@
44 * Definitions of internal data structures, declarations of global 44 * Definitions of internal data structures, declarations of global
45 * variables, and function prototypes for the word breaking algorithm. 45 * variables, and function prototypes for the word breaking algorithm.
46 * 46 *
47 * @version 3.0, 2015/05/10
48 * @author Tom Hacohen 47 * @author Tom Hacohen
49 */ 48 */
50 49