14#define FLAG(x) (1 << (x))
20#ifdef QT_BUILD_INTERNAL
50 "Internal error: increase the size in bits of GBTableEntryType");
126 char32_t ucs4 =
string[
i];
139 bool handled =
false;
217 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
218 {
Break ,
Break ,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
219 {
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
220 {
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
221 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
222 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
223 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
224 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
225 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
NoBreak,
Break },
226 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
NoBreak,
NoBreak,
LookupW,
Lookup ,
LookupW,
LookupW,
Break ,
NoBreak,
NoBreak,
Break },
227 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
NoBreak,
NoBreak,
LookupW,
Break ,
LookupW,
LookupW,
Break ,
NoBreak,
NoBreak,
Break },
228 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
229 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
230 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
231 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
232 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
233 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
NoBreak,
NoBreak,
Lookup ,
Break ,
Lookup ,
Break ,
Lookup ,
NoBreak,
NoBreak,
Break },
234 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
Break },
235 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
NoBreak },
243 WordTypeNone, WordTypeAlphaNumeric, WordTypeHiraganaKatakana
244 } currentWordType = WordTypeNone;
251 char32_t ucs4 =
string[
i];
269 else if (ucs4 == 0x003A)
301 for (
qsizetype lookahead =
i + 1; lookahead <
len; ++lookahead) {
302 ucs4 =
string[lookahead];
304 ushort low =
string[lookahead + 1];
340 if (currentWordType != WordTypeNone)
344 currentWordType = WordTypeHiraganaKatakana;
350 currentWordType = WordTypeAlphaNumeric;
354 currentWordType = WordTypeNone;
360 if (currentWordType != WordTypeNone)
387 {
Initial,
BAfterC,
BAfter ,
BAfter ,
Initial,
Initial,
Lower ,
Upper ,
Initial,
Initial,
ATerm ,
Initial,
STerm ,
Initial },
388 {
Initial,
BAfterC,
BAfter ,
BAfter ,
Lower ,
Initial,
Initial,
Initial,
Initial,
Initial,
LUATerm,
Initial,
STerm ,
Initial },
389 {
Initial,
BAfterC,
BAfter ,
BAfter ,
Upper ,
Initial,
Initial,
Upper ,
Initial,
Initial,
LUATerm,
Initial,
STerm ,
Initial },
391 {
Lookup ,
BAfterC,
BAfter ,
BAfter ,
LUATerm,
ACS ,
Initial,
Upper ,
Break ,
Initial,
ATerm ,
STerm ,
STerm ,
ATermC },
392 {
Lookup ,
BAfterC,
BAfter ,
BAfter ,
ATerm ,
ACS ,
Initial,
Break ,
Break ,
Initial,
ATerm ,
STerm ,
STerm ,
ATermC },
393 {
Lookup ,
BAfterC,
BAfter ,
BAfter ,
ATermC ,
ACS ,
Initial,
Break ,
Break ,
Lookup ,
ATerm ,
STerm ,
STerm ,
ATermC },
394 {
Lookup ,
BAfterC,
BAfter ,
BAfter ,
ACS ,
ACS ,
Initial,
Break ,
Break ,
Lookup ,
ATerm ,
STerm ,
STerm ,
Lookup },
396 {
Break ,
BAfterC,
BAfter ,
BAfter ,
STerm ,
SCS ,
Break ,
Break ,
Break ,
Break ,
ATerm ,
STerm ,
STerm ,
STermC },
397 {
Break ,
BAfterC,
BAfter ,
BAfter ,
STermC ,
SCS ,
Break ,
Break ,
Break ,
Break ,
ATerm ,
STerm ,
STerm ,
STermC },
398 {
Break ,
BAfterC,
BAfter ,
BAfter ,
SCS ,
SCS ,
Break ,
Break ,
Break ,
Break ,
ATerm ,
STerm ,
STerm ,
Break },
399 {
Break ,
Break ,
BAfter ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
400 {
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
410 char32_t ucs4 =
string[
i];
426 for (
qsizetype lookahead =
i + 1; lookahead <
len; ++lookahead) {
427 ucs4 =
string[lookahead];
429 ushort low =
string[lookahead + 1];
564 {
PB,
PB,
PB,
PB,
PB,
PB,
PB,
PB,
PB,
PB,
PB,
PB,
PB,
PB,
PB,
PB,
PB,
PB,
PB,
PB,
PB,
CP,
PB,
PB,
PB,
PB,
PB,
PB,
PB,
PB,
PB,
PB },
565 {
DB,
PB,
PB,
IB,
IB,
PB,
PB,
PB,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
IB,
IB,
IB,
DB,
DB,
PB,
CI,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB },
566 {
DB,
PB,
PB,
IB,
IB,
PB,
PB,
PB,
PB,
DB,
DB,
IB,
IB,
IB,
DB,
IB,
IB,
IB,
DB,
DB,
PB,
CI,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB },
567 {
PB,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
PB,
CI,
PB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
IB },
568 {
IB,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
PB,
CI,
PB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
IB },
569 {
DB,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
IB,
IB,
IB,
DB,
DB,
PB,
CI,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB },
570 {
DB,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
IB,
IB,
IB,
DB,
DB,
PB,
CI,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB },
571 {
DB,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
DB,
DB,
DB,
DB,
IB,
DB,
IB,
IB,
IB,
DB,
DB,
PB,
CI,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB },
572 {
DB,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
DB,
DB,
DB,
IB,
IB,
DB,
IB,
IB,
IB,
DB,
DB,
PB,
CI,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB },
573 {
DB,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
DB,
DB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
DB,
DB,
PB,
CI,
PB,
IB,
IB,
IB,
IB,
IB,
DB,
DB,
IB,
IB },
574 {
DB,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
DB,
DB,
IB,
IB,
IB,
DB,
IB,
IB,
IB,
DB,
DB,
PB,
CI,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB },
575 {
IN,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
IB,
IB,
IB,
IB,
IB,
DB,
IB,
IB,
IB,
DB,
DB,
PB,
CI,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB },
576 {
IN,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
IB,
IB,
IB,
IB,
IB,
DB,
IB,
IB,
IB,
DB,
DB,
PB,
CI,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB },
577 {
IN,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
IB,
IB,
IB,
IB,
IB,
DB,
IB,
CI,
CI,
DB,
DB,
PB,
CI,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB },
578 {
DB,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
DB,
IB,
DB,
DB,
DB,
DB,
IB,
IB,
IB,
DB,
DB,
PB,
CI,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB },
579 {
DB,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
IB,
IB,
IB,
DB,
DB,
PB,
CI,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB },
580 {
HH,
PB,
PB,
IB,
HH,
IB,
PB,
PB,
PB,
HH,
HH,
IB,
HH,
HH,
HH,
IB,
IB,
IB,
HH,
HH,
PB,
CI,
PB,
HH,
HH,
HH,
HH,
HH,
HH,
DB,
DB,
DB },
581 {
HH,
PB,
PB,
IB,
HH,
IB,
PB,
PB,
PB,
HH,
HH,
HH,
HH,
HH,
HH,
IB,
IB,
IB,
HH,
HH,
PB,
CI,
PB,
HH,
HH,
HH,
HH,
HH,
HH,
DB,
DB,
DB },
582 {
IB,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
PB,
CI,
PB,
IB,
IB,
IB,
IB,
IB,
IB,
DB,
IB,
IB },
583 {
DB,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
IB,
IB,
IB,
DB,
PB,
PB,
CI,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB },
584 {
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB },
585 {
IB,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
DB,
DB,
IB,
IB,
IB,
DB,
IB,
IB,
IB,
DB,
DB,
PB,
CI,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB },
586 {
IB,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
PB,
CI,
PB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
IB,
IB },
587 {
DB,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
DB,
IB,
DB,
DB,
DB,
DB,
IB,
IB,
IB,
DB,
DB,
PB,
CI,
PB,
DB,
DB,
DB,
IB,
IB,
DB,
DB,
DB,
DB },
588 {
DB,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
DB,
IB,
DB,
DB,
DB,
DB,
IB,
IB,
IB,
DB,
DB,
PB,
CI,
PB,
DB,
DB,
DB,
DB,
IB,
DB,
DB,
DB,
DB },
589 {
DB,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
DB,
IB,
DB,
DB,
DB,
DB,
IB,
IB,
IB,
DB,
DB,
PB,
CI,
PB,
IB,
IB,
IB,
IB,
DB,
DB,
DB,
DB,
DB },
590 {
DB,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
DB,
IB,
DB,
DB,
DB,
DB,
IB,
IB,
IB,
DB,
DB,
PB,
CI,
PB,
DB,
DB,
DB,
IB,
IB,
DB,
DB,
DB,
DB },
591 {
DB,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
DB,
IB,
DB,
DB,
DB,
DB,
IB,
IB,
IB,
DB,
DB,
PB,
CI,
PB,
DB,
DB,
DB,
DB,
IB,
DB,
DB,
DB,
DB },
592 {
DB,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
IB,
IB,
IB,
DB,
DB,
PB,
CI,
PB,
DB,
DB,
DB,
DB,
DB,
IB,
DB,
DB,
DB },
593 {
DB,
PB,
PB,
IB,
IB,
DB,
PB,
PB,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
PB,
CI,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB },
594 {
DB,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
DB,
IB,
DB,
DB,
DB,
DB,
IB,
IB,
IB,
DB,
DB,
PB,
CI,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
IB },
595 {
DB,
PB,
PB,
IB,
IB,
IB,
PB,
PB,
PB,
DB,
IB,
DB,
DB,
DB,
DB,
IB,
IB,
IB,
DB,
DB,
PB,
CI,
PB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB,
DB },
615 char32_t ucs4 =
string[
i];
666 goto next_no_cls_update;
674 goto next_no_cls_update;
681 goto next_no_cls_update;
743 goto next_no_cls_update;
748 goto next_no_cls_update;
794 uint ucs4 =
string[
i];
1241 if (uc < 0x900 || uc > 0xdff) {
1244 if (uc == 0x200c || uc == 0x200d)
1253#define IDEBUG qDebug
1255#define IDEBUG if constexpr (1) ; else qDebug
1270 const char16_t *uc =
s+
start;
1308 (uc[0] == 0x0985 || uc[0] == 0x098f))
1345 if (uc[
pos-1] == 0x0bc6 &&
1346 (uc[
pos] == 0xbbe || uc[
pos] == 0xbd7))
1348 if (uc[
pos-1] == 0x0bc7 && uc[
pos] == 0xbbe)
1380 if (boundary >
len-1) boundary =
len;
1382 while (
i < boundary) {
1392#if QT_CONFIG(library)
1394#define LIBTHAI_MAJOR 0
1405using ThBrk =
struct _ThBrk;
1411 Q_DISABLE_COPY_MOVE(LibThai)
1413 using th_brk_new_def = ThBrk *(*)(
const char *);
1414 using th_brk_delete_def =
void (*)(ThBrk *);
1415 using th_brk_find_breaks_def = int (*)(ThBrk *,
const unsigned char *,
int *, size_t);
1416 using th_next_cell_def = size_t (*)(
const unsigned char *, size_t,
struct thcell_t *, int);
1419 LibThai() : m_library(
"thai"_L1, LIBTHAI_MAJOR)
1421 m_th_brk_find_breaks =
1422 reinterpret_cast<th_brk_find_breaks_def
>(m_library.resolve(
"th_brk_find_breaks"));
1423 m_th_next_cell =
reinterpret_cast<th_next_cell_def
>(m_library.resolve(
"th_next_cell"));
1425 auto th_brk_new =
reinterpret_cast<th_brk_new_def
>(m_library.resolve(
"th_brk_new"));
1427 m_state = th_brk_new(
nullptr);
1429 reinterpret_cast<th_brk_delete_def
>(m_library.resolve(
"th_brk_delete"));
1435 if (m_state && m_th_brk_delete)
1436 m_th_brk_delete(m_state);
1440 bool isInitialized()
const {
return m_th_brk_find_breaks && m_th_next_cell && m_state; }
1442 int brk_find_breaks(
const unsigned char *
s,
int *
pos,
size_t pos_sz)
const
1446 return m_th_brk_find_breaks(m_state,
s,
pos, pos_sz);
1449 size_t next_cell(
const unsigned char *
s,
size_t len,
struct thcell_t *cell,
int is_decomp_am)
1452 return m_th_next_cell(
s,
len, cell, is_decomp_am);
1462 ThBrk *m_state =
nullptr;
1464 th_brk_find_breaks_def m_th_brk_find_breaks =
nullptr;
1465 th_next_cell_def m_th_next_cell =
nullptr;
1466 th_brk_delete_def m_th_brk_delete =
nullptr;
1473static void to_tis620(
const char16_t *
string,
qsizetype len,
char *cstr)
1476 unsigned char *
result =
reinterpret_cast<unsigned char *
>(cstr);
1478 for (
i = 0;
i <
len; ++
i) {
1479 if (
string[
i] <= 0xa0)
1480 result[
i] =
static_cast<unsigned char>(
string[
i]);
1481 else if (
string[
i] >= 0xe01 &&
string[
i] <= 0xe5b)
1482 result[
i] =
static_cast<unsigned char>(
string[
i] - 0xe00 + 0xa0);
1484 result[
i] =
static_cast<unsigned char>(~0);
1499 struct thcell_t tis_cell;
1501 LibThai *libThai = g_libThai;
1502 if (!libThai || !libThai->isInitialized())
1505 to_tis620(
string,
len,
s.data());
1507 for (
i = 0;
i <
len; ++
i) {
1516 attributes[0].
wordEnd =
false;
1517 numbreaks = libThai->brk_find_breaks(
reinterpret_cast<const unsigned char *
>(
s.data()),
1518 break_positions.data(),
1519 static_cast<size_t>(break_positions.size()));
1520 for (
i = 0;
i < numbreaks; ++
i) {
1521 attributes[break_positions[
i]].
wordBreak =
true;
1522 attributes[break_positions[
i]].
wordStart =
true;
1523 attributes[break_positions[
i]].
wordEnd =
true;
1524 attributes[break_positions[
i]].
lineBreak =
true;
1527 attributes[break_positions[numbreaks - 1]].
wordStart =
false;
1532 size_t cell_length =
1533 libThai->next_cell(
reinterpret_cast<const unsigned char *
>(
s.data()) +
i,
1534 size_t(
len -
i), &tis_cell,
true);
1537 for (
size_t j = 1;
j < cell_length; ++
j)
1538 attributes[
i +
j].graphemeBoundary =
false;
1549#if QT_CONFIG(library)
1550 const char16_t *uc =
text + from;
1553 thaiAssignAttributes(uc,
len, attributes);
1624#define tibetan_form(c) \
1625 ((c) >= 0x0f40 && (c) < 0x0fc0 ? (TibetanForm)tibetanForm[(c) - 0x0f40] : TibetanOther)
1629 const char16_t *uc =
s +
start;
1683 if (boundary >
len-1) boundary =
len;
1685 while (
i < boundary) {
1802 if (ch < 0x1000 || ch > 0x105f)
1811 { 1, 4, 4, 2, 4, 4, 4, 4, 24, 1, 27, 17, 18, 19, 20, 21, 1, 1, 4},
1812 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
1813 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 17, 18, 19, 20, 21, -1, -1, 4},
1814 {-1, 4, 4, 4, 4, 4, 4, 4, -1, 23, -1, -1, -1, -1, -1, -1, -1, -1, -1},
1815 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 17, 18, 19, 20, 21, 1, 1, -1},
1816 {-2, 6, -2, -2, 7, 8, 9, 10, -2, 23, -2, -2, -2, -2, -2, -2, -2, -2, -2},
1817 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 25, 17, 18, 19, 20, 21, -1, -1, -1},
1818 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12, 17, 18, 19, 20, 21, -1, -1, -1},
1819 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12, 17, 18, 19, 20, 21, -1, -1, -1},
1820 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12, 17, 18, 19, 20, 21, -1, -1, -1},
1821 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 17, 18, 19, 20, 21, -1, -1, -1},
1822 {-1, -1, -1, -1, 7, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
1823 {-2, -2, -2, -2, -2, -2, 13, 14, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2},
1824 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 15, 17, 18, 19, 20, 21, -1, -1, -1},
1825 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 17, 18, 19, 20, 21, -1, -1, -1},
1826 {-2, -2, -2, -2, -2, -2, -2, 16, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2},
1827 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 17, 18, 19, 20, 21, -1, -1, -1},
1828 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, 21, 1, 1, -1},
1829 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19, -1, 21, 1, 1, -1},
1830 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1},
1831 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, -1, -1, -1, -1, -1, 1, 1, -1},
1832 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1},
1833 {-1, -1, -1, -1, -1, -1, -1, -1, -1, 23, -1, -1, -1, -1, -1, -1, -1, -1, -1},
1834 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1},
1835 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1},
1836 {-2, -2, -2, -2, 26, 26, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2},
1837 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12, 17, 18, 19, 20, 21, -1, 1, -1},
1838 {-1, 6, -1, -1, 7, 8, 9, 10, -1, 23, -1, -1, -1, -1, -1, -1, -1, -1, -1},
1846#define MMDEBUG qDebug
1860 const char16_t *uc =
s +
start;
1897 if (boundary >
len-1)
1900 while (
i < boundary) {
2052 _c1,
_c1,
_c1,
_c3,
_c1,
_c1,
_c1,
_c1,
_c3,
_c1,
_c1,
_c1,
_c1,
_c3,
_c1,
_c1,
2053 _c1,
_c1,
_c1,
_c1,
_c3,
_c1,
_c1,
_c1,
_c1,
_c3,
_c2,
_c1,
_c1,
_c1,
_c3,
_c3,
2054 _c1,
_c3,
_c1,
_c1,
_c1,
_c1,
_c1,
_c1,
_c1,
_c1,
_c1,
_c1,
_c1,
_c1,
_c1,
_c1,
2055 _c1,
_c1,
_c1,
_c1,
_dr,
_dr,
_dr,
_da,
_da,
_da,
_da,
_db,
_db,
_db,
_va,
_vr,
2056 _vr,
_dl,
_dl,
_dl,
_vr,
_vr,
_sa,
_sp,
_sp,
_cs,
_cs,
_sa,
_rb,
_sa,
_sa,
_sa,
2057 _sa,
_sa,
_co,
_sa,
_xx,
_xx,
_xx,
_xx,
_xx,
_xx,
_xx,
_xx,
_xx,
_sa,
_xx,
_xx
2154 { 1, 2, 2, 2, 1, 1, 1, 6, 1, 1, 1, 2},
2155 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
2156 {-1, -1, -1, -1, 3, 4, 5, 6, 16, 17, 1, -1},
2157 {-1, -1, -1, -1, -1, 4, -1, -1, 16, -1, -1, -1},
2158 {-1, -1, -1, -1, 15, -1, -1, 6, 16, 17, 1, 14},
2159 {-1, -1, -1, -1, -1, -1, -1, -1, 20, -1, 1, -1},
2160 {-1, 7, 8, 9, -1, -1, -1, -1, -1, -1, -1, -1},
2161 {-1, -1, -1, -1, 12, 13, -1, 10, 16, 17, 1, 14},
2162 {-1, -1, -1, -1, 12, 13, -1, -1, 16, 17, 1, 14},
2163 {-1, -1, -1, -1, 12, 13, -1, 10, 16, 17, 1, 14},
2164 {-1, 11, 11, 11, -1, -1, -1, -1, -1, -1, -1, -1},
2165 {-1, -1, -1, -1, 15, -1, -1, -1, 16, 17, 1, 14},
2166 {-1, -1, -1, -1, -1, 13, -1, -1, 16, -1, -1, -1},
2167 {-1, -1, -1, -1, 15, -1, -1, -1, 16, 17, 1, 14},
2168 {-1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1},
2169 {-1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1},
2170 {-1, -1, -1, -1, -1, -1, -1, -1, -1, 17, 1, 18},
2171 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 18},
2172 {-1, -1, -1, -1, -1, -1, -1, 19, -1, -1, -1, -1},
2173 {-1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1},
2174 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1},
2180#define KHDEBUG qDebug
2194 const char16_t *uc =
s +
start;
2202 *invalid = (charClass > 0) && ! (charClass &
CF_CONSONANT);
2230 if ( boundary >
len-1 ) boundary =
len;
2232 while (
i < boundary ) {
2314 if (stringLength == 0)
2321 if (!attributeFunction)
2334 if (
string.
size() <= 0)
2352 if (!
items || numItems <= 0)
2373 char32_t ucs4 =
string[
i].unicode();
2375 ushort low =
string[
i + 1].unicode();
static constexpr char32_t surrogateToUcs4(char16_t high, char16_t low) noexcept
Converts a UTF16 surrogate pair with the given high and low values to it's UCS-4-encoded code point.
Category
This enum maps the Unicode character categories.
constexpr bool isLowSurrogate() const noexcept
Returns true if the QChar is the low part of a UTF16 surrogate (for example if its code point is in r...
constexpr bool isSpace() const noexcept
Returns true if the character is a separator character (Separator_* categories or certain code points...
constexpr bool isHighSurrogate() const noexcept
Returns true if the QChar is the high part of a UTF16 surrogate (for example if its code point is in ...
\inmodule QtCore \reentrant
const QLoggingCategory & category()
[1]
void newState(QList< State > &states, const char *token, const char *lexem, bool pre)
Combined button and popup list for selecting options.
Q_DECL_CONST_FUNCTION Q_CORE_EXPORT const Properties *QT_FASTCALL properties(char32_t ucs4) noexcept
@ GraphemeBreak_Extended_Pictographic
@ GraphemeBreak_SpacingMark
@ GraphemeBreak_RegionalIndicator
@ NumGraphemeBreakClasses
@ SentenceBreak_SContinue
@ NumSentenceBreakClasses
@ WordBreak_RegionalIndicator
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
#define Q_DECLARE_MIXED_ENUM_OPERATORS(Ret, Flags, Enum)
#define Q_GLOBAL_STATIC(TYPE, NAME,...)
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLdouble GLdouble GLdouble GLdouble top
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
static QString lineBreak(QString s)
#define Q_AUTOTEST_EXPORT
ushort sentenceBreakClass
ushort graphemeBreakClass