63 |
|
|
64 |
/* These are offsets that are used to turn the OP_TYPESTAR and friends opcodes |
/* These are offsets that are used to turn the OP_TYPESTAR and friends opcodes |
65 |
into others, under special conditions. A gap of 20 between the blocks should be |
into others, under special conditions. A gap of 20 between the blocks should be |
66 |
enough. The resulting opcodes don't have to be less than 256 because they are |
enough. The resulting opcodes don't have to be less than 256 because they are |
67 |
never stored, so we push them well clear of the normal opcodes. */ |
never stored, so we push them well clear of the normal opcodes. */ |
68 |
|
|
69 |
#define OP_PROP_EXTRA 300 |
#define OP_PROP_EXTRA 300 |
585 |
case OP_ANYNL: codevalue += OP_ANYNL_EXTRA; break; |
case OP_ANYNL: codevalue += OP_ANYNL_EXTRA; break; |
586 |
case OP_EXTUNI: codevalue += OP_EXTUNI_EXTRA; break; |
case OP_EXTUNI: codevalue += OP_EXTUNI_EXTRA; break; |
587 |
case OP_NOT_HSPACE: |
case OP_NOT_HSPACE: |
588 |
case OP_HSPACE: codevalue += OP_HSPACE_EXTRA; break; |
case OP_HSPACE: codevalue += OP_HSPACE_EXTRA; break; |
589 |
case OP_NOT_VSPACE: |
case OP_NOT_VSPACE: |
590 |
case OP_VSPACE: codevalue += OP_VSPACE_EXTRA; break; |
case OP_VSPACE: codevalue += OP_VSPACE_EXTRA; break; |
591 |
default: break; |
default: break; |
592 |
} |
} |
593 |
} |
} |
1105 |
if (count > 0) { ADD_ACTIVE(state_offset + 2, 0); } |
if (count > 0) { ADD_ACTIVE(state_offset + 2, 0); } |
1106 |
if (clen > 0) |
if (clen > 0) |
1107 |
{ |
{ |
1108 |
BOOL OK; |
BOOL OK; |
1109 |
switch (c) |
switch (c) |
1110 |
{ |
{ |
1111 |
case 0x000a: |
case 0x000a: |
1116 |
case 0x2028: |
case 0x2028: |
1117 |
case 0x2029: |
case 0x2029: |
1118 |
OK = TRUE; |
OK = TRUE; |
1119 |
break; |
break; |
1120 |
|
|
1121 |
default: |
default: |
1122 |
OK = FALSE; |
OK = FALSE; |
1123 |
break; |
break; |
1124 |
} |
} |
1125 |
|
|
1126 |
if (OK == (d == OP_VSPACE)) |
if (OK == (d == OP_VSPACE)) |
1127 |
{ |
{ |
1128 |
if (count > 0 && codevalue == OP_VSPACE_EXTRA + OP_TYPEPOSPLUS) |
if (count > 0 && codevalue == OP_VSPACE_EXTRA + OP_TYPEPOSPLUS) |
1129 |
{ |
{ |
1130 |
active_count--; /* Remove non-match possibility */ |
active_count--; /* Remove non-match possibility */ |
1144 |
if (count > 0) { ADD_ACTIVE(state_offset + 2, 0); } |
if (count > 0) { ADD_ACTIVE(state_offset + 2, 0); } |
1145 |
if (clen > 0) |
if (clen > 0) |
1146 |
{ |
{ |
1147 |
BOOL OK; |
BOOL OK; |
1148 |
switch (c) |
switch (c) |
1149 |
{ |
{ |
1150 |
case 0x09: /* HT */ |
case 0x09: /* HT */ |
1168 |
case 0x3000: /* IDEOGRAPHIC SPACE */ |
case 0x3000: /* IDEOGRAPHIC SPACE */ |
1169 |
OK = TRUE; |
OK = TRUE; |
1170 |
break; |
break; |
1171 |
|
|
1172 |
default: |
default: |
1173 |
OK = FALSE; |
OK = FALSE; |
1174 |
break; |
break; |
1175 |
} |
} |
1176 |
|
|
1177 |
if (OK == (d == OP_HSPACE)) |
if (OK == (d == OP_HSPACE)) |
1178 |
{ |
{ |
1179 |
if (count > 0 && codevalue == OP_HSPACE_EXTRA + OP_TYPEPOSPLUS) |
if (count > 0 && codevalue == OP_HSPACE_EXTRA + OP_TYPEPOSPLUS) |
1180 |
{ |
{ |
1181 |
active_count--; /* Remove non-match possibility */ |
active_count--; /* Remove non-match possibility */ |
1346 |
ADD_ACTIVE(state_offset + 2, 0); |
ADD_ACTIVE(state_offset + 2, 0); |
1347 |
if (clen > 0) |
if (clen > 0) |
1348 |
{ |
{ |
1349 |
BOOL OK; |
BOOL OK; |
1350 |
switch (c) |
switch (c) |
1351 |
{ |
{ |
1352 |
case 0x000a: |
case 0x000a: |
1358 |
case 0x2029: |
case 0x2029: |
1359 |
OK = TRUE; |
OK = TRUE; |
1360 |
break; |
break; |
1361 |
|
|
1362 |
default: |
default: |
1363 |
OK = FALSE; |
OK = FALSE; |
1364 |
break; |
break; |
1365 |
} |
} |
1366 |
if (OK == (d == OP_VSPACE)) |
if (OK == (d == OP_VSPACE)) |
1367 |
{ |
{ |
1368 |
if (codevalue == OP_VSPACE_EXTRA + OP_TYPEPOSSTAR || |
if (codevalue == OP_VSPACE_EXTRA + OP_TYPEPOSSTAR || |
1369 |
codevalue == OP_VSPACE_EXTRA + OP_TYPEPOSQUERY) |
codevalue == OP_VSPACE_EXTRA + OP_TYPEPOSQUERY) |
1370 |
{ |
{ |
1392 |
ADD_ACTIVE(state_offset + 2, 0); |
ADD_ACTIVE(state_offset + 2, 0); |
1393 |
if (clen > 0) |
if (clen > 0) |
1394 |
{ |
{ |
1395 |
BOOL OK; |
BOOL OK; |
1396 |
switch (c) |
switch (c) |
1397 |
{ |
{ |
1398 |
case 0x09: /* HT */ |
case 0x09: /* HT */ |
1416 |
case 0x3000: /* IDEOGRAPHIC SPACE */ |
case 0x3000: /* IDEOGRAPHIC SPACE */ |
1417 |
OK = TRUE; |
OK = TRUE; |
1418 |
break; |
break; |
1419 |
|
|
1420 |
default: |
default: |
1421 |
OK = FALSE; |
OK = FALSE; |
1422 |
break; |
break; |
1423 |
} |
} |
1424 |
|
|
1425 |
if (OK == (d == OP_HSPACE)) |
if (OK == (d == OP_HSPACE)) |
1426 |
{ |
{ |
1427 |
if (codevalue == OP_HSPACE_EXTRA + OP_TYPEPOSSTAR || |
if (codevalue == OP_HSPACE_EXTRA + OP_TYPEPOSSTAR || |
1428 |
codevalue == OP_HSPACE_EXTRA + OP_TYPEPOSQUERY) |
codevalue == OP_HSPACE_EXTRA + OP_TYPEPOSQUERY) |
1429 |
{ |
{ |
1574 |
count = current_state->count; /* Number already matched */ |
count = current_state->count; /* Number already matched */ |
1575 |
if (clen > 0) |
if (clen > 0) |
1576 |
{ |
{ |
1577 |
BOOL OK; |
BOOL OK; |
1578 |
switch (c) |
switch (c) |
1579 |
{ |
{ |
1580 |
case 0x000a: |
case 0x000a: |
1586 |
case 0x2029: |
case 0x2029: |
1587 |
OK = TRUE; |
OK = TRUE; |
1588 |
break; |
break; |
1589 |
|
|
1590 |
default: |
default: |
1591 |
OK = FALSE; |
OK = FALSE; |
1592 |
} |
} |
1593 |
|
|
1594 |
if (OK == (d == OP_VSPACE)) |
if (OK == (d == OP_VSPACE)) |
1595 |
{ |
{ |
1596 |
if (codevalue == OP_VSPACE_EXTRA + OP_TYPEPOSUPTO) |
if (codevalue == OP_VSPACE_EXTRA + OP_TYPEPOSUPTO) |
1597 |
{ |
{ |
1598 |
active_count--; /* Remove non-match possibility */ |
active_count--; /* Remove non-match possibility */ |
1616 |
count = current_state->count; /* Number already matched */ |
count = current_state->count; /* Number already matched */ |
1617 |
if (clen > 0) |
if (clen > 0) |
1618 |
{ |
{ |
1619 |
BOOL OK; |
BOOL OK; |
1620 |
switch (c) |
switch (c) |
1621 |
{ |
{ |
1622 |
case 0x09: /* HT */ |
case 0x09: /* HT */ |
1640 |
case 0x3000: /* IDEOGRAPHIC SPACE */ |
case 0x3000: /* IDEOGRAPHIC SPACE */ |
1641 |
OK = TRUE; |
OK = TRUE; |
1642 |
break; |
break; |
1643 |
|
|
1644 |
default: |
default: |
1645 |
OK = FALSE; |
OK = FALSE; |
1646 |
break; |
break; |
1647 |
} |
} |
1648 |
|
|
1649 |
if (OK == (d == OP_HSPACE)) |
if (OK == (d == OP_HSPACE)) |
1650 |
{ |
{ |
1651 |
if (codevalue == OP_HSPACE_EXTRA + OP_TYPEPOSUPTO) |
if (codevalue == OP_HSPACE_EXTRA + OP_TYPEPOSUPTO) |
1652 |
{ |
{ |
1653 |
active_count--; /* Remove non-match possibility */ |
active_count--; /* Remove non-match possibility */ |
1771 |
case 0x2028: |
case 0x2028: |
1772 |
case 0x2029: |
case 0x2029: |
1773 |
break; |
break; |
1774 |
|
|
1775 |
default: |
default: |
1776 |
ADD_NEW(state_offset + 1, 0); |
ADD_NEW(state_offset + 1, 0); |
1777 |
break; |
break; |
1778 |
} |
} |
1791 |
case 0x2029: |
case 0x2029: |
1792 |
ADD_NEW(state_offset + 1, 0); |
ADD_NEW(state_offset + 1, 0); |
1793 |
break; |
break; |
1794 |
|
|
1795 |
default: break; |
default: break; |
1796 |
} |
} |
1797 |
break; |
break; |
1820 |
case 0x205f: /* MEDIUM MATHEMATICAL SPACE */ |
case 0x205f: /* MEDIUM MATHEMATICAL SPACE */ |
1821 |
case 0x3000: /* IDEOGRAPHIC SPACE */ |
case 0x3000: /* IDEOGRAPHIC SPACE */ |
1822 |
break; |
break; |
1823 |
|
|
1824 |
default: |
default: |
1825 |
ADD_NEW(state_offset + 1, 0); |
ADD_NEW(state_offset + 1, 0); |
1826 |
break; |
break; |
1827 |
} |
} |