| 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 |
} |
} |