44 #if QT_CONFIG(library)
50 #define FLAG(x) (1 << (x))
79 "Internal error: increase the size in bits of GBTableEntryType");
90 Extend_SpacingMark_ZWJ,
94 Extend_SpacingMark_ZWJ,
95 Extend_SpacingMark_ZWJ,
96 Extend_SpacingMark_ZWJ,
97 (Extend_SpacingMark_ZWJ
108 Extend_SpacingMark_ZWJ,
109 (Extend_SpacingMark_ZWJ
115 (Extend_SpacingMark_ZWJ
119 (Extend_SpacingMark_ZWJ
122 (Extend_SpacingMark_ZWJ
126 (Extend_SpacingMark_ZWJ
129 Extend_SpacingMark_ZWJ
135 return (breakTable[
first] &
FLAG(second)) == 0;
155 char32_t ucs4 =
string[
i];
167 bool shouldBreak = GB::shouldBreakBetweenClasses(lcls, cls);
168 bool handled =
false;
246 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
247 {
Break ,
Break ,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
248 {
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
249 {
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
250 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
251 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
252 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
253 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
254 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
NoBreak,
Break },
255 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
NoBreak,
NoBreak,
LookupW,
Lookup ,
LookupW,
LookupW,
Break ,
NoBreak,
NoBreak,
Break },
256 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
NoBreak,
NoBreak,
LookupW,
Break ,
LookupW,
LookupW,
Break ,
NoBreak,
NoBreak,
Break },
257 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
258 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
259 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
260 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
261 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
262 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
NoBreak,
NoBreak,
Lookup ,
Break ,
Lookup ,
Break ,
Lookup ,
NoBreak,
NoBreak,
Break },
263 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
Break },
264 {
Break ,
Break ,
Break ,
Break ,
NoBreak,
NoBreak,
NoBreak,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
NoBreak },
272 WordTypeNone, WordTypeAlphaNumeric, WordTypeHiraganaKatakana
273 } currentWordType = WordTypeNone;
280 char32_t ucs4 =
string[
i];
291 #ifdef QT_BUILD_INTERNAL
299 else if (ucs4 == 0x003A)
332 for (
qsizetype lookahead =
i + 1; lookahead <
len; ++lookahead) {
333 ucs4 =
string[lookahead];
335 ushort low =
string[lookahead + 1];
371 if (currentWordType != WordTypeNone)
375 currentWordType = WordTypeHiraganaKatakana;
381 currentWordType = WordTypeAlphaNumeric;
385 currentWordType = WordTypeNone;
391 if (currentWordType != WordTypeNone)
418 {
Initial,
BAfterC,
BAfter ,
BAfter ,
Initial,
Initial,
Lower ,
Upper ,
Initial,
Initial,
ATerm ,
Initial,
STerm ,
Initial },
419 {
Initial,
BAfterC,
BAfter ,
BAfter ,
Lower ,
Initial,
Initial,
Initial,
Initial,
Initial,
LUATerm,
Initial,
STerm ,
Initial },
420 {
Initial,
BAfterC,
BAfter ,
BAfter ,
Upper ,
Initial,
Initial,
Upper ,
Initial,
Initial,
LUATerm,
Initial,
STerm ,
Initial },
422 {
Lookup ,
BAfterC,
BAfter ,
BAfter ,
LUATerm,
ACS ,
Initial,
Upper ,
Break ,
Initial,
ATerm ,
STerm ,
STerm ,
ATermC },
423 {
Lookup ,
BAfterC,
BAfter ,
BAfter ,
ATerm ,
ACS ,
Initial,
Break ,
Break ,
Initial,
ATerm ,
STerm ,
STerm ,
ATermC },
424 {
Lookup ,
BAfterC,
BAfter ,
BAfter ,
ATermC ,
ACS ,
Initial,
Break ,
Break ,
Lookup ,
ATerm ,
STerm ,
STerm ,
ATermC },
425 {
Lookup ,
BAfterC,
BAfter ,
BAfter ,
ACS ,
ACS ,
Initial,
Break ,
Break ,
Lookup ,
ATerm ,
STerm ,
STerm ,
Lookup },
427 {
Break ,
BAfterC,
BAfter ,
BAfter ,
STerm ,
SCS ,
Break ,
Break ,
Break ,
Break ,
ATerm ,
STerm ,
STerm ,
STermC },
428 {
Break ,
BAfterC,
BAfter ,
BAfter ,
STermC ,
SCS ,
Break ,
Break ,
Break ,
Break ,
ATerm ,
STerm ,
STerm ,
STermC },
429 {
Break ,
BAfterC,
BAfter ,
BAfter ,
SCS ,
SCS ,
Break ,
Break ,
Break ,
Break ,
ATerm ,
STerm ,
STerm ,
Break },
430 {
Break ,
Break ,
BAfter ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
431 {
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break ,
Break },
441 char32_t ucs4 =
string[
i];
457 for (
qsizetype lookahead =
i + 1; lookahead <
len; ++lookahead) {
458 ucs4 =
string[lookahead];
460 ushort low =
string[lookahead + 1];
595 {
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 },
596 {
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 },
597 {
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 },
598 {
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 },
599 {
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 },
600 {
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 },
601 {
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 },
602 {
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 },
603 {
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 },
604 {
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 },
605 {
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 },
606 {
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 },
607 {
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 },
608 {
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 },
609 {
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 },
610 {
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 },
611 {
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 },
612 {
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 },
613 {
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 },
614 {
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 },
615 {
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 },
616 {
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 },
617 {
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 },
618 {
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 },
619 {
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 },
620 {
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 },
621 {
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 },
622 {
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 },
623 {
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 },
624 {
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 },
625 {
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 },
626 {
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 },
635 static void getLineBreaks(
const char16_t *
string,
qsizetype len,
QCharAttributes *attributes, QUnicodeTools::CharAttributeOptions options)
646 char32_t ucs4 =
string[
i];
697 goto next_no_cls_update;
705 goto next_no_cls_update;
712 goto next_no_cls_update;
723 switch (LB::NS::actionTable[nelast][necur]) {
727 attributes[
j].lineBreak =
false;
774 goto next_no_cls_update;
779 goto next_no_cls_update;
814 attributes[
j].lineBreak =
false;
825 uint ucs4 =
string[
i];
859 static const unsigned char indicForms[0xe00-0x900] = {
1271 static inline Form form(
unsigned short uc) {
1272 if (uc < 0x900 || uc > 0xdff) {
1275 if (uc == 0x200c || uc == 0x200d)
1279 return (
Form)indicForms[uc-0x900];
1284 #define IDEBUG qDebug
1286 #define IDEBUG if constexpr (1) ; else qDebug
1300 IDEBUG(
"indic_nextSyllableBoundary: start=%d, end=%d",
int(
start),
int(
end));
1301 const char16_t *uc =
s+
start;
1339 (uc[0] == 0x0985 || uc[0] == 0x098f))
1376 if (uc[
pos-1] == 0x0bc6 &&
1377 (uc[
pos] == 0xbbe || uc[
pos] == 0xbd7))
1379 if (uc[
pos-1] == 0x0bc7 && uc[
pos] == 0xbbe)
1408 qsizetype boundary = indic_nextSyllableBoundary(
script, text, from+
i,
end, &invalid) - from;
1411 if (boundary >
len-1) boundary =
len;
1413 while (
i < boundary) {
1423 #define LIBTHAI_MAJOR 0
1440 static int init_libthai() {
1441 #if QT_CONFIG(library)
1442 static bool initialized =
false;
1443 if (!initialized && (!th_brk || !th_next_cell)) {
1448 if (th_brk && th_next_cell)
1455 static void to_tis620(
const char16_t *
string,
qsizetype len,
char *cstr)
1458 unsigned char *
result =
reinterpret_cast<unsigned char *
>(cstr);
1460 for (
i = 0;
i <
len; ++
i) {
1461 if (
string[
i] <= 0xa0)
1462 result[
i] =
static_cast<unsigned char>(
string[
i]);
1463 else if (
string[
i] >= 0xe01 &&
string[
i] <= 0xe5b)
1464 result[
i] =
static_cast<unsigned char>(
string[
i] - 0xe00 + 0xa0);
1466 result[
i] =
static_cast<unsigned char>(~0);
1479 int *break_positions =
nullptr;
1483 struct thcell_t tis_cell;
1485 if (!init_libthai())
1489 cstr =
static_cast<char *
>(malloc (
len *
sizeof(
char) + 1));
1491 to_tis620(
string,
len, cstr);
1493 for (
i = 0;
i <
len; ++
i) {
1501 break_positions =
static_cast<int *
>(malloc (
sizeof(
int) *
len));
1502 memset (break_positions, 0,
sizeof(
int) *
len);
1506 break_positions = brp;
1510 if (break_positions) {
1513 attributes[0].
wordEnd =
false;
1514 numbreaks = th_brk(
reinterpret_cast<const unsigned char *
>(cstr), break_positions, brp_size);
1515 for (
i = 0;
i < numbreaks; ++
i) {
1516 attributes[break_positions[
i]].
wordBreak =
true;
1517 attributes[break_positions[
i]].
wordStart =
true;
1518 attributes[break_positions[
i]].
wordEnd =
true;
1519 attributes[break_positions[
i]].
lineBreak =
true;
1522 attributes[break_positions[numbreaks - 1]].
wordStart =
false;
1524 if (break_positions != brp)
1525 free(break_positions);
1531 cell_length =
static_cast<uint>(th_next_cell(
reinterpret_cast<const unsigned char *
>(cstr) +
i,
len -
i, &tis_cell,
true));
1535 for (
j = 1;
j < cell_length;
j++)
1536 attributes[
i +
j].graphemeBoundary =
false;
1548 const char16_t *uc =
text + from;
1551 thaiAssignAttributes(uc,
len, attributes);
1573 static const unsigned char tibetanForm[0x80] = {
1615 #define tibetan_form(c) \
1616 ((c) >= 0x0f40 && (c) < 0x0fc0 ? (TibetanForm)tibetanForm[(c) - 0x0f40] : TibetanOther)
1620 const char16_t *uc =
s +
start;
1670 qsizetype boundary = tibetan_nextSyllableBoundary(
text, from+
i,
end, &invalid) - from;
1674 if (boundary >
len-1) boundary =
len;
1676 while (
i < boundary) {
1793 if (ch < 0x1000 || ch > 0x105f)
1796 return mymrCharClasses[
ch - 0x1000];
1802 { 1, 4, 4, 2, 4, 4, 4, 4, 24, 1, 27, 17, 18, 19, 20, 21, 1, 1, 4},
1803 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
1804 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 17, 18, 19, 20, 21, -1, -1, 4},
1805 {-1, 4, 4, 4, 4, 4, 4, 4, -1, 23, -1, -1, -1, -1, -1, -1, -1, -1, -1},
1806 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 17, 18, 19, 20, 21, 1, 1, -1},
1807 {-2, 6, -2, -2, 7, 8, 9, 10, -2, 23, -2, -2, -2, -2, -2, -2, -2, -2, -2},
1808 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 25, 17, 18, 19, 20, 21, -1, -1, -1},
1809 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12, 17, 18, 19, 20, 21, -1, -1, -1},
1810 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12, 17, 18, 19, 20, 21, -1, -1, -1},
1811 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12, 17, 18, 19, 20, 21, -1, -1, -1},
1812 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 17, 18, 19, 20, 21, -1, -1, -1},
1813 {-1, -1, -1, -1, 7, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
1814 {-2, -2, -2, -2, -2, -2, 13, 14, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2},
1815 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 15, 17, 18, 19, 20, 21, -1, -1, -1},
1816 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 17, 18, 19, 20, 21, -1, -1, -1},
1817 {-2, -2, -2, -2, -2, -2, -2, 16, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2},
1818 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 17, 18, 19, 20, 21, -1, -1, -1},
1819 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, 21, 1, 1, -1},
1820 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19, -1, 21, 1, 1, -1},
1821 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1},
1822 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, -1, -1, -1, -1, -1, 1, 1, -1},
1823 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1},
1824 {-1, -1, -1, -1, -1, -1, -1, -1, -1, 23, -1, -1, -1, -1, -1, -1, -1, -1, -1},
1825 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1},
1826 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1},
1827 {-2, -2, -2, -2, 26, 26, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2},
1828 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12, 17, 18, 19, 20, 21, -1, 1, -1},
1829 {-1, 6, -1, -1, 7, 8, 9, 10, -1, 23, -1, -1, -1, -1, -1, -1, -1, -1, -1},
1836 #ifdef MYANMAR_DEBUG
1837 #define MMDEBUG qDebug
1851 const char16_t *uc =
s +
start;
1883 qsizetype boundary = myanmar_nextSyllableBoundary(
text, from+
i,
end, &invalid) - from;
1888 if (boundary >
len-1)
1891 while (
i < boundary) {
2043 _c1,
_c1,
_c1,
_c3,
_c1,
_c1,
_c1,
_c1,
_c3,
_c1,
_c1,
_c1,
_c1,
_c3,
_c1,
_c1,
2044 _c1,
_c1,
_c1,
_c1,
_c3,
_c1,
_c1,
_c1,
_c1,
_c3,
_c2,
_c1,
_c1,
_c1,
_c3,
_c3,
2045 _c1,
_c3,
_c1,
_c1,
_c1,
_c1,
_c1,
_c1,
_c1,
_c1,
_c1,
_c1,
_c1,
_c1,
_c1,
_c1,
2046 _c1,
_c1,
_c1,
_c1,
_dr,
_dr,
_dr,
_da,
_da,
_da,
_da,
_db,
_db,
_db,
_va,
_vr,
2047 _vr,
_dl,
_dl,
_dl,
_vr,
_vr,
_sa,
_sp,
_sp,
_cs,
_cs,
_sa,
_rb,
_sa,
_sa,
_sa,
2048 _sa,
_sa,
_co,
_sa,
_xx,
_xx,
_xx,
_xx,
_xx,
_xx,
_xx,
_xx,
_xx,
_sa,
_xx,
_xx
2142 static const signed char khmerStateTable[][
CC_COUNT] =
2145 { 1, 2, 2, 2, 1, 1, 1, 6, 1, 1, 1, 2},
2146 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
2147 {-1, -1, -1, -1, 3, 4, 5, 6, 16, 17, 1, -1},
2148 {-1, -1, -1, -1, -1, 4, -1, -1, 16, -1, -1, -1},
2149 {-1, -1, -1, -1, 15, -1, -1, 6, 16, 17, 1, 14},
2150 {-1, -1, -1, -1, -1, -1, -1, -1, 20, -1, 1, -1},
2151 {-1, 7, 8, 9, -1, -1, -1, -1, -1, -1, -1, -1},
2152 {-1, -1, -1, -1, 12, 13, -1, 10, 16, 17, 1, 14},
2153 {-1, -1, -1, -1, 12, 13, -1, -1, 16, 17, 1, 14},
2154 {-1, -1, -1, -1, 12, 13, -1, 10, 16, 17, 1, 14},
2155 {-1, 11, 11, 11, -1, -1, -1, -1, -1, -1, -1, -1},
2156 {-1, -1, -1, -1, 15, -1, -1, -1, 16, 17, 1, 14},
2157 {-1, -1, -1, -1, -1, 13, -1, -1, 16, -1, -1, -1},
2158 {-1, -1, -1, -1, 15, -1, -1, -1, 16, 17, 1, 14},
2159 {-1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1},
2160 {-1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1},
2161 {-1, -1, -1, -1, -1, -1, -1, -1, -1, 17, 1, 18},
2162 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 18},
2163 {-1, -1, -1, -1, -1, -1, -1, 19, -1, -1, -1, -1},
2164 {-1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1},
2165 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1},
2171 #define KHDEBUG qDebug
2185 const char16_t *uc =
s +
start;
2193 *invalid = (charClass > 0) && ! (charClass &
CF_CONSONANT);
2217 qsizetype boundary = khmer_nextSyllableBoundary(
text, from+
i,
end, &invalid ) - from;
2221 if ( boundary >
len-1 ) boundary =
len;
2223 while (
i < boundary ) {
2301 static void getCharAttributes(
const char16_t *
string,
qsizetype stringLength,
2305 if (stringLength == 0)
2312 if (!attributeFunction)
2325 if (
string.
size() <= 0)
2332 getGraphemeBreaks(
string.utf16(),
string.
size(), attributes);
2334 getWordBreaks(
string.utf16(),
string.
size(), attributes);
2336 getSentenceBreaks(
string.utf16(),
string.
size(), attributes);
2338 getLineBreaks(
string.utf16(),
string.
size(), attributes, options);
2340 getWhiteSpaces(
string.utf16(),
string.
size(), attributes);
2343 if (!
items || numItems <= 0)
2346 Tailored::getCharAttributes(
string.utf16(),
string.
size(),
items, numItems, attributes);
2364 char32_t ucs4 =
string[
i].unicode();
2366 ushort low =
string[
i + 1].unicode();
small capitals from c petite p scientific f u
small capitals from c petite p scientific i
[1]
xD9 x84 xD8 xAD xD9 x80 xF0 x90 xAC x9A xE0 xA7 xA6 xE0 xA7 xAA xF0 x91 x84 xA4 xF0 x91 x84 x89 xF0 x91 x84 x9B xF0 x90 x8A xAB xF0 x90 x8B x89 xE2 xB2 x9E xE2 xB2 x9F xD0 xBE xD0 x9E xF0 x90 x90 x84 xF0 x90 x90 xAC xE1 x83 x98 xE1 x83 x94 xE1 x83 x90 xE1 xB2 xBF xE2 xB0 x95 xE2 xB1 x85 xCE xBF xCE x9F xE0 xA8 xA0 xE0 xA8 xB0 xE0 xA9 xA6 Kayah xEA xA4 x8D xEA xA4 x80 Khmer xE1 xA7 xA1 xE1 xA7 xAA xE0 xBB x90 Latin Subscript xE2 x82 x92 xE2 x82 x80 xEA x93 xB3 xF0 x96 xB9 xA1 xF0 x96 xB9 x9B xF0 x96 xB9 xAF xE1 x80 x9D xE1 x80 x84 xE1 x80 x82 no script
static constexpr char32_t surrogateToUcs4(char16_t high, char16_t low) noexcept
constexpr bool isLowSurrogate() const noexcept
constexpr bool isSpace() const noexcept
constexpr bool isHighSurrogate() const noexcept
The QLatin1String class provides a thin wrapper around an US-ASCII/Latin-1 encoded string literal.
QFunctionPointer resolve(const char *symbol)
The QStringView class provides a unified view on UTF-16 strings with a read-only subset of the QStrin...
const QLoggingCategory & category()
[1]
void newState(QList< State > &states, const char *token, const char *lexem, bool pre)
QHighDpiScaling::Point position(T, QHighDpiScaling::Point::Kind)
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
typing.Tuple[int, int] test(str binary_directory, *debug=False)
set set set set set set set macro pixldst1 abits if abits op else op endif endm macro pixldst2 abits if abits op else op endif endm macro pixldst4 abits if abits op else op endif endm macro pixldst0 abits op endm macro pixldst3 mem_operand op endm macro pixldst30 mem_operand op endm macro pixldst abits if abits elseif abits elseif abits elseif abits elseif abits pixldst0 abits else pixldst0 abits pixldst0 abits pixldst0 abits pixldst0 abits endif elseif abits else pixldst0 abits pixldst0 abits endif elseif abits else error unsupported bpp *numpix else pixst endif endm macro vuzp8 reg2 vuzp d d ®2 endm macro vzip8 reg2 vzip d d ®2 endm macro pixdeinterleave basereg basereg basereg basereg basereg endif endm macro pixinterleave basereg basereg basereg basereg basereg endif endm macro PF boost_increment endif if endif PF tst PF addne PF subne PF cmp ORIG_W if endif if endif if endif PF subge ORIG_W PF subges if endif if endif if endif endif endm macro cache_preload_simple endif if dst_r_bpp pld[DST_R, #(PREFETCH_DISTANCE_SIMPLE *dst_r_bpp/8)] endif if mask_bpp pld if[MASK, #(PREFETCH_DISTANCE_SIMPLE *mask_bpp/8)] endif endif endm macro ensure_destination_ptr_alignment process_pixblock_tail_head if beq irp skip1(dst_w_bpp<=(lowbit *8)) &&((lowbit *8)<(pixblock_size *dst_w_bpp)) .if lowbit< 16 tst DST_R
[3]
#define Q_DECLARE_MIXED_ENUM_OPERATORS(Ret, Flags, Enum)
QT_BEGIN_INCLUDE_NAMESPACE typedef unsigned char uchar
#define Q_AUTOTEST_EXPORT
GLenum GLuint GLintptr GLsizeiptr size
[1]
ushort sentenceBreakClass
ushort graphemeBreakClass