Update contrib.
1 // Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
14 // This file was last edited on 09/04/2007. Please read the 'Unicode Character Data and Line Break data Update History.doc' file
15 // for the latest updates.
19 #include "LineBreak.h"
20 #include "LineBreakImp.h"
24 _LIT(KLinebreakPanicCategory,"LineBreak");
26 GLDEF_C void Panic(TInt aError)
28 User::Panic(KLinebreakPanicCategory,aError);
31 const TUint KOpFlag = 1 << MLineBreaker::EOpLineBreakClass;
32 const TUint KClFlag = 1 << MLineBreaker::EClLineBreakClass;
33 const TUint KNsFlag = 1 << MLineBreaker::ENsLineBreakClass;
34 const TUint KExFlag = 1 << MLineBreaker::EExLineBreakClass;
35 const TUint KSyFlag = 1 << MLineBreaker::ESyLineBreakClass;
36 const TUint KIsFlag = 1 << MLineBreaker::EIsLineBreakClass;
37 const TUint KPrFlag = 1 << MLineBreaker::EPrLineBreakClass;
38 const TUint KPoFlag = 1 << MLineBreaker::EPoLineBreakClass;
39 const TUint KNuFlag = 1 << MLineBreaker::ENuLineBreakClass;
40 const TUint KAlFlag = 1 << MLineBreaker::EAlLineBreakClass;
41 const TUint KIdFlag = 1 << MLineBreaker::EIdLineBreakClass;
42 const TUint KInFlag = 1 << MLineBreaker::EInLineBreakClass;
43 const TUint KBbFlag = 1 << MLineBreaker::EBbLineBreakClass;
44 const TUint KB2Flag = 1 << MLineBreaker::EB2LineBreakClass;
45 const TUint KZwFlag = 1 << MLineBreaker::EZwLineBreakClass;
46 const TUint KCmFlag = 1 << MLineBreaker::ECmLineBreakClass;
47 const TUint KAiFlag = 1 << MLineBreaker::EAiLineBreakClass;
49 const TUint KAiAlFlags = KAiFlag | KAlFlag;
51 const TUint KAllBreaks = 0xFFFFFFFF;
52 const TUint KUsualForbidden = KClFlag | KExFlag | KSyFlag | KIsFlag | KZwFlag;
53 const TUint KUsualAllowed = KOpFlag | KPrFlag | KPoFlag | KNuFlag | KAiAlFlags | KIdFlag | KInFlag | KBbFlag | KB2Flag;
55 const TUint KAlAllowed = KOpFlag | KPrFlag | KPoFlag | KIdFlag | KBbFlag | KB2Flag;
57 // A table of break rules, indexed by the class of the character before the possible break.
58 static const TLineBreakRule TheLineBreakRuleTable[MLineBreaker::ELineBreakClasses] =
60 { KAllBreaks - KCmFlag,0 }, // Op
61 { KUsualForbidden | KNsFlag,KUsualAllowed - KPoFlag }, // Cl
62 { KUsualForbidden | KOpFlag,0 }, // Qu
63 { KUsualForbidden, 0 }, // Gl
64 { KUsualForbidden, KUsualAllowed }, // Ns
65 { KUsualForbidden, KUsualAllowed }, // Ex
66 { KUsualForbidden, KUsualAllowed - KNuFlag }, // Sy
67 { KUsualForbidden, KUsualAllowed - KNuFlag }, // Is
68 { KUsualForbidden, KPrFlag | KPoFlag | KInFlag | KBbFlag | KB2Flag }, // Pr
69 { KUsualForbidden, KUsualAllowed }, // Po
70 { KUsualForbidden, KOpFlag | KPrFlag | KIdFlag | KBbFlag | KB2Flag }, // Nu
71 { KUsualForbidden, KAlAllowed }, // Al
72 { KUsualForbidden, KUsualAllowed - KPoFlag - KInFlag }, // Id
73 { KUsualForbidden, KUsualAllowed - KInFlag }, // In
74 { KUsualForbidden, KUsualAllowed }, // Hy
75 { KUsualForbidden, KUsualAllowed }, // Ba
76 { KUsualForbidden, 0 }, // Bb
77 { KUsualForbidden | KB2Flag, KUsualAllowed }, // B2
78 { KZwFlag, KAllBreaks - KZwFlag - KCmFlag}, // Zw
79 { KUsualForbidden, KOpFlag | KPrFlag | KPoFlag | KIdFlag | KBbFlag | KB2Flag }, // Cm
85 { KAllBreaks, 0, }, // Sp
87 { KUsualForbidden, KAlAllowed, }, // Ai
92 A sorted table of ranges of characters, with their line breaking classes.
93 A range includes all codes for iStart <= code < iEnd.
94 All these items have fixed range, please don't split any item into more or
95 combine consecutive items even if they have the same property,
96 because these change will cause mismatch with customer definition.
98 static const TLineBreakRange TheLineBreakRangeTable[] =
100 { 0x0000, 0x0009, MLineBreaker::ECmLineBreakClass }, //<control>
101 { 0x0009, 0x000a, MLineBreaker::EBaLineBreakClass }, //<control>
102 { 0x000a, 0x000b, MLineBreaker::ELfLineBreakClass }, //<control>
103 { 0x000b, 0x000c, MLineBreaker::ECmLineBreakClass }, //<control>
104 { 0x000c, 0x000d, MLineBreaker::EBkLineBreakClass }, //<control>
105 { 0x000d, 0x000e, MLineBreaker::ECrLineBreakClass }, //<control>
106 { 0x000e, 0x0020, MLineBreaker::ECmLineBreakClass }, //<control>
107 { 0x0020, 0x0021, MLineBreaker::ESpLineBreakClass }, //space
108 { 0x0021, 0x0022, MLineBreaker::EExLineBreakClass }, //exclamation mark
109 { 0x0022, 0x0023, MLineBreaker::EQuLineBreakClass }, //quotation mark
110 { 0x0023, 0x0024, MLineBreaker::EAlLineBreakClass }, //number sign
111 { 0x0024, 0x0025, MLineBreaker::EPrLineBreakClass }, //dollar sign
112 { 0x0025, 0x0026, MLineBreaker::EPoLineBreakClass }, //percent sign
113 { 0x0026, 0x0027, MLineBreaker::EAlLineBreakClass }, //ampersand
114 { 0x0027, 0x0028, MLineBreaker::EQuLineBreakClass }, //apostrophe
115 { 0x0028, 0x0029, MLineBreaker::EOpLineBreakClass }, //left parenthesis
116 { 0x0029, 0x002a, MLineBreaker::EClLineBreakClass }, //right parenthesis
117 { 0x002a, 0x002b, MLineBreaker::EAlLineBreakClass }, //asterisk
118 { 0x002b, 0x002c, MLineBreaker::EPrLineBreakClass }, //plus sign
119 { 0x002c, 0x002d, MLineBreaker::EIsLineBreakClass }, //comma
120 { 0x002d, 0x002e, MLineBreaker::EHyLineBreakClass }, //hyphen-minus
121 { 0x002e, 0x002f, MLineBreaker::EIsLineBreakClass }, //full stop
122 { 0x002f, 0x0030, MLineBreaker::ESyLineBreakClass }, //solidus
123 { 0x0030, 0x003a, MLineBreaker::ENuLineBreakClass }, //digit zero
124 { 0x003a, 0x003c, MLineBreaker::EIsLineBreakClass }, //colon
125 { 0x003c, 0x003f, MLineBreaker::EAlLineBreakClass }, //less-than sign
126 { 0x003f, 0x0040, MLineBreaker::EExLineBreakClass }, //question mark
127 { 0x0040, 0x005b, MLineBreaker::EAlLineBreakClass }, //commercial at
128 { 0x005b, 0x005c, MLineBreaker::EOpLineBreakClass }, //left square bracket
129 { 0x005c, 0x005d, MLineBreaker::EPrLineBreakClass }, //reverse solidus
130 { 0x005d, 0x005e, MLineBreaker::EClLineBreakClass }, //right square bracket
131 { 0x005e, 0x005f, MLineBreaker::EAlLineBreakClass }, //circumflex accent
132 { 0x005f, 0x0060, MLineBreaker::EAlLineBreakClass }, //low line (underscore)
133 { 0x0060, 0x007b, MLineBreaker::EAlLineBreakClass }, //grave accent
134 { 0x007b, 0x007c, MLineBreaker::EOpLineBreakClass }, //left curly bracket
135 { 0x007c, 0x007d, MLineBreaker::EBaLineBreakClass }, //vertical line
136 { 0x007d, 0x007e, MLineBreaker::EClLineBreakClass }, //right curly bracket
137 { 0x007e, 0x007f, MLineBreaker::EAlLineBreakClass }, //tilde
138 { 0x007f, 0x00a0, MLineBreaker::ECmLineBreakClass }, //<control>
139 { 0x00a0, 0x00a1, MLineBreaker::EGlLineBreakClass }, //no-break space
140 { 0x00a1, 0x00a2, MLineBreaker::EAiLineBreakClass }, //inverted exclamation mark
141 { 0x00a2, 0x00a3, MLineBreaker::EPoLineBreakClass }, //cent sign
142 { 0x00a3, 0x00a6, MLineBreaker::EPrLineBreakClass }, //pound sign
143 { 0x00a6, 0x00a7, MLineBreaker::EAlLineBreakClass }, //broken bar
144 { 0x00a7, 0x00a9, MLineBreaker::EAiLineBreakClass }, //section sign
145 { 0x00a9, 0x00aa, MLineBreaker::EAlLineBreakClass }, //copyright sign
146 { 0x00aa, 0x00ab, MLineBreaker::EAiLineBreakClass }, //feminine ordinal indicator
147 { 0x00ab, 0x00ac, MLineBreaker::EQuLineBreakClass }, //left-pointing double angle quotation mark
148 { 0x00ac, 0x00ad, MLineBreaker::EAlLineBreakClass }, //not sign
149 { 0x00ad, 0x00ae, MLineBreaker::EBaLineBreakClass }, //soft hyphen
150 { 0x00ae, 0x00b0, MLineBreaker::EAlLineBreakClass }, //registered sign
151 { 0x00b0, 0x00b1, MLineBreaker::EPoLineBreakClass }, //degree sign
152 { 0x00b1, 0x00b2, MLineBreaker::EPrLineBreakClass }, //plus-minus sign
153 { 0x00b2, 0x00b4, MLineBreaker::EAiLineBreakClass }, //superscript two
154 { 0x00b4, 0x00b5, MLineBreaker::EBaLineBreakClass }, //acute accent
155 { 0x00b5, 0x00b6, MLineBreaker::EAlLineBreakClass }, //micro sign
156 { 0x00b6, 0x00bb, MLineBreaker::EAiLineBreakClass }, //pilcrow sign
157 { 0x00bb, 0x00bc, MLineBreaker::EQuLineBreakClass }, //right-pointing double angle quotation mark
158 { 0x00bc, 0x00c0, MLineBreaker::EAiLineBreakClass }, //vulgar fraction one quarter
159 { 0x00c0, 0x00c6, MLineBreaker::EAlLineBreakClass }, //latin capital letter a with grave
160 { 0x00c6, 0x00c7, MLineBreaker::EAiLineBreakClass }, //latin capital letter ae
161 { 0x00c7, 0x00d0, MLineBreaker::EAlLineBreakClass }, //latin capital letter c with cedilla
162 { 0x00d0, 0x00d1, MLineBreaker::EAiLineBreakClass }, //latin capital letter eth
163 { 0x00d1, 0x00d7, MLineBreaker::EAlLineBreakClass }, //latin capital letter n with tilde
164 { 0x00d7, 0x00d9, MLineBreaker::EAiLineBreakClass }, //multiplication sign
165 { 0x00d9, 0x00de, MLineBreaker::EAlLineBreakClass }, //latin capital letter u with grave
166 { 0x00de, 0x00e2, MLineBreaker::EAiLineBreakClass }, //latin capital letter thorn
167 { 0x00e2, 0x00e6, MLineBreaker::EAlLineBreakClass }, //latin small letter a with circumflex
168 { 0x00e6, 0x00e7, MLineBreaker::EAiLineBreakClass }, //latin small letter ae
169 { 0x00e7, 0x00e8, MLineBreaker::EAlLineBreakClass }, //latin small letter c with cedilla
170 { 0x00e8, 0x00eb, MLineBreaker::EAiLineBreakClass }, //latin small letter e with grave
171 { 0x00eb, 0x00ec, MLineBreaker::EAlLineBreakClass }, //latin small letter e with diaeresis
172 { 0x00ec, 0x00ee, MLineBreaker::EAiLineBreakClass }, //latin small letter i with grave
173 { 0x00ee, 0x00f0, MLineBreaker::EAlLineBreakClass }, //latin small letter i with circumflex
174 { 0x00f0, 0x00f1, MLineBreaker::EAiLineBreakClass }, //latin small letter eth
175 { 0x00f1, 0x00f2, MLineBreaker::EAlLineBreakClass }, //latin small letter n with tilde
176 { 0x00f2, 0x00f4, MLineBreaker::EAiLineBreakClass }, //latin small letter o with grave
177 { 0x00f4, 0x00f7, MLineBreaker::EAlLineBreakClass }, //latin small letter o with circumflex
178 { 0x00f7, 0x00fb, MLineBreaker::EAiLineBreakClass }, //division sign
179 { 0x00fb, 0x00fc, MLineBreaker::EAlLineBreakClass }, //latin small letter u with circumflex
180 { 0x00fc, 0x00fd, MLineBreaker::EAiLineBreakClass }, //latin small letter u with diaeresis
181 { 0x00fd, 0x00fe, MLineBreaker::EAlLineBreakClass }, //latin small letter y with acute
182 { 0x00fe, 0x00ff, MLineBreaker::EAiLineBreakClass }, //latin small letter thorn
183 { 0x00ff, 0x0101, MLineBreaker::EAlLineBreakClass }, //latin small letter y with diaeresis
184 { 0x0101, 0x0102, MLineBreaker::EAiLineBreakClass }, //latin small letter a with macron
185 { 0x0102, 0x0111, MLineBreaker::EAlLineBreakClass }, //latin capital letter a with breve
186 { 0x0111, 0x0112, MLineBreaker::EAiLineBreakClass }, //latin small letter d with stroke
187 { 0x0112, 0x0113, MLineBreaker::EAlLineBreakClass }, //latin capital letter e with macron
188 { 0x0113, 0x0114, MLineBreaker::EAiLineBreakClass }, //latin small letter e with macron
189 { 0x0114, 0x011b, MLineBreaker::EAlLineBreakClass }, //latin capital letter e with breve
190 { 0x011b, 0x011c, MLineBreaker::EAiLineBreakClass }, //latin small letter e with caron
191 { 0x011c, 0x0126, MLineBreaker::EAlLineBreakClass }, //latin capital letter g with circumflex
192 { 0x0126, 0x0128, MLineBreaker::EAiLineBreakClass }, //latin capital letter h with stroke
193 { 0x0128, 0x012b, MLineBreaker::EAlLineBreakClass }, //latin capital letter i with tilde
194 { 0x012b, 0x012c, MLineBreaker::EAiLineBreakClass }, //latin small letter i with macron
195 { 0x012c, 0x0131, MLineBreaker::EAlLineBreakClass }, //latin capital letter i with breve
196 { 0x0131, 0x0134, MLineBreaker::EAiLineBreakClass }, //latin small letter dotless i
197 { 0x0134, 0x0138, MLineBreaker::EAlLineBreakClass }, //latin capital letter j with circumflex
198 { 0x0138, 0x0139, MLineBreaker::EAiLineBreakClass }, //latin small letter kra
199 { 0x0139, 0x013f, MLineBreaker::EAlLineBreakClass }, //latin capital letter l with acute
200 { 0x013f, 0x0143, MLineBreaker::EAiLineBreakClass }, //latin capital letter l with middle dot
201 { 0x0143, 0x0144, MLineBreaker::EAlLineBreakClass }, //latin capital letter n with acute
202 { 0x0144, 0x0145, MLineBreaker::EAiLineBreakClass }, //latin small letter n with acute
203 { 0x0145, 0x0148, MLineBreaker::EAlLineBreakClass }, //latin capital letter n with cedilla
204 { 0x0148, 0x014b, MLineBreaker::EAiLineBreakClass }, //latin small letter n with caron
205 { 0x014b, 0x014d, MLineBreaker::EAlLineBreakClass }, //latin small letter eng
206 { 0x014d, 0x014e, MLineBreaker::EAiLineBreakClass }, //latin small letter o with macron
207 { 0x014e, 0x0152, MLineBreaker::EAlLineBreakClass }, //latin capital letter o with breve
208 { 0x0152, 0x0154, MLineBreaker::EAiLineBreakClass }, //latin capital ligature oe
209 { 0x0154, 0x0166, MLineBreaker::EAlLineBreakClass }, //latin capital letter r with acute
210 { 0x0166, 0x0168, MLineBreaker::EAiLineBreakClass }, //latin capital letter t with stroke
211 { 0x0168, 0x016b, MLineBreaker::EAlLineBreakClass }, //latin capital letter u with tilde
212 { 0x016b, 0x016c, MLineBreaker::EAiLineBreakClass }, //latin small letter u with macron
213 { 0x016c, 0x01ce, MLineBreaker::EAlLineBreakClass }, //latin capital letter u with breve
214 { 0x01ce, 0x01cf, MLineBreaker::EAiLineBreakClass }, //latin small letter a with caron
215 { 0x01cf, 0x01d0, MLineBreaker::EAlLineBreakClass }, //latin capital letter i with caron
216 { 0x01d0, 0x01d1, MLineBreaker::EAiLineBreakClass }, //latin small letter i with caron
217 { 0x01d1, 0x01d2, MLineBreaker::EAlLineBreakClass }, //latin capital letter o with caron
218 { 0x01d2, 0x01d3, MLineBreaker::EAiLineBreakClass }, //latin small letter o with caron
219 { 0x01d3, 0x01d4, MLineBreaker::EAlLineBreakClass }, //latin capital letter u with caron
220 { 0x01d4, 0x01d5, MLineBreaker::EAiLineBreakClass }, //latin small letter u with caron
221 { 0x01d5, 0x01d6, MLineBreaker::EAlLineBreakClass }, //latin capital letter u with diaeresis and macron
222 { 0x01d6, 0x01d7, MLineBreaker::EAiLineBreakClass }, //latin small letter u with diaeresis and macron
223 { 0x01d7, 0x01d8, MLineBreaker::EAlLineBreakClass }, //latin capital letter u with diaeresis and acute
224 { 0x01d8, 0x01d9, MLineBreaker::EAiLineBreakClass }, //latin small letter u with diaeresis and acute
225 { 0x01d9, 0x01da, MLineBreaker::EAlLineBreakClass }, //latin capital letter u with diaeresis and caron
226 { 0x01da, 0x01db, MLineBreaker::EAiLineBreakClass }, //latin small letter u with diaeresis and caron
227 { 0x01db, 0x01dc, MLineBreaker::EAlLineBreakClass }, //latin capital letter u with diaeresis and grave
228 { 0x01dc, 0x01dd, MLineBreaker::EAiLineBreakClass }, //latin small letter u with diaeresis and grave
229 { 0x01dd, 0x0250, MLineBreaker::EAlLineBreakClass }, //latin small letter turned e
230 { 0x0250, 0x0251, MLineBreaker::EAlLineBreakClass }, //latin small letter turned a
231 { 0x0251, 0x0252, MLineBreaker::EAiLineBreakClass }, //latin small letter alpha
232 { 0x0252, 0x0261, MLineBreaker::EAlLineBreakClass }, //latin small letter turned alpha
233 { 0x0261, 0x0262, MLineBreaker::EAiLineBreakClass }, //latin small letter script g
234 { 0x0262, 0x02c7, MLineBreaker::EAlLineBreakClass }, //latin letter small capital g
235 { 0x02c7, 0x02c8, MLineBreaker::EAiLineBreakClass }, //caron
236 { 0x02c8, 0x02c9, MLineBreaker::EBbLineBreakClass }, //modifier letter vertical line
237 { 0x02c9, 0x02cc, MLineBreaker::EAiLineBreakClass }, //modifier letter macron
238 { 0x02cc, 0x02cd, MLineBreaker::EBbLineBreakClass }, //modifier letter low vertical line
239 { 0x02cd, 0x02ce, MLineBreaker::EAiLineBreakClass }, //modifier letter low macron
240 { 0x02ce, 0x02d0, MLineBreaker::EAlLineBreakClass }, //modifier letter low grave accent
241 { 0x02d0, 0x02d1, MLineBreaker::EAiLineBreakClass }, //modifier letter triangular colon
242 { 0x02d1, 0x02d8, MLineBreaker::EAlLineBreakClass }, //modifier letter half triangular colon
243 { 0x02d8, 0x02dc, MLineBreaker::EAiLineBreakClass }, //breve
244 { 0x02dc, 0x02dd, MLineBreaker::EAlLineBreakClass }, //small tilde
245 { 0x02dd, 0x02de, MLineBreaker::EAiLineBreakClass }, //double acute accent
246 { 0x02de, 0x0300, MLineBreaker::EAlLineBreakClass }, //modifier letter rhotic hook
247 { 0x0300, 0x034f, MLineBreaker::ECmLineBreakClass }, //combining grave accent
248 { 0x034f, 0x0350, MLineBreaker::EGlLineBreakClass }, //COMBINING GRAPHEME JOINER
249 { 0x0350, 0x035c, MLineBreaker::ECmLineBreakClass }, //COMBINING RIGHT ARROWHEAD ABOVE
250 { 0x035c, 0x0360, MLineBreaker::EGlLineBreakClass }, //COMBINING DOUBLE BREVE BELOW
251 { 0x0360, 0x0370, MLineBreaker::ECmLineBreakClass }, //combining double tilde
252 { 0x0374, 0x0376, MLineBreaker::EAlLineBreakClass }, //greek numeral sign
253 { 0x037a, 0x037b, MLineBreaker::EAlLineBreakClass }, //greek ypogegrammeni
254 { 0x037b, 0x037e, MLineBreaker::EAlLineBreakClass }, //GREEK SMALL REVERSED LUNATE SIGMA SYMBOL
255 { 0x037e, 0x037f, MLineBreaker::EAlLineBreakClass }, //greek question mark
256 { 0x0384, 0x038b, MLineBreaker::EAlLineBreakClass }, //greek tonos
257 { 0x038c, 0x038d, MLineBreaker::EAlLineBreakClass }, //greek capital letter omicron with tonos
258 { 0x038e, 0x0391, MLineBreaker::EAlLineBreakClass }, //greek capital letter upsilon with tonos
259 { 0x0391, 0x03a2, MLineBreaker::EAiLineBreakClass }, //greek capital letter alpha
260 { 0x03a3, 0x03aa, MLineBreaker::EAiLineBreakClass }, //greek capital letter sigma
261 { 0x03aa, 0x03b1, MLineBreaker::EAlLineBreakClass }, //greek capital letter iota with dialytika
262 { 0x03b1, 0x03c2, MLineBreaker::EAiLineBreakClass }, //greek small letter alpha
263 { 0x03c2, 0x03c3, MLineBreaker::EAlLineBreakClass }, //greek small letter final sigma
264 { 0x03c3, 0x03ca, MLineBreaker::EAiLineBreakClass }, //greek small letter sigma
265 { 0x03ca, 0x03cf, MLineBreaker::EAlLineBreakClass }, //greek small letter iota with dialytika
266 { 0x03d0, 0x0400, MLineBreaker::EAlLineBreakClass }, //greek beta symbol
267 { 0x0400, 0x0401, MLineBreaker::EAlLineBreakClass }, //cyrillic capital letter ie with grave
268 { 0x0401, 0x0402, MLineBreaker::EAiLineBreakClass }, //cyrillic capital letter io
269 { 0x0402, 0x0410, MLineBreaker::EAlLineBreakClass }, //cyrillic capital letter dje
270 { 0x0410, 0x0450, MLineBreaker::EAiLineBreakClass }, //cyrillic capital letter a
271 { 0x0450, 0x0451, MLineBreaker::EAlLineBreakClass }, //cyrillic small letter ie with grave
272 { 0x0451, 0x0452, MLineBreaker::EAiLineBreakClass }, //cyrillic small letter io
273 { 0x0452, 0x0483, MLineBreaker::EAlLineBreakClass }, //cyrillic small letter dje
274 { 0x0483, 0x0487, MLineBreaker::ECmLineBreakClass }, //combining cyrillic titlo
275 { 0x0488, 0x048a, MLineBreaker::ECmLineBreakClass }, //combining cyrillic hundred thousands sign
276 { 0x048a, 0x0514, MLineBreaker::EAlLineBreakClass }, //CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
277 { 0x0531, 0x0557, MLineBreaker::EAlLineBreakClass }, //armenian capital letter ayb
278 { 0x0559, 0x0560, MLineBreaker::EAlLineBreakClass }, //armenian modifier letter left half ring
279 { 0x0561, 0x0588, MLineBreaker::EAlLineBreakClass }, //armenian small letter ayb
280 { 0x0589, 0x058a, MLineBreaker::EIsLineBreakClass }, //armenian full stop
281 { 0x058a, 0x058b, MLineBreaker::EBaLineBreakClass }, //armenian hyphen
282 { 0x0591, 0x05be, MLineBreaker::ECmLineBreakClass }, //hebrew accent etnahta
283 { 0x05be, 0x05bf, MLineBreaker::EAlLineBreakClass }, //hebrew punctuation maqaf
284 { 0x05bf, 0x05c0, MLineBreaker::ECmLineBreakClass }, //hebrew point rafe
285 { 0x05c0, 0x05c1, MLineBreaker::EAlLineBreakClass }, //hebrew punctuation paseq
286 { 0x05c1, 0x05c3, MLineBreaker::ECmLineBreakClass }, //hebrew point shin dot
287 { 0x05c3, 0x05c4, MLineBreaker::EAlLineBreakClass }, //hebrew punctuation sof pasuq
288 { 0x05c4, 0x05c5, MLineBreaker::ECmLineBreakClass }, //hebrew mark upper dot
289 { 0x05c5, 0x05c6, MLineBreaker::ECmLineBreakClass }, //HEBREW MARK LOWER DOT
290 { 0x05c6, 0x05c7, MLineBreaker::EExLineBreakClass }, //HEBREW PUNCTUATION NUN HAFUKHA
291 { 0x05c7, 0x05c8, MLineBreaker::ECmLineBreakClass }, //HEBREW POINT QAMATS QATAN
292 { 0x05d0, 0x05eb, MLineBreaker::EAlLineBreakClass }, //hebrew letter alef
293 { 0x05f0, 0x05f5, MLineBreaker::EAlLineBreakClass }, //hebrew ligature yiddish double vav
294 { 0x0600, 0x0604, MLineBreaker::EAlLineBreakClass }, //ARABIC NUMBER SIGN
295 { 0x060b, 0x060c, MLineBreaker::EPoLineBreakClass }, //AFGHANI SIGN
296 { 0x060c, 0x060d, MLineBreaker::EExLineBreakClass }, //arabic comma
297 { 0x060d, 0x060e, MLineBreaker::EIsLineBreakClass }, //ARABIC DATE SEPARATOR
298 { 0x060e, 0x0610, MLineBreaker::EAlLineBreakClass }, //ARABIC POETIC VERSE SIGN
299 { 0x0610, 0x0616, MLineBreaker::ECmLineBreakClass }, //ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM
300 { 0x061b, 0x061c, MLineBreaker::EExLineBreakClass }, //arabic semicolon
301 { 0x061e, 0x061f, MLineBreaker::EExLineBreakClass }, //ARABIC TRIPLE DOT PUNCTUATION MARK
302 { 0x061f, 0x0620, MLineBreaker::EExLineBreakClass }, //arabic question mark
303 { 0x0621, 0x063b, MLineBreaker::EAlLineBreakClass }, //arabic letter hamza
304 { 0x0640, 0x064b, MLineBreaker::EAlLineBreakClass }, //arabic tatweel
305 { 0x064b, 0x065f, MLineBreaker::ECmLineBreakClass }, //arabic fathatan
306 { 0x0660, 0x066a, MLineBreaker::ENuLineBreakClass }, //arabic-indic digit zero
307 { 0x066a, 0x066b, MLineBreaker::EExLineBreakClass }, //arabic percent sign
308 { 0x066b, 0x066d, MLineBreaker::ENuLineBreakClass }, //arabic decimal & thousands separator
309 { 0x066d, 0x066e, MLineBreaker::EAlLineBreakClass }, //arabic five pointed star
310 { 0x066e, 0x0670, MLineBreaker::EAlLineBreakClass }, //arabic five pointed star
311 { 0x0670, 0x0671, MLineBreaker::ECmLineBreakClass }, //arabic letter superscript alef
312 { 0x0671, 0x06d4, MLineBreaker::EAlLineBreakClass }, //arabic letter alef wasla
313 { 0x06d4, 0x06d5, MLineBreaker::EExLineBreakClass }, //arabic full stop
314 { 0x06d5, 0x06d6, MLineBreaker::EAlLineBreakClass }, //arabic letter ae
315 { 0x06d6, 0x06e5, MLineBreaker::ECmLineBreakClass }, //arabic small high ligature sad with lam with alef maksura
316 { 0x06e5, 0x06e7, MLineBreaker::EAlLineBreakClass }, //arabic small waw
317 { 0x06e7, 0x06e9, MLineBreaker::ECmLineBreakClass }, //arabic small high yeh
318 { 0x06e9, 0x06ea, MLineBreaker::EAlLineBreakClass }, //arabic place of sajdah
319 { 0x06ea, 0x06ee, MLineBreaker::ECmLineBreakClass }, //arabic empty centre low stop
320 { 0x06ee, 0x06f0, MLineBreaker::EAlLineBreakClass }, //ARABIC LETTER DAL WITH INVERTED V
321 { 0x06f0, 0x06fa, MLineBreaker::ENuLineBreakClass }, //extended arabic-indic digit zero
322 { 0x06fa, 0x070e, MLineBreaker::EAlLineBreakClass }, //arabic letter sheen with dot below
323 { 0x070f, 0x0710, MLineBreaker::ECmLineBreakClass }, //syriac abbreviation mark
324 { 0x0710, 0x0711, MLineBreaker::EAlLineBreakClass }, //syriac letter alaph
325 { 0x0711, 0x0712, MLineBreaker::ECmLineBreakClass }, //syriac letter superscript alaph
326 { 0x0712, 0x0730, MLineBreaker::EAlLineBreakClass }, //syriac letter beth
327 { 0x0730, 0x074b, MLineBreaker::ECmLineBreakClass }, //syriac pthaha above
328 { 0x074d, 0x076e, MLineBreaker::EAlLineBreakClass }, //SYRIAC LETTER SOGDIAN ZHAIN
329 { 0x0780, 0x07a6, MLineBreaker::EAlLineBreakClass }, //thaana letter haa
330 { 0x07a6, 0x07b1, MLineBreaker::ECmLineBreakClass }, //thaana abafili
331 { 0x07b1, 0x07b2, MLineBreaker::EAlLineBreakClass }, //THAANA LETTER NAA
332 { 0x07c0, 0x07ca, MLineBreaker::ENuLineBreakClass }, //NKO DIGIT ZERO
333 { 0x07ca, 0x07eb, MLineBreaker::EAlLineBreakClass }, //NKO LETTER A
334 { 0x07eb, 0x07f4, MLineBreaker::ECmLineBreakClass }, //NKO COMBINING SHORT HIGH TONE
335 { 0x07f4, 0x07f8, MLineBreaker::EAlLineBreakClass }, //NKO HIGH TONE APOSTROPHE
336 { 0x07f8, 0x07f9, MLineBreaker::EIsLineBreakClass }, //NKO COMMA
337 { 0x07f9, 0x07fa, MLineBreaker::EExLineBreakClass }, //NKO EXCLAMATION MARK
338 { 0x07fa, 0x07fb, MLineBreaker::EAlLineBreakClass }, //NKO LAJANYALAN
339 { 0x0901, 0x0904, MLineBreaker::ECmLineBreakClass }, //devanagari sign candrabindu
340 { 0x0904, 0x093a, MLineBreaker::EAlLineBreakClass }, //devanagari letter short a: CR1080
341 { 0x093c, 0x093d, MLineBreaker::ECmLineBreakClass }, //devanagari sign nukta
342 { 0x093d, 0x093e, MLineBreaker::EAlLineBreakClass }, //devanagari sign avagraha
343 { 0x093e, 0x094e, MLineBreaker::ECmLineBreakClass }, //devanagari vowel sign aa
344 { 0x0950, 0x0951, MLineBreaker::EAlLineBreakClass }, //devanagari om
345 { 0x0951, 0x0955, MLineBreaker::ECmLineBreakClass }, //devanagari stress sign udatta
346 { 0x0958, 0x0962, MLineBreaker::EAlLineBreakClass }, //devanagari letter qa
347 { 0x0962, 0x0964, MLineBreaker::ECmLineBreakClass }, //devanagari vowel sign vocalic l
348 { 0x0964, 0x0966, MLineBreaker::EAlLineBreakClass }, //devanagari danda
349 { 0x0966, 0x0970, MLineBreaker::ENuLineBreakClass }, //devanagari digit zero
350 { 0x0970, 0x0971, MLineBreaker::EAlLineBreakClass }, //devanagari abbreviation sign
351 { 0x097b, 0x0980, MLineBreaker::EAlLineBreakClass }, //devanagari letter gga: CR1080
352 { 0x0981, 0x0984, MLineBreaker::ECmLineBreakClass }, //bengali sign candrabindu
353 { 0x0985, 0x098d, MLineBreaker::EAlLineBreakClass }, //bengali letter a
354 { 0x098f, 0x0991, MLineBreaker::EAlLineBreakClass }, //bengali letter e
355 { 0x0993, 0x09a9, MLineBreaker::EAlLineBreakClass }, //bengali letter o
356 { 0x09aa, 0x09b1, MLineBreaker::EAlLineBreakClass }, //bengali letter pa
357 { 0x09b2, 0x09b3, MLineBreaker::EAlLineBreakClass }, //bengali letter la
358 { 0x09b6, 0x09ba, MLineBreaker::EAlLineBreakClass }, //bengali letter sha
359 { 0x09bc, 0x09bd, MLineBreaker::ECmLineBreakClass }, //bengali sign nukta
360 { 0x09bd, 0x09be, MLineBreaker::EAlLineBreakClass }, //bengali sign avagraha: CR1080
361 { 0x09be, 0x09c5, MLineBreaker::ECmLineBreakClass }, //bengali vowel sign aa
362 { 0x09c7, 0x09c9, MLineBreaker::ECmLineBreakClass }, //bengali vowel sign e
363 { 0x09cb, 0x09ce, MLineBreaker::ECmLineBreakClass }, //bengali vowel sign o
364 { 0x09ce, 0x09cf, MLineBreaker::EAlLineBreakClass }, //bengali letter khanda ta: CR1080
365 { 0x09d7, 0x09d8, MLineBreaker::ECmLineBreakClass }, //bengali au length mark
366 { 0x09dc, 0x09de, MLineBreaker::EAlLineBreakClass }, //bengali letter rra
367 { 0x09df, 0x09e2, MLineBreaker::EAlLineBreakClass }, //bengali letter yya
368 { 0x09e2, 0x09e4, MLineBreaker::ECmLineBreakClass }, //bengali vowel sign vocalic l
369 { 0x09e6, 0x09f0, MLineBreaker::ENuLineBreakClass }, //bengali digit zero
370 { 0x09f0, 0x09f2, MLineBreaker::EAlLineBreakClass }, //bengali letter ra with middle diagonal
371 { 0x09f2, 0x09f4, MLineBreaker::EPrLineBreakClass }, //bengali rupee mark
372 { 0x09f4, 0x09fb, MLineBreaker::EAlLineBreakClass }, //bengali currency numerator one
373 { 0x0a01, 0x0a04, MLineBreaker::ECmLineBreakClass }, //gurmukhi sign adak bindi: CR1080
374 { 0x0a05, 0x0a0b, MLineBreaker::EAlLineBreakClass }, //gurmukhi letter a
375 { 0x0a0f, 0x0a11, MLineBreaker::EAlLineBreakClass }, //gurmukhi letter ee
376 { 0x0a13, 0x0a29, MLineBreaker::EAlLineBreakClass }, //gurmukhi letter oo
377 { 0x0a2a, 0x0a31, MLineBreaker::EAlLineBreakClass }, //gurmukhi letter pa
378 { 0x0a32, 0x0a34, MLineBreaker::EAlLineBreakClass }, //gurmukhi letter la
379 { 0x0a35, 0x0a37, MLineBreaker::EAlLineBreakClass }, //gurmukhi letter va
380 { 0x0a38, 0x0a3a, MLineBreaker::EAlLineBreakClass }, //gurmukhi letter sa
381 { 0x0a3c, 0x0a3d, MLineBreaker::ECmLineBreakClass }, //gurmukhi sign nukta
382 { 0x0a3e, 0x0a43, MLineBreaker::ECmLineBreakClass }, //gurmukhi vowel sign aa
383 { 0x0a47, 0x0a49, MLineBreaker::ECmLineBreakClass }, //gurmukhi vowel sign ee
384 { 0x0a4b, 0x0a4e, MLineBreaker::ECmLineBreakClass }, //gurmukhi vowel sign oo
385 { 0x0a59, 0x0a5d, MLineBreaker::EAlLineBreakClass }, //gurmukhi letter khha
386 { 0x0a5e, 0x0a5f, MLineBreaker::EAlLineBreakClass }, //gurmukhi letter fa
387 { 0x0a66, 0x0a70, MLineBreaker::ENuLineBreakClass }, //gurmukhi digit zero
388 { 0x0a70, 0x0a72, MLineBreaker::ECmLineBreakClass }, //gurmukhi tippi
389 { 0x0a72, 0x0a75, MLineBreaker::EAlLineBreakClass }, //gurmukhi iri
390 { 0x0a81, 0x0a84, MLineBreaker::ECmLineBreakClass }, //gujarati sign candrabindu
391 { 0x0a85, 0x0a8d, MLineBreaker::EAlLineBreakClass }, //gujarati letter a: CR1080
392 { 0x0a8d, 0x0a8e, MLineBreaker::EAlLineBreakClass }, //gujarati vowel candra e
393 { 0x0a8f, 0x0a92, MLineBreaker::EAlLineBreakClass }, //gujarati letter e
394 { 0x0a93, 0x0aa9, MLineBreaker::EAlLineBreakClass }, //gujarati letter o
395 { 0x0aaa, 0x0ab1, MLineBreaker::EAlLineBreakClass }, //gujarati letter pa
396 { 0x0ab2, 0x0ab4, MLineBreaker::EAlLineBreakClass }, //gujarati letter la
397 { 0x0ab5, 0x0aba, MLineBreaker::EAlLineBreakClass }, //gujarati letter va
398 { 0x0abc, 0x0abd, MLineBreaker::ECmLineBreakClass }, //gujarati sign nukta
399 { 0x0abd, 0x0abe, MLineBreaker::EAlLineBreakClass }, //gujarati sign avagraha
400 { 0x0abe, 0x0ac6, MLineBreaker::ECmLineBreakClass }, //gujarati vowel sign aa
401 { 0x0ac7, 0x0aca, MLineBreaker::ECmLineBreakClass }, //gujarati vowel sign e
402 { 0x0acb, 0x0ace, MLineBreaker::ECmLineBreakClass }, //gujarati vowel sign o
403 { 0x0ad0, 0x0ad1, MLineBreaker::EAlLineBreakClass }, //gujarati om
404 { 0x0ae0, 0x0ae2, MLineBreaker::EAlLineBreakClass }, //gujarati letter vocalic rr: CR1080
405 { 0x0ae2, 0x0ae4, MLineBreaker::ECmLineBreakClass }, //gujarati vowel sign vocalic l: CR1080
406 { 0x0ae6, 0x0af0, MLineBreaker::ENuLineBreakClass }, //gujarati digit zero
407 { 0x0af1, 0x0af2, MLineBreaker::EPrLineBreakClass }, //gujarati rupee sign: CR1080
408 { 0x0b01, 0x0b04, MLineBreaker::ECmLineBreakClass }, //oriya sign candrabindu
409 { 0x0b05, 0x0b0d, MLineBreaker::EAlLineBreakClass }, //oriya letter a
410 { 0x0b0f, 0x0b11, MLineBreaker::EAlLineBreakClass }, //oriya letter e
411 { 0x0b13, 0x0b29, MLineBreaker::EAlLineBreakClass }, //oriya letter o
412 { 0x0b2a, 0x0b31, MLineBreaker::EAlLineBreakClass }, //oriya letter pa
413 { 0x0b32, 0x0b34, MLineBreaker::EAlLineBreakClass }, //oriya letter la
414 { 0x0b35, 0x0b36, MLineBreaker::EAlLineBreakClass }, //oriya letter va: CR1080
415 { 0x0b36, 0x0b3a, MLineBreaker::EAlLineBreakClass }, //oriya letter sha
416 { 0x0b3c, 0x0b3d, MLineBreaker::ECmLineBreakClass }, //oriya sign nukta
417 { 0x0b3d, 0x0b3e, MLineBreaker::EAlLineBreakClass }, //oriya sign avagraha
418 { 0x0b3e, 0x0b44, MLineBreaker::ECmLineBreakClass }, //oriya vowel sign aa
419 { 0x0b47, 0x0b49, MLineBreaker::ECmLineBreakClass }, //oriya vowel sign e
420 { 0x0b4b, 0x0b4e, MLineBreaker::ECmLineBreakClass }, //oriya vowel sign o
421 { 0x0b56, 0x0b58, MLineBreaker::ECmLineBreakClass }, //oriya ai length mark
422 { 0x0b5c, 0x0b5e, MLineBreaker::EAlLineBreakClass }, //oriya letter rra
423 { 0x0b5f, 0x0b62, MLineBreaker::EAlLineBreakClass }, //oriya letter yya
424 { 0x0b66, 0x0b70, MLineBreaker::ENuLineBreakClass }, //oriya digit zero
425 { 0x0b70, 0x0b71, MLineBreaker::EAlLineBreakClass }, //oriya isshar
426 { 0x0b71, 0x0b72, MLineBreaker::EAlLineBreakClass }, //oriya letter wa: CR1080
427 { 0x0b82, 0x0b84, MLineBreaker::ECmLineBreakClass }, //tamil sign anusvara
428 { 0x0b85, 0x0b8b, MLineBreaker::EAlLineBreakClass }, //tamil letter a
429 { 0x0b8e, 0x0b91, MLineBreaker::EAlLineBreakClass }, //tamil letter e
430 { 0x0b92, 0x0b96, MLineBreaker::EAlLineBreakClass }, //tamil letter o
431 { 0x0b99, 0x0b9b, MLineBreaker::EAlLineBreakClass }, //tamil letter nga
432 { 0x0b9c, 0x0b9d, MLineBreaker::EAlLineBreakClass }, //tamil letter ja
433 { 0x0b9e, 0x0ba0, MLineBreaker::EAlLineBreakClass }, //tamil letter nya
434 { 0x0ba3, 0x0ba5, MLineBreaker::EAlLineBreakClass }, //tamil letter nna
435 { 0x0ba8, 0x0bab, MLineBreaker::EAlLineBreakClass }, //tamil letter na
436 { 0x0bae, 0x0bba, MLineBreaker::EAlLineBreakClass }, //tamil letter ma: CR1080
437 { 0x0bbe, 0x0bc3, MLineBreaker::ECmLineBreakClass }, //tamil vowel sign aa
438 { 0x0bc6, 0x0bc9, MLineBreaker::ECmLineBreakClass }, //tamil vowel sign e
439 { 0x0bca, 0x0bce, MLineBreaker::ECmLineBreakClass }, //tamil vowel sign o
440 { 0x0bd7, 0x0bd8, MLineBreaker::ECmLineBreakClass }, //tamil au length mark
441 { 0x0be6, 0x0bf0, MLineBreaker::ENuLineBreakClass }, //tamil digit one: CR1080
442 { 0x0bf0, 0x0bf9, MLineBreaker::EAlLineBreakClass }, //tamil number ten: CR1080
443 { 0x0bf9, 0x0bfa, MLineBreaker::EPrLineBreakClass }, //tamil rupee sign: CR1080
444 { 0x0bfa, 0x0bfb, MLineBreaker::EAlLineBreakClass }, //tamil number sign: CR1080
445 { 0x0c01, 0x0c04, MLineBreaker::ECmLineBreakClass }, //telugu sign candrabindu
446 { 0x0c05, 0x0c0d, MLineBreaker::EAlLineBreakClass }, //telugu letter a
447 { 0x0c0e, 0x0c11, MLineBreaker::EAlLineBreakClass }, //telugu letter e
448 { 0x0c12, 0x0c29, MLineBreaker::EAlLineBreakClass }, //telugu letter o
449 { 0x0c2a, 0x0c34, MLineBreaker::EAlLineBreakClass }, //telugu letter pa
450 { 0x0c35, 0x0c3a, MLineBreaker::EAlLineBreakClass }, //telugu letter va
451 { 0x0c3e, 0x0c45, MLineBreaker::ECmLineBreakClass }, //telugu vowel sign aa
452 { 0x0c46, 0x0c49, MLineBreaker::ECmLineBreakClass }, //telugu vowel sign e
453 { 0x0c4a, 0x0c4e, MLineBreaker::ECmLineBreakClass }, //telugu vowel sign o
454 { 0x0c55, 0x0c57, MLineBreaker::ECmLineBreakClass }, //telugu length mark
455 { 0x0c60, 0x0c62, MLineBreaker::EAlLineBreakClass }, //telugu letter vocalic rr
456 { 0x0c66, 0x0c70, MLineBreaker::ENuLineBreakClass }, //telugu digit zero
457 { 0x0c82, 0x0c84, MLineBreaker::ECmLineBreakClass }, //kannada sign anusvara
458 { 0x0c85, 0x0c8d, MLineBreaker::EAlLineBreakClass }, //kannada letter a
459 { 0x0c8e, 0x0c91, MLineBreaker::EAlLineBreakClass }, //kannada letter e
460 { 0x0c92, 0x0ca9, MLineBreaker::EAlLineBreakClass }, //kannada letter o
461 { 0x0caa, 0x0cb4, MLineBreaker::EAlLineBreakClass }, //kannada letter pa
462 { 0x0cb5, 0x0cba, MLineBreaker::EAlLineBreakClass }, //kannada letter va
463 { 0x0cbc, 0x0cbd, MLineBreaker::ECmLineBreakClass }, //kannada sign nukta: CR1080
464 { 0x0cbd, 0x0cbe, MLineBreaker::EAlLineBreakClass }, //kannada sign avagraha: CR1080
465 { 0x0cbe, 0x0cc5, MLineBreaker::ECmLineBreakClass }, //kannada vowel sign aa
466 { 0x0cc6, 0x0cc9, MLineBreaker::ECmLineBreakClass }, //kannada vowel sign e
467 { 0x0cca, 0x0cce, MLineBreaker::ECmLineBreakClass }, //kannada vowel sign o
468 { 0x0cd5, 0x0cd7, MLineBreaker::ECmLineBreakClass }, //kannada length mark
469 { 0x0cde, 0x0cdf, MLineBreaker::EAlLineBreakClass }, //kannada letter fa
470 { 0x0ce0, 0x0ce2, MLineBreaker::EAlLineBreakClass }, //kannada letter vocalic rr
471 { 0x0ce2, 0x0ce4, MLineBreaker::ECmLineBreakClass }, //kannada vowel sign vocalic l: CR1080
472 { 0x0ce6, 0x0cf0, MLineBreaker::ENuLineBreakClass }, //kannada digit zero
473 { 0x0cf1, 0x0cf3, MLineBreaker::EAlLineBreakClass }, //kannada sign jihvamuliya: CR1080
474 { 0x0d02, 0x0d04, MLineBreaker::ECmLineBreakClass }, //malayalam sign anusvara
475 { 0x0d05, 0x0d0d, MLineBreaker::EAlLineBreakClass }, //malayalam letter a
476 { 0x0d0e, 0x0d11, MLineBreaker::EAlLineBreakClass }, //malayalam letter e
477 { 0x0d12, 0x0d29, MLineBreaker::EAlLineBreakClass }, //malayalam letter o
478 { 0x0d2a, 0x0d3a, MLineBreaker::EAlLineBreakClass }, //malayalam letter pa
479 { 0x0d3e, 0x0d44, MLineBreaker::ECmLineBreakClass }, //malayalam vowel sign aa
480 { 0x0d46, 0x0d49, MLineBreaker::ECmLineBreakClass }, //malayalam vowel sign e
481 { 0x0d4a, 0x0d4e, MLineBreaker::ECmLineBreakClass }, //malayalam vowel sign o
482 { 0x0d57, 0x0d58, MLineBreaker::ECmLineBreakClass }, //malayalam au length mark
483 { 0x0d60, 0x0d62, MLineBreaker::EAlLineBreakClass }, //malayalam letter vocalic rr
484 { 0x0d66, 0x0d70, MLineBreaker::ENuLineBreakClass }, //malayalam digit zero
485 { 0x0d82, 0x0d84, MLineBreaker::ECmLineBreakClass }, //sinhala sign anusvaraya
486 { 0x0d85, 0x0d97, MLineBreaker::EAlLineBreakClass }, //sinhala letter ayanna
487 { 0x0d9a, 0x0db2, MLineBreaker::EAlLineBreakClass }, //sinhala letter alpapraana kayanna
488 { 0x0db3, 0x0dbc, MLineBreaker::EAlLineBreakClass }, //sinhala letter sanyaka dayanna
489 { 0x0dbd, 0x0dbe, MLineBreaker::EAlLineBreakClass }, //sinhala letter dantaja layanna
490 { 0x0dc0, 0x0dc7, MLineBreaker::EAlLineBreakClass }, //sinhala letter vayanna
491 { 0x0dca, 0x0dcb, MLineBreaker::ECmLineBreakClass }, //sinhala sign al-lakuna
492 { 0x0dcf, 0x0dd5, MLineBreaker::ECmLineBreakClass }, //sinhala vowel sign aela-pilla
493 { 0x0dd6, 0x0dd7, MLineBreaker::ECmLineBreakClass }, //sinhala vowel sign diga paa-pilla
494 { 0x0dd8, 0x0de0, MLineBreaker::ECmLineBreakClass }, //sinhala vowel sign gaetta-pilla
495 { 0x0df2, 0x0df4, MLineBreaker::ECmLineBreakClass }, //sinhala vowel sign diga gaetta-pilla
496 { 0x0df4, 0x0df5, MLineBreaker::EAlLineBreakClass }, //sinhala punctuation kunddaliya
497 { 0x0e01, 0x0e31, MLineBreaker::ESaLineBreakClass }, //thai character ko kai
498 { 0x0e31, 0x0e32, MLineBreaker::ECmLineBreakClass }, //thai character mai han-akat
499 { 0x0e32, 0x0e34, MLineBreaker::ESaLineBreakClass }, //thai character sara aa
500 { 0x0e34, 0x0e3b, MLineBreaker::ECmLineBreakClass }, //thai character sara i
501 { 0x0e3f, 0x0e40, MLineBreaker::EPrLineBreakClass }, //thai currency symbol baht
502 { 0x0e40, 0x0e47, MLineBreaker::ESaLineBreakClass }, //thai character sara e
503 { 0x0e47, 0x0e4f, MLineBreaker::ECmLineBreakClass }, //thai character maitaikhu
504 { 0x0e4f, 0x0e50, MLineBreaker::EAlLineBreakClass }, //thai character fongman
505 { 0x0e50, 0x0e5a, MLineBreaker::ENuLineBreakClass }, //thai digit zero
506 { 0x0e5a, 0x0e5c, MLineBreaker::ENsLineBreakClass }, //thai character angkhankhu
507 { 0x0e81, 0x0e83, MLineBreaker::ESaLineBreakClass }, //lao letter ko
508 { 0x0e84, 0x0e85, MLineBreaker::ESaLineBreakClass }, //lao letter kho tam
509 { 0x0e87, 0x0e89, MLineBreaker::ESaLineBreakClass }, //lao letter ngo
510 { 0x0e8a, 0x0e8b, MLineBreaker::ESaLineBreakClass }, //lao letter so tam
511 { 0x0e8d, 0x0e8e, MLineBreaker::ESaLineBreakClass }, //lao letter nyo
512 { 0x0e94, 0x0e98, MLineBreaker::ESaLineBreakClass }, //lao letter do
513 { 0x0e99, 0x0ea0, MLineBreaker::ESaLineBreakClass }, //lao letter no
514 { 0x0ea1, 0x0ea4, MLineBreaker::ESaLineBreakClass }, //lao letter mo
515 { 0x0ea5, 0x0ea6, MLineBreaker::ESaLineBreakClass }, //lao letter lo loot
516 { 0x0ea7, 0x0ea8, MLineBreaker::ESaLineBreakClass }, //lao letter wo
517 { 0x0eaa, 0x0eac, MLineBreaker::ESaLineBreakClass }, //lao letter so sung
518 { 0x0ead, 0x0eb1, MLineBreaker::ESaLineBreakClass }, //lao letter o
519 { 0x0eb1, 0x0eb2, MLineBreaker::ECmLineBreakClass }, //lao vowel sign mai kan
520 { 0x0eb2, 0x0eb4, MLineBreaker::ESaLineBreakClass }, //lao vowel sign aa
521 { 0x0eb4, 0x0eba, MLineBreaker::ECmLineBreakClass }, //lao vowel sign i
522 { 0x0ebb, 0x0ebd, MLineBreaker::ECmLineBreakClass }, //lao vowel sign mai kon
523 { 0x0ebd, 0x0ebe, MLineBreaker::ESaLineBreakClass }, //lao semivowel sign nyo
524 { 0x0ec0, 0x0ec5, MLineBreaker::ESaLineBreakClass }, //lao vowel sign e
525 { 0x0ec6, 0x0ec7, MLineBreaker::ESaLineBreakClass }, //lao ko la
526 { 0x0ec8, 0x0ece, MLineBreaker::ECmLineBreakClass }, //lao tone mai ek
527 { 0x0ed0, 0x0eda, MLineBreaker::ENuLineBreakClass }, //lao digit zero
528 { 0x0edc, 0x0ede, MLineBreaker::ESaLineBreakClass }, //lao ho no
529 { 0x0f00, 0x0f0b, MLineBreaker::EAlLineBreakClass }, //tibetan syllable om
530 { 0x0f0b, 0x0f0c, MLineBreaker::EBaLineBreakClass }, //tibetan mark intersyllabic tsheg
531 { 0x0f0c, 0x0f0d, MLineBreaker::EGlLineBreakClass }, //tibetan mark delimiter tsheg bstar
532 { 0x0f0d, 0x0f18, MLineBreaker::EAlLineBreakClass }, //tibetan mark shad
533 { 0x0f18, 0x0f1a, MLineBreaker::ECmLineBreakClass }, //tibetan astrological sign -khyud pa
534 { 0x0f1a, 0x0f20, MLineBreaker::EAlLineBreakClass }, //tibetan sign rdel dkar gcig
535 { 0x0f20, 0x0f2a, MLineBreaker::ENuLineBreakClass }, //tibetan digit zero
536 { 0x0f2a, 0x0f35, MLineBreaker::EAlLineBreakClass }, //tibetan digit half one
537 { 0x0f35, 0x0f36, MLineBreaker::ECmLineBreakClass }, //tibetan mark ngas bzung nyi zla
538 { 0x0f36, 0x0f37, MLineBreaker::EAlLineBreakClass }, //tibetan mark caret -dzud rtags bzhi mig can
539 { 0x0f37, 0x0f38, MLineBreaker::ECmLineBreakClass }, //tibetan mark ngas bzung sgor rtags
540 { 0x0f38, 0x0f39, MLineBreaker::EAlLineBreakClass }, //tibetan mark che mgo
541 { 0x0f39, 0x0f3a, MLineBreaker::ECmLineBreakClass }, //tibetan mark tsa -phru
542 { 0x0f3a, 0x0f3b, MLineBreaker::EOpLineBreakClass }, //tibetan mark gug rtags gyon
543 { 0x0f3b, 0x0f3c, MLineBreaker::EClLineBreakClass }, //tibetan mark gug rtags gyas
544 { 0x0f3c, 0x0f3d, MLineBreaker::EOpLineBreakClass }, //tibetan mark ang khang gyon
545 { 0x0f3d, 0x0f3e, MLineBreaker::EClLineBreakClass }, //tibetan mark ang khang gyas
546 { 0x0f3e, 0x0f40, MLineBreaker::ECmLineBreakClass }, //tibetan sign yar tshes
547 { 0x0f40, 0x0f48, MLineBreaker::EAlLineBreakClass }, //tibetan letter ka
548 { 0x0f49, 0x0f6b, MLineBreaker::EAlLineBreakClass }, //tibetan letter nya
549 { 0x0f71, 0x0f85, MLineBreaker::ECmLineBreakClass }, //tibetan vowel sign aa
550 { 0x0f85, 0x0f86, MLineBreaker::EAlLineBreakClass }, //tibetan mark paluta
551 { 0x0f86, 0x0f88, MLineBreaker::ECmLineBreakClass }, //tibetan sign lci rtags
552 { 0x0f88, 0x0f8c, MLineBreaker::EAlLineBreakClass }, //tibetan sign lce tsa can
553 { 0x0f90, 0x0f98, MLineBreaker::ECmLineBreakClass }, //tibetan subjoined letter ka
554 { 0x0f99, 0x0fbd, MLineBreaker::ECmLineBreakClass }, //tibetan subjoined letter nya
555 { 0x0fbe, 0x0fc6, MLineBreaker::EAlLineBreakClass }, //tibetan ku ru kha
556 { 0x0fc6, 0x0fc7, MLineBreaker::ECmLineBreakClass }, //tibetan symbol padma gdan
557 { 0x0fc7, 0x0fcd, MLineBreaker::EAlLineBreakClass }, //tibetan symbol rdo rje rgya gram
558 { 0x0fcf, 0x0fd0, MLineBreaker::EAlLineBreakClass }, //tibetan sign rdel nag gsum
559 { 0x0fd0, 0x0fd2, MLineBreaker::EBbLineBreakClass }, //TIBETAN MARK BSKA- SHOG GI MGO RGYAN
560 { 0x1000, 0x1022, MLineBreaker::ESaLineBreakClass }, //myanmar letter ka
561 { 0x1023, 0x1028, MLineBreaker::ESaLineBreakClass }, //myanmar letter i
562 { 0x1029, 0x102b, MLineBreaker::ESaLineBreakClass }, //myanmar letter o
563 { 0x102c, 0x1033, MLineBreaker::ECmLineBreakClass }, //myanmar vowel sign aa
564 { 0x1036, 0x103a, MLineBreaker::ECmLineBreakClass }, //myanmar sign anusvara
565 { 0x1040, 0x104a, MLineBreaker::ENuLineBreakClass }, //myanmar digit zero
566 { 0x104a, 0x1050, MLineBreaker::EAlLineBreakClass }, //myanmar sign little section
567 { 0x1050, 0x1056, MLineBreaker::ESaLineBreakClass }, //myanmar letter sha
568 { 0x1056, 0x105a, MLineBreaker::ECmLineBreakClass }, //myanmar vowel sign vocalic r
569 { 0x10a0, 0x10c6, MLineBreaker::EAlLineBreakClass }, //georgian capital letter an
570 { 0x10d0, 0x10fb, MLineBreaker::EAlLineBreakClass }, //georgian letter an
571 { 0x10fb, 0x10fc, MLineBreaker::EAlLineBreakClass }, //georgian paragraph separator
572 { 0x10fc, 0x10fd, MLineBreaker::EAlLineBreakClass }, //MODIFIER LETTER GEORGIAN NAR
573 { 0x1100, 0x115a, MLineBreaker::EIdLineBreakClass }, //hangul choseong kiyeok
574 { 0x115f, 0x1160, MLineBreaker::EIdLineBreakClass }, //hangul choseong filler
575 { 0x1160, 0x11a3, MLineBreaker::ECmLineBreakClass }, //hangul jungseong filler
576 { 0x11a8, 0x11fa, MLineBreaker::ECmLineBreakClass }, //hangul jongseong kiyeok
577 { 0x1200, 0x1248, MLineBreaker::EAlLineBreakClass }, //ethiopic syllable ha
578 { 0x1248, 0x1249, MLineBreaker::EAlLineBreakClass }, //ethiopic syllable qwa
579 { 0x124a, 0x124e, MLineBreaker::EAlLineBreakClass }, //ethiopic syllable qwi
580 { 0x1250, 0x1257, MLineBreaker::EAlLineBreakClass }, //ethiopic syllable qha
581 { 0x1258, 0x1259, MLineBreaker::EAlLineBreakClass }, //ethiopic syllable qhwa
582 { 0x125a, 0x125e, MLineBreaker::EAlLineBreakClass }, //ethiopic syllable qhwi
583 { 0x1260, 0x1288, MLineBreaker::EAlLineBreakClass }, //ethiopic syllable ba
584 { 0x1288, 0x1289, MLineBreaker::EAlLineBreakClass }, //ethiopic syllable xwa
585 { 0x128a, 0x128e, MLineBreaker::EAlLineBreakClass }, //ethiopic syllable xwi
586 { 0x1290, 0x12b0, MLineBreaker::EAlLineBreakClass }, //ethiopic syllable na
587 { 0x12b0, 0x12b1, MLineBreaker::EAlLineBreakClass }, //ethiopic syllable kwa
588 { 0x12b2, 0x12b6, MLineBreaker::EAlLineBreakClass }, //ethiopic syllable kwi
589 { 0x12b8, 0x12bf, MLineBreaker::EAlLineBreakClass }, //ethiopic syllable kxa
590 { 0x12c0, 0x12c1, MLineBreaker::EAlLineBreakClass }, //ethiopic syllable kxwa
591 { 0x12c2, 0x12c6, MLineBreaker::EAlLineBreakClass }, //ethiopic syllable kxwi
592 { 0x12c8, 0x12d7, MLineBreaker::EAlLineBreakClass }, //ethiopic syllable wa
593 { 0x12d8, 0x1310, MLineBreaker::EAlLineBreakClass }, //ethiopic syllable za
594 { 0x1310, 0x1311, MLineBreaker::EAlLineBreakClass }, //ethiopic syllable gwa
595 { 0x1312, 0x1316, MLineBreaker::EAlLineBreakClass }, //ethiopic syllable gwi
596 { 0x1318, 0x135b, MLineBreaker::EAlLineBreakClass }, //ethiopic syllable gga
597 { 0x135f, 0x1360, MLineBreaker::ECmLineBreakClass }, //ETHIOPIC COMBINING GEMINATION MARK
598 { 0x1360, 0x1361, MLineBreaker::EAlLineBreakClass }, //ETHIOPIC SECTION MARK
599 { 0x1361, 0x1362, MLineBreaker::EBaLineBreakClass }, //ethiopic wordspace
600 { 0x1362, 0x1369, MLineBreaker::EAlLineBreakClass }, //ethiopic full stop
601 { 0x1369, 0x1372, MLineBreaker::ENuLineBreakClass }, //ethiopic digit one
602 { 0x1372, 0x137d, MLineBreaker::EAlLineBreakClass }, //ethiopic number ten
603 { 0x1380, 0x139a, MLineBreaker::EAlLineBreakClass }, //ETHIOPIC SYLLABLE SEBATBEIT MWA
604 { 0x13a0, 0x13f5, MLineBreaker::EAlLineBreakClass }, //cherokee letter a
605 { 0x1401, 0x1677, MLineBreaker::EAlLineBreakClass }, //canadian syllabics e
606 { 0x1680, 0x1681, MLineBreaker::EBaLineBreakClass }, //ogham space mark
607 { 0x1681, 0x169b, MLineBreaker::EAlLineBreakClass }, //ogham letter beith
608 { 0x169b, 0x169c, MLineBreaker::EOpLineBreakClass }, //ogham feather mark
609 { 0x169c, 0x169d, MLineBreaker::EClLineBreakClass }, //ogham reversed feather mark
610 { 0x16a0, 0x16f1, MLineBreaker::EAlLineBreakClass }, //runic letter fehu feoh fe f
611 { 0x1700, 0x170d, MLineBreaker::EAlLineBreakClass }, //TAGALOG LETTER A
612 { 0x170e, 0x1712, MLineBreaker::EAlLineBreakClass }, //TAGALOG LETTER LA
613 { 0x1712, 0x1715, MLineBreaker::ECmLineBreakClass }, //TAGALOG VOWEL SIGN I
614 { 0x1720, 0x1732, MLineBreaker::EAlLineBreakClass }, //HANUNOO LETTER A
615 { 0x1732, 0x1735, MLineBreaker::ECmLineBreakClass }, //HANUNOO VOWEL SIGN I
616 { 0x1735, 0x1737, MLineBreaker::EBaLineBreakClass }, //PHILIPPINE SINGLE PUNCTUATION
617 { 0x1740, 0x1752, MLineBreaker::EAlLineBreakClass }, //BUHID LETTER A
618 { 0x1752, 0x1754, MLineBreaker::ECmLineBreakClass }, //BUHID VOWEL SIGN I
619 { 0x1760, 0x176d, MLineBreaker::EAlLineBreakClass }, //TAGBANWA LETTER A
620 { 0x176e, 0x1771, MLineBreaker::EAlLineBreakClass }, //TAGBANWA LETTER LA
621 { 0x1772, 0x1774, MLineBreaker::ECmLineBreakClass }, //TAGBANWA VOWEL SIGN I
622 { 0x1780, 0x17b4, MLineBreaker::ESaLineBreakClass }, //khmer letter ka
623 { 0x17b4, 0x17d4, MLineBreaker::ECmLineBreakClass }, //khmer vowel inherent aq
624 { 0x17d4, 0x17d5, MLineBreaker::ENsLineBreakClass }, //khmer sign khan
625 { 0x17d5, 0x17d6, MLineBreaker::EBaLineBreakClass }, //khmer sign bariyoosan
626 { 0x17d6, 0x17db, MLineBreaker::ENsLineBreakClass }, //khmer sign camnuc pii kuuh
627 { 0x17db, 0x17dc, MLineBreaker::EPrLineBreakClass }, //khmer currency symbol riel
628 { 0x17dc, 0x17dd, MLineBreaker::EAlLineBreakClass }, //khmer sign avakrahasanya
629 { 0x17dd, 0x17de, MLineBreaker::ESaLineBreakClass }, //KHMER SIGN ATTHACAN
630 { 0x17e0, 0x17ea, MLineBreaker::ENuLineBreakClass }, //khmer digit zero
631 { 0x17f0, 0x17fa, MLineBreaker::EAlLineBreakClass }, //KHMER SYMBOL LEK ATTAK SON
632 { 0x1800, 0x1806, MLineBreaker::EAlLineBreakClass }, //mongolian birga
633 { 0x1806, 0x1807, MLineBreaker::EBbLineBreakClass }, //mongolian todo soft hyphen
634 { 0x1807, 0x180b, MLineBreaker::EAlLineBreakClass }, //mongolian sibe syllable boundary marker
635 { 0x180b, 0x180f, MLineBreaker::ECmLineBreakClass }, //mongolian free variation selector one
636 { 0x1810, 0x181a, MLineBreaker::ENuLineBreakClass }, //mongolian digit zero
637 { 0x1820, 0x1878, MLineBreaker::EAlLineBreakClass }, //mongolian letter a
638 { 0x1880, 0x18a9, MLineBreaker::EAlLineBreakClass }, //mongolian letter ali gali anusvara one
639 { 0x18a9, 0x18aa, MLineBreaker::ECmLineBreakClass }, //mongolian letter ali gali dagalga
640 { 0x1900, 0x191d, MLineBreaker::EAlLineBreakClass }, //LIMBU VOWEL-CARRIER LETTER
641 { 0x1920, 0x192c, MLineBreaker::ECmLineBreakClass }, //LIMBU VOWEL SIGN A
642 { 0x1930, 0x193c, MLineBreaker::ECmLineBreakClass }, //LIMBU SMALL LETTER KA
643 { 0x1940, 0x1941, MLineBreaker::EAlLineBreakClass }, //LIMBU SIGN LOO
644 { 0x1944, 0x1946, MLineBreaker::EExLineBreakClass }, //LIMBU EXCLAMATION MARK
645 { 0x1946, 0x1950, MLineBreaker::ENuLineBreakClass }, //LIMBU DIGIT ZERO
646 { 0x1950, 0x196e, MLineBreaker::ESaLineBreakClass }, //TAI LE LETTER KA
647 { 0x1970, 0x1975, MLineBreaker::ESaLineBreakClass }, //TAI LE LETTER TONE-2
648 { 0x1980, 0x19aa, MLineBreaker::ESaLineBreakClass }, //NEW TAI LUE LETTER HIGH QA
649 { 0x19b0, 0x19ca, MLineBreaker::ESaLineBreakClass }, //NEW TAI LUE VOWEL SIGN VOWEL SHORTENER
650 { 0x19d0, 0x19da, MLineBreaker::ENuLineBreakClass }, //NEW TAI LUE DIGIT ZERO
651 { 0x19de, 0x19e0, MLineBreaker::ESaLineBreakClass }, //NEW TAI LUE SIGN LAE
652 { 0x19e0, 0x1a17, MLineBreaker::EAlLineBreakClass }, //KHMER SYMBOL PATHAMASAT
653 { 0x1a17, 0x1a1c, MLineBreaker::ECmLineBreakClass }, //BUGINESE VOWEL SIGN I
654 { 0x1a1e, 0x1a1f, MLineBreaker::EBaLineBreakClass }, //BUGINESE PALLAWA
655 { 0x1a1f, 0x1a20, MLineBreaker::EAlLineBreakClass }, //BUGINESE END OF SECTION
656 { 0x1b00, 0x1b05, MLineBreaker::ECmLineBreakClass }, //BALINESE SIGN ULU RICEM
657 { 0x1b05, 0x1b34, MLineBreaker::EAlLineBreakClass }, //BALINESE LETTER AKARA
658 { 0x1b34, 0x1b45, MLineBreaker::ECmLineBreakClass }, //BALINESE SIGN REREKAN
659 { 0x1b45, 0x1b4c, MLineBreaker::EAlLineBreakClass }, //BALINESE LETTER KAF SASAK
660 { 0x1b50, 0x1b5a, MLineBreaker::ENuLineBreakClass }, //BALINESE DIGIT ZERO
661 { 0x1b5a, 0x1b61, MLineBreaker::EBaLineBreakClass }, //BALINESE PANTI
662 { 0x1b61, 0x1b6b, MLineBreaker::EAlLineBreakClass }, //BALINESE MUSICAL SYMBOL DONG
663 { 0x1b6b, 0x1b74, MLineBreaker::ECmLineBreakClass }, //BALINESE MUSICAL SYMBOL COMBINING TEGEH
664 { 0x1b74, 0x1b7d, MLineBreaker::EAlLineBreakClass }, //BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG
665 { 0x1d00, 0x1dc0, MLineBreaker::EAlLineBreakClass }, //LATIN LETTER SMALL CAPITAL A
666 { 0x1dc0, 0x1dcb, MLineBreaker::ECmLineBreakClass }, //COMBINING DOTTED GRAVE ACCENT
667 { 0x1dfe, 0x1e00, MLineBreaker::ECmLineBreakClass }, //COMBINING LEFT ARROWHEAD ABOVE
668 { 0x1e00, 0x1e9c, MLineBreaker::EAlLineBreakClass }, //latin capital letter a with ring below
669 { 0x1ea0, 0x1efa, MLineBreaker::EAlLineBreakClass }, //latin capital letter a with dot below
670 { 0x1f00, 0x1f16, MLineBreaker::EAlLineBreakClass }, //greek small letter alpha with psili
671 { 0x1f18, 0x1f1e, MLineBreaker::EAlLineBreakClass }, //greek capital letter epsilon with psili
672 { 0x1f20, 0x1f46, MLineBreaker::EAlLineBreakClass }, //greek small letter eta with psili
673 { 0x1f48, 0x1f4e, MLineBreaker::EAlLineBreakClass }, //greek capital letter omicron with psili
674 { 0x1f50, 0x1f58, MLineBreaker::EAlLineBreakClass }, //greek small letter upsilon with psili
675 { 0x1f59, 0x1f5a, MLineBreaker::EAlLineBreakClass }, //greek capital letter upsilon with dasia
676 { 0x1f5b, 0x1f5c, MLineBreaker::EAlLineBreakClass }, //greek capital letter upsilon with dasia and varia
677 { 0x1f5d, 0x1f5e, MLineBreaker::EAlLineBreakClass }, //greek capital letter upsilon with dasia and oxia
678 { 0x1f5f, 0x1f7e, MLineBreaker::EAlLineBreakClass }, //greek capital letter upsilon with dasia and perispomeni
679 { 0x1f80, 0x1fb5, MLineBreaker::EAlLineBreakClass }, //greek small letter alpha with psili and ypogegrammeni
680 { 0x1fb6, 0x1fc5, MLineBreaker::EAlLineBreakClass }, //greek small letter alpha with perispomeni
681 { 0x1fc6, 0x1fd4, MLineBreaker::EAlLineBreakClass }, //greek small letter eta with perispomeni
682 { 0x1fd6, 0x1fdc, MLineBreaker::EAlLineBreakClass }, //greek small letter iota with perispomeni
683 { 0x1fdd, 0x1ff0, MLineBreaker::EAlLineBreakClass }, //greek dasia and varia
684 { 0x1ff2, 0x1ff5, MLineBreaker::EAlLineBreakClass }, //greek small letter omega with varia and ypogegrammeni
685 { 0x1ff6, 0x1fff, MLineBreaker::EAlLineBreakClass }, //greek small letter omega with perispomeni
686 { 0x2000, 0x2007, MLineBreaker::EBaLineBreakClass }, //en quad
687 { 0x2007, 0x2008, MLineBreaker::EGlLineBreakClass }, //figure space
688 { 0x2008, 0x200b, MLineBreaker::EBaLineBreakClass }, //punctuation space
689 { 0x200b, 0x200c, MLineBreaker::EZwLineBreakClass }, //zero width space
690 { 0x200c, 0x2010, MLineBreaker::ECmLineBreakClass }, //zero width non-joiner
691 { 0x2010, 0x2011, MLineBreaker::EBaLineBreakClass }, //hyphen
692 { 0x2011, 0x2012, MLineBreaker::EGlLineBreakClass }, //non-breaking hyphen
693 { 0x2012, 0x2014, MLineBreaker::EBaLineBreakClass }, //figure dash
694 { 0x2014, 0x2015, MLineBreaker::EB2LineBreakClass }, //em dash
695 { 0x2015, 0x2016, MLineBreaker::EAlLineBreakClass }, //horizontal bar
696 { 0x2016, 0x2017, MLineBreaker::EAiLineBreakClass }, //double vertical line
697 { 0x2017, 0x2018, MLineBreaker::EAlLineBreakClass }, //double low line
698 { 0x2018, 0x201a, MLineBreaker::EQuLineBreakClass }, //left single quotation mark
699 { 0x201a, 0x201b, MLineBreaker::EOpLineBreakClass }, //single low-9 quotation mark
700 { 0x201b, 0x201e, MLineBreaker::EQuLineBreakClass }, //single high-reversed-9 quotation mark
701 { 0x201e, 0x201f, MLineBreaker::EOpLineBreakClass }, //double low-9 quotation mark
702 { 0x201f, 0x2020, MLineBreaker::EQuLineBreakClass }, //double high-reversed-9 quotation mark
703 { 0x2020, 0x2022, MLineBreaker::EAiLineBreakClass }, //dagger
704 { 0x2022, 0x2024, MLineBreaker::EAlLineBreakClass }, //bullet
705 { 0x2024, 0x2027, MLineBreaker::EInLineBreakClass }, //one dot leader
706 { 0x2027, 0x2028, MLineBreaker::EBaLineBreakClass }, //hyphenation point
707 { 0x2028, 0x202a, MLineBreaker::EBkLineBreakClass }, //line separator
708 { 0x202a, 0x202f, MLineBreaker::ECmLineBreakClass }, //left-to-right embedding
709 { 0x202f, 0x2030, MLineBreaker::EGlLineBreakClass }, //narrow no-break space
710 { 0x2030, 0x2038, MLineBreaker::EPoLineBreakClass }, //per mille sign
711 { 0x2038, 0x2039, MLineBreaker::EAlLineBreakClass }, //caret
712 { 0x2039, 0x203b, MLineBreaker::EQuLineBreakClass }, //single left-pointing angle quotation mark
713 { 0x203b, 0x203c, MLineBreaker::EAiLineBreakClass }, //reference mark
714 { 0x203c, 0x203d, MLineBreaker::ENsLineBreakClass }, //double exclamation mark
715 { 0x203d, 0x2044, MLineBreaker::EAlLineBreakClass }, //interrobang
716 { 0x2044, 0x2045, MLineBreaker::ENsLineBreakClass }, //fraction slash
717 { 0x2045, 0x2046, MLineBreaker::EOpLineBreakClass }, //left square bracket with quill
718 { 0x2046, 0x2047, MLineBreaker::EClLineBreakClass }, //right square bracket with quill
719 { 0x2047, 0x2048, MLineBreaker::ENsLineBreakClass }, //DOUBLE QUESTION MARK
720 { 0x2048, 0x2056, MLineBreaker::EAlLineBreakClass }, //question exclamation mark
721 { 0x2056, 0x2057, MLineBreaker::EBaLineBreakClass }, //THREE DOT PUNCTUATION
722 { 0x2057, 0x2058, MLineBreaker::EAlLineBreakClass }, //QUADRUPLE PRIME
723 { 0x2058, 0x205c, MLineBreaker::EBaLineBreakClass }, //FOUR DOT PUNCTUATION
724 { 0x205c, 0x205d, MLineBreaker::EAlLineBreakClass }, //DOTTED CROSS
725 { 0x205d, 0x2060, MLineBreaker::EBaLineBreakClass }, //TRICOLON
726 { 0x2060, 0x2061, MLineBreaker::EGlLineBreakClass }, //WORD JOINER
727 { 0x2061, 0x2064, MLineBreaker::EAlLineBreakClass }, //FUNCTION APPLICATION
728 { 0x206a, 0x2070, MLineBreaker::ECmLineBreakClass }, //inhibit symmetric swapping
729 { 0x2070, 0x2071, MLineBreaker::EAlLineBreakClass }, //superscript zero
730 { 0x2071, 0x2072, MLineBreaker::EAlLineBreakClass }, //SUPERSCRIPT LATIN SMALL LETTER I
731 { 0x2074, 0x2075, MLineBreaker::EAiLineBreakClass }, //superscript four
732 { 0x2075, 0x207d, MLineBreaker::EAlLineBreakClass }, //superscript five
733 { 0x207d, 0x207e, MLineBreaker::EOpLineBreakClass }, //superscript left parenthesis
734 { 0x207e, 0x207f, MLineBreaker::EClLineBreakClass }, //superscript right parenthesis
735 { 0x207f, 0x2080, MLineBreaker::EAiLineBreakClass }, //superscript latin small letter n
736 { 0x2080, 0x2081, MLineBreaker::EAlLineBreakClass }, //subscript zero
737 { 0x2081, 0x2085, MLineBreaker::EAiLineBreakClass }, //subscript one
738 { 0x2085, 0x208d, MLineBreaker::EAlLineBreakClass }, //subscript five
739 { 0x208d, 0x208e, MLineBreaker::EOpLineBreakClass }, //subscript left parenthesis
740 { 0x208e, 0x208f, MLineBreaker::EClLineBreakClass }, //subscript right parenthesis
741 { 0x2090, 0x2095, MLineBreaker::EAlLineBreakClass }, //LATIN SUBSCRIPT SMALL LETTER A
742 { 0x20a0, 0x20a7, MLineBreaker::EPrLineBreakClass }, //euro-currency sign
743 { 0x20a7, 0x20a8, MLineBreaker::EPoLineBreakClass }, //peseta sign
744 { 0x20a8, 0x20b6, MLineBreaker::EPrLineBreakClass }, //rupee sign
745 { 0x20d0, 0x20f0, MLineBreaker::ECmLineBreakClass }, //combining left harpoon above
746 { 0x2100, 0x2103, MLineBreaker::EAlLineBreakClass }, //account of
747 { 0x2103, 0x2104, MLineBreaker::EPoLineBreakClass }, //degree celsius
748 { 0x2104, 0x2105, MLineBreaker::EAlLineBreakClass }, //centre line symbol
749 { 0x2105, 0x2106, MLineBreaker::EAiLineBreakClass }, //care of
750 { 0x2106, 0x2109, MLineBreaker::EAlLineBreakClass }, //cada una
751 { 0x2109, 0x210a, MLineBreaker::EPoLineBreakClass }, //degree fahrenheit
752 { 0x210a, 0x2113, MLineBreaker::EAlLineBreakClass }, //script small g
753 { 0x2113, 0x2114, MLineBreaker::EAiLineBreakClass }, //script small l
754 { 0x2114, 0x2116, MLineBreaker::EAlLineBreakClass }, //l b bar symbol
755 { 0x2116, 0x2117, MLineBreaker::EPrLineBreakClass }, //numero sign
756 { 0x2117, 0x2121, MLineBreaker::EAlLineBreakClass }, //sound recording copyright
757 { 0x2121, 0x2123, MLineBreaker::EAiLineBreakClass }, //telephone sign
758 { 0x2123, 0x2126, MLineBreaker::EAlLineBreakClass }, //versicle
759 { 0x2126, 0x2127, MLineBreaker::EPoLineBreakClass }, //ohm sign
760 { 0x2127, 0x212b, MLineBreaker::EAlLineBreakClass }, //inverted ohm sign
761 { 0x212b, 0x212c, MLineBreaker::EAiLineBreakClass }, //angstrom sign
762 { 0x212c, 0x214f, MLineBreaker::EAlLineBreakClass }, //script capital b
763 { 0x2153, 0x2154, MLineBreaker::EAlLineBreakClass }, //vulgar fraction one third
764 { 0x2154, 0x2156, MLineBreaker::EAiLineBreakClass }, //vulgar fraction two thirds
765 { 0x2156, 0x215b, MLineBreaker::EAlLineBreakClass }, //vulgar fraction two fifths
766 { 0x215b, 0x215c, MLineBreaker::EAiLineBreakClass }, //vulgar fraction one eighth
767 { 0x215c, 0x215e, MLineBreaker::EAlLineBreakClass }, //vulgar fraction three eighths
768 { 0x215e, 0x215f, MLineBreaker::EAiLineBreakClass }, //vulgar fraction seven eighths
769 { 0x215f, 0x2160, MLineBreaker::EAlLineBreakClass }, //fraction numerator one
770 { 0x2160, 0x216c, MLineBreaker::EAiLineBreakClass }, //roman numeral one
771 { 0x216c, 0x2170, MLineBreaker::EAlLineBreakClass }, //roman numeral fifty
772 { 0x2170, 0x217a, MLineBreaker::EAiLineBreakClass }, //small roman numeral one
773 { 0x217a, 0x2185, MLineBreaker::EAlLineBreakClass }, //small roman numeral eleven
774 { 0x2190, 0x219a, MLineBreaker::EAiLineBreakClass }, //leftwards arrow
775 { 0x219a, 0x21d2, MLineBreaker::EAlLineBreakClass }, //leftwards arrow with stroke
776 { 0x21d2, 0x21d3, MLineBreaker::EAiLineBreakClass }, //rightwards double arrow
777 { 0x21d3, 0x21d4, MLineBreaker::EAlLineBreakClass }, //downwards double arrow
778 { 0x21d4, 0x21d5, MLineBreaker::EAiLineBreakClass }, //left right double arrow
779 { 0x21d5, 0x2200, MLineBreaker::EAlLineBreakClass }, //up down double arrow
780 { 0x2200, 0x2201, MLineBreaker::EAiLineBreakClass }, //for all
781 { 0x2201, 0x2202, MLineBreaker::EAlLineBreakClass }, //complement
782 { 0x2202, 0x2204, MLineBreaker::EAiLineBreakClass }, //partial differential
783 { 0x2204, 0x2207, MLineBreaker::EAlLineBreakClass }, //there does not exist
784 { 0x2207, 0x2209, MLineBreaker::EAiLineBreakClass }, //nabla
785 { 0x2209, 0x220b, MLineBreaker::EAlLineBreakClass }, //not an element of
786 { 0x220b, 0x220c, MLineBreaker::EAiLineBreakClass }, //contains as member
787 { 0x220c, 0x220f, MLineBreaker::EAlLineBreakClass }, //does not contain as member
788 { 0x220f, 0x2210, MLineBreaker::EAiLineBreakClass }, //n-ary product
789 { 0x2210, 0x2211, MLineBreaker::EAlLineBreakClass }, //n-ary coproduct
790 { 0x2211, 0x2212, MLineBreaker::EAiLineBreakClass }, //n-ary summation
791 { 0x2212, 0x2214, MLineBreaker::EPrLineBreakClass }, //minus sign
792 { 0x2214, 0x2215, MLineBreaker::EAlLineBreakClass }, //dot plus
793 { 0x2215, 0x2216, MLineBreaker::EAiLineBreakClass }, //division slash
794 { 0x2216, 0x221a, MLineBreaker::EAlLineBreakClass }, //set minus
795 { 0x221a, 0x221b, MLineBreaker::EAiLineBreakClass }, //square root
796 { 0x221b, 0x221d, MLineBreaker::EAlLineBreakClass }, //cube root
797 { 0x221d, 0x2221, MLineBreaker::EAiLineBreakClass }, //proportional to
798 { 0x2221, 0x2223, MLineBreaker::EAlLineBreakClass }, //measured angle
799 { 0x2223, 0x2224, MLineBreaker::EAiLineBreakClass }, //divides
800 { 0x2224, 0x2225, MLineBreaker::EAlLineBreakClass }, //does not divide
801 { 0x2225, 0x2226, MLineBreaker::EAiLineBreakClass }, //parallel to
802 { 0x2226, 0x2227, MLineBreaker::EAlLineBreakClass }, //not parallel to
803 { 0x2227, 0x222d, MLineBreaker::EAiLineBreakClass }, //logical and
804 { 0x222d, 0x222e, MLineBreaker::EAlLineBreakClass }, //triple integral
805 { 0x222e, 0x222f, MLineBreaker::EAiLineBreakClass }, //contour integral
806 { 0x222f, 0x2234, MLineBreaker::EAlLineBreakClass }, //surface integral
807 { 0x2234, 0x2238, MLineBreaker::EAiLineBreakClass }, //therefore
808 { 0x2238, 0x223c, MLineBreaker::EAlLineBreakClass }, //dot minus
809 { 0x223c, 0x223e, MLineBreaker::EAiLineBreakClass }, //tilde operator
810 { 0x223e, 0x2248, MLineBreaker::EAlLineBreakClass }, //inverted lazy s
811 { 0x2248, 0x2249, MLineBreaker::EAiLineBreakClass }, //almost equal to
812 { 0x2249, 0x224c, MLineBreaker::EAlLineBreakClass }, //not almost equal to
813 { 0x224c, 0x224d, MLineBreaker::EAiLineBreakClass }, //all equal to
814 { 0x224d, 0x2252, MLineBreaker::EAlLineBreakClass }, //equivalent to
815 { 0x2252, 0x2253, MLineBreaker::EAiLineBreakClass }, //approximately equal to or the image of
816 { 0x2253, 0x2260, MLineBreaker::EAlLineBreakClass }, //image of or approximately equal to
817 { 0x2260, 0x2262, MLineBreaker::EAiLineBreakClass }, //not equal to
818 { 0x2262, 0x2264, MLineBreaker::EAlLineBreakClass }, //not identical to
819 { 0x2264, 0x2268, MLineBreaker::EAiLineBreakClass }, //less-than or equal to
820 { 0x2268, 0x226a, MLineBreaker::EAlLineBreakClass }, //less-than but not equal to
821 { 0x226a, 0x226c, MLineBreaker::EAiLineBreakClass }, //much less-than
822 { 0x226c, 0x226e, MLineBreaker::EAlLineBreakClass }, //between
823 { 0x226e, 0x2270, MLineBreaker::EAiLineBreakClass }, //not less-than
824 { 0x2270, 0x2282, MLineBreaker::EAlLineBreakClass }, //neither less-than nor equal to
825 { 0x2282, 0x2284, MLineBreaker::EAiLineBreakClass }, //subset of
826 { 0x2284, 0x2286, MLineBreaker::EAlLineBreakClass }, //not a subset of
827 { 0x2286, 0x2288, MLineBreaker::EAiLineBreakClass }, //subset of or equal to
828 { 0x2288, 0x2295, MLineBreaker::EAlLineBreakClass }, //neither a subset of nor equal to
829 { 0x2295, 0x2296, MLineBreaker::EAiLineBreakClass }, //circled plus
830 { 0x2296, 0x2299, MLineBreaker::EAlLineBreakClass }, //circled minus
831 { 0x2299, 0x229a, MLineBreaker::EAiLineBreakClass }, //circled dot operator
832 { 0x229a, 0x22a5, MLineBreaker::EAlLineBreakClass }, //circled ring operator
833 { 0x22a5, 0x22a6, MLineBreaker::EAiLineBreakClass }, //up tack
834 { 0x22a6, 0x22bf, MLineBreaker::EAlLineBreakClass }, //assertion
835 { 0x22bf, 0x22c0, MLineBreaker::EAiLineBreakClass }, //right triangle
836 { 0x22c0, 0x2312, MLineBreaker::EAlLineBreakClass }, //n-ary logical and
837 { 0x2312, 0x2313, MLineBreaker::EAiLineBreakClass }, //arc
838 { 0x2313, 0x2329, MLineBreaker::EAlLineBreakClass }, //segment
839 { 0x2329, 0x232a, MLineBreaker::EOpLineBreakClass }, //left-pointing angle bracket
840 { 0x232a, 0x232b, MLineBreaker::EClLineBreakClass }, //right-pointing angle bracket
841 { 0x232b, 0x23e8, MLineBreaker::EAlLineBreakClass }, //erase to the left
842 { 0x2400, 0x2427, MLineBreaker::EAlLineBreakClass }, //symbol for null
843 { 0x2440, 0x244b, MLineBreaker::EAlLineBreakClass }, //ocr hook
844 { 0x2460, 0x24c0, MLineBreaker::EAiLineBreakClass }, //circled digit one
845 { 0x24c0, 0x24d0, MLineBreaker::EAlLineBreakClass }, //circled latin capital letter k
846 { 0x24d0, 0x24ea, MLineBreaker::EAiLineBreakClass }, //circled latin small letter a
847 { 0x24ea, 0x24eb, MLineBreaker::EAlLineBreakClass }, //circled digit zero
848 { 0x24eb, 0x24ff, MLineBreaker::EAiLineBreakClass }, //NEGATIVE CIRCLED NUMBER ELEVEN
849 { 0x24ff, 0x2500, MLineBreaker::EAlLineBreakClass }, //NEGATIVE CIRCLED DIGIT ZERO
850 { 0x2500, 0x254c, MLineBreaker::EAiLineBreakClass }, //box drawings light horizontal
851 { 0x254c, 0x2550, MLineBreaker::EAlLineBreakClass }, //box drawings light double dash horizontal
852 { 0x2550, 0x2575, MLineBreaker::EAiLineBreakClass }, //box drawings double horizontal
853 { 0x2575, 0x2580, MLineBreaker::EAlLineBreakClass }, //box drawings light up
854 { 0x2580, 0x2590, MLineBreaker::EAiLineBreakClass }, //upper half block
855 { 0x2590, 0x2592, MLineBreaker::EAlLineBreakClass }, //right half block
856 { 0x2592, 0x2596, MLineBreaker::EAiLineBreakClass }, //medium shade
857 { 0x2596, 0x25a0, MLineBreaker::EAlLineBreakClass }, //QUADRANT LOWER LEFT
858 { 0x25a0, 0x25a2, MLineBreaker::EAiLineBreakClass }, //black square
859 { 0x25a2, 0x25a3, MLineBreaker::EAlLineBreakClass }, //white square with rounded corners
860 { 0x25a3, 0x25aa, MLineBreaker::EAiLineBreakClass }, //white square containing black small square
861 { 0x25aa, 0x25b2, MLineBreaker::EAlLineBreakClass }, //black small square
862 { 0x25b2, 0x25b4, MLineBreaker::EAiLineBreakClass }, //black up-pointing triangle
863 { 0x25b4, 0x25b6, MLineBreaker::EAlLineBreakClass }, //black up-pointing small triangle
864 { 0x25b6, 0x25b8, MLineBreaker::EAiLineBreakClass }, //black right-pointing triangle
865 { 0x25b8, 0x25bc, MLineBreaker::EAlLineBreakClass }, //black right-pointing small triangle
866 { 0x25bc, 0x25be, MLineBreaker::EAiLineBreakClass }, //black down-pointing triangle
867 { 0x25be, 0x25c0, MLineBreaker::EAlLineBreakClass }, //black down-pointing small triangle
868 { 0x25c0, 0x25c2, MLineBreaker::EAiLineBreakClass }, //black left-pointing triangle
869 { 0x25c2, 0x25c6, MLineBreaker::EAlLineBreakClass }, //black left-pointing small triangle
870 { 0x25c6, 0x25c8, MLineBreaker::EAiLineBreakClass }, //black diamond
871 { 0x25c8, 0x25cb, MLineBreaker::EAlLineBreakClass }, //white diamond containing black small diamond
872 { 0x25cb, 0x25cc, MLineBreaker::EAiLineBreakClass }, //white circle
873 { 0x25cc, 0x25ce, MLineBreaker::EAlLineBreakClass }, //dotted circle
874 { 0x25ce, 0x25d2, MLineBreaker::EAiLineBreakClass }, //bullseye
875 { 0x25d2, 0x25e2, MLineBreaker::EAlLineBreakClass }, //circle with lower half black
876 { 0x25e2, 0x25e6, MLineBreaker::EAiLineBreakClass }, //black lower right triangle
877 { 0x25e6, 0x25ef, MLineBreaker::EAlLineBreakClass }, //white bullet
878 { 0x25ef, 0x25f0, MLineBreaker::EAiLineBreakClass }, //large circle
879 { 0x25f0, 0x2605, MLineBreaker::EAlLineBreakClass }, //white square with upper left quadrant
880 { 0x2605, 0x2607, MLineBreaker::EAiLineBreakClass }, //black star
881 { 0x2607, 0x2609, MLineBreaker::EAlLineBreakClass }, //lightning
882 { 0x2609, 0x260a, MLineBreaker::EAiLineBreakClass }, //sun
883 { 0x260a, 0x260e, MLineBreaker::EAlLineBreakClass }, //ascending node
884 { 0x260e, 0x2610, MLineBreaker::EAiLineBreakClass }, //black telephone
885 { 0x2610, 0x2614, MLineBreaker::EAlLineBreakClass }, //ballot box
886 { 0x2614, 0x2618, MLineBreaker::EAiLineBreakClass }, //UMBRELLA WITH RAIN DROPS
887 { 0x2618, 0x261c, MLineBreaker::EAlLineBreakClass }, //SHAMROCK
888 { 0x261c, 0x261d, MLineBreaker::EAiLineBreakClass }, //white left pointing index
889 { 0x261d, 0x261e, MLineBreaker::EAlLineBreakClass }, //white up pointing index
890 { 0x261e, 0x261f, MLineBreaker::EAiLineBreakClass }, //white right pointing index
891 { 0x261f, 0x2640, MLineBreaker::EAlLineBreakClass }, //white down pointing index
892 { 0x2640, 0x2641, MLineBreaker::EAiLineBreakClass }, //female sign
893 { 0x2641, 0x2642, MLineBreaker::EAlLineBreakClass }, //earth
894 { 0x2642, 0x2643, MLineBreaker::EAiLineBreakClass }, //male sign
895 { 0x2643, 0x2660, MLineBreaker::EAlLineBreakClass }, //jupiter
896 { 0x2660, 0x2662, MLineBreaker::EAiLineBreakClass }, //black spade suit
897 { 0x2662, 0x2663, MLineBreaker::EAlLineBreakClass }, //white diamond suit
898 { 0x2663, 0x2666, MLineBreaker::EAiLineBreakClass }, //black club suit
899 { 0x2666, 0x2667, MLineBreaker::EAlLineBreakClass }, //black diamond suit
900 { 0x2667, 0x266b, MLineBreaker::EAiLineBreakClass }, //white club suit
901 { 0x266b, 0x266c, MLineBreaker::EAlLineBreakClass }, //beamed eighth notes
902 { 0x266c, 0x266e, MLineBreaker::EAiLineBreakClass }, //beamed sixteenth notes
903 { 0x266e, 0x266f, MLineBreaker::EAlLineBreakClass }, //music natural sign
904 { 0x266f, 0x2670, MLineBreaker::EAiLineBreakClass }, //music sharp sign
905 { 0x2670, 0x269d, MLineBreaker::EAlLineBreakClass }, //west syriac cross
906 { 0x26a0, 0x26b3, MLineBreaker::EAlLineBreakClass }, //WARNING SIGN
907 { 0x2701, 0x2705, MLineBreaker::EAlLineBreakClass }, //upper blade scissors
908 { 0x2706, 0x270a, MLineBreaker::EAlLineBreakClass }, //telephone location sign
909 { 0x270c, 0x2728, MLineBreaker::EAlLineBreakClass }, //victory hand
910 { 0x2729, 0x274c, MLineBreaker::EAlLineBreakClass }, //stress outlined white star
911 { 0x274d, 0x274e, MLineBreaker::EAlLineBreakClass }, //shadowed white circle
912 { 0x274f, 0x2753, MLineBreaker::EAlLineBreakClass }, //lower right drop-shadowed white square
913 { 0x2756, 0x2757, MLineBreaker::EAlLineBreakClass }, //black diamond minus white x
914 { 0x2758, 0x275f, MLineBreaker::EAlLineBreakClass }, //light vertical bar
915 { 0x2761, 0x2768, MLineBreaker::EAlLineBreakClass }, //curved stem paragraph sign ornament
916 { 0x2768, 0x2769, MLineBreaker::EOpLineBreakClass }, //MEDIUM LEFT PARENTHESIS ORNAMENT
917 { 0x2769, 0x276a, MLineBreaker::EClLineBreakClass }, //MEDIUM RIGHT PARENTHESIS ORNAMENT
918 { 0x276a, 0x276b, MLineBreaker::EOpLineBreakClass }, //MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
919 { 0x276b, 0x276c, MLineBreaker::EClLineBreakClass }, //MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
920 { 0x276c, 0x276d, MLineBreaker::EOpLineBreakClass }, //MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
921 { 0x276d, 0x276e, MLineBreaker::EClLineBreakClass }, //MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
922 { 0x276e, 0x276f, MLineBreaker::EOpLineBreakClass }, //HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
923 { 0x276f, 0x2770, MLineBreaker::EClLineBreakClass }, //HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
924 { 0x2770, 0x2771, MLineBreaker::EOpLineBreakClass }, //HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
925 { 0x2771, 0x2772, MLineBreaker::EClLineBreakClass }, //HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
926 { 0x2772, 0x2773, MLineBreaker::EOpLineBreakClass }, //LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
927 { 0x2773, 0x2774, MLineBreaker::EClLineBreakClass }, //LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
928 { 0x2774, 0x2775, MLineBreaker::EOpLineBreakClass }, //MEDIUM LEFT CURLY BRACKET ORNAMENT
929 { 0x2775, 0x2776, MLineBreaker::EClLineBreakClass }, //MEDIUM RIGHT CURLY BRACKET ORNAMENT
930 { 0x2776, 0x2795, MLineBreaker::EAlLineBreakClass }, //dingbat negative circled digit one
931 { 0x2798, 0x27b0, MLineBreaker::EAlLineBreakClass }, //heavy south east arrow
932 { 0x27b1, 0x27bf, MLineBreaker::EAlLineBreakClass }, //notched upper right-shadowed white rightwards arrow
933 { 0x27c0, 0x27c5, MLineBreaker::EAlLineBreakClass }, //THREE DIMENSIONAL ANGLE
934 { 0x27c5, 0x27c6, MLineBreaker::EOpLineBreakClass }, //LEFT S-SHAPED BAG DELIMITER
935 { 0x27c6, 0x27c7, MLineBreaker::EClLineBreakClass }, //RIGHT S-SHAPED BAG DELIMITER
936 { 0x27c7, 0x27cb, MLineBreaker::EAlLineBreakClass }, //OR WITH DOT INSIDE
937 { 0x27d0, 0x27e6, MLineBreaker::EAlLineBreakClass }, //WHITE DIAMOND WITH CENTRED DOT
938 { 0x27e6, 0x27e7, MLineBreaker::EOpLineBreakClass }, //MATHEMATICAL LEFT WHITE SQUARE BRACKET
939 { 0x27e7, 0x27e8, MLineBreaker::EClLineBreakClass }, //MATHEMATICAL RIGHT WHITE SQUARE BRACKET
940 { 0x27e8, 0x27e9, MLineBreaker::EOpLineBreakClass }, //MATHEMATICAL LEFT ANGLE BRACKET
941 { 0x27e9, 0x27ea, MLineBreaker::EClLineBreakClass }, //MATHEMATICAL RIGHT ANGLE BRACKET
942 { 0x27ea, 0x27eb, MLineBreaker::EOpLineBreakClass }, //MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
943 { 0x27eb, 0x27ec, MLineBreaker::EClLineBreakClass }, //MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
944 { 0x27f0, 0x2983, MLineBreaker::EAlLineBreakClass }, //UPWARDS QUADRUPLE ARROW
945 { 0x2983, 0x2984, MLineBreaker::EOpLineBreakClass }, //LEFT WHITE CURLY BRACKET
946 { 0x2984, 0x2985, MLineBreaker::EClLineBreakClass }, //RIGHT WHITE CURLY BRACKET
947 { 0x2985, 0x2986, MLineBreaker::EOpLineBreakClass }, //LEFT WHITE PARENTHESIS
948 { 0x2986, 0x2987, MLineBreaker::EClLineBreakClass }, //RIGHT WHITE PARENTHESIS
949 { 0x2987, 0x2988, MLineBreaker::EOpLineBreakClass }, //Z NOTATION LEFT IMAGE BRACKET
950 { 0x2988, 0x2989, MLineBreaker::EClLineBreakClass }, //Z NOTATION RIGHT IMAGE BRACKET
951 { 0x2989, 0x298a, MLineBreaker::EOpLineBreakClass }, //Z NOTATION LEFT BINDING BRACKET
952 { 0x298a, 0x298b, MLineBreaker::EClLineBreakClass }, //Z NOTATION RIGHT BINDING BRACKET
953 { 0x298b, 0x298c, MLineBreaker::EOpLineBreakClass }, //LEFT SQUARE BRACKET WITH UNDERBAR
954 { 0x298c, 0x298d, MLineBreaker::EClLineBreakClass }, //RIGHT SQUARE BRACKET WITH UNDERBAR
955 { 0x298d, 0x298e, MLineBreaker::EOpLineBreakClass }, //LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
956 { 0x298e, 0x298f, MLineBreaker::EClLineBreakClass }, //RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
957 { 0x298f, 0x2990, MLineBreaker::EOpLineBreakClass }, //LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
958 { 0x2990, 0x2991, MLineBreaker::EClLineBreakClass }, //RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
959 { 0x2991, 0x2992, MLineBreaker::EOpLineBreakClass }, //LEFT ANGLE BRACKET WITH DOT
960 { 0x2992, 0x2993, MLineBreaker::EClLineBreakClass }, //RIGHT ANGLE BRACKET WITH DOT
961 { 0x2993, 0x2994, MLineBreaker::EOpLineBreakClass }, //LEFT ARC LESS-THAN BRACKET
962 { 0x2994, 0x2995, MLineBreaker::EClLineBreakClass }, //RIGHT ARC GREATER-THAN BRACKET
963 { 0x2995, 0x2996, MLineBreaker::EOpLineBreakClass }, //DOUBLE LEFT ARC GREATER-THAN BRACKET
964 { 0x2996, 0x2997, MLineBreaker::EClLineBreakClass }, //DOUBLE RIGHT ARC LESS-THAN BRACKET
965 { 0x2997, 0x2998, MLineBreaker::EOpLineBreakClass }, //LEFT BLACK TORTOISE SHELL BRACKET
966 { 0x2998, 0x2999, MLineBreaker::EClLineBreakClass }, //RIGHT BLACK TORTOISE SHELL BRACKET
967 { 0x2999, 0x29d8, MLineBreaker::EAlLineBreakClass }, //DOTTED FENCE
968 { 0x29d8, 0x29d9, MLineBreaker::EOpLineBreakClass }, //LEFT WIGGLY FENCE
969 { 0x29d9, 0x29da, MLineBreaker::EClLineBreakClass }, //RIGHT WIGGLY FENCE
970 { 0x29da, 0x29db, MLineBreaker::EOpLineBreakClass }, //LEFT DOUBLE WIGGLY FENCE
971 { 0x29db, 0x29dc, MLineBreaker::EClLineBreakClass }, //RIGHT DOUBLE WIGGLY FENCE
972 { 0x29dc, 0x29fc, MLineBreaker::EAlLineBreakClass }, //INCOMPLETE INFINITY
973 { 0x29fc, 0x29fd, MLineBreaker::EOpLineBreakClass }, //LEFT-POINTING CURVED ANGLE BRACKET
974 { 0x29fd, 0x29fe, MLineBreaker::EClLineBreakClass }, //RIGHT-POINTING CURVED ANGLE BRACKET
975 { 0x29fe, 0x2b1b, MLineBreaker::EAlLineBreakClass }, //TINY
976 { 0x2b20, 0x2b24, MLineBreaker::EAlLineBreakClass }, //WHITE PENTAGON
977 { 0x2c00, 0x2c2f, MLineBreaker::EAlLineBreakClass }, //GLAGOLITIC CAPITAL LETTER AZU
978 { 0x2c30, 0x2c5f, MLineBreaker::EAlLineBreakClass }, //GLAGOLITIC SMALL LETTER AZU
979 { 0x2c60, 0x2c6d, MLineBreaker::EAlLineBreakClass }, //LATIN CAPITAL LETTER L WITH DOUBLE BAR
980 { 0x2c74, 0x2c78, MLineBreaker::EAlLineBreakClass }, //LATIN SMALL LETTER V WITH CURL
981 { 0x2c80, 0x2ceb, MLineBreaker::EAlLineBreakClass }, //COPTIC CAPITAL LETTER ALFA
982 { 0x2cf9, 0x2cfd, MLineBreaker::EBaLineBreakClass }, //COPTIC OLD NUBIAN FULL STOP
983 { 0x2cfd, 0x2cfe, MLineBreaker::EAlLineBreakClass }, //COPTIC FRACTION ONE HALF
984 { 0x2cfe, 0x2d00, MLineBreaker::EBaLineBreakClass }, //COPTIC FULL STOP
985 { 0x2d00, 0x2d26, MLineBreaker::EAlLineBreakClass }, //GEORGIAN SMALL LETTER AN
986 { 0x2d30, 0x2d66, MLineBreaker::EAlLineBreakClass }, //TIFINAGH LETTER YA
987 { 0x2d6f, 0x2d70, MLineBreaker::EAlLineBreakClass }, //TIFINAGH MODIFIER LETTER LABIALIZATION MARK
988 { 0x2d80, 0x2d97, MLineBreaker::EAlLineBreakClass }, //ETHIOPIC SYLLABLE LOA
989 { 0x2da0, 0x2da7, MLineBreaker::EAlLineBreakClass }, //ETHIOPIC SYLLABLE SSA
990 { 0x2da8, 0x2daf, MLineBreaker::EAlLineBreakClass }, //ETHIOPIC SYLLABLE CCA
991 { 0x2db0, 0x2db7, MLineBreaker::EAlLineBreakClass }, //ETHIOPIC SYLLABLE ZZA
992 { 0x2db8, 0x2dbf, MLineBreaker::EAlLineBreakClass }, //ETHIOPIC SYLLABLE CCHA
993 { 0x2dc0, 0x2dc7, MLineBreaker::EAlLineBreakClass }, //ETHIOPIC SYLLABLE QYA
994 { 0x2dc8, 0x2dcf, MLineBreaker::EAlLineBreakClass }, //ETHIOPIC SYLLABLE KYA
995 { 0x2dd0, 0x2dd7, MLineBreaker::EAlLineBreakClass }, //ETHIOPIC SYLLABLE XYA
996 { 0x2dd8, 0x2ddf, MLineBreaker::EAlLineBreakClass }, //ETHIOPIC SYLLABLE GYA
997 { 0x2e00, 0x2e0e, MLineBreaker::EQuLineBreakClass }, //RIGHT ANGLE SUBSTITUTION MARKER
998 { 0x2e0e, 0x2e16, MLineBreaker::EBaLineBreakClass }, //EDITORIAL CORONIS
999 { 0x2e16, 0x2e17, MLineBreaker::EAlLineBreakClass }, //DOTTED RIGHT-POINTING ANGLE
1000 { 0x2e17, 0x2e18, MLineBreaker::EBaLineBreakClass }, //DOUBLE OBLIQUE HYPHEN
1001 { 0x2e1c, 0x2e1e, MLineBreaker::EQuLineBreakClass }, //LEFT LOW PARAPHRASE BRACKET
1002 { 0x2e80, 0x2e9a, MLineBreaker::EIdLineBreakClass }, //cjk radical repeat
1003 { 0x2e9b, 0x2ef4, MLineBreaker::EIdLineBreakClass }, //cjk radical choke
1004 { 0x2f00, 0x2fd6, MLineBreaker::EIdLineBreakClass }, //kangxi radical one
1005 { 0x2ff0, 0x2ffc, MLineBreaker::EIdLineBreakClass }, //ideographic description character left to right
1006 { 0x3000, 0x3001, MLineBreaker::EIdLineBreakClass }, //ideographic space
1007 { 0x3001, 0x3003, MLineBreaker::EClLineBreakClass }, //ideographic comma
1008 { 0x3003, 0x3005, MLineBreaker::EIdLineBreakClass }, //ditto mark
1009 { 0x3005, 0x3006, MLineBreaker::ENsLineBreakClass }, //ideographic iteration mark
1010 { 0x3006, 0x3008, MLineBreaker::EIdLineBreakClass }, //ideographic closing mark
1011 { 0x3008, 0x3009, MLineBreaker::EOpLineBreakClass }, //left angle bracket
1012 { 0x3009, 0x300a, MLineBreaker::EClLineBreakClass }, //right angle bracket
1013 { 0x300a, 0x300b, MLineBreaker::EOpLineBreakClass }, //left double angle bracket
1014 { 0x300b, 0x300c, MLineBreaker::EClLineBreakClass }, //right double angle bracket
1015 { 0x300c, 0x300d, MLineBreaker::EOpLineBreakClass }, //left corner bracket
1016 { 0x300d, 0x300e, MLineBreaker::EClLineBreakClass }, //right corner bracket
1017 { 0x300e, 0x300f, MLineBreaker::EOpLineBreakClass }, //left white corner bracket
1018 { 0x300f, 0x3010, MLineBreaker::EClLineBreakClass }, //right white corner bracket
1019 { 0x3010, 0x3011, MLineBreaker::EOpLineBreakClass }, //left black lenticular bracket
1020 { 0x3011, 0x3012, MLineBreaker::EClLineBreakClass }, //right black lenticular bracket
1021 { 0x3012, 0x3014, MLineBreaker::EIdLineBreakClass }, //postal mark
1022 { 0x3014, 0x3015, MLineBreaker::EOpLineBreakClass }, //left tortoise shell bracket
1023 { 0x3015, 0x3016, MLineBreaker::EClLineBreakClass }, //right tortoise shell bracket
1024 { 0x3016, 0x3017, MLineBreaker::EOpLineBreakClass }, //left white lenticular bracket
1025 { 0x3017, 0x3018, MLineBreaker::EClLineBreakClass }, //right white lenticular bracket
1026 { 0x3018, 0x3019, MLineBreaker::EOpLineBreakClass }, //left white tortoise shell bracket
1027 { 0x3019, 0x301a, MLineBreaker::EClLineBreakClass }, //right white tortoise shell bracket
1028 { 0x301a, 0x301b, MLineBreaker::EOpLineBreakClass }, //left white square bracket
1029 { 0x301b, 0x301c, MLineBreaker::EClLineBreakClass }, //right white square bracket
1030 { 0x301c, 0x301d, MLineBreaker::ENsLineBreakClass }, //wave dash
1031 { 0x301d, 0x301e, MLineBreaker::EOpLineBreakClass }, //reversed double prime quotation mark
1032 { 0x301e, 0x3020, MLineBreaker::EClLineBreakClass }, //double prime quotation mark
1033 { 0x3020, 0x302a, MLineBreaker::EIdLineBreakClass }, //postal mark face
1034 { 0x302a, 0x3030, MLineBreaker::ECmLineBreakClass }, //ideographic level tone mark
1035 { 0x3030, 0x303b, MLineBreaker::EIdLineBreakClass }, //wavy dash
1036 { 0x303b, 0x303d, MLineBreaker::ENsLineBreakClass }, //VERTICAL IDEOGRAPHIC ITERATION MARK
1037 { 0x303d, 0x3040, MLineBreaker::EIdLineBreakClass }, //PART ALTERNATION MARK
1038 { 0x3041, 0x3042, MLineBreaker::ENsLineBreakClass }, //hiragana letter small a
1039 { 0x3042, 0x3043, MLineBreaker::EIdLineBreakClass }, //hiragana letter a
1040 { 0x3043, 0x3044, MLineBreaker::ENsLineBreakClass }, //hiragana letter small i
1041 { 0x3044, 0x3045, MLineBreaker::EIdLineBreakClass }, //hiragana letter i
1042 { 0x3045, 0x3046, MLineBreaker::ENsLineBreakClass }, //hiragana letter small u
1043 { 0x3046, 0x3047, MLineBreaker::EIdLineBreakClass }, //hiragana letter u
1044 { 0x3047, 0x3048, MLineBreaker::ENsLineBreakClass }, //hiragana letter small e
1045 { 0x3048, 0x3049, MLineBreaker::EIdLineBreakClass }, //hiragana letter e
1046 { 0x3049, 0x304a, MLineBreaker::ENsLineBreakClass }, //hiragana letter small o
1047 { 0x304a, 0x3063, MLineBreaker::EIdLineBreakClass }, //hiragana letter o
1048 { 0x3063, 0x3064, MLineBreaker::ENsLineBreakClass }, //hiragana letter small tu
1049 { 0x3064, 0x3083, MLineBreaker::EIdLineBreakClass }, //hiragana letter tu
1050 { 0x3083, 0x3084, MLineBreaker::ENsLineBreakClass }, //hiragana letter small ya
1051 { 0x3084, 0x3085, MLineBreaker::EIdLineBreakClass }, //hiragana letter ya
1052 { 0x3085, 0x3086, MLineBreaker::ENsLineBreakClass }, //hiragana letter small yu
1053 { 0x3086, 0x3087, MLineBreaker::EIdLineBreakClass }, //hiragana letter yu
1054 { 0x3087, 0x3088, MLineBreaker::ENsLineBreakClass }, //hiragana letter small yo
1055 { 0x3088, 0x308e, MLineBreaker::EIdLineBreakClass }, //hiragana letter yo
1056 { 0x308e, 0x308f, MLineBreaker::ENsLineBreakClass }, //hiragana letter small wa
1057 { 0x308f, 0x3095, MLineBreaker::EIdLineBreakClass }, //hiragana letter wa
1058 { 0x3095, 0x3097, MLineBreaker::ENsLineBreakClass }, //HIRAGANA LETTER SMALL KA
1059 { 0x3099, 0x309b, MLineBreaker::ECmLineBreakClass }, //combining katakana-hiragana voiced sound mark
1060 { 0x309b, 0x309f, MLineBreaker::ENsLineBreakClass }, //katakana-hiragana voiced sound mark
1061 { 0x309f, 0x30a0, MLineBreaker::EIdLineBreakClass }, //HIRAGANA DIGRAPH YORI
1062 { 0x30a0, 0x30a1, MLineBreaker::ENsLineBreakClass }, //KATAKANA-HIRAGANA DOUBLE HYPHEN
1063 { 0x30a1, 0x30a2, MLineBreaker::ENsLineBreakClass }, //katakana letter small a
1064 { 0x30a2, 0x30a3, MLineBreaker::EIdLineBreakClass }, //katakana letter a
1065 { 0x30a3, 0x30a4, MLineBreaker::ENsLineBreakClass }, //katakana letter small i
1066 { 0x30a4, 0x30a5, MLineBreaker::EIdLineBreakClass }, //katakana letter i
1067 { 0x30a5, 0x30a6, MLineBreaker::ENsLineBreakClass }, //katakana letter small u
1068 { 0x30a6, 0x30a7, MLineBreaker::EIdLineBreakClass }, //katakana letter u
1069 { 0x30a7, 0x30a8, MLineBreaker::ENsLineBreakClass }, //katakana letter small e
1070 { 0x30a8, 0x30a9, MLineBreaker::EIdLineBreakClass }, //katakana letter e
1071 { 0x30a9, 0x30aa, MLineBreaker::ENsLineBreakClass }, //katakana letter small o
1072 { 0x30aa, 0x30c3, MLineBreaker::EIdLineBreakClass }, //katakana letter o
1073 { 0x30c3, 0x30c4, MLineBreaker::ENsLineBreakClass }, //katakana letter small tu
1074 { 0x30c4, 0x30e3, MLineBreaker::EIdLineBreakClass }, //katakana letter tu
1075 { 0x30e3, 0x30e4, MLineBreaker::ENsLineBreakClass }, //katakana letter small ya
1076 { 0x30e4, 0x30e5, MLineBreaker::EIdLineBreakClass }, //katakana letter ya
1077 { 0x30e5, 0x30e6, MLineBreaker::ENsLineBreakClass }, //katakana letter small yu
1078 { 0x30e6, 0x30e7, MLineBreaker::EIdLineBreakClass }, //katakana letter yu
1079 { 0x30e7, 0x30e8, MLineBreaker::ENsLineBreakClass }, //katakana letter small yo
1080 { 0x30e8, 0x30ee, MLineBreaker::EIdLineBreakClass }, //katakana letter yo
1081 { 0x30ee, 0x30ef, MLineBreaker::ENsLineBreakClass }, //katakana letter small wa
1082 { 0x30ef, 0x30f5, MLineBreaker::EIdLineBreakClass }, //katakana letter wa
1083 { 0x30f5, 0x30f7, MLineBreaker::ENsLineBreakClass }, //katakana letter small ka
1084 { 0x30f7, 0x30fb, MLineBreaker::EIdLineBreakClass }, //katakana letter va
1085 { 0x30fb, 0x30fc, MLineBreaker::ENsLineBreakClass }, //katakana middle dot
1086 { 0x30fc, 0x30fd, MLineBreaker::EIdLineBreakClass }, //katakana-hiragana prolonged sound mark
1087 { 0x30fd, 0x30fe, MLineBreaker::ENsLineBreakClass }, //katakana iteration mark
1088 { 0x30fe, 0x30ff, MLineBreaker::EIdLineBreakClass }, //katakana voiced iteration mark
1089 { 0x30ff, 0x3100, MLineBreaker::EIdLineBreakClass }, //KATAKANA DIGRAPH KOTO
1090 { 0x3105, 0x312d, MLineBreaker::EIdLineBreakClass }, //bopomofo letter b
1091 { 0x3131, 0x318f, MLineBreaker::EIdLineBreakClass }, //hangul letter kiyeok
1092 { 0x3190, 0x31b8, MLineBreaker::EIdLineBreakClass }, //ideographic annotation linking mark
1093 { 0x31c0, 0x31d0, MLineBreaker::EIdLineBreakClass }, //CJK STROKE T
1094 { 0x31f0, 0x3200, MLineBreaker::ENsLineBreakClass }, //KATAKANA LETTER SMALL KU
1095 { 0x3200, 0x321f, MLineBreaker::EIdLineBreakClass }, //parenthesized hangul kiyeok
1096 { 0x3220, 0x3244, MLineBreaker::EIdLineBreakClass }, //parenthesized ideograph one
1097 { 0x3250, 0x32ff, MLineBreaker::EIdLineBreakClass }, //PARTNERSHIP SIGN
1098 { 0x3300, 0x4db6, MLineBreaker::EIdLineBreakClass }, //square apaato
1099 { 0x4dc0, 0x4e00, MLineBreaker::EAlLineBreakClass }, //HEXAGRAM FOR THE CREATIVE HEAVEN
1100 { 0x4e00, 0x9fbb, MLineBreaker::EIdLineBreakClass }, //<cjk ideograph,
1101 { 0xa000, 0xa48d, MLineBreaker::EIdLineBreakClass }, //yi syllable it
1102 { 0xa490, 0xa4c6, MLineBreaker::EIdLineBreakClass }, //yi radical qot
1103 { 0xa4c6, 0xa4c7, MLineBreaker::EIdLineBreakClass }, //yi radical ke
1104 { 0xa700, 0xa71b, MLineBreaker::EAlLineBreakClass }, //MODIFIER LETTER CHINESE TONE YIN PING
1105 { 0xa720, 0xa722, MLineBreaker::EAlLineBreakClass }, //MODIFIER LETTER STRESS AND HIGH TONE
1106 { 0xa800, 0xa802, MLineBreaker::EAlLineBreakClass }, //SYLOTI NAGRI LETTER A
1107 { 0xa802, 0xa803, MLineBreaker::ECmLineBreakClass }, //SYLOTI NAGRI SIGN DVISVARA
1108 { 0xa803, 0xa806, MLineBreaker::EAlLineBreakClass }, //SYLOTI NAGRI LETTER U
1109 { 0xa806, 0xa807, MLineBreaker::ECmLineBreakClass }, //SYLOTI NAGRI SIGN HASANTA
1110 { 0xa807, 0xa80b, MLineBreaker::EAlLineBreakClass }, //SYLOTI NAGRI LETTER KO
1111 { 0xa80b, 0xa80c, MLineBreaker::ECmLineBreakClass }, //SYLOTI NAGRI SIGN ANUSVARA
1112 { 0xa80c, 0xa823, MLineBreaker::EAlLineBreakClass }, //SYLOTI NAGRI LETTER CO
1113 { 0xa823, 0xa828, MLineBreaker::ECmLineBreakClass }, //SYLOTI NAGRI VOWEL SIGN A
1114 { 0xa828, 0xa82c, MLineBreaker::EAlLineBreakClass }, //SYLOTI NAGRI POETRY MARK-1
1115 { 0xa840, 0xa874, MLineBreaker::EAlLineBreakClass }, //PHAGS-PA LETTER KA
1116 { 0xa874, 0xa876, MLineBreaker::EBbLineBreakClass }, //PHAGS-PA SINGLE HEAD MARK
1117 { 0xa876, 0xa878, MLineBreaker::EExLineBreakClass }, //PHAGS-PA MARK SHAD
1118 { 0xac00, 0xd7a4, MLineBreaker::EIdLineBreakClass }, //<hangul syllable,
1119 { 0xd800, 0xe000, MLineBreaker::ESgLineBreakClass }, //<non private use high surrogate,
1120 { 0xe000, 0xf900, MLineBreaker::EAiLineBreakClass }, //<private use,
1121 { 0xf900, 0xfa2e, MLineBreaker::EIdLineBreakClass }, //cjk compatibility ideograph-f900
1122 { 0xfa30, 0xfa6b, MLineBreaker::EIdLineBreakClass }, //CJK COMPATIBILITY IDEOGRAPH-FA30
1123 { 0xfa70, 0xfada, MLineBreaker::EIdLineBreakClass }, //CJK COMPATIBILITY IDEOGRAPH-FA70
1124 { 0xfb00, 0xfb07, MLineBreaker::EAlLineBreakClass }, //latin small ligature ff
1125 { 0xfb13, 0xfb18, MLineBreaker::EAlLineBreakClass }, //armenian small ligature men now
1126 { 0xfb1d, 0xfb1e, MLineBreaker::EAlLineBreakClass }, //hebrew letter yod with hiriq
1127 { 0xfb1e, 0xfb1f, MLineBreaker::ECmLineBreakClass }, //hebrew point judeo-spanish varika
1128 { 0xfb1f, 0xfb37, MLineBreaker::EAlLineBreakClass }, //hebrew ligature yiddish yod yod patah
1129 { 0xfb38, 0xfb3d, MLineBreaker::EAlLineBreakClass }, //hebrew letter tet with dagesh
1130 { 0xfb3e, 0xfb3f, MLineBreaker::EAlLineBreakClass }, //hebrew letter mem with dagesh
1131 { 0xfb40, 0xfb42, MLineBreaker::EAlLineBreakClass }, //hebrew letter nun with dagesh
1132 { 0xfb43, 0xfb45, MLineBreaker::EAlLineBreakClass }, //hebrew letter final pe with dagesh
1133 { 0xfb46, 0xfbb2, MLineBreaker::EAlLineBreakClass }, //hebrew letter tsadi with dagesh
1134 { 0xfbd3, 0xfd3e, MLineBreaker::EAlLineBreakClass }, //arabic letter ng isolated form
1135 { 0xfd3e, 0xfd3f, MLineBreaker::EOpLineBreakClass }, //ornate left parenthesis
1136 { 0xfd3f, 0xfd40, MLineBreaker::EClLineBreakClass }, //ornate right parenthesis
1137 { 0xfd50, 0xfd90, MLineBreaker::EAlLineBreakClass }, //arabic ligature teh with jeem with meem initial form
1138 { 0xfd92, 0xfdc8, MLineBreaker::EAlLineBreakClass }, //arabic ligature meem with jeem with khah initial form
1139 { 0xfdf0, 0xfdfc, MLineBreaker::EAlLineBreakClass }, //arabic ligature salla used as koranic stop sign isolated form
1140 { 0xfdfc, 0xfdfd, MLineBreaker::EPoLineBreakClass }, //RIAL SIGN
1141 { 0xfdfd, 0xfdfe, MLineBreaker::EAlLineBreakClass }, //ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
1142 { 0xfe00, 0xfe10, MLineBreaker::ECmLineBreakClass }, //VARIATION SELECTOR-1
1143 { 0xfe10, 0xfe11, MLineBreaker::EIsLineBreakClass }, //PRESENTATION FORM FOR VERTICAL COMMA
1144 { 0xfe11, 0xfe13, MLineBreaker::EClLineBreakClass }, //PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA
1145 { 0xfe13, 0xfe15, MLineBreaker::EIsLineBreakClass }, //PRESENTATION FORM FOR VERTICAL COLON
1146 { 0xfe15, 0xfe17, MLineBreaker::EExLineBreakClass }, //PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK
1147 { 0xfe17, 0xfe18, MLineBreaker::EOpLineBreakClass }, //PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
1148 { 0xfe18, 0xfe19, MLineBreaker::EClLineBreakClass }, //PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
1149 { 0xfe19, 0xfe1a, MLineBreaker::EInLineBreakClass }, //PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
1150 { 0xfe20, 0xfe24, MLineBreaker::ECmLineBreakClass }, //combining ligature left half
1151 { 0xfe30, 0xfe35, MLineBreaker::EIdLineBreakClass }, //presentation form for vertical two dot leader
1152 { 0xfe35, 0xfe36, MLineBreaker::EOpLineBreakClass }, //presentation form for vertical left parenthesis
1153 { 0xfe36, 0xfe37, MLineBreaker::EClLineBreakClass }, //presentation form for vertical right parenthesis
1154 { 0xfe37, 0xfe38, MLineBreaker::EOpLineBreakClass }, //presentation form for vertical left curly bracket
1155 { 0xfe38, 0xfe39, MLineBreaker::EClLineBreakClass }, //presentation form for vertical right curly bracket
1156 { 0xfe39, 0xfe3a, MLineBreaker::EOpLineBreakClass }, //presentation form for vertical left tortoise shell bracket
1157 { 0xfe3a, 0xfe3b, MLineBreaker::EClLineBreakClass }, //presentation form for vertical right tortoise shell bracket
1158 { 0xfe3b, 0xfe3c, MLineBreaker::EOpLineBreakClass }, //presentation form for vertical left black lenticular bracket
1159 { 0xfe3c, 0xfe3d, MLineBreaker::EClLineBreakClass }, //presentation form for vertical right black lenticular bracket
1160 { 0xfe3d, 0xfe3e, MLineBreaker::EOpLineBreakClass }, //presentation form for vertical left double angle bracket
1161 { 0xfe3e, 0xfe3f, MLineBreaker::EClLineBreakClass }, //presentation form for vertical right double angle bracket
1162 { 0xfe3f, 0xfe40, MLineBreaker::EOpLineBreakClass }, //presentation form for vertical left angle bracket
1163 { 0xfe40, 0xfe41, MLineBreaker::EClLineBreakClass }, //presentation form for vertical right angle bracket
1164 { 0xfe41, 0xfe42, MLineBreaker::EOpLineBreakClass }, //presentation form for vertical left corner bracket
1165 { 0xfe42, 0xfe43, MLineBreaker::EClLineBreakClass }, //presentation form for vertical right corner bracket
1166 { 0xfe43, 0xfe44, MLineBreaker::EOpLineBreakClass }, //presentation form for vertical left white corner bracket
1167 { 0xfe44, 0xfe45, MLineBreaker::EClLineBreakClass }, //presentation form for vertical right white corner bracket
1168 { 0xfe45, 0xfe47, MLineBreaker::EIdLineBreakClass }, //SESAME DOT
1169 { 0xfe47, 0xfe48, MLineBreaker::EOpLineBreakClass }, //PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
1170 { 0xfe48, 0xfe49, MLineBreaker::EClLineBreakClass }, //PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
1171 { 0xfe49, 0xfe50, MLineBreaker::EIdLineBreakClass }, //dashed overline
1172 { 0xfe50, 0xfe51, MLineBreaker::EClLineBreakClass }, //small comma
1173 { 0xfe51, 0xfe52, MLineBreaker::EIdLineBreakClass }, //small ideographic comma
1174 { 0xfe52, 0xfe53, MLineBreaker::EClLineBreakClass }, //small full stop
1175 { 0xfe54, 0xfe56, MLineBreaker::ENsLineBreakClass }, //small semicolon
1176 { 0xfe56, 0xfe58, MLineBreaker::EExLineBreakClass }, //small question mark
1177 { 0xfe58, 0xfe59, MLineBreaker::EIdLineBreakClass }, //small em dash
1178 { 0xfe59, 0xfe5a, MLineBreaker::EOpLineBreakClass }, //small left parenthesis
1179 { 0xfe5a, 0xfe5b, MLineBreaker::EClLineBreakClass }, //small right parenthesis
1180 { 0xfe5b, 0xfe5c, MLineBreaker::EOpLineBreakClass }, //small left curly bracket
1181 { 0xfe5c, 0xfe5d, MLineBreaker::EClLineBreakClass }, //small right curly bracket
1182 { 0xfe5d, 0xfe5e, MLineBreaker::EOpLineBreakClass }, //small left tortoise shell bracket
1183 { 0xfe5e, 0xfe5f, MLineBreaker::EClLineBreakClass }, //small right tortoise shell bracket
1184 { 0xfe5f, 0xfe67, MLineBreaker::EIdLineBreakClass }, //small number sign
1185 { 0xfe68, 0xfe69, MLineBreaker::EIdLineBreakClass }, //small reverse solidus
1186 { 0xfe69, 0xfe6a, MLineBreaker::EPrLineBreakClass }, //small dollar sign
1187 { 0xfe6a, 0xfe6b, MLineBreaker::EPoLineBreakClass }, //small percent sign
1188 { 0xfe6b, 0xfe6c, MLineBreaker::EAlLineBreakClass }, //small commercial at
1189 { 0xfe70, 0xfe74, MLineBreaker::EAlLineBreakClass }, //arabic fathatan isolated form
1190 { 0xfe74, 0xfe75, MLineBreaker::EAlLineBreakClass }, //arabic kasratan isolated form
1191 { 0xfe76, 0xfefd, MLineBreaker::EAlLineBreakClass }, //arabic fatha isolated form
1192 { 0xfeff, 0xff00, MLineBreaker::EGlLineBreakClass }, //zero width no-break space
1193 { 0xff01, 0xff02, MLineBreaker::EExLineBreakClass }, //fullwidth exclamation mark
1194 { 0xff02, 0xff04, MLineBreaker::EIdLineBreakClass }, //fullwidth quotation mark
1195 { 0xff04, 0xff05, MLineBreaker::EPrLineBreakClass }, //fullwidth dollar sign
1196 { 0xff05, 0xff06, MLineBreaker::EPoLineBreakClass }, //fullwidth percent sign
1197 { 0xff06, 0xff08, MLineBreaker::EIdLineBreakClass }, //fullwidth ampersand
1198 { 0xff08, 0xff09, MLineBreaker::EOpLineBreakClass }, //fullwidth left parenthesis
1199 { 0xff09, 0xff0a, MLineBreaker::EClLineBreakClass }, //fullwidth right parenthesis
1200 { 0xff0a, 0xff0c, MLineBreaker::EIdLineBreakClass }, //fullwidth asterisk
1201 { 0xff0c, 0xff0d, MLineBreaker::EClLineBreakClass }, //fullwidth comma
1202 { 0xff0d, 0xff0e, MLineBreaker::EIdLineBreakClass }, //fullwidth hyphen-minus
1203 { 0xff0e, 0xff0f, MLineBreaker::EClLineBreakClass }, //fullwidth full stop
1204 { 0xff0f, 0xff1a, MLineBreaker::EIdLineBreakClass }, //fullwidth solidus
1205 { 0xff1a, 0xff1c, MLineBreaker::ENsLineBreakClass }, //fullwidth colon
1206 { 0xff1c, 0xff1f, MLineBreaker::EIdLineBreakClass }, //fullwidth less-than sign
1207 { 0xff1f, 0xff20, MLineBreaker::EExLineBreakClass }, //fullwidth question mark
1208 { 0xff20, 0xff3b, MLineBreaker::EIdLineBreakClass }, //fullwidth commercial at
1209 { 0xff3b, 0xff3c, MLineBreaker::EOpLineBreakClass }, //fullwidth left square bracket
1210 { 0xff3c, 0xff3d, MLineBreaker::EIdLineBreakClass }, //fullwidth reverse solidus
1211 { 0xff3d, 0xff3e, MLineBreaker::EClLineBreakClass }, //fullwidth right square bracket
1212 { 0xff3e, 0xff5b, MLineBreaker::EIdLineBreakClass }, //fullwidth circumflex accent
1213 { 0xff5b, 0xff5c, MLineBreaker::EOpLineBreakClass }, //fullwidth left curly bracket
1214 { 0xff5c, 0xff5d, MLineBreaker::EIdLineBreakClass }, //fullwidth vertical line
1215 { 0xff5d, 0xff5e, MLineBreaker::EClLineBreakClass }, //fullwidth right curly bracket
1216 { 0xff5e, 0xff5f, MLineBreaker::EIdLineBreakClass }, //fullwidth tilde
1217 { 0xff5f, 0xff60, MLineBreaker::EOpLineBreakClass }, //FULLWIDTH LEFT WHITE PARENTHESIS
1218 { 0xff60, 0xff61, MLineBreaker::EClLineBreakClass }, //FULLWIDTH RIGHT WHITE PARENTHESIS
1219 { 0xff61, 0xff62, MLineBreaker::EClLineBreakClass }, //halfwidth ideographic full stop
1220 { 0xff62, 0xff63, MLineBreaker::EOpLineBreakClass }, //halfwidth left corner bracket
1221 { 0xff63, 0xff65, MLineBreaker::EClLineBreakClass }, //halfwidth right corner bracket
1222 { 0xff65, 0xff66, MLineBreaker::ENsLineBreakClass }, //halfwidth katakana middle dot
1223 { 0xff66, 0xff67, MLineBreaker::EAlLineBreakClass }, //halfwidth katakana letter wo
1224 { 0xff67, 0xff71, MLineBreaker::ENsLineBreakClass }, //halfwidth katakana letter small a
1225 { 0xff71, 0xff9e, MLineBreaker::EAlLineBreakClass }, //halfwidth katakana letter a
1226 { 0xff9e, 0xffa0, MLineBreaker::ENsLineBreakClass }, //halfwidth katakana voiced sound mark
1227 { 0xffa0, 0xffbf, MLineBreaker::EAlLineBreakClass }, //halfwidth hangul filler
1228 { 0xffc2, 0xffc8, MLineBreaker::EAlLineBreakClass }, //halfwidth hangul letter a
1229 { 0xffca, 0xffd0, MLineBreaker::EAlLineBreakClass }, //halfwidth hangul letter yeo
1230 { 0xffd2, 0xffd8, MLineBreaker::EAlLineBreakClass }, //halfwidth hangul letter yo
1231 { 0xffda, 0xffdd, MLineBreaker::EAlLineBreakClass }, //halfwidth hangul letter eu
1232 { 0xffe0, 0xffe1, MLineBreaker::EPoLineBreakClass }, //fullwidth cent sign
1233 { 0xffe1, 0xffe2, MLineBreaker::EPrLineBreakClass }, //fullwidth pound sign
1234 { 0xffe2, 0xffe5, MLineBreaker::EIdLineBreakClass }, //fullwidth not sign
1235 { 0xffe5, 0xffe7, MLineBreaker::EPrLineBreakClass }, //fullwidth yen sign
1236 { 0xffe8, 0xffef, MLineBreaker::EAlLineBreakClass }, //halfwidth forms light vertical
1237 { 0xfff9, 0xfffc, MLineBreaker::ECmLineBreakClass }, //interlinear annotation anchor
1238 { 0xfffc, 0xfffd, MLineBreaker::ECbLineBreakClass }, //object replacement character
1239 { 0xfffd, 0xfffe, MLineBreaker::EAiLineBreakClass }, //replacement character
1240 { 0x10000, 0x1000c, MLineBreaker::EAlLineBreakClass }, //LINEAR B SYLLABLE B008 A
1241 { 0x1000d, 0x10027, MLineBreaker::EAlLineBreakClass }, //LINEAR B SYLLABLE B036 JO
1242 { 0x10028, 0x1003b, MLineBreaker::EAlLineBreakClass }, //LINEAR B SYLLABLE B060 RA
1243 { 0x1003c, 0x1003e, MLineBreaker::EAlLineBreakClass }, //LINEAR B SYLLABLE B017 ZA
1244 { 0x1003f, 0x1004e, MLineBreaker::EAlLineBreakClass }, //LINEAR B SYLLABLE B020 ZO
1245 { 0x10050, 0x1005e, MLineBreaker::EAlLineBreakClass }, //LINEAR B SYMBOL B018
1246 { 0x10080, 0x100fb, MLineBreaker::EAlLineBreakClass }, //LINEAR B IDEOGRAM B100 MAN
1247 { 0x10100, 0x10103, MLineBreaker::EBaLineBreakClass }, //AEGEAN WORD SEPARATOR LINE
1248 { 0x10107, 0x10134, MLineBreaker::EAlLineBreakClass }, //AEGEAN NUMBER ONE
1249 { 0x10137, 0x1018b, MLineBreaker::EAlLineBreakClass }, //AEGEAN WEIGHT BASE UNIT
1250 { 0x10300, 0x1031f, MLineBreaker::EAlLineBreakClass }, //OLD ITALIC LETTER A
1251 { 0x10320, 0x10324, MLineBreaker::EAlLineBreakClass }, //OLD ITALIC NUMERAL ONE
1252 { 0x10330, 0x1034b, MLineBreaker::EAlLineBreakClass }, //GOTHIC LETTER AHSA
1253 { 0x10380, 0x1039e, MLineBreaker::EAlLineBreakClass }, //UGARITIC LETTER ALPA
1254 { 0x1039f, 0x103a0, MLineBreaker::EBaLineBreakClass }, //UGARITIC WORD DIVIDER
1255 { 0x103a0, 0x103c4, MLineBreaker::EAlLineBreakClass }, //OLD PERSIAN SIGN A
1256 { 0x103c8, 0x103d0, MLineBreaker::EAlLineBreakClass }, //OLD PERSIAN SIGN AURAMAZDAA
1257 { 0x103d0, 0x103d1, MLineBreaker::EBaLineBreakClass }, //OLD PERSIAN WORD DIVIDER
1258 { 0x103d1, 0x103d6, MLineBreaker::EAlLineBreakClass }, //OLD PERSIAN NUMBER ONE
1259 { 0x10400, 0x1049e, MLineBreaker::EAlLineBreakClass }, //DESERET CAPITAL LETTER LONG I
1260 { 0x104a0, 0x104aa, MLineBreaker::ENuLineBreakClass }, //OSMANYA DIGIT ZERO
1261 { 0x10800, 0x10806, MLineBreaker::EAlLineBreakClass }, //CYPRIOT SYLLABLE A
1262 { 0x10808, 0x10809, MLineBreaker::EAlLineBreakClass }, //CYPRIOT SYLLABLE JO
1263 { 0x1080a, 0x10836, MLineBreaker::EAlLineBreakClass }, //CYPRIOT SYLLABLE KA
1264 { 0x10837, 0x10839, MLineBreaker::EAlLineBreakClass }, //CYPRIOT SYLLABLE XA
1265 { 0x1083c, 0x1083d, MLineBreaker::EAlLineBreakClass }, //CYPRIOT SYLLABLE ZA
1266 { 0x1083f, 0x10840, MLineBreaker::EAlLineBreakClass }, //CYPRIOT SYLLABLE ZO
1267 { 0x10900, 0x1091a, MLineBreaker::EAlLineBreakClass }, //PHOENICIAN LETTER ALF
1268 { 0x1091f, 0x10920, MLineBreaker::EBaLineBreakClass }, //PHOENICIAN WORD SEPARATOR
1269 { 0x10a00, 0x10a01, MLineBreaker::EAlLineBreakClass }, //KHAROSHTHI LETTER A
1270 { 0x10a01, 0x10a04, MLineBreaker::ECmLineBreakClass }, //KHAROSHTHI VOWEL SIGN I
1271 { 0x10a05, 0x10a07, MLineBreaker::ECmLineBreakClass }, //KHAROSHTHI VOWEL SIGN E
1272 { 0x10a0c, 0x10a10, MLineBreaker::ECmLineBreakClass }, //KHAROSHTHI VOWEL LENGTH MARK
1273 { 0x10a10, 0x10a14, MLineBreaker::EAlLineBreakClass }, //KHAROSHTHI LETTER KA
1274 { 0x10a15, 0x10a18, MLineBreaker::EAlLineBreakClass }, //KHAROSHTHI LETTER CA
1275 { 0x10a19, 0x10a34, MLineBreaker::EAlLineBreakClass }, //KHAROSHTHI LETTER NYA
1276 { 0x10a38, 0x10a3b, MLineBreaker::ECmLineBreakClass }, //KHAROSHTHI SIGN BAR ABOVE
1277 { 0x10a3f, 0x10a40, MLineBreaker::ECmLineBreakClass }, //KHAROSHTHI VIRAMA
1278 { 0x10a40, 0x10a48, MLineBreaker::EAlLineBreakClass }, //KHAROSHTHI DIGIT ONE
1279 { 0x10a50, 0x10a58, MLineBreaker::EBaLineBreakClass }, //KHAROSHTHI PUNCTUATION DOT
1280 { 0x10a58, 0x10a59, MLineBreaker::EAlLineBreakClass }, //KHAROSHTHI PUNCTUATION LINES
1281 { 0x12000, 0x1236f, MLineBreaker::EAlLineBreakClass }, //CUNEIFORM SIGN A
1282 { 0x12400, 0x12463, MLineBreaker::EAlLineBreakClass }, //CUNEIFORM NUMERIC SIGN TWO ASH
1283 { 0x12470, 0x12474, MLineBreaker::EBaLineBreakClass }, //CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER
1284 { 0x1d000, 0x1d0f6, MLineBreaker::EAlLineBreakClass }, //BYZANTINE MUSICAL SYMBOL PSILI
1285 { 0x1d100, 0x1d127, MLineBreaker::EAlLineBreakClass }, //MUSICAL SYMBOL SINGLE BARLINE
1286 { 0x1d12a, 0x1d165, MLineBreaker::EAlLineBreakClass }, //MUSICAL SYMBOL DOUBLE SHARP
1287 { 0x1d165, 0x1d16a, MLineBreaker::ECmLineBreakClass }, //MUSICAL SYMBOL COMBINING STEM
1288 { 0x1d16a, 0x1d16d, MLineBreaker::EAlLineBreakClass }, //MUSICAL SYMBOL FINGERED TREMOLO-1
1289 { 0x1d16d, 0x1d183, MLineBreaker::ECmLineBreakClass }, //MUSICAL SYMBOL COMBINING AUGMENTATION DOT
1290 { 0x1d183, 0x1d185, MLineBreaker::EAlLineBreakClass }, //MUSICAL SYMBOL ARPEGGIATO UP
1291 { 0x1d185, 0x1d18c, MLineBreaker::ECmLineBreakClass }, //MUSICAL SYMBOL COMBINING DOIT
1292 { 0x1d18c, 0x1d1aa, MLineBreaker::EAlLineBreakClass }, //MUSICAL SYMBOL RINFORZANDO
1293 { 0x1d1aa, 0x1d1ae, MLineBreaker::ECmLineBreakClass }, //MUSICAL SYMBOL COMBINING DOWN BOW
1294 { 0x1d1ae, 0x1d1de, MLineBreaker::EAlLineBreakClass }, //MUSICAL SYMBOL PEDAL MARK
1295 { 0x1d200, 0x1d242, MLineBreaker::EAlLineBreakClass }, //GREEK VOCAL NOTATION SYMBOL-1
1296 { 0x1d242, 0x1d245, MLineBreaker::ECmLineBreakClass }, //COMBINING GREEK MUSICAL TRISEME
1297 { 0x1d245, 0x1d246, MLineBreaker::EAlLineBreakClass }, //GREEK MUSICAL LEIMMA
1298 { 0x1d300, 0x1d357, MLineBreaker::EAlLineBreakClass }, //MONOGRAM FOR EARTH
1299 { 0x1d360, 0x1d372, MLineBreaker::EAlLineBreakClass }, //COUNTING ROD UNIT DIGIT ONE
1300 { 0x1d400, 0x1d455, MLineBreaker::EAlLineBreakClass }, //MATHEMATICAL BOLD CAPITAL A
1301 { 0x1d456, 0x1d49d, MLineBreaker::EAlLineBreakClass }, //MATHEMATICAL ITALIC SMALL I
1302 { 0x1d49e, 0x1d4a0, MLineBreaker::EAlLineBreakClass }, //MATHEMATICAL SCRIPT CAPITAL C
1303 { 0x1d4a2, 0x1d4a3, MLineBreaker::EAlLineBreakClass }, //MATHEMATICAL SCRIPT CAPITAL G
1304 { 0x1d4a5, 0x1d4a7, MLineBreaker::EAlLineBreakClass }, //MATHEMATICAL SCRIPT CAPITAL J
1305 { 0x1d4a9, 0x1d4ad, MLineBreaker::EAlLineBreakClass }, //MATHEMATICAL SCRIPT CAPITAL N
1306 { 0x1d4ae, 0x1d4ba, MLineBreaker::EAlLineBreakClass }, //MATHEMATICAL SCRIPT CAPITAL S
1307 { 0x1d4bb, 0x1d4bc, MLineBreaker::EAlLineBreakClass }, //MATHEMATICAL SCRIPT SMALL F
1308 { 0x1d4bd, 0x1d4c4, MLineBreaker::EAlLineBreakClass }, //MATHEMATICAL SCRIPT SMALL H
1309 { 0x1d4c5, 0x1d506, MLineBreaker::EAlLineBreakClass }, //MATHEMATICAL SCRIPT SMALL P
1310 { 0x1d507, 0x1d50b, MLineBreaker::EAlLineBreakClass }, //MATHEMATICAL FRAKTUR CAPITAL D
1311 { 0x1d50d, 0x1d515, MLineBreaker::EAlLineBreakClass }, //MATHEMATICAL FRAKTUR CAPITAL J
1312 { 0x1d516, 0x1d51d, MLineBreaker::EAlLineBreakClass }, //MATHEMATICAL FRAKTUR CAPITAL S
1313 { 0x1d51e, 0x1d53a, MLineBreaker::EAlLineBreakClass }, //MATHEMATICAL FRAKTUR SMALL A
1314 { 0x1d53b, 0x1d53f, MLineBreaker::EAlLineBreakClass }, //MATHEMATICAL DOUBLE-STRUCK CAPITAL D
1315 { 0x1d540, 0x1d545, MLineBreaker::EAlLineBreakClass }, //MATHEMATICAL DOUBLE-STRUCK CAPITAL I
1316 { 0x1d546, 0x1d547, MLineBreaker::EAlLineBreakClass }, //MATHEMATICAL DOUBLE-STRUCK CAPITAL O
1317 { 0x1d54a, 0x1d551, MLineBreaker::EAlLineBreakClass }, //MATHEMATICAL DOUBLE-STRUCK CAPITAL S
1318 { 0x1d552, 0x1d6a6, MLineBreaker::EAlLineBreakClass }, //MATHEMATICAL DOUBLE-STRUCK SMALL A
1319 { 0x1d6a8, 0x1d7cc, MLineBreaker::EAlLineBreakClass }, //MATHEMATICAL BOLD CAPITAL ALPHA
1320 { 0x1d7ce, 0x1d800, MLineBreaker::ENuLineBreakClass }, //MATHEMATICAL BOLD DIGIT ZERO
1321 { 0x20000, 0x2a6d6, MLineBreaker::EIdLineBreakClass }, //<CJK Ideograph Extension B, First>..<CJK Ideograph Extension B, Last>
1322 { 0x2f800, 0x2fa1e, MLineBreaker::EIdLineBreakClass }, //CJK COMPATIBILITY IDEOGRAPH-2F800
1323 { 0xe0001, 0xe0002, MLineBreaker::ECmLineBreakClass }, //LANGUAGE TAG
1324 { 0xe0020, 0xe0080, MLineBreaker::ECmLineBreakClass }, //TAG SPACE
1325 { 0xe0100, 0xe01f0, MLineBreaker::ECmLineBreakClass }, //VARIATION SELECTOR-17
1326 { 0xf0000, 0xffffd, MLineBreaker::EXxLineBreakClass }, //<Plane 15 Private Use, First>..<Plane 15 Private Use, Last>
1327 { 0x100000, 0x10fffd, MLineBreaker::EXxLineBreakClass }, //<Plane 16 Private Use, First>..<Plane 16 Private Use, Last>
1330 static const TInt TheLineBreakRanges = sizeof(TheLineBreakRangeTable) / sizeof(TheLineBreakRangeTable[0]);
1332 void TestLineBreakTables(void)
1336 for (int i = 0; i < TheLineBreakRanges; i++)
1338 const TLineBreakRange& r = TheLineBreakRangeTable[i];
1339 if (r.iStart >= r.iEnd || r.iClass >= MLineBreaker::ELineBreakClasses || r.iStart < prev_end)
1340 Panic(ELineBreakPanic_BadTable);
1346 TUint TLineBreakClassCache::LineBreakClass(TUint aChar)
1348 if (aChar >= iStart && aChar < iEnd)
1350 TUint new_start, new_end;
1351 TUint new_class = iBreaker.LineBreakClass(aChar,new_start,new_end);
1352 if (new_start < new_end - 1)
1361 EXPORT_C TBool MLineBreaker::LineBreakPossible(
1362 TUint aPrevClass, TUint aNextClass, TBool aHaveSpaces) const
1363 /** Returns whether line breaks are legal between a character of line breaking
1364 class aPrevClass and aNextClass, with intervening spaces or not as determined
1367 @param aPrevClass The class before the potential line break.
1368 @param aNextClass The class after the potential line break.
1369 @param aHaveSpaces Whether spaces separate the characters.
1370 @return ETrue if and only if a line break is legal in the situation described. */
1372 if (aPrevClass >= ELineBreakClasses || aNextClass >= ELineBreakClasses)
1374 const TLineBreakRule& rule = TheLineBreakRuleTable[aPrevClass];
1375 TUint flag = 1 << aNextClass;
1376 if (rule.iForbid & flag)
1378 return aHaveSpaces || (rule.iAllow & flag);
1381 EXPORT_C TUint MLineBreaker::LineBreakClass(TUint aCode,TUint& aRangeStart,TUint& aRangeEnd) const
1382 /** Converts Unicode character into line breaking class.
1384 @param aCode Input Unicode value.
1385 @param aRangeStart Returns the start of the contiguous range of characters
1386 including aCode that have the returned line breaking class.
1387 @param aRangeEnd Returns the end of the contiguous range of characters including
1388 aCode that have the returned line breaking class.
1389 @return The line breaking class for aCode. */
1391 aRangeStart = aCode;
1392 aRangeEnd = aCode + 1;
1394 // First check for a space; this needs to be fast.
1395 if (aCode == 0x0020)
1396 return ESpLineBreakClass;
1398 // Now search the table.
1399 const TLineBreakRange* base = TheLineBreakRangeTable;
1400 const TLineBreakRange* end = base + TheLineBreakRanges;
1404 const TLineBreakRange* r = &base[n / 2];
1405 if (r->iStart > aCode)
1407 else if (r->iEnd <= aCode)
1411 aRangeStart = r->iStart;
1412 aRangeEnd = r->iEnd;
1417 // If the character was not in the table determine the line break class using the Unicode character category.
1418 TChar::TCategory cat = TChar(aCode).GetCategory();
1421 case TChar::ELuCategory:
1422 case TChar::ELlCategory:
1423 case TChar::ELtCategory:
1424 case TChar::ELoCategory:
1425 case TChar::ESmCategory:
1426 case TChar::ESoCategory:
1427 return EAlLineBreakClass;
1429 case TChar::ESkCategory:
1430 if (TChar(aCode).GetCjkWidth() == TChar::EWide)
1431 return ENsLineBreakClass;
1433 return EAlLineBreakClass;
1435 case TChar::ELmCategory:
1437 TChar::TCjkWidth cjk_width = TChar(aCode).GetCjkWidth();
1438 if (cjk_width == TChar::EWide || cjk_width == TChar::EHalfWidth)
1439 return ENsLineBreakClass;
1443 case TChar::EMnCategory:
1444 case TChar::EMcCategory:
1445 case TChar::EMeCategory:
1446 case TChar::ECcCategory:
1447 case TChar::ECfCategory:
1448 return ECmLineBreakClass;
1450 case TChar::ENdCategory:
1451 return ENuLineBreakClass;
1453 case TChar::EPsCategory:
1454 return EOpLineBreakClass;
1456 case TChar::EPeCategory:
1457 return EClLineBreakClass;
1459 case TChar::EScCategory:
1460 return EPrLineBreakClass;
1462 case TChar::EPfCategory:
1463 case TChar::EPiCategory:
1464 return EQuLineBreakClass;
1466 case TChar::ECsCategory:
1467 return ESgLineBreakClass;
1473 // If it has still not been found it may be an ideographic character not covered above.
1474 if (aCode >= 0x3000 && aCode <= 0x3FFF)
1475 return EIdLineBreakClass;
1477 // Or it may be a surrogate; assume plane 1 is alphabetic, plane 2 is ideographic.
1478 if (aCode >= 0x10000 && aCode <= 0x1FFFF)
1479 return EAlLineBreakClass;
1480 if (aCode >= 0x20000 && aCode <= 0x2FFFF)
1481 return EIdLineBreakClass;
1483 // Return the catch-all class.
1484 return EXxLineBreakClass;
1488 EXPORT_C TBool MLineBreaker::IsHangingCharacter(TUint) const
1489 /** Returns ETrue if the character value may be positioned outside the margins.
1491 @param aChar Chatacter to test
1492 @return ETrue if the character value may be positioned outside the margins. */
1497 TInt MakeSurrogate(TInt aHigh, TInt aLow)
1499 return (aHigh << 10) + (aLow & 0x3FF)
1500 + (0x10000 - 0xD800*0x400);
1503 inline TBool IsSurrogate(TInt aChar)
1505 return (aChar & 0xF800) == 0xD800;
1508 inline TBool IsHighSurrogate(TInt aChar)
1510 return (aChar & 0xFC00) == 0xD800;
1513 inline TBool IsLowSurrogate(TInt aChar)
1515 return (aChar & 0xFC00) == 0xDC00;
1519 Move past the current character and return the next.
1521 Pointer to the current character. On return, contains a pointer to the next
1524 Limit of the iteration. For positive aOffset (moving forwards) this should
1525 be one less than the end of the text. For negative aOffset (moving
1526 backwards) this should be the start of the text.
1528 1 for moving forward, -1 for moving backward.
1530 Unicode character value or -1 on error.
1533 TInt MoveTextPtr(const TText*& aPtr, const TText* aLimit, TInt aOffset)
1535 // if (aPtr - aLimit) has the same sign as aOffset then we are
1537 if (0 <= ((aPtr - aLimit) ^ aOffset)
1548 if (!IsSurrogate(c))
1552 if (IsHighSurrogate(c) && IsLowSurrogate(lastc))
1553 return MakeSurrogate(c, lastc);
1557 if (IsHighSurrogate(lastc) && IsLowSurrogate(c))
1559 // found a surrogate pair
1560 // Set the pointer to the first of the pair
1562 return MakeSurrogate(lastc, c);
1568 /** Find the line break class of the latest character within [aFirst, aP+1]
1569 to have non-CM line break class.
1570 @pre aP points to a character of CM class.
1572 inline TUint GetGlyphClusterLineBreakClass(const TText* aP,
1573 const TText* aFirst, TLineBreakClassCache& aBreaker)
1575 TInt ch = MoveTextPtr(aP, aFirst, -1);
1578 TUint cl = aBreaker.LineBreakClass(ch);
1579 if (cl != MLineBreaker::ECmLineBreakClass)
1581 ch = MoveTextPtr(aP, aFirst, -1);
1583 return MLineBreaker::ECmLineBreakClass;
1586 void TLineBreakClassIterator::Set(const TText* aFirst, const TText* aText, TLineBreakClassCache& aBreaker)
1591 if (IsHighSurrogate(c))
1593 if (IsLowSurrogate(aText[1]))
1594 c = MakeSurrogate(c, aText[1]);
1596 iClass = aBreaker.LineBreakClass(c);
1597 if (iClass == MLineBreaker::ECmLineBreakClass)
1599 TUint baseLbCls = GetGlyphClusterLineBreakClass(iCurrent, iFirst, aBreaker);
1600 if (baseLbCls == MLineBreaker::ESaLineBreakClass)
1601 iClass = MLineBreaker::ESaLineBreakClass;
1605 void TLineBreakClassIterator::SetNull()
1607 iFirst = iCurrent = 0;
1610 TBool TLineBreakClassIterator::Move(const TText* aLimit,
1611 const TText* aLimitAfterSpaces, TInt aOffset,
1612 TBool& aHasSpaces, TLineBreakClassCache& aBreaker)
1614 TInt c = MoveTextPtr(iCurrent, aLimit, aOffset);
1617 TUint lbClass = aBreaker.LineBreakClass(c);
1618 if (lbClass == MLineBreaker::ESpLineBreakClass)
1621 while (lbClass == MLineBreaker::ESpLineBreakClass)
1623 c = MoveTextPtr(iCurrent, aLimitAfterSpaces, aOffset);
1624 // We have hit the limit, but there might be more text to search
1625 // after the spaces.
1628 iClass = MLineBreaker::ESpLineBreakClass;
1631 lbClass = aBreaker.LineBreakClass(c);
1637 // Cm class characters taken on their base character's
1638 // line break property in the combining character sequence
1639 // See D14 in Conformance chapter of Unicode 3.0 book.
1640 // We do this just for Complex content to maintain backwards
1641 // compatibility otherwise original test cases fail.
1642 if (lbClass == MLineBreaker::ECmLineBreakClass)
1644 TUint baseLbCls = GetGlyphClusterLineBreakClass(iCurrent, iFirst, aBreaker);
1645 if (baseLbCls == MLineBreaker::ESaLineBreakClass)
1646 lbClass = MLineBreaker::ESaLineBreakClass;
1649 aHasSpaces = EFalse;
1650 if (lbClass == MLineBreaker::ESaLineBreakClass
1651 && iClass == MLineBreaker::ESaLineBreakClass)
1653 // We have at least two SA characters, so we need to find the
1654 // total extent of the SA block. GetLineBreakInContext will be asked
1655 // to find the break.
1656 const TText* p = iCurrent;
1657 while (0 <= c && lbClass == MLineBreaker::ESaLineBreakClass)
1660 c = MoveTextPtr(p, aOffset < 0? iFirst : aLimitAfterSpaces, aOffset);
1661 lbClass = aBreaker.LineBreakClass(c);
1663 // Cm class characters taken on their base character's
1664 // line break property. See above.
1665 if (lbClass == MLineBreaker::ECmLineBreakClass)
1667 TUint baseLbCls = GetGlyphClusterLineBreakClass(p, iFirst, aBreaker);
1668 if (baseLbCls == MLineBreaker::ESaLineBreakClass)
1669 lbClass = MLineBreaker::ESaLineBreakClass;
1671 if (lbClass == MLineBreaker::EZwLineBreakClass)
1682 TLineBreakIterator::TLineBreakIterator(TLineBreakClassCache& aBreaker,
1683 const TText* aText, TInt aLength, TBool aForwards,
1684 TInt aMinBreakPos, TInt aMaxBreakPos)
1685 : iBreaker(aBreaker), iText(aText), iTextLength(aLength), iHasSpaces(EFalse)
1687 if (aMinBreakPos < 1)
1689 // Find the next valid character and see if it can hang
1691 const TText* endText = aText + aLength;
1692 const TText* max = aText + aMaxBreakPos;
1693 if (endText <= max && aText < endText)
1695 // let 'max' point to last character
1697 if (IsLowSurrogate(*max))
1699 ASSERT(aLength > 1);
1701 ASSERT(IsHighSurrogate(*max));
1705 while (max < endText)
1709 if ((c & 0xF800) != 0xD800)
1711 if ((lastc & 0xFC00) == 0xD800
1712 && (c & 0xFC00) == 0xDC00)
1714 c = MakeSurrogate(lastc, c);
1719 if (c != 0xFFFF && max + 1 < endText
1720 && aBreaker.Breaker().IsHangingCharacter(c))
1721 // Set max to just beyond hanging character
1723 // till here, 'max' points to the "end" of a character
1725 // set up the iteration.
1726 iMinBreakPos = aText + aMinBreakPos;
1727 iMaxBreakPos = aText + aMaxBreakPos;
1728 // Increment or Decrement must be called to complete set up.
1729 if (max < aText + aMinBreakPos)
1731 // no possible line breaks
1733 iAfterBreak.SetNull();
1734 iBeforeBreak.SetNull();
1738 iLimit = max; // point to the 'end' of the last character (low surrogate if supplementary)
1739 iLimitAfterSpaces = endText - 1;
1740 iAfterBreak.Set(iText, aText + aMinBreakPos - 1, aBreaker);
1744 iLimit = aText + aMinBreakPos - 1;
1745 iLimitAfterSpaces = iLimit;
1746 iBeforeBreak.Set(iText, max - 1, aBreaker);
1747 iBeforeBreak.Move(endText - 1, endText - 1, 1, iHasSpaces, aBreaker);
1751 TBool TLineBreakIterator::IsBreak(TBool aForwards)
1753 TInt beforeClass = iBeforeBreak.Class();
1754 TInt afterClass = iAfterBreak.Class();
1755 const MLineBreaker& breaker = iBreaker.Breaker();
1757 // Line break characters overhang the margin
1758 // along with the spaces that precede them.
1759 if (afterClass == MLineBreaker::EBkLineBreakClass)
1761 const TText* p = iAfterBreak.Ptr();
1762 MoveTextPtr(p, iText + iTextLength, 1);
1763 iAfterBreak.Set(iText, p, iBreaker);
1767 // Find break within this run of SA text
1768 const TText* startOfSaText = iBeforeBreak.Ptr();
1769 const TText* endOfSaText = iAfterBreak.Ptr();
1771 if ((beforeClass != MLineBreaker::ESaLineBreakClass && *startOfSaText != KWhiteSpace) ||
1772 (afterClass != MLineBreaker::ESaLineBreakClass))
1773 // Complex (South-East Asian) line breaking rules not required.
1774 return breaker.LineBreakPossible(beforeClass, afterClass, iHasSpaces);
1776 MoveTextPtr(endOfSaText, iText + iTextLength, 1);
1777 const TText* minBreak = startOfSaText < iMinBreakPos ?
1778 iMinBreakPos : startOfSaText + 1;
1779 const TText* maxBreak = iMaxBreakPos < endOfSaText ?
1780 iMaxBreakPos : endOfSaText - 1;
1782 TPtrC saText(startOfSaText, endOfSaText - startOfSaText);
1783 if (!breaker.GetLineBreakInContext(saText,
1784 minBreak - startOfSaText, maxBreak - startOfSaText,
1785 aForwards, breakPos))
1788 // Convert the break position within SA text into iterator positions.
1789 const TText* p = startOfSaText + breakPos;
1790 iAfterBreak.Set(iText, p, iBreaker);
1791 if (*p != KZeroWidthSpace) MoveTextPtr(p, 0, -1);
1792 iBeforeBreak.Set(iText, p, iBreaker);
1797 TBool TLineBreakIterator::HasContingentBreak() const
1799 return iBeforeBreak.Class() == MLineBreaker::ECbLineBreakClass
1800 || iAfterBreak.Class() == MLineBreaker::ECbLineBreakClass;
1803 TInt TLineBreakIterator::PreviousClass() const
1805 return iBeforeBreak.Class();
1808 TInt TLineBreakIterator::NextClass() const
1810 return iAfterBreak.Class();
1813 TBool TLineBreakIterator::HasSpaces() const
1818 TBool TLineBreakIterator::Decrement()
1820 iAfterBreak = iBeforeBreak;
1821 return iBeforeBreak.Move(iLimit, iLimitAfterSpaces, -1, iHasSpaces, iBreaker);
1824 TBool TLineBreakIterator::Increment()
1826 iBeforeBreak = iAfterBreak;
1827 return iAfterBreak.Move(iLimit, iLimitAfterSpaces, 1, iHasSpaces, iBreaker);
1830 TInt TLineBreakIterator::BreakPos() const
1832 const TText* t = iBeforeBreak.Ptr();
1833 MoveTextPtr(t, 0, 1);
1837 TInt TLineBreakIterator::BeforeBreakPos() const
1839 return iBeforeBreak.Ptr() - iText;
1842 TInt TLineBreakIterator::AfterBreakPos() const
1844 return iAfterBreak.Ptr() - iText;
1847 TBool HasContingentBreak(TLineBreakIterator& aIterator,
1848 MContingentLineBreaker& aCbDelegate)
1850 if (aIterator.PreviousClass() == MLineBreaker::ECbLineBreakClass
1851 && aCbDelegate.IsLegalBreakAfter(
1852 aIterator.BeforeBreakPos(), aIterator.NextClass(),
1853 aIterator.HasSpaces()))
1855 if (aIterator.NextClass() == MLineBreaker::ECbLineBreakClass
1856 && aCbDelegate.IsLegalBreakBefore(
1857 aIterator.AfterBreakPos(), aIterator.PreviousClass(),
1858 aIterator.HasSpaces()))
1863 TBool FindBreak(TLineBreakIterator& aIterator, TBool aForwards,
1864 MContingentLineBreaker* aCbDelegate)
1866 while (aForwards? aIterator.Increment() : aIterator.Decrement())
1868 if (aCbDelegate && aIterator.HasContingentBreak())
1870 if (HasContingentBreak(aIterator, *aCbDelegate))
1875 else if (aIterator.IsBreak(aForwards))
1883 TBool HasContingentBreakL(TLineBreakIterator& aIterator,
1884 MContingentLineBreakerL& aCbDelegate)
1886 if (aIterator.PreviousClass() == MLineBreaker::ECbLineBreakClass
1887 && aCbDelegate.IsLegalBreakAfterL(
1888 aIterator.BeforeBreakPos(), aIterator.NextClass(),
1889 aIterator.HasSpaces()))
1891 if (aIterator.NextClass() == MLineBreaker::ECbLineBreakClass
1892 && aCbDelegate.IsLegalBreakBeforeL(
1893 aIterator.AfterBreakPos(), aIterator.PreviousClass(),
1894 aIterator.HasSpaces()))
1899 TBool FindBreakL(TLineBreakIterator& aIterator, TBool aForwards,
1900 MContingentLineBreakerL* aCbDelegate)
1902 while (aForwards? aIterator.Increment() : aIterator.Decrement())
1904 if (aCbDelegate && aIterator.HasContingentBreak())
1906 if (HasContingentBreakL(aIterator, *aCbDelegate))
1909 else if (aIterator.IsBreak(aForwards))
1915 EXPORT_C TBool MLineBreaker::GetLineBreak(const TDesC& aText,
1916 TInt aMinBreakPos, TInt aMaxBreakPos, TBool aForwards,
1917 MContingentLineBreaker* aCbDelegate,
1918 TInt& aBreakPos, TInt& aBreakPosAfterSpaces) const
1919 /** Finds the line break according to the rules in the virtual functions.
1921 @param aText The text to be broken.
1922 @param aMinBreakPos The smallest allowed result.
1923 @param aMaxBreakPos The position of the first character that fails to fit the
1925 @param aForwards ETrue to find the earliest legal break opportunity, EFalse
1927 @param aCbDelegate Object to resolve breaks around characters with the CB (cointingent
1928 break) line breaking class. Typically this class is only used for character
1929 0xFFFD, which usually marks the position of embedded pictures. May be NULL,
1930 in which case LineBreakPossible() determines whether these breaks are legal.
1931 @param aBreakPos Returns the position of the break.
1932 @param aBreakPosAfterSpaces Returns the position of the start of the next line.
1933 @return ETrue if successful, EFalse if no legal line breaks were found. */
1935 TLineBreakClassCache cache(*this);
1936 const TText* text = aText.Ptr();
1937 TLineBreakIterator it(cache, text, aText.Length(),
1938 aForwards, aMinBreakPos, aMaxBreakPos);
1939 if (!FindBreak(it, aForwards, aCbDelegate))
1941 aBreakPos = it.BreakPos();
1942 aBreakPosAfterSpaces = it.AfterBreakPos();
1946 EXPORT_C TBool MLineBreaker::GetLineBreakL(const TDesC& aText,
1947 TInt aMinBreakPos, TInt aMaxBreakPos, TBool aForwards,
1948 MContingentLineBreakerL* aCbDelegate,
1949 TInt& aBreakPos, TInt& aBreakPosAfterSpaces) const
1950 /** Exactly the same as GetLineBreak, but aCbDelegate's functions may leave so
1951 the whole function may leave.
1953 @param aText The text to be broken.
1954 @param aMinBreakPos The smallest allowed result.
1955 @param aMaxBreakPos he position of the first character that fails to fit the
1957 @param aForwards ETrue to find the earliest legal break opportunity, EFalse
1959 @param aCbDelegate Object to resolve breaks around characters with the CB (cointingent
1960 break) line breaking class. Typically this class is only used for character
1961 0xFFFD, which usually marks the position of embedded pictures. May be NULL,
1962 in which case LineBreakPossible() determines whether these breaks are legal.
1963 @param aBreakPos Returns the position of the break.
1964 @param aBreakPosAfterSpaces Returns the position of the start of the next line.
1965 @return ETrue if successful, EFalse if no legal line breaks were found. */
1967 if (aMaxBreakPos < aMinBreakPos)
1969 TLineBreakClassCache cache(*this);
1970 const TText* text = aText.Ptr();
1971 TLineBreakIterator it(cache, text, aText.Length(),
1972 aForwards, aMinBreakPos, aMaxBreakPos);
1973 if (!FindBreakL(it, aForwards, aCbDelegate))
1975 aBreakPos = it.BreakPos();
1976 aBreakPosAfterSpaces = it.AfterBreakPos();
1979 EXPORT_C void* MLineBreaker::ExtendedInterface(TUid&) const
1980 /** Returns an interface to more functions, or 0 if these are unsupported.
1981 Currently there are no other functions, so 0 is always returned. If this
1982 function is overridden, it must base call if aUid is not recognised,
1983 rather than just returning 0.
1984 @param aUid Identifies the interface to be returned.
1985 @return A pointer to the extended interface, or 0 if not supported. */