33 #define WARN_BUFSIZE 256
35 #define CASE_FOLD_IS_APPLIED_INSIDE_NEGATIVE_CCLASS
84 #ifdef DEFAULT_WARN_FUNCTION
85 static OnigWarnFunc
onig_warn = (OnigWarnFunc )DEFAULT_WARN_FUNCTION;
90 #ifdef DEFAULT_VERB_WARN_FUNCTION
91 static OnigWarnFunc
onig_verb_warn = (OnigWarnFunc )DEFAULT_VERB_WARN_FUNCTION;
126 if (r != 0)
return r;
132 #define BACKREF_REL_TO_ABS(rel_no, env) \
133 ((env)->num_mem + 1 + (rel_no))
135 #define ONOFF(v,f,negative) (negative) ? ((v) &= ~(f)) : ((v) |= (f))
137 #define MBCODE_START_POS(enc) \
138 (OnigCodePoint )(ONIGENC_MBC_MINLEN(enc) > 1 ? 0 : 0x80)
140 #define SET_ALL_MULTI_BYTE_RANGE(enc, pbuf) \
141 add_code_range_to_buf(pbuf, env, MBCODE_START_POS(enc), ONIG_LAST_CODE_POINT)
143 #define ADD_ALL_MULTI_BYTE_RANGE(enc, mbuf) do {\
144 if (! ONIGENC_IS_SINGLEBYTE(enc)) {\
145 r = SET_ALL_MULTI_BYTE_RANGE(enc, &(mbuf));\
151 #define BITSET_SET_BIT_CHKDUP(bs, pos) do { \
152 if (BITSET_AT(bs, pos)) CC_DUP_WARN(env); \
153 BS_ROOM(bs, pos) |= BS_BIT(pos); \
156 #define BITSET_IS_EMPTY(bs,empty) do {\
159 for (i = 0; i < BITSET_SIZE; i++) {\
234 ptrdiff_t len = end - src;
237 dest[len] = (
UChar )0;
241 #ifdef USE_NAMED_GROUP
256 for (i = 0; i < term_len; i++)
257 r[slen + i] = (
UChar )0;
268 #define PFETCH_READY UChar* pfetch_prev = NULL; (void)pfetch_prev
270 #define PFETCH_READY UChar* pfetch_prev
272 #define PEND (p < end ? 0 : 1)
273 #define PUNFETCH p = pfetch_prev
276 p += enclen(enc, p, end); \
278 #define PFETCH(c) do { \
279 c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
281 p += enclen(enc, p, end); \
284 #define PPEEK (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
285 #define PPEEK_IS(c) (PPEEK == (OnigCodePoint )c)
306 const UChar* src,
const UChar* src_end,
size_t capa)
318 #ifdef USE_ST_LIBRARY
336 if ((x->
end - x->
s) != (y->
end - y->
s))
342 c = (int )*p - (
int )*q;
343 if (c != 0)
return c;
360 val = val * 997 + (int )*p++;
363 return val + (val >> 5);
398 key->
s = (
UChar* )str_key;
410 #ifdef USE_NAMED_GROUP
412 #define INIT_NAME_BACKREFS_ALLOC_NUM 8
423 #ifdef USE_ST_LIBRARY
435 fprintf(fp,
"%s: ", e->
name);
442 if (i > 0) fprintf(fp,
", ");
456 fprintf(fp,
"name table\n");
596 #define INIT_NAMES_ALLOC_NUM 8
613 fprintf(fp,
"name table\n");
614 for (i = 0; i < t->num; i++) {
616 fprintf(fp,
"%s: ", e->
name);
625 if (j > 0) fprintf(fp,
", ");
645 for (i = 0; i < t->num; i++) {
689 len = name_end -
name;
690 for (i = 0; i < t->num; i++) {
708 for (i = 0; i < t->num; i++) {
713 if (r != 0)
return r;
739 if (name_end - name <= 0)
744 #ifdef USE_ST_LIBRARY
760 e->name_len = name_end -
name;
763 e->back_refs = (
int* )
NULL;
768 alloc = INIT_NAMES_ALLOC_NUM;
769 t = (NameTable* )
xmalloc(
sizeof(NameTable));
784 else if (t->num == t->alloc) {
788 alloc = t->alloc * 2;
795 for (i = t->num; i < t->alloc; i++) {
797 t->e[
i].name_len = 0;
798 t->e[
i].back_num = 0;
799 t->e[
i].back_alloc = 0;
800 t->e[
i].back_refs = (
int* )
NULL;
807 e->name_len = name_end -
name;
849 const UChar* name_end,
int** nums)
884 for (i = n - 1; i >= 0; i--) {
897 const UChar* name_end,
int** nums)
929 #ifdef USE_NAMED_GROUP
941 #define INIT_SCANENV_MEMNODES_ALLOC_SIZE 16
956 #ifdef USE_NAMED_GROUP
965 #ifdef USE_COMBINATION_EXPLOSION_CHECK
966 env->num_comb_exp_check = 0;
967 env->comb_exp_max_regnum = 0;
968 env->curr_max_regnum = 0;
969 env->has_recursion = 0;
995 for (i = env->
num_mem + 1; i < alloc; i++)
1018 #ifdef USE_PARSE_TREE_NODE_RECYCLE
1032 switch (
NTYPE(node)) {
1034 if (
NSTR(node)->capa != 0 &&
1046 #ifdef USE_PARSE_TREE_NODE_RECYCLE
1074 if (
NQTFR(node)->target)
1094 #ifdef USE_PARSE_TREE_NODE_RECYCLE
1108 #ifdef USE_PARSE_TREE_NODE_RECYCLE
1117 FreeNodeList = FreeNodeList->
next;
1130 #ifdef USE_PARSE_TREE_NODE_RECYCLE
1133 node = (
Node* )FreeNodeList;
1134 FreeNodeList = FreeNodeList->
next;
1184 for (i = 0; i < n; i++) {
1187 if (j >= sb_out)
goto sb_end;
1203 if (n == 0)
goto is_null;
1207 bbuf->
alloc = n + 1;
1209 bbuf->
p = (
UChar* )((
void* )ranges);
1226 NCTYPE(node)->ascii_range = ascii_range;
1298 NANCHOR(node)->ascii_range = 0;
1305 int exist_level,
int nest_level,
1315 NBREF(node)->state = 0;
1316 NBREF(node)->back_num = back_num;
1317 NBREF(node)->back_dynamic = (
int* )
NULL;
1321 #ifdef USE_BACKREF_WITH_LEVEL
1322 if (exist_level != 0) {
1324 NBREF(node)->nest_level = nest_level;
1328 for (i = 0; i < back_num; i++) {
1329 if (backrefs[i] <= env->num_mem &&
1337 for (i = 0; i < back_num; i++)
1338 NBREF(node)->back_static[
i] = backrefs[
i];
1341 int*
p = (
int* )
xmalloc(
sizeof(
int) * back_num);
1346 NBREF(node)->back_dynamic =
p;
1347 for (i = 0; i < back_num; i++)
1353 #ifdef USE_SUBEXP_CALL
1361 NCALL(node)->state = 0;
1364 NCALL(node)->name_end = name_end;
1365 NCALL(node)->group_num = gnum;
1377 NQTFR(node)->state = 0;
1379 NQTFR(node)->lower = lower;
1380 NQTFR(node)->upper = upper;
1381 NQTFR(node)->greedy = 1;
1385 NQTFR(node)->is_refered = 0;
1389 #ifdef USE_COMBINATION_EXPLOSION_CHECK
1390 NQTFR(node)->comb_exp_check_num = 0;
1427 #ifdef USE_SUBEXP_CALL
1445 ptrdiff_t addlen = end - s;
1448 ptrdiff_t len =
NSTR(node)->end -
NSTR(node)->s;
1454 if (capa <=
NSTR(node)->capa) {
1466 NSTR(node)->capa = (int )capa;
1472 NSTR(node)->end =
NSTR(node)->s + len + addlen;
1499 if (num < 0)
return num;
1507 NSTR(node)->flag = flag;
1508 NSTR(node)->capa = 0;
1516 if (
NSTR(node)->capa != 0 &&
1521 NSTR(node)->capa = 0;
1522 NSTR(node)->flag = 0;
1534 NSTR(node)->capa = 0;
1535 NSTR(node)->flag = 0;
1581 if (sn->
end > sn->
s) {
1583 if (p && p > sn->
s) {
1596 if (sn->
end > sn->
s) {
1597 return ((
enclen(enc, sn->
s, sn->
end) < sn->
end - sn->
s) ? 1 : 0);
1602 #ifdef USE_PAD_TO_SHORT_BYTE_CHAR
1609 len = sn->
end - sn->
s;
1614 for (i = 0; i < num; i++) {
1623 unsigned int num,
val;
1636 num = num * 10 +
val;
1652 unsigned int num,
val;
1657 restlen = maxlen - minlen;
1659 while (!
PEND && maxlen-- != 0) {
1673 if (maxlen > restlen)
1684 unsigned int num,
val;
1689 while (!
PEND && maxlen-- != 0) {
1696 num = (num << 3) + val;
1708 #define BBUF_WRITE_CODE_POINT(bbuf,pos,code) \
1709 BBUF_WRITE(bbuf, pos, &(code), SIZE_CODE_POINT)
1718 #define INIT_MULTI_BYTE_RANGE_SIZE (SIZE_CODE_POINT * 5)
1743 n = from; from = to; to = n;
1759 bound = (from == 0) ? 0 : n;
1760 for (low = 0; low < bound; ) {
1761 x = (low + bound) >> 1;
1762 if (from - 1 > data[x*2 + 1])
1769 for (bound = n; high < bound; ) {
1770 x = (high + bound) >> 1;
1771 if (to + 1 >= data[x*2])
1780 inc_n = low + 1 - high;
1785 if (checkdup && from <= data[low*2+1]
1786 && (data[low*2] <= from || data[low*2+1] <= to))
1788 if (from > data[low*2])
1790 if (to < data[(high - 1)*2 + 1])
1791 to = data[(high - 1)*2 + 1];
1859 if (n <= 0)
goto set_all;
1863 for (i = 0; i < n; i++) {
1866 if (pre <= from - 1) {
1868 if (r != 0)
return r;
1879 #define SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2) do {\
1882 tnot = not1; not1 = not2; not2 = tnot; \
1883 tbuf = bbuf1; bbuf1 = bbuf2; bbuf2 = tbuf; \
1896 if (not1 != 0 || not2 != 0)
1926 if (not2 == 0 && not1 == 0) {
1929 else if (not1 == 0) {
1932 if (r != 0)
return r;
1934 for (i = 0; i < n1; i++) {
1938 if (r != 0)
return r;
1950 for (i = 0; i < n; i++) {
1953 if (from2 < from1) {
1954 if (to2 < from1)
continue;
1959 else if (from2 <= to1) {
1961 if (from1 <= from2 - 1) {
1963 if (r != 0)
return r;
1974 if (from1 > to1)
break;
1978 if (r != 0)
return r;
2012 if (not2 == 0 && not1 == 0) {
2013 for (i = 0; i < n1; i++) {
2016 for (j = 0; j < n2; j++) {
2019 if (from2 > to1)
break;
2020 if (to2 < from1)
continue;
2021 from =
MAX(from1, from2);
2024 if (r != 0)
return r;
2028 else if (not1 == 0) {
2029 for (i = 0; i < n1; i++) {
2033 if (r != 0)
return r;
2045 BBuf *buf1, *buf2, *pbuf = 0;
2065 if (bsr1 != dest->
bs) {
2074 if (not1 != 0 && not2 != 0) {
2079 if (r == 0 && not1 != 0) {
2103 BBuf *buf1, *buf2, *pbuf = 0;
2123 if (bsr1 != dest->
bs) {
2132 if (not1 != 0 && not2 != 0) {
2137 if (r == 0 && not1 != 0) {
2164 case 'n':
return '\n';
2165 case 't':
return '\t';
2166 case 'r':
return '\r';
2167 case 'f':
return '\f';
2168 case 'a':
return '\007';
2169 case 'b':
return '\010';
2170 case 'e':
return '\033';
2177 if ((
'a' <= c && c <=
'z') || (
'A' <= c && c <=
'Z'))
2185 #ifdef USE_NO_INVALID_QUANTIFIER
2186 #define is_invalid_quantifier_target(node) 0
2191 switch (
NTYPE(node)) {
2226 if (q->
lower == 0) {
2227 if (q->
upper == 1)
return 0;
2230 else if (q->
lower == 1) {
2235 if (q->
lower == 0) {
2236 if (q->
upper == 1)
return 3;
2239 else if (q->
lower == 1) {
2276 if (pnum < 0 || cnum < 0)
return ;
2278 switch (ReduceTypeTable[cnum][pnum]) {
2372 #ifdef USE_BACKREF_WITH_LEVEL
2394 int low, up, syn_allow, non_low = 0;
2412 if (c ==
')' || c ==
'(' || c ==
'|') {
2432 if (
PEND)
goto invalid;
2456 if (
PEND)
goto invalid;
2462 if (c !=
'}')
goto invalid;
2504 if (v < 0)
return v;
2507 c = ((c & 0xff) | 0x80);
2534 if (v < 0)
return v;
2572 #ifdef USE_NAMED_GROUP
2573 #ifdef USE_BACKREF_WITH_LEVEL
2582 int* rback_num,
int* rlevel)
2584 int r, sign, is_num, exist_level;
2594 is_num = exist_level = 0;
2613 else if (c ==
'-') {
2626 if (c == end_code || c ==
')' || c ==
'+' || c ==
'-') {
2645 if (r == 0 && c != end_code) {
2646 if (c ==
'+' || c ==
'-') {
2648 int flag = (c ==
'-' ? -1 : 1);
2655 *rlevel = (level * flag);
2673 else if (*rback_num == 0)
goto err;
2678 *rname_end = name_end;
2680 return (exist_level ? 1 : 0);
2697 int r, is_num, sign;
2731 else if (c ==
'-') {
2751 if (c == end_code || c ==
')') {
2776 if (c != end_code) {
2784 else if (*rback_num == 0) {
2792 *rname_end = name_end;
2800 if (c == end_code || c ==
')')
2816 int r, is_num, sign;
2829 *rname_end = name_end = end;
2846 else if (c ==
'-') {
2860 if (c == end_code || c ==
')')
break;
2864 if (r == 0 && c != end_code) {
2872 else if (*rback_num == 0) {
2878 *rname_end = name_end;
2898 va_start(args, fmt);
2901 (
const UChar *)fmt, args);
2960 q = p +
enclen(enc, p, to);
2962 for (i = 1; i < n && q < to; i++) {
2964 if (x != s[i])
break;
2995 q = p +
enclen(enc, p, to);
2997 for (i = 1; i < n && q < to; i++) {
2999 if (x != s[i])
break;
3002 if (i >= n)
return 1;
3007 if (x == bad)
return 0;
3008 else if (x ==
MC_ESC(syn)) in_esc = 1;
3041 else if (c ==
'-') {
3044 else if (c ==
MC_ESC(syn)) {
3057 tok->
u.
prop.not = 0;
3062 tok->
u.
prop.not = 1;
3067 tok->
u.
prop.not = 0;
3072 tok->
u.
prop.not = 1;
3077 tok->
u.
prop.not = 0;
3082 tok->
u.
prop.not = 1;
3088 tok->
u.
prop.not = 0;
3094 tok->
u.
prop.not = 1;
3104 tok->
u.
prop.not = (c ==
'P' ? 1 : 0);
3109 tok->
u.
prop.not = (tok->
u.
prop.not == 0 ? 1 : 0);
3175 case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
3193 if (num < 0)
return num;
3194 if (tok->
u.
c != num) {
3201 else if (c ==
'[') {
3225 else if (c ==
'&') {
3238 #ifdef USE_NAMED_GROUP
3253 #ifdef USE_BACKREF_WITH_LEVEL
3256 env, &back_num, &tok->
u.
backref.level);
3257 if (r == 1) tok->
u.
backref.exist_level = 1;
3258 else tok->
u.
backref.exist_level = 0;
3260 r =
fetch_name(&p, end, &name_end, env, &back_num, 1);
3262 if (r < 0)
return r;
3264 if (back_num != 0) {
3272 if (back_num > env->
num_mem ||
3290 for (i = 0; i < num; i++) {
3291 if (backs[i] > env->
num_mem ||
3393 if (r < 0)
return r;
3394 if (r == 0)
goto greedy_check;
3397 goto possessive_check;
3423 tok->
u.
prop.not = 0;
3430 tok->
u.
prop.not = 1;
3449 #ifdef USE_WORD_BEGIN_END
3469 tok->
u.
prop.not = 0;
3476 tok->
u.
prop.not = 1;
3483 tok->
u.
prop.not = 0;
3490 tok->
u.
prop.not = 1;
3497 tok->
u.
prop.not = 0;
3504 tok->
u.
prop.not = 1;
3595 case '1':
case '2':
case '3':
case '4':
3596 case '5':
case '6':
case '7':
case '8':
case '9':
3605 (num <= env->num_mem || num <= 9)) {
3615 #ifdef USE_BACKREF_WITH_LEVEL
3622 if (c ==
'8' || c ==
'9') {
3642 else if (c !=
'0') {
3647 #ifdef USE_NAMED_GROUP
3651 if (c ==
'<' || c ==
'\'') {
3653 if (r < 0)
return r;
3663 #if defined(USE_SUBEXP_CALL) || defined(USE_NAMED_GROUP)
3665 #ifdef USE_NAMED_GROUP
3670 if (r < 0)
return r;
3676 #ifdef USE_SUBEXP_CALL
3679 if (c ==
'<' || c ==
'\'') {
3680 int gnum = -1, rel = 0;
3693 else if (cnext ==
'+') {
3700 if (r < 0)
return r;
3704 tok->
u.
call.name = prev;
3705 tok->
u.
call.name_end = name_end;
3706 tok->
u.
call.gnum = gnum;
3707 tok->
u.
call.rel = rel;
3730 tok->
u.
prop.not = (c ==
'P' ? 1 : 0);
3735 tok->
u.
prop.not = (tok->
u.
prop.not == 0 ? 1 : 0);
3767 if (num < 0)
return num;
3769 if (tok->
u.
c != num) {
3783 #ifdef USE_VARIABLE_META_CHARS
3791 goto zero_or_one_time;
3793 goto one_or_more_time;
3804 #ifdef USE_VARIABLE_META_CHARS
3812 #ifdef USE_VARIABLE_META_CHARS
3823 #ifdef USE_VARIABLE_META_CHARS
3834 #ifdef USE_VARIABLE_META_CHARS
3846 if (r < 0)
return r;
3847 if (r == 0)
goto greedy_check;
3850 goto possessive_check;
3875 if (c ==
')')
break;
3880 #ifdef USE_PERL_SUBEXP_CALL
3890 if (c ==
'R' || c ==
'0') {
3894 name_end = name =
p;
3905 if (r < 0)
return r;
3910 tok->
u.
call.name_end = name_end;
3911 tok->
u.
call.gnum = gnum;
3912 tok->
u.
call.rel = 0;
3915 else if ((c ==
'-' || c ==
'+') &&
3930 if (r < 0)
return r;
3934 tok->
u.
call.name_end = name_end;
3935 tok->
u.
call.gnum = gnum;
3936 tok->
u.
call.rel = 1;
3941 #ifdef USE_CAPITAL_P_NAMED_GROUP
3953 if (r < 0)
return r;
3956 else if (c ==
'>') {
3959 if (r < 0)
return r;
3963 tok->
u.
call.name_end = name_end;
3964 tok->
u.
call.gnum = gnum;
3965 tok->
u.
call.rel = 0;
4019 case ' ':
case '\t':
case '\n':
case '\r':
case '\f':
4030 #ifdef USE_VARIABLE_META_CHARS
4048 for (i = 0; i < n; i++) {
4055 if (r != 0)
return r;
4066 for ( ; i < n; i++) {
4070 if (r != 0)
return r;
4076 for (i = 0; i < n; i++) {
4086 for (j = prev; j < sb_out; j++) {
4093 for (i = 0; i < n; i++) {
4097 if (r != 0)
return r;
4101 if (prev < 0x7fffffff) {
4103 if (r != 0)
return r;
4113 int maxcode, ascii_range;
4201 for (c = 0; c < maxcode; c++) {
4212 for (c = 0; c < maxcode; c++) {
4240 #define POSIX_BRACKET_CHECK_LIMIT_LENGTH 20
4241 #define POSIX_BRACKET_NAME_MIN_LEN 4
4276 goto not_posix_bracket;
4287 if (r != 0)
return r;
4298 while (!
PEND && ((c =
PPEEK) !=
':') && c !=
']') {
4302 if (c ==
':' && !
PEND) {
4320 UChar *prev, *start, *p = *src;
4336 else if (c ==
'(' || c ==
')' || c ==
'{' || c ==
'|') {
4354 if (ctype < 0)
return ctype;
4360 if (r != 0)
return r;
4394 if (r < 0)
return r;
4405 int* vs_israw,
int v_israw,
4417 if (r < 0)
return r;
4422 if (intype == *type) {
4424 if (*vs > 0xff || v > 0xff)
4437 if (r < 0)
return r;
4452 if (r < 0)
return r;
4472 *vs_israw = v_israw;
4490 if (ignore_escaped && in_esc) {
4495 if (code == c)
return 1;
4506 int r,
neg, len, fetched, and_start;
4515 int val_israw, in_israw;
4528 if (r < 0)
return r;
4572 int i, base = tok->
base;
4577 if (r < 0)
goto err;
4597 for (i = 1; i < len; i++) {
4632 r =
next_state_val(cc, &vs, v, &val_israw, in_israw, in_type, &val_type,
4634 if (r != 0)
goto err;
4639 if (r < 0)
goto err;
4652 if (r != 0)
return r;
4656 if (r != 0)
goto err;
4664 if (ctype < 0)
return ctype;
4666 if (r != 0)
return r;
4674 if (r < 0)
goto err;
4694 if (r < 0)
goto err;
4708 if (r < 0)
goto err;
4736 if (r != 0)
goto err;
4744 &val_type, &state, env);
4745 if (r != 0)
goto err;
4753 if (r != 0)
goto err;
4778 if (r < 0)
goto err;
4784 &val_type, &state, env);
4785 if (r != 0)
goto err;
4790 if (r != 0)
goto err;
4807 if (is_empty == 0) {
4808 #define NEWLINE_CODE 0x0a
4815 if (r < 0)
goto err;
4842 #ifdef USE_NAMED_GROUP
4863 if (r < 0)
return r;
4865 if (r < 0)
return r;
4880 #ifdef USE_NAMED_GROUP
4889 #ifdef USE_CAPITAL_P_NAMED_GROUP
4893 if (c ==
'<')
goto named_group1;
4906 #ifdef USE_NAMED_GROUP
4921 if (r < 0)
return r;
4924 if (num < 0)
return num;
4929 if (r != 0)
return r;
4933 if (list_capture != 0)
4950 #ifdef USE_NAMED_GROUP
4953 if (c ==
'<' || c ==
'\'') {
4987 if (r < 0)
return r;
4999 #ifdef USE_NAMED_GROUP
5000 else if (c ==
'<' || c ==
'\'') {
5006 if (r < 0)
return r;
5018 for (i = 0; i < nums; i++) {
5019 if (backs[i] > env->
num_mem ||
5074 #ifdef USE_POSIXLINE_OPTION
5077 case '-':
case 'i':
case 'm':
case 's':
case 'x':
5078 case 'a':
case 'd':
case 'l':
case 'u':
5088 case '-': neg = 1;
break;
5109 #ifdef USE_POSIXLINE_OPTION
5172 else if (c ==
':') {
5177 if (r < 0)
return r;
5180 if (r < 0)
return r;
5205 if (num < 0)
return num;
5211 if (r < 0)
return r;
5219 NANCHOR(*np)->target = target;
5225 if (r != 0)
return r;
5253 "?",
"*",
"+",
"??",
"*?",
"+?"
5257 "",
"",
"*",
"*?",
"??",
"+ and ??",
"+? and ?"
5270 switch (
NTYPE(target)) {
5291 #ifdef USE_WARNING_REDUNDANT_NESTED_REPEAT_OPERATOR
5296 switch (ReduceTypeTable[targetq_num][nestq_num]) {
5304 (
UChar* )
"redundant nested repeat operator");
5305 (*onig_verb_warn)((
char* )buf);
5314 (
UChar* )
"nested repeat operator %s and %s was replaced with '%s'",
5315 PopularQStr[targetq_num], PopularQStr[nestq_num],
5316 ReduceQStr[ReduceTypeTable[targetq_num][nestq_num]]);
5317 (*onig_verb_warn)((
char* )buf);
5326 if (targetq_num >= 0) {
5327 if (nestq_num >= 0) {
5331 else if (targetq_num == 1 || targetq_num == 2) {
5351 #ifdef USE_SHARED_CCLASS_TABLE
5353 #define THRESHOLD_RANGE_NUM_FOR_SHARE_CCLASS 8
5366 if (x->
enc != y->
enc)
return 1;
5367 if (x->
not != y->
not)
return 1;
5379 for (i = 0; i < (int )
sizeof(key->
enc); i++) {
5380 val = val * 997 + (int )*p++;
5384 for (i = 0; i < (int )
sizeof(key->
type); i++) {
5385 val = val * 997 + (int )*p++;
5389 return val + (val >> 5);
5420 OnigTypeCClassTable =
NULL;
5430 #ifndef CASE_FOLD_IS_APPLIED_INSIDE_NEGATIVE_CCLASS
5442 if (r != 0)
return r;
5464 int to_len,
void* arg)
5478 #ifdef CASE_FOLD_IS_APPLIED_INSIDE_NEGATIVE_CCLASS
5514 for (i = 0; i < to_len; i++) {
5556 if (num1 < 0)
return num1;
5558 if (num2 < 0)
return num2;
5614 #ifdef USE_UNICODE_PROPERTIES
5621 propname, propname + 1);
5628 if (r != 0)
goto err;
5636 if (r != 0)
goto err;
5640 NQTFR(qn)->target = np2;
5686 bits = (bits & 0x55555555) + ((bits >> 1) & 0x55555555);
5687 bits = (bits & 0x33333333) + ((bits >> 2) & 0x33333333);
5688 bits = (bits & 0x0f0f0f0f) + ((bits >> 4) & 0x0f0f0f0f);
5689 bits = (bits & 0x00ff00ff) + ((bits >> 8) & 0x00ff00ff);
5690 return (bits & 0x0000ffff) + ((bits >>16) & 0x0000ffff);
5708 if ((n == 1) && (data[0] == data[1])) {
5725 if (((b1 & (b1 - 1)) == 0) && (c == not_found)) {
5733 if (c != not_found) {
5747 int r, len, group = 0;
5755 switch (tok->
type) {
5765 if (r < 0)
return r;
5766 if (r == 1) group = 1;
5773 if (r < 0)
return r;
5789 if (tok->
escaped)
goto tk_raw_byte;
5795 if (r < 0)
return r;
5800 if (r < 0)
return r;
5817 if (r < 0)
return r;
5821 #ifndef NUMBERED_CHAR_IS_NOT_CASE_AMBIG
5829 if (r < 0)
return r;
5854 if (r < 0)
return r;
5857 #ifdef USE_PAD_TO_SHORT_BYTE_CHAR
5861 (void )node_str_head_pad(
NSTR(*np), rem, (
UChar )0);
5872 if (r < 0)
return r;
5884 if (r != 0)
return r;
5885 #ifdef NUMBERED_CHAR_IS_NOT_CASE_AMBIG
5896 UChar *qstart, *qend, *nextp;
5913 switch (tok->
u.
prop.ctype) {
5926 #ifdef USE_SHARED_CCLASS_TABLE
5945 if (
IS_NULL(OnigTypeCClassTable)) {
5948 if (
IS_NULL(OnigTypeCClassTable)) {
5983 if (r != 0)
return r;
5985 #ifdef USE_SHARED_CCLASS_TABLE
6000 if (r != 0)
return r;
6009 if (r != 0)
return r;
6017 if (r != 0)
return r;
6056 NQTFR(qn)->target = *np;
6073 #ifdef USE_SUBEXP_CALL
6076 int gnum = tok->
u.
call.gnum;
6078 if (gnum < 0 || tok->u.call.rel != 0) {
6079 if (gnum > 0) gnum--;
6120 if (r < 0)
return r;
6137 if (tok->
u.
repeat.possessive != 0) {
6167 targetp = &(
NCAR(tmp));
6181 Node *node, **headp;
6184 r =
parse_exp(&node, tok, term, src, end, env);
6195 headp = &(
NCDR(*top));
6197 r =
parse_exp(&node, tok, term, src, end, env);
6206 headp = &(
NCDR(node));
6210 headp = &(
NCDR(*headp));
6224 Node *node, **headp;
6238 headp = &(
NCDR(*top));
6241 if (r < 0)
return r;
6249 headp = &(
NCDR(*headp));
6274 if (r < 0)
return r;
6276 if (r < 0)
return r;
6278 #ifdef USE_SUBEXP_CALL
6288 if (r != 0)
return r;
6302 #ifdef USE_NAMED_GROUP
6316 p = (
UChar* )pattern;
static void bitset_set_range(ScanEnv *env, BitSetRef bs, int from, int to)
#define ONIG_SYN_OP_ESC_CONTROL_CHARS
#define NSTRING_SET_AMBIG(node)
#define ONIG_SYN_OP_ESC_X_BRACE_HEX8
void onig_scan_env_set_error_string(ScanEnv *env, int ecode ARG_UNUSED, UChar *arg, UChar *arg_end)
#define NCCLASS_SET_NOT(nd)
#define ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY
static OnigWarnFunc onig_warn
void onig_set_warn_func(OnigWarnFunc f)
#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE
#define NODE_STR_BUF_SIZE
static int popular_quantifier_num(QtfrNode *q)
#define ADD_ALL_MULTI_BYTE_RANGE(enc, mbuf)
#define ONIGENC_CTYPE_GRAPH
#define ONIG_OPTION_WORD_BOUND_ALL_RANGE
unsigned int OnigOptionType
int onig_foreach_name(regex_t *reg, int(*func)(const UChar *, const UChar *, int, int *, regex_t *, void *), void *arg)
static enum ReduceType const ReduceTypeTable[6][6]
#define IS_REPEAT_INFINITE(n)
#define NCCLASS_SET_SHARE(nd)
#define ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND
static Node * node_new_list(Node *left, Node *right)
int onig_free_node_list(void)
#define ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE
#define ONIGENC_IS_CODE_DIGIT(enc, code)
#define SET_ALL_MULTI_BYTE_RANGE(enc, pbuf)
int onig_node_str_cat(Node *node, const UChar *s, const UChar *end)
static void CC_ESC_WARN(ScanEnv *env, UChar *c)
static int node_extended_grapheme_cluster(Node **np, ScanEnv *env)
Node * onig_node_list_add(Node *list, Node *x)
#define IS_SYNTAX_BV(syn, bvm)
int onig_st_lookup_strend(hash_table_type *table, const UChar *str_key, const UChar *end_key, hash_data_type *value)
static int fetch_name_with_level(OnigCodePoint start_code, UChar **src, UChar *end, UChar **rname_end, ScanEnv *env, int *rback_num, int *rlevel)
#define ONIG_OPTION_POSIX_BRACKET_ALL_RANGE
#define ONIG_ENCODING_ASCII
static const char *const PopularQStr[]
void onig_null_warn(const char *s ARG_UNUSED)
#define onig_st_init_table_with_size
#define ONIGENC_CODE_RANGE_TO(range, i)
#define BBUF_WRITE_CODE_POINT(bbuf, pos, code)
#define ONIGENC_MBC_MINLEN(enc)
#define ONIGENC_IS_CODE_WORD(enc, code)
#define ONIGENC_CTYPE_PUNCT
static int scan_env_add_mem_entry(ScanEnv *env)
#define ONIG_SYN_OP2_ESC_U_HEX4
#define ANCHOR_WORD_BEGIN
#define ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END
static void bitset_invert_to(BitSetRef from, BitSetRef to)
#define ONIG_SYN_OP_ESC_B_WORD_BOUND
#define ONIG_OPTION_DONT_CAPTURE_GROUP
#define BITSET_SET_BIT(bs, pos)
#define ONIGENC_CTYPE_XDIGIT
static void bitset_and(BitSetRef dest, BitSetRef bs)
#define ONIGERR_INVALID_POSIX_BRACKET_TYPE
#define NCCLASS_CLEAR_NOT(nd)
unsigned int OnigCodePoint
static int scan_unsigned_octal_number(UChar **src, UChar *end, int maxlen, OnigEncoding enc)
#define ONIG_SYN_WARN_CC_DUP
#define ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS
#define SCANENV_MEM_NODES(senv)
#define ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL
static int parse_posix_bracket(CClassNode *cc, UChar **src, UChar *end, ScanEnv *env)
int onig_names_free(regex_t *reg)
#define ANCHOR_BEGIN_LINE
#define IS_SYNTAX_OP(syn, opm)
#define ONIGENC_IS_SINGLEBYTE(enc)
int(* func)(const UChar *, const UChar *, int, int *, regex_t *, void *)
#define ONIGENC_CTYPE_ALNUM
#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME
int(* property_name_to_ctype)(struct OnigEncodingTypeST *enc, OnigUChar *p, OnigUChar *end)
static int fetch_named_backref_token(OnigCodePoint c, OnigToken *tok, UChar **src, UChar *end, ScanEnv *env)
#define ONIGENC_MBC_MAXLEN(enc)
static int parse_char_property(Node **np, OnigToken *tok, UChar **src, UChar *end, ScanEnv *env)
int onig_node_str_set(Node *node, const UChar *s, const UChar *end)
#define ONIG_SYN_OP_ESC_X_HEX2
#define IS_NCCLASS_NOT(nd)
static void scan_env_clear(ScanEnv *env)
static int parse_branch(Node **top, OnigToken *tok, int term, UChar **src, UChar *end, ScanEnv *env)
static const char *const ReduceQStr[]
#define ONIGENC_CTYPE_LOWER
static Node * node_new_str_raw(UChar *s, UChar *end)
#define ONIG_SYN_OP_LPAREN_SUBEXP
hash_table_type * onig_st_init_strend_table_with_size(st_index_t size)
#define ONIGERR_CONTROL_CODE_SYNTAX
#define ONIG_SYN_OP_VBAR_ALT
#define ONIG_MAX_MULTI_BYTE_RANGES_NUM
int onigenc_strlen(OnigEncoding enc, const UChar *p, const UChar *end)
static int node_linebreak(Node **np, ScanEnv *env)
#define IS_SINGLELINE(option)
#define ONIG_SYN_OP_QMARK_ZERO_ONE
#define ONIGENC_CTYPE_SPACE
static int i_free_shared_class(type_cclass_key *key, Node *node, void *arg ARG_UNUSED)
#define GET_CODE_POINT(code, p)
static void bbuf_free(BBuf *bbuf)
void rb_compile_warn(const char *file, int line, const char *fmt,...)
#define MC_ANYCHAR_ANYTIME(syn)
Node * onig_node_new_alt(Node *left, Node *right)
#define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY
int onig_st_insert_strend(hash_table_type *table, const UChar *str_key, const UChar *end_key, hash_data_type value)
#define ONIG_SYN_BACKSLASH_ESCAPE_IN_CC
#define BIT_STATUS_ON_AT_SIMPLE(stats, n)
#define SCANENV_MEMNODES_SIZE
#define ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY
struct OnigToken::@128::@129 anchor
#define ONIG_SYN_OP2_ESC_CAPITAL_X_EXTENDED_GRAPHEME_CLUSTER
static int is_onechar_cclass(CClassNode *cc, OnigCodePoint *code)
#define ONIGERR_END_PATTERN_AT_CONTROL
#define ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL
static const struct st_hash_type type_type_cclass_hash
#define BBUF_MOVE_RIGHT(buf, from, to, n)
#define ONIG_SYN_OP_ESC_QMARK_ZERO_ONE
#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED
#define ANCHOR_BEGIN_POSITION
#define ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR
static void CLOSE_BRACKET_WITHOUT_ESC_WARN(ScanEnv *env, UChar *c)
#define ONIGENC_CTYPE_CNTRL
#define ONIGERR_TOO_BIG_NUMBER
#define ANCHOR_NOT_WORD_BOUND
#define MC_ONE_OR_MORE_TIME(syn)
#define ONIGERR_PREMATURE_END_OF_CHAR_CLASS
#define ONIGERR_TOO_SHORT_DIGITS
#define ONIG_LAST_CODE_POINT
#define ONIGENC_CODE_RANGE_NUM(range)
#define THRESHOLD_RANGE_NUM_FOR_SHARE_CCLASS
struct OnigToken::@128::@131 backref
#define BIT_STATUS_CLEAR(stats)
static int set_quantifier(Node *qnode, Node *target, int group, ScanEnv *env)
static int i_apply_case_fold(OnigCodePoint from, OnigCodePoint to[], int to_len, void *arg)
#define ONIGENC_IS_CODE_CTYPE(enc, code, ctype)
static UChar * strcat_capa_from_static(UChar *dest, UChar *dest_end, const UChar *src, const UChar *src_end, size_t capa)
#define ONIG_OPTION_EXTEND
#define ONIG_SYN_OP2_ESC_CAPITAL_R_LINEBREAK
static int add_code_range_to_buf0(BBuf **pbuf, ScanEnv *env, OnigCodePoint from, OnigCodePoint to, int checkdup)
UChar * onigenc_get_prev_char_head(OnigEncoding enc, const UChar *start, const UChar *s, const UChar *end)
#define ONIGERR_UNDEFINED_GROUP_OPTION
#define IS_IGNORECASE(option)
#define ONIG_SYN_OP2_ESC_V_VTAB
Node * mem_nodes_static[SCANENV_MEMNODES_SIZE]
#define enclen(enc, p, e)
static void initialize_cclass(CClassNode *cc)
#define ONIGERR_INVALID_CONDITION_PATTERN
static Node * node_new_cclass_by_codepoint_range(int not, OnigCodePoint sb_out, const OnigCodePoint ranges[])
#define THREAD_ATOMIC_END
static int parse_regexp(Node **top, UChar **src, UChar *end, ScanEnv *env)
static Node * node_new_quantifier(int lower, int upper, int by_number)
#define IS_NCCLASS_SHARE(nd)
#define ONIG_SYN_OP_LINE_ANCHOR
#define ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR
#define ONIG_SYN_OP2_QMARK_SUBEXP_CALL
static st_table * OnigTypeCClassTable
static Node * node_new_enclose(int type)
#define ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE
static int parse_subexp(Node **top, OnigToken *tok, int term, UChar **src, UChar *end, ScanEnv *env)
#define ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS
static Node * node_new_call(UChar *name, UChar *name_end, int gnum)
OnigCaseFoldType case_fold_flag
#define ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY
#define ONIG_SYN_WARN_CC_OP_NOT_ESCAPED
static Node * node_new(void)
#define ONIG_SYN_OP2_CCLASS_SET_OP
#define INIT_MULTI_BYTE_RANGE_SIZE
#define ONIG_SYN_OP_ESC_OCTAL3
#define ONIG_SYN_OP_ESC_W_WORD
#define BBUF_INIT(buf, size)
#define SET_ENCLOSE_STATUS(node, f)
const OnigSyntaxType * syntax
#define BACKREF_REL_TO_ABS(rel_no, env)
#define ONIGENC_IS_CODE_NEWLINE(enc, code)
#define ONIGERR_END_PATTERN_AT_ESCAPE
#define ONIG_SYN_OP_ESC_S_WHITE_SPACE
static int str_exist_check_with_esc(OnigCodePoint s[], int n, UChar *from, UChar *to, OnigCodePoint bad, OnigEncoding enc, const OnigSyntaxType *syn)
static int add_code_range0(BBuf **pbuf, ScanEnv *env, OnigCodePoint from, OnigCodePoint to, int checkdup)
static Node * node_new_ctype(int type, int not, int ascii_range)
#define ONIG_OPTION_CAPTURE_GROUP
#define POSIX_BRACKET_CHECK_LIMIT_LENGTH
#define ONIGENC_CTYPE_UPPER
#define INIT_NAME_BACKREFS_ALLOC_NUM
static int node_str_cat_codepoint(Node *node, OnigEncoding enc, OnigCodePoint c)
#define ONIG_REGION_NOTPOS
#define ONIGENC_GET_CTYPE_CODE_RANGE(enc, ctype, sbout, ranges)
#define ONIGENC_CTYPE_ALPHA
int onig_name_to_backref_number(regex_t *reg, const UChar *name, const UChar *name_end, OnigRegion *region)
static int fetch_token(OnigToken *tok, UChar **src, UChar *end, ScanEnv *env)
#define BITSET_AT(bs, pos)
#define ONIG_SYN_OP2_QMARK_GROUP_EFFECT
void onig_snprintf_with_pattern(buf, int bufsize, OnigEncoding enc, UChar *pat, UChar *pat_end, const UChar *fmt, va_alist)
int onig_free_shared_cclass_table(void)
static int scan_unsigned_hexadecimal_number(UChar **src, UChar *end, int minlen, int maxlen, OnigEncoding enc)
#define IS_EXTEND(option)
#define ONIG_OPTION_SINGLELINE
#define CHECK_NULL_RETURN_MEMERR(p)
Node * onig_node_new_enclose(int type)
#define ONIG_SYN_STRICT_CHECK_BACKREF
#define ONIGENC_PROPERTY_NAME_TO_CTYPE(enc, p, end)
#define ONIGERR_EMPTY_CHAR_CLASS
#define ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE
void onig_set_verb_warn_func(OnigWarnFunc f)
static UChar * strcat_capa(UChar *dest, UChar *dest_end, const UChar *src, const UChar *src_end, size_t capa)
#define ONIGERR_UNMATCHED_CLOSE_PARENTHESIS
static OnigCodePoint get_name_end_code_point(OnigCodePoint start)
static UChar * strdup_with_null(OnigEncoding enc, UChar *s, UChar *end)
static int bbuf_clone(BBuf **rto, BBuf *from)
static FreeNode * FreeNodeList
static int fetch_range_quantifier(UChar **src, UChar *end, OnigToken *tok, ScanEnv *env)
#define ONIG_SYN_OP_POSIX_BRACKET
static int new_code_range(BBuf **pbuf)
#define is_invalid_quantifier_target(node)
static int name_add(regex_t *reg, UChar *name, UChar *name_end, int backref, ScanEnv *env)
#define ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT
#define BITSET_IS_EMPTY(bs, empty)
#define NSTRING_CLEAR_RAW(node)
#define XDIGITVAL(enc, code)
static int add_code_range(BBuf **pbuf, ScanEnv *env, OnigCodePoint from, OnigCodePoint to)
#define ONIG_SYN_OP2_OPTION_PERL
#define ONIGERR_EMPTY_GROUP_NAME
static int fetch_char_property_to_ctype(UChar **src, UChar *end, ScanEnv *env)
struct _FreeNode FreeNode
#define ONIGENC_CTYPE_BLANK
const OnigSyntaxType OnigSyntaxRuby
#define ONIG_SYN_OP2_ESC_G_SUBEXP_CALL
struct OnigToken::@128::@133 prop
void onig_node_conv_to_str_node(Node *node, int flag)
#define ONIGERR_INVALID_BACKREF
#define USE_BACKREF_WITH_LEVEL
#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID
#define ONIGENC_CTYPE_ASCII
#define ONIG_SYN_OP2_QMARK_VBAR_BRANCH_RESET
#define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE
#define THREAD_ATOMIC_START
SSL_METHOD *(* func)(void)
static int and_code_range1(BBuf **pbuf, ScanEnv *env, OnigCodePoint from1, OnigCodePoint to1, OnigCodePoint *data, int n)
#define BITSET_SET_BIT_CHKDUP(bs, pos)
#define BBUF_MOVE_LEFT_REDUCE(buf, from, to)
#define IS_WORD_BOUND_ALL_RANGE(option)
#define ONIG_SYN_OP_QMARK_NON_GREEDY
#define ONIG_MAX_BACKREF_NUM
#define ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS
#define ONIGERR_END_PATTERN_IN_GROUP
int onig_name_to_group_numbers(regex_t *reg, const UChar *name, const UChar *name_end, int **nums)
#define ONIG_SYN_OP_ASTERISK_ZERO_INF
#define SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2)
unsigned char buf[MIME_BUF_SIZE]
#define ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC
int onig_is_code_in_cc(OnigEncoding enc, OnigCodePoint code, CClassNode *cc)
#define ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP
#define ANCHOR_LOOK_BEHIND_NOT
#define ONIGERR_TOO_SHORT_MULTI_BYTE_STRING
BitStatusType backrefed_mem
#define NQ_TARGET_ISNOT_EMPTY
#define ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV
#define ONIG_SYN_OP_DECIMAL_BACKREF
#define ONIG_SYN_OP_ESC_PLUS_ONE_INF
static int or_cclass(CClassNode *dest, CClassNode *cc, ScanEnv *env)
int onig_strncmp(const UChar *s1, const UChar *s2, int n)
static void bitset_or(BitSetRef dest, BitSetRef bs)
Node * onig_node_new_list(Node *left, Node *right)
static int str_end_cmp(st_data_t xp, st_data_t yp)
#define ONIG_SYN_OP_PLUS_ONE_INF
#define ONIGENC_IS_UNICODE(enc)
#define ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS
#define NODE_BACKREFS_SIZE
#define ANCHOR_SEMI_END_BUF
#define ONIG_NO_SUPPORT_CONFIG
#define ONIG_MAX_REPEAT_NUM
Node * onig_node_new_str(const UChar *s, const UChar *end)
#define ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE
#define ONIGERR_INVALID_REPEAT_RANGE_PATTERN
void onig_node_str_clear(Node *node)
Node ** mem_nodes_dynamic
static int names_clear(regex_t *reg)
static Node * node_new_str_raw_char(UChar c)
const OnigSyntaxType * syntax
static int fetch_token_in_cc(OnigToken *tok, UChar **src, UChar *end, ScanEnv *env)
#define ONIG_SYN_OP_ESC_VBAR_ALT
#define ONIG_SYN_OP_VARIABLE_META_CHARACTERS
static Node * node_new_cclass(void)
#define ENCLOSE_STOP_BACKTRACK
#define ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR
#define ONIG_OPTION_IGNORECASE
UChar * onigenc_step(OnigEncoding enc, const UChar *p, const UChar *end, int n)
void onig_node_free(Node *node)
#define ONIG_SYN_OP_BRACE_INTERVAL
#define ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC
#define ONIG_SYN_OP2_ESC_K_NAMED_BACKREF
#define ONIGERR_INVALID_GROUP_NAME
#define ONIG_OPTION_MULTILINE
static int and_cclass(CClassNode *dest, CClassNode *cc, ScanEnv *env)
#define ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP
#define ONIG_INEFFECTIVE_META_CHAR
#define MC_ZERO_OR_ONE_TIME(syn)
static void bitset_copy(BitSetRef dest, BitSetRef bs)
static int i_free_name_entry(UChar *key, NameEntry *e, void *arg ARG_UNUSED)
#define ONIG_SYN_OP2_ESC_G_BRACE_BACKREF
#define CHECK_NULL_RETURN(p)
static int str_node_can_be_split(StrNode *sn, OnigEncoding enc)
static int countbits(unsigned int bits)
static Node * node_new_option(OnigOptionType option)
static int conv_backslash_value(int c, ScanEnv *env)
int onig_noname_group_capture_is_active(regex_t *reg)
#define MBCODE_START_POS(enc)
#define CASE_FOLD_IS_APPLIED_INSIDE_NEGATIVE_CCLASS
#define BBUF_ENSURE_SIZE(buf, size)
#define ONIGENC_CTYPE_WORD
struct OnigToken::@128::@130 repeat
#define ONIGENC_CODE_TO_MBCLEN(enc, code)
static int or_code_range_buf(OnigEncoding enc, BBuf *bbuf1, int not1, BBuf *bbuf2, int not2, BBuf **pbuf, ScanEnv *env)
#define ONIG_SYN_OP_BRACKET_CC
#define ONIGENC_MBC_TO_CODE(enc, p, end)
OnigCaseFoldType case_fold_flag
static int scan_env_set_mem_node(ScanEnv *env, int num, Node *node)
#define ANCHOR_PREC_READ_NOT
#define ENCLOSE_CONDITION
#define ONIGERR_END_PATTERN_AT_LEFT_BRACE
void onig_reduce_nested_quantifier(Node *pnode, Node *cnode)
static int fetch_escaped_value(UChar **src, UChar *end, ScanEnv *env)
#define ONIG_OPTION_ASCII_RANGE
static OnigWarnFunc onig_verb_warn
#define ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC
int onig_number_of_names(regex_t *reg)
static int fetch_name(OnigCodePoint start_code, UChar **src, UChar *end, UChar **rname_end, ScanEnv *env, int *rback_num, int ref)
#define ONIG_SYN_OP2_ESC_H_XDIGIT
static void onig_syntax_warn(ScanEnv *env, const char *fmt,...)
#define BITSET_CLEAR_BIT(bs, pos)
static int parse_enclose(Node **np, OnigToken *tok, int term, UChar **src, UChar *end, ScanEnv *env)
struct OnigToken::@128::@132 call
static int node_str_cat_char(Node *node, UChar c)
static UChar * find_str_position(OnigCodePoint s[], int n, UChar *from, UChar *to, UChar **next, OnigEncoding enc)
#define ONIGENC_CTYPE_DIGIT
#define ONIGERR_MULTIPLEX_DEFINED_NAME
static int and_code_range_buf(BBuf *bbuf1, int not1, BBuf *bbuf2, int not2, BBuf **pbuf, ScanEnv *env)
#define ONIG_IS_OPTION_ON(options, option)
#define ONIG_SYN_OP_DOT_ANYCHAR
#define ONIGENC_CODE_TO_MBC(enc, code, buf)
struct rb_encoding_entry * list
#define IS_POSIX_BRACKET_ALL_RANGE(option)
static NameEntry * name_find(regex_t *reg, const UChar *name, const UChar *name_end)
#define ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META
static int not_code_range_buf(OnigEncoding enc, BBuf *bbuf, BBuf **pbuf, ScanEnv *env)
#define IS_SYNTAX_OP2(syn, opm)
#define ONIGENC_CODE_TO_MBC_MAXLEN
static int i_names(UChar *key ARG_UNUSED, NameEntry *e, INamesArg *arg)
#define ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT
static Node * node_new_empty(void)
static st_index_t type_cclass_hash(type_cclass_key *key)
#define ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF
#define ONOFF(v, f, negative)
#define ONIGERR_UNDEFINED_NAME_REFERENCE
static int add_code_range_to_buf(BBuf **pbuf, ScanEnv *env, OnigCodePoint from, OnigCodePoint to)
#define IS_QUANTIFIER_BY_NUMBER(qn)
#define onig_st_add_direct
static void bitset_invert(BitSetRef bs)
#define INIT_SCANENV_MEMNODES_ALLOC_SIZE
static int next_state_val(CClassNode *cc, OnigCodePoint *vs, OnigCodePoint v, int *vs_israw, int v_israw, enum CCVALTYPE intype, enum CCVALTYPE *type, enum CCSTATE *state, ScanEnv *env)
#define ONIG_SYN_OP_ESC_C_CONTROL
int onigenc_with_ascii_strncmp(OnigEncoding enc, const UChar *p, const UChar *end, const UChar *sascii, int n)
#define ONIG_SYN_OP2_QMARK_CAPITAL_P_NAMED_GROUP
int onig_parse_make_tree(Node **root, const UChar *pattern, const UChar *end, regex_t *reg, ScanEnv *env)
int onig_scan_unsigned_number(UChar **src, const UChar *end, OnigEncoding enc)
#define onig_st_free_table
#define NSTRING_SET_RAW(node)
#define ONIG_SYN_OP2_OPTION_RUBY
#define ONIGERR_END_PATTERN_AT_META
#define BIT_STATUS_BITS_NUM
static Node * node_new_backref(int back_num, int *backrefs, int by_name, int exist_level, int nest_level, ScanEnv *env)
#define ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS
static Node * node_new_enclose_memory(OnigOptionType option, int is_named)
#define ONIGERR_INVALID_CODE_POINT_VALUE
#define ANCHOR_LOOK_BEHIND
#define ONIGERR_INVALID_CHAR_IN_GROUP_NAME
void onig_strcpy(UChar *dest, const UChar *src, const UChar *end)
#define ONIG_SYN_OP_ESC_D_DIGIT
static int next_state_class(CClassNode *cc, OnigCodePoint *vs, enum CCVALTYPE *type, enum CCSTATE *state, ScanEnv *env)
#define POSIX_BRACKET_NAME_MIN_LEN
#define ONIGERR_META_CODE_SYNTAX
static void UNKNOWN_ESC_WARN(ScanEnv *env, int c)
BitStatusType bt_mem_start
#define ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP
#define ONIGERR_TOO_MANY_MULTI_BYTE_RANGES
#define ONIGENC_CTYPE_PRINT
#define IS_MC_ESC_CODE(code, syn)
#define ANCHOR_WORD_BOUND
#define ONIGENC_CODE_RANGE_FROM(range, i)
static int code_exist_check(OnigCodePoint c, UChar *from, UChar *end, int ignore_escaped, ScanEnv *env)
#define ONIGENC_APPLY_ALL_CASE_FOLD(enc, case_fold_flag, f, arg)
int onig_renumber_name_table(regex_t *reg, GroupNumRemap *map)
static int add_ctype_to_cc(CClassNode *cc, int ctype, int not, int char_prop, ScanEnv *env)
#define ONIG_SYN_ALLOW_INVALID_INTERVAL
#define ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE
static Node * node_new_str(const UChar *s, const UChar *end)
#define ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP
const OnigSyntaxType * OnigDefaultSyntax
#define ONIG_SYN_OP_ESC_BRACE_INTERVAL
#define IS_ASCII_RANGE(option)
static Node * node_new_anychar(void)
void rb_warn(const char *fmt,...)
#define SET_NTYPE(node, ntype)
#define ONIG_SYN_OP_ESC_LPAREN_SUBEXP
static Node * str_node_split_last_char(StrNode *sn, OnigEncoding enc)
static int add_ctype_to_cc_by_range(CClassNode *cc, int ctype ARG_UNUSED, int not, ScanEnv *env, OnigCodePoint sb_out, const OnigCodePoint mbr[])
#define ONIG_SYN_OP2_QMARK_LPAREN_CONDITION
static void CC_DUP_WARN(ScanEnv *env)
static int parse_exp(Node **np, OnigToken *tok, int term, UChar **src, UChar *end, ScanEnv *env)
#define ONIGENC_IS_CODE_XDIGIT(enc, code)
static int i_renumber_name(UChar *key ARG_UNUSED, NameEntry *e, GroupNumRemap *map)
void onig_vsnprintf_with_pattern(UChar buf[], int bufsize, OnigEncoding enc, UChar *pat, UChar *pat_end, const UChar *fmt, va_list args)
static int parse_char_class(Node **np, OnigToken *tok, UChar **src, UChar *end, ScanEnv *env)
#define ONIGERR_INVALID_CHAR_PROPERTY_NAME
BitStatusType capture_history
static int type_cclass_cmp(type_cclass_key *x, type_cclass_key *y)
#define ONIGERR_PARSER_BUG
static st_index_t str_end_hash(st_data_t xp)
Node * onig_node_new_anchor(int type)
#define ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT