mirror of
https://github.com/rizonesoft/Notepad3.git
synced 2026-06-14 21:09:05 +08:00
+fix: sync with current Oniguruma v7.0(ß) dev
This commit is contained in:
parent
6bb5601888
commit
2668ca66e3
@ -3249,27 +3249,34 @@ enum GetValue {
|
||||
GET_VALUE_FOUND = 1
|
||||
};
|
||||
|
||||
#define MAX_NEST_LEVEL_GET_TREE_TAIL_LITERAL 16
|
||||
|
||||
static int
|
||||
get_tree_tail_literal(Node* node, Node** rnode, regex_t* reg)
|
||||
get_tree_tail_literal(Node* node, Node** rnode, regex_t* reg, int nest_level)
|
||||
{
|
||||
int r;
|
||||
|
||||
nest_level++;
|
||||
if (nest_level >= MAX_NEST_LEVEL_GET_TREE_TAIL_LITERAL) {
|
||||
return GET_VALUE_NONE;
|
||||
}
|
||||
|
||||
switch (NODE_TYPE(node)) {
|
||||
case NODE_LIST:
|
||||
if (IS_NULL(NODE_CDR(node))) {
|
||||
r = get_tree_tail_literal(NODE_CAR(node), rnode, reg);
|
||||
r = get_tree_tail_literal(NODE_CAR(node), rnode, reg, nest_level);
|
||||
}
|
||||
else {
|
||||
r = get_tree_tail_literal(NODE_CDR(node), rnode, reg);
|
||||
r = get_tree_tail_literal(NODE_CDR(node), rnode, reg, nest_level);
|
||||
if (r == GET_VALUE_IGNORE) {
|
||||
r = get_tree_tail_literal(NODE_CAR(node), rnode, reg);
|
||||
r = get_tree_tail_literal(NODE_CAR(node), rnode, reg, nest_level);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
#ifdef USE_CALL
|
||||
case NODE_CALL:
|
||||
r = get_tree_tail_literal(NODE_BODY(node), rnode, reg);
|
||||
r = get_tree_tail_literal(NODE_BODY(node), rnode, reg, nest_level);
|
||||
break;
|
||||
#endif
|
||||
|
||||
@ -3307,7 +3314,7 @@ get_tree_tail_literal(Node* node, Node** rnode, regex_t* reg)
|
||||
{
|
||||
QuantNode* qn = QUANT_(node);
|
||||
if (qn->lower != 0) {
|
||||
r = get_tree_tail_literal(NODE_BODY(node), rnode, reg);
|
||||
r = get_tree_tail_literal(NODE_BODY(node), rnode, reg, nest_level);
|
||||
}
|
||||
else
|
||||
r = GET_VALUE_NONE;
|
||||
@ -3323,12 +3330,12 @@ get_tree_tail_literal(Node* node, Node** rnode, regex_t* reg)
|
||||
r = GET_VALUE_NONE;
|
||||
else {
|
||||
NODE_STATUS_ADD(node, MARK1);
|
||||
r = get_tree_tail_literal(NODE_BODY(node), rnode, reg);
|
||||
r = get_tree_tail_literal(NODE_BODY(node), rnode, reg, nest_level);
|
||||
NODE_STATUS_REMOVE(node, MARK1);
|
||||
}
|
||||
}
|
||||
else {
|
||||
r = get_tree_tail_literal(NODE_BODY(node), rnode, reg);
|
||||
r = get_tree_tail_literal(NODE_BODY(node), rnode, reg, nest_level);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -4585,7 +4592,7 @@ tune_look_behind(Node* node, regex_t* reg, int state, ParseEnv* env)
|
||||
if (IS_NULL(an->lead_node)) {
|
||||
an->char_min_len = ci.min;
|
||||
an->char_max_len = ci.max;
|
||||
r = get_tree_tail_literal(body, &tail, reg);
|
||||
r = get_tree_tail_literal(body, &tail, reg, 0);
|
||||
if (r == GET_VALUE_FOUND) {
|
||||
r = onig_node_copy(&(an->lead_node), tail);
|
||||
if (r != 0) return r;
|
||||
@ -8079,8 +8086,12 @@ onig_detect_can_be_slow_pattern(const UChar* pattern,
|
||||
if (count.max_empty_check_nest_level > 2)
|
||||
n += count.max_empty_check_nest_level - 2;
|
||||
|
||||
if (count.heavy_element != 0)
|
||||
n += count.heavy_element << 8;
|
||||
if (count.heavy_element != 0) {
|
||||
if (count.heavy_element < 0x10000)
|
||||
n += count.heavy_element << 8;
|
||||
else
|
||||
n += count.heavy_element;
|
||||
}
|
||||
|
||||
r = n;
|
||||
|
||||
|
||||
@ -50,7 +50,6 @@ const OnigUChar* const _CRLF = "\r\n\0";
|
||||
#define IS_LF_CODE(enc, s, end) (ONIGENC_MBC_TO_CODE((enc), (s), (end)) == NEWLINE_CODE)
|
||||
#define IS_CR_CODE(enc, s, end) (ONIGENC_MBC_TO_CODE((enc), (s), (end)) == CARRIAGE_RET)
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#define CHECK_INTERRUPT_IN_MATCH
|
||||
|
||||
#define STACK_MEM_START(reg, idx) \
|
||||
@ -3689,11 +3688,11 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||
UChar* sprev = (UChar* )onigenc_get_prev_char_head(encode, str, s);
|
||||
if (ONIGENC_IS_MBC_NEWLINE(encode, sprev, end)) {
|
||||
if (!IS_CRLF_NEWLINE(encode) || IS_LF_CODE(encode, sprev, end)) {
|
||||
INC_OP;
|
||||
JUMP_OUT;
|
||||
INC_OP;
|
||||
JUMP_OUT;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
goto fail;
|
||||
|
||||
CASE_OP(END_LINE)
|
||||
@ -3711,9 +3710,9 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||
}
|
||||
else if (ONIGENC_IS_MBC_NEWLINE(encode, s, end)) {
|
||||
if (!IS_CRLF_NEWLINE(encode) || IS_CR_CODE(encode, s, end)) {
|
||||
INC_OP;
|
||||
JUMP_OUT;
|
||||
}
|
||||
INC_OP;
|
||||
JUMP_OUT;
|
||||
}
|
||||
}
|
||||
#ifdef USE_CRNL_AS_LINE_TERMINATOR
|
||||
else if (ONIGENC_IS_MBC_CRNL(encode, s, end)) {
|
||||
@ -5262,7 +5261,7 @@ forward_search(regex_t* reg, const UChar* str, const UChar* end, UChar* start,
|
||||
prev = onigenc_get_prev_char_head(reg->enc, (pprev ? pprev : str), p);
|
||||
if (IS_NOT_NULL(prev)) {
|
||||
if (!ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end)) {
|
||||
goto retry_gate;
|
||||
goto retry_gate;
|
||||
} else if (IS_CRLF_NEWLINE(reg->enc) && !IS_LF_CODE(reg->enc, prev, end)) {
|
||||
goto retry_gate;
|
||||
}
|
||||
@ -5363,14 +5362,14 @@ backward_search(regex_t* reg, const UChar* str, const UChar* end, UChar* s,
|
||||
prev = onigenc_get_prev_char_head(reg->enc, str, p);
|
||||
if (IS_NOT_NULL(prev)) {
|
||||
if (!ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end)) {
|
||||
p = prev;
|
||||
goto retry;
|
||||
p = prev;
|
||||
goto retry;
|
||||
} else if (IS_CRLF_NEWLINE(reg->enc) && !IS_LF_CODE(reg->enc, prev, end)) {
|
||||
p = prev;
|
||||
goto retry;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case ANCR_END_LINE:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user