зеркало из https://github.com/github/ruby.git
* regcomp.c: Merge Onigmo 5.14.1 25a8a69fc05ae3b56a09.
this includes Support for Unicode 7.0 [Bug #9092]. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46831 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
bb51e69af0
Коммит
64c81e40d4
|
@ -1,3 +1,8 @@
|
||||||
|
Wed Jul 16 12:25:39 2014 NARUSE, Yui <naruse@ruby-lang.org>
|
||||||
|
|
||||||
|
* regcomp.c: Merge Onigmo 5.14.1 25a8a69fc05ae3b56a09.
|
||||||
|
this includes Support for Unicode 7.0 [Bug #9092].
|
||||||
|
|
||||||
Tue Jul 15 23:59:27 2014 Jared Jennings <jared.jennings.ctr@us.af.mil>
|
Tue Jul 15 23:59:27 2014 Jared Jennings <jared.jennings.ctr@us.af.mil>
|
||||||
|
|
||||||
* ext/digest: make built-in digest function implementations
|
* ext/digest: make built-in digest function implementations
|
||||||
|
|
|
@ -86,7 +86,7 @@ class CaseFolding
|
||||||
hash = "onigenc_unicode_#{key}_hash"
|
hash = "onigenc_unicode_#{key}_hash"
|
||||||
lookup = "onigenc_unicode_#{key}_lookup"
|
lookup = "onigenc_unicode_#{key}_lookup"
|
||||||
arity = Array(data[0][0]).size
|
arity = Array(data[0][0]).size
|
||||||
gperf = %W"gperf -7 -k#{[*1..(arity*3)].join(",")} -F,-1 -c -j1 -i1 -t -T -E -C -H #{hash} -N #{lookup}"
|
gperf = %W"gperf -7 -k#{[*1..(arity*3)].join(",")} -F,-1 -c -j1 -i1 -t -T -E -C -H #{hash} -N #{lookup} -n"
|
||||||
argname = arity > 1 ? "codes" : "code"
|
argname = arity > 1 ? "codes" : "code"
|
||||||
argdecl = "const OnigCodePoint #{arity > 1 ? "*": ""}#{argname}"
|
argdecl = "const OnigCodePoint #{arity > 1 ? "*": ""}#{argname}"
|
||||||
n = 7
|
n = 7
|
||||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
10517
enc/unicode/name2ctype.h
10517
enc/unicode/name2ctype.h
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -5,7 +5,7 @@
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
* Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
||||||
* Copyright (c) 2011-2013 K.Takata <kentkt AT csc DOT jp>
|
* Copyright (c) 2011-2014 K.Takata <kentkt AT csc DOT jp>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -39,8 +39,8 @@ extern "C" {
|
||||||
|
|
||||||
#define ONIGURUMA
|
#define ONIGURUMA
|
||||||
#define ONIGURUMA_VERSION_MAJOR 5
|
#define ONIGURUMA_VERSION_MAJOR 5
|
||||||
#define ONIGURUMA_VERSION_MINOR 13
|
#define ONIGURUMA_VERSION_MINOR 14
|
||||||
#define ONIGURUMA_VERSION_TEENY 5
|
#define ONIGURUMA_VERSION_TEENY 1
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
# ifndef HAVE_PROTOTYPES
|
# ifndef HAVE_PROTOTYPES
|
||||||
|
@ -338,6 +338,7 @@ int onigenc_str_bytelen_null P_((OnigEncoding enc, const OnigUChar* p));
|
||||||
/* config parameters */
|
/* config parameters */
|
||||||
#define ONIG_NREGION 10
|
#define ONIG_NREGION 10
|
||||||
#define ONIG_MAX_BACKREF_NUM 1000
|
#define ONIG_MAX_BACKREF_NUM 1000
|
||||||
|
#define ONIG_MAX_CAPTURE_GROUP_NUM 32767
|
||||||
#define ONIG_MAX_REPEAT_NUM 100000
|
#define ONIG_MAX_REPEAT_NUM 100000
|
||||||
#define ONIG_MAX_MULTI_BYTE_RANGES_NUM 10000
|
#define ONIG_MAX_MULTI_BYTE_RANGES_NUM 10000
|
||||||
/* constants */
|
/* constants */
|
||||||
|
@ -369,7 +370,9 @@ typedef unsigned int OnigOptionType;
|
||||||
#define ONIG_OPTION_WORD_BOUND_ALL_RANGE (ONIG_OPTION_POSIX_BRACKET_ALL_RANGE << 1)
|
#define ONIG_OPTION_WORD_BOUND_ALL_RANGE (ONIG_OPTION_POSIX_BRACKET_ALL_RANGE << 1)
|
||||||
/* options (newline) */
|
/* options (newline) */
|
||||||
#define ONIG_OPTION_NEWLINE_CRLF (ONIG_OPTION_WORD_BOUND_ALL_RANGE << 1)
|
#define ONIG_OPTION_NEWLINE_CRLF (ONIG_OPTION_WORD_BOUND_ALL_RANGE << 1)
|
||||||
#define ONIG_OPTION_MAXBIT ONIG_OPTION_NEWLINE_CRLF /* limit */
|
#define ONIG_OPTION_NOTBOS (ONIG_OPTION_NEWLINE_CRLF << 1)
|
||||||
|
#define ONIG_OPTION_NOTEOS (ONIG_OPTION_NOTBOS << 1)
|
||||||
|
#define ONIG_OPTION_MAXBIT ONIG_OPTION_NOTEOS /* limit */
|
||||||
|
|
||||||
#define ONIG_OPTION_ON(options,regopt) ((options) |= (regopt))
|
#define ONIG_OPTION_ON(options,regopt) ((options) |= (regopt))
|
||||||
#define ONIG_OPTION_OFF(options,regopt) ((options) &= ~(regopt))
|
#define ONIG_OPTION_OFF(options,regopt) ((options) &= ~(regopt))
|
||||||
|
@ -582,6 +585,7 @@ ONIG_EXTERN const OnigSyntaxType* OnigDefaultSyntax;
|
||||||
#define ONIGERR_NEVER_ENDING_RECURSION -221
|
#define ONIGERR_NEVER_ENDING_RECURSION -221
|
||||||
#define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY -222
|
#define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY -222
|
||||||
#define ONIGERR_INVALID_CHAR_PROPERTY_NAME -223
|
#define ONIGERR_INVALID_CHAR_PROPERTY_NAME -223
|
||||||
|
#define ONIGERR_TOO_MANY_CAPTURE_GROUPS -224
|
||||||
#define ONIGERR_INVALID_CODE_POINT_VALUE -400
|
#define ONIGERR_INVALID_CODE_POINT_VALUE -400
|
||||||
#define ONIGERR_INVALID_WIDE_CHAR_VALUE -400
|
#define ONIGERR_INVALID_WIDE_CHAR_VALUE -400
|
||||||
#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE -401
|
#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE -401
|
||||||
|
@ -708,7 +712,7 @@ typedef struct {
|
||||||
int num_of_elements;
|
int num_of_elements;
|
||||||
OnigEncoding pattern_enc;
|
OnigEncoding pattern_enc;
|
||||||
OnigEncoding target_enc;
|
OnigEncoding target_enc;
|
||||||
OnigSyntaxType* syntax;
|
const OnigSyntaxType* syntax;
|
||||||
OnigOptionType option;
|
OnigOptionType option;
|
||||||
OnigCaseFoldType case_fold_flag;
|
OnigCaseFoldType case_fold_flag;
|
||||||
} OnigCompileInfo;
|
} OnigCompileInfo;
|
||||||
|
|
114
regcomp.c
114
regcomp.c
|
@ -3,7 +3,7 @@
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
* Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
||||||
* Copyright (c) 2011-2013 K.Takata <kentkt AT csc DOT jp>
|
* Copyright (c) 2011-2014 K.Takata <kentkt AT csc DOT jp>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -30,6 +30,15 @@
|
||||||
|
|
||||||
#include "regparse.h"
|
#include "regparse.h"
|
||||||
|
|
||||||
|
#if defined(USE_MULTI_THREAD_SYSTEM) \
|
||||||
|
&& defined(USE_DEFAULT_MULTI_THREAD_SYSTEM)
|
||||||
|
#ifdef _WIN32
|
||||||
|
CRITICAL_SECTION gOnigMutex;
|
||||||
|
#else
|
||||||
|
pthread_mutex_t gOnigMutex;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
OnigCaseFoldType OnigDefaultCaseFoldFlag = ONIGENC_CASE_FOLD_MIN;
|
OnigCaseFoldType OnigDefaultCaseFoldFlag = ONIGENC_CASE_FOLD_MIN;
|
||||||
|
|
||||||
extern OnigCaseFoldType
|
extern OnigCaseFoldType
|
||||||
|
@ -2669,22 +2678,22 @@ is_not_included(Node* x, Node* y, regex_t* reg)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NT_CCLASS:
|
case NT_CCLASS:
|
||||||
{
|
{
|
||||||
CClassNode* cc = NCCLASS(y);
|
CClassNode* cc = NCCLASS(y);
|
||||||
|
|
||||||
code = ONIGENC_MBC_TO_CODE(reg->enc, xs->s,
|
code = ONIGENC_MBC_TO_CODE(reg->enc, xs->s,
|
||||||
xs->s + ONIGENC_MBC_MAXLEN(reg->enc));
|
xs->s + ONIGENC_MBC_MAXLEN(reg->enc));
|
||||||
return (onig_is_code_in_cc(reg->enc, code, cc) != 0 ? 0 : 1);
|
return (onig_is_code_in_cc(reg->enc, code, cc) != 0 ? 0 : 1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NT_STR:
|
case NT_STR:
|
||||||
{
|
{
|
||||||
UChar *q;
|
UChar *q;
|
||||||
StrNode* ys = NSTR(y);
|
StrNode* ys = NSTR(y);
|
||||||
len = NSTRING_LEN(x);
|
len = NSTRING_LEN(x);
|
||||||
if (len > NSTRING_LEN(y)) len = NSTRING_LEN(y);
|
if (len > NSTRING_LEN(y)) len = NSTRING_LEN(y);
|
||||||
if (NSTRING_IS_AMBIG(x) || NSTRING_IS_AMBIG(y)) {
|
if (NSTRING_IS_AMBIG(x) || NSTRING_IS_AMBIG(y)) {
|
||||||
/* tiny version */
|
/* tiny version */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -2697,7 +2706,7 @@ is_not_included(Node* x, Node* y, regex_t* reg)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -3442,7 +3451,7 @@ expand_case_fold_string_alt(int item_num, OnigCaseFoldCodeItem items[],
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (items[i].code_len != 1) {
|
if (items[i].code_len != 1) {
|
||||||
varclen = 1;
|
varclen |= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3493,29 +3502,29 @@ expand_case_fold_string_alt(int item_num, OnigCaseFoldCodeItem items[],
|
||||||
UChar *q = p + items[i].byte_len;
|
UChar *q = p + items[i].byte_len;
|
||||||
|
|
||||||
if (q < end) {
|
if (q < end) {
|
||||||
r = expand_case_fold_make_rem_string(&rem, q, end, reg);
|
r = expand_case_fold_make_rem_string(&rem, q, end, reg);
|
||||||
if (r != 0) {
|
if (r != 0) {
|
||||||
onig_node_free(an);
|
onig_node_free(an);
|
||||||
goto mem_err2;
|
goto mem_err2;
|
||||||
}
|
}
|
||||||
|
|
||||||
xnode = onig_node_list_add(NULL_NODE, snode);
|
xnode = onig_node_list_add(NULL_NODE, snode);
|
||||||
if (IS_NULL(xnode)) {
|
if (IS_NULL(xnode)) {
|
||||||
onig_node_free(an);
|
onig_node_free(an);
|
||||||
onig_node_free(rem);
|
onig_node_free(rem);
|
||||||
goto mem_err2;
|
goto mem_err2;
|
||||||
}
|
}
|
||||||
if (IS_NULL(onig_node_list_add(xnode, rem))) {
|
if (IS_NULL(onig_node_list_add(xnode, rem))) {
|
||||||
onig_node_free(an);
|
onig_node_free(an);
|
||||||
onig_node_free(xnode);
|
onig_node_free(xnode);
|
||||||
onig_node_free(rem);
|
onig_node_free(rem);
|
||||||
goto mem_err;
|
goto mem_err;
|
||||||
}
|
}
|
||||||
|
|
||||||
NCAR(an) = xnode;
|
NCAR(an) = xnode;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
NCAR(an) = snode;
|
NCAR(an) = snode;
|
||||||
}
|
}
|
||||||
|
|
||||||
NCDR(var_anode) = an;
|
NCDR(var_anode) = an;
|
||||||
|
@ -3598,7 +3607,10 @@ expand_case_fold_string(Node* node, regex_t* reg)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
alt_num *= (n + 1);
|
alt_num *= (n + 1);
|
||||||
if (alt_num > THRESHOLD_CASE_FOLD_ALT_FOR_EXPANSION) break;
|
if (alt_num > THRESHOLD_CASE_FOLD_ALT_FOR_EXPANSION) {
|
||||||
|
varlen = 1; /* Assume that expanded strings are variable length. */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (IS_NULL(root) && IS_NOT_NULL(prev_node)) {
|
if (IS_NULL(root) && IS_NOT_NULL(prev_node)) {
|
||||||
top_root = root = onig_node_list_add(NULL_NODE, prev_node);
|
top_root = root = onig_node_list_add(NULL_NODE, prev_node);
|
||||||
|
@ -5448,14 +5460,14 @@ print_distance_range(FILE* f, OnigDistance a, OnigDistance b)
|
||||||
if (a == ONIG_INFINITE_DISTANCE)
|
if (a == ONIG_INFINITE_DISTANCE)
|
||||||
fputs("inf", f);
|
fputs("inf", f);
|
||||||
else
|
else
|
||||||
fprintf(f, "(%"PRIuSIZE")", a);
|
fprintf(f, "(%"PRIuPTR")", a);
|
||||||
|
|
||||||
fputs("-", f);
|
fputs("-", f);
|
||||||
|
|
||||||
if (b == ONIG_INFINITE_DISTANCE)
|
if (b == ONIG_INFINITE_DISTANCE)
|
||||||
fputs("inf", f);
|
fputs("inf", f);
|
||||||
else
|
else
|
||||||
fprintf(f, "(%"PRIuSIZE")", b);
|
fprintf(f, "(%"PRIuPTR")", b);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -5532,7 +5544,7 @@ print_optimize_info(FILE* f, regex_t* reg)
|
||||||
for (p = reg->exact; p < reg->exact_end; p++) {
|
for (p = reg->exact; p < reg->exact_end; p++) {
|
||||||
fputc(*p, f);
|
fputc(*p, f);
|
||||||
}
|
}
|
||||||
fprintf(f, "]: length: %ld\n", (reg->exact_end - reg->exact));
|
fprintf(f, "]: length: %"PRIdPTR"\n", (reg->exact_end - reg->exact));
|
||||||
}
|
}
|
||||||
else if (reg->optimize & ONIG_OPTIMIZE_MAP) {
|
else if (reg->optimize & ONIG_OPTIMIZE_MAP) {
|
||||||
int c, i, n = 0;
|
int c, i, n = 0;
|
||||||
|
@ -6394,7 +6406,7 @@ onig_print_compiled_byte_code(FILE* f, UChar* bp, UChar* bpend, UChar** nextp,
|
||||||
|
|
||||||
GET_POINTER_INC(cc, bp);
|
GET_POINTER_INC(cc, bp);
|
||||||
n = bitset_on_num(cc->bs);
|
n = bitset_on_num(cc->bs);
|
||||||
fprintf(f, ":%"PRIuPTR":%d", (uintptr_t)cc, n);
|
fprintf(f, ":%"PRIuPTR":%d", (uintptr_t )cc, n);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -6530,9 +6542,9 @@ print_indent_tree(FILE* f, Node* node, int indent)
|
||||||
case NT_LIST:
|
case NT_LIST:
|
||||||
case NT_ALT:
|
case NT_ALT:
|
||||||
if (NTYPE(node) == NT_LIST)
|
if (NTYPE(node) == NT_LIST)
|
||||||
fprintf(f, "<list:%"PRIxPTR">\n", (intptr_t)node);
|
fprintf(f, "<list:%"PRIxPTR">\n", (intptr_t )node);
|
||||||
else
|
else
|
||||||
fprintf(f, "<alt:%"PRIxPTR">\n", (intptr_t)node);
|
fprintf(f, "<alt:%"PRIxPTR">\n", (intptr_t )node);
|
||||||
|
|
||||||
print_indent_tree(f, NCAR(node), indent + add);
|
print_indent_tree(f, NCAR(node), indent + add);
|
||||||
while (IS_NOT_NULL(node = NCDR(node))) {
|
while (IS_NOT_NULL(node = NCDR(node))) {
|
||||||
|
@ -6546,7 +6558,7 @@ print_indent_tree(FILE* f, Node* node, int indent)
|
||||||
|
|
||||||
case NT_STR:
|
case NT_STR:
|
||||||
fprintf(f, "<string%s:%"PRIxPTR">",
|
fprintf(f, "<string%s:%"PRIxPTR">",
|
||||||
(NSTRING_IS_RAW(node) ? "-raw" : ""), (intptr_t)node);
|
(NSTRING_IS_RAW(node) ? "-raw" : ""), (intptr_t )node);
|
||||||
for (p = NSTR(node)->s; p < NSTR(node)->end; p++) {
|
for (p = NSTR(node)->s; p < NSTR(node)->end; p++) {
|
||||||
if (*p >= 0x20 && *p < 0x7f)
|
if (*p >= 0x20 && *p < 0x7f)
|
||||||
fputc(*p, f);
|
fputc(*p, f);
|
||||||
|
@ -6557,7 +6569,7 @@ print_indent_tree(FILE* f, Node* node, int indent)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NT_CCLASS:
|
case NT_CCLASS:
|
||||||
fprintf(f, "<cclass:%"PRIxPTR">", (intptr_t)node);
|
fprintf(f, "<cclass:%"PRIxPTR">", (intptr_t )node);
|
||||||
if (IS_NCCLASS_NOT(NCCLASS(node))) fputs(" not", f);
|
if (IS_NCCLASS_NOT(NCCLASS(node))) fputs(" not", f);
|
||||||
if (NCCLASS(node)->mbuf) {
|
if (NCCLASS(node)->mbuf) {
|
||||||
BBuf* bbuf = NCCLASS(node)->mbuf;
|
BBuf* bbuf = NCCLASS(node)->mbuf;
|
||||||
|
@ -6569,7 +6581,7 @@ print_indent_tree(FILE* f, Node* node, int indent)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NT_CTYPE:
|
case NT_CTYPE:
|
||||||
fprintf(f, "<ctype:%"PRIxPTR"> ", (intptr_t)node);
|
fprintf(f, "<ctype:%"PRIxPTR"> ", (intptr_t )node);
|
||||||
switch (NCTYPE(node)->ctype) {
|
switch (NCTYPE(node)->ctype) {
|
||||||
case ONIGENC_CTYPE_WORD:
|
case ONIGENC_CTYPE_WORD:
|
||||||
if (NCTYPE(node)->not != 0)
|
if (NCTYPE(node)->not != 0)
|
||||||
|
@ -6585,11 +6597,11 @@ print_indent_tree(FILE* f, Node* node, int indent)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NT_CANY:
|
case NT_CANY:
|
||||||
fprintf(f, "<anychar:%"PRIxPTR">", (intptr_t)node);
|
fprintf(f, "<anychar:%"PRIxPTR">", (intptr_t )node);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NT_ANCHOR:
|
case NT_ANCHOR:
|
||||||
fprintf(f, "<anchor:%"PRIxPTR"> ", (intptr_t)node);
|
fprintf(f, "<anchor:%"PRIxPTR"> ", (intptr_t )node);
|
||||||
switch (NANCHOR(node)->type) {
|
switch (NANCHOR(node)->type) {
|
||||||
case ANCHOR_BEGIN_BUF: fputs("begin buf", f); break;
|
case ANCHOR_BEGIN_BUF: fputs("begin buf", f); break;
|
||||||
case ANCHOR_END_BUF: fputs("end buf", f); break;
|
case ANCHOR_END_BUF: fputs("end buf", f); break;
|
||||||
|
@ -6622,7 +6634,7 @@ print_indent_tree(FILE* f, Node* node, int indent)
|
||||||
int* p;
|
int* p;
|
||||||
BRefNode* br = NBREF(node);
|
BRefNode* br = NBREF(node);
|
||||||
p = BACKREFS_P(br);
|
p = BACKREFS_P(br);
|
||||||
fprintf(f, "<backref:%"PRIxPTR">", (intptr_t)node);
|
fprintf(f, "<backref:%"PRIxPTR">", (intptr_t )node);
|
||||||
for (i = 0; i < br->back_num; i++) {
|
for (i = 0; i < br->back_num; i++) {
|
||||||
if (i > 0) fputs(", ", f);
|
if (i > 0) fputs(", ", f);
|
||||||
fprintf(f, "%d", p[i]);
|
fprintf(f, "%d", p[i]);
|
||||||
|
@ -6634,21 +6646,21 @@ print_indent_tree(FILE* f, Node* node, int indent)
|
||||||
case NT_CALL:
|
case NT_CALL:
|
||||||
{
|
{
|
||||||
CallNode* cn = NCALL(node);
|
CallNode* cn = NCALL(node);
|
||||||
fprintf(f, "<call:%"PRIxPTR">", (intptr_t)node);
|
fprintf(f, "<call:%"PRIxPTR">", (intptr_t )node);
|
||||||
p_string(f, cn->name_end - cn->name, cn->name);
|
p_string(f, cn->name_end - cn->name, cn->name);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case NT_QTFR:
|
case NT_QTFR:
|
||||||
fprintf(f, "<quantifier:%"PRIxPTR">{%d,%d}%s\n", (intptr_t)node,
|
fprintf(f, "<quantifier:%"PRIxPTR">{%d,%d}%s\n", (intptr_t )node,
|
||||||
NQTFR(node)->lower, NQTFR(node)->upper,
|
NQTFR(node)->lower, NQTFR(node)->upper,
|
||||||
(NQTFR(node)->greedy ? "" : "?"));
|
(NQTFR(node)->greedy ? "" : "?"));
|
||||||
print_indent_tree(f, NQTFR(node)->target, indent + add);
|
print_indent_tree(f, NQTFR(node)->target, indent + add);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NT_ENCLOSE:
|
case NT_ENCLOSE:
|
||||||
fprintf(f, "<enclose:%"PRIxPTR"> ", (intptr_t)node);
|
fprintf(f, "<enclose:%"PRIxPTR"> ", (intptr_t )node);
|
||||||
switch (NENCLOSE(node)->type) {
|
switch (NENCLOSE(node)->type) {
|
||||||
case ENCLOSE_OPTION:
|
case ENCLOSE_OPTION:
|
||||||
fprintf(f, "option:%d", NENCLOSE(node)->option);
|
fprintf(f, "option:%d", NENCLOSE(node)->option);
|
||||||
|
|
1
regenc.h
1
regenc.h
|
@ -108,6 +108,7 @@ typedef struct {
|
||||||
|
|
||||||
#define USE_CRNL_AS_LINE_TERMINATOR
|
#define USE_CRNL_AS_LINE_TERMINATOR
|
||||||
#define USE_UNICODE_PROPERTIES
|
#define USE_UNICODE_PROPERTIES
|
||||||
|
#define USE_UNICODE_AGE_PROPERTIES
|
||||||
/* #define USE_UNICODE_CASE_FOLD_TURKISH_AZERI */
|
/* #define USE_UNICODE_CASE_FOLD_TURKISH_AZERI */
|
||||||
/* #define USE_UNICODE_ALL_LINE_TERMINATORS */ /* see Unicode.org UTS #18 */
|
/* #define USE_UNICODE_ALL_LINE_TERMINATORS */ /* see Unicode.org UTS #18 */
|
||||||
|
|
||||||
|
|
24
regerror.c
24
regerror.c
|
@ -3,7 +3,7 @@
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
* Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
||||||
* Copyright (c) 2011 K.Takata <kentkt AT csc DOT jp>
|
* Copyright (c) 2011-2014 K.Takata <kentkt AT csc DOT jp>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -53,8 +53,6 @@ onig_error_code_to_format(OnigPosition code)
|
||||||
p = "no support in this configuration"; break;
|
p = "no support in this configuration"; break;
|
||||||
case ONIGERR_MEMORY:
|
case ONIGERR_MEMORY:
|
||||||
p = "failed to allocate memory"; break;
|
p = "failed to allocate memory"; break;
|
||||||
case ONIGERR_MATCH_STACK_LIMIT_OVER:
|
|
||||||
p = "match-stack limit over"; break;
|
|
||||||
case ONIGERR_TYPE_BUG:
|
case ONIGERR_TYPE_BUG:
|
||||||
p = "undefined type (bug)"; break;
|
p = "undefined type (bug)"; break;
|
||||||
case ONIGERR_PARSER_BUG:
|
case ONIGERR_PARSER_BUG:
|
||||||
|
@ -65,6 +63,8 @@ onig_error_code_to_format(OnigPosition code)
|
||||||
p = "undefined bytecode (bug)"; break;
|
p = "undefined bytecode (bug)"; break;
|
||||||
case ONIGERR_UNEXPECTED_BYTECODE:
|
case ONIGERR_UNEXPECTED_BYTECODE:
|
||||||
p = "unexpected bytecode (bug)"; break;
|
p = "unexpected bytecode (bug)"; break;
|
||||||
|
case ONIGERR_MATCH_STACK_LIMIT_OVER:
|
||||||
|
p = "match-stack limit over"; break;
|
||||||
case ONIGERR_DEFAULT_ENCODING_IS_NOT_SET:
|
case ONIGERR_DEFAULT_ENCODING_IS_NOT_SET:
|
||||||
p = "default multibyte-encoding is not set"; break;
|
p = "default multibyte-encoding is not set"; break;
|
||||||
case ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR:
|
case ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR:
|
||||||
|
@ -141,14 +141,10 @@ onig_error_code_to_format(OnigPosition code)
|
||||||
#endif
|
#endif
|
||||||
case ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED:
|
case ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED:
|
||||||
p = "numbered backref/call is not allowed. (use name)"; break;
|
p = "numbered backref/call is not allowed. (use name)"; break;
|
||||||
case ONIGERR_TOO_BIG_WIDE_CHAR_VALUE:
|
|
||||||
p = "too big wide-char value"; break;
|
|
||||||
case ONIGERR_TOO_SHORT_DIGITS:
|
case ONIGERR_TOO_SHORT_DIGITS:
|
||||||
p = "too short digits"; break;
|
p = "too short digits"; break;
|
||||||
case ONIGERR_TOO_LONG_WIDE_CHAR_VALUE:
|
case ONIGERR_TOO_LONG_WIDE_CHAR_VALUE:
|
||||||
p = "too long wide-char value"; break;
|
p = "too long wide-char value"; break;
|
||||||
case ONIGERR_INVALID_CODE_POINT_VALUE:
|
|
||||||
p = "invalid code point value"; break;
|
|
||||||
case ONIGERR_EMPTY_GROUP_NAME:
|
case ONIGERR_EMPTY_GROUP_NAME:
|
||||||
p = "group name is empty"; break;
|
p = "group name is empty"; break;
|
||||||
case ONIGERR_INVALID_GROUP_NAME:
|
case ONIGERR_INVALID_GROUP_NAME:
|
||||||
|
@ -173,6 +169,12 @@ onig_error_code_to_format(OnigPosition code)
|
||||||
p = "group number is too big for capture history"; break;
|
p = "group number is too big for capture history"; break;
|
||||||
case ONIGERR_INVALID_CHAR_PROPERTY_NAME:
|
case ONIGERR_INVALID_CHAR_PROPERTY_NAME:
|
||||||
p = "invalid character property name {%n}"; break;
|
p = "invalid character property name {%n}"; break;
|
||||||
|
case ONIGERR_TOO_MANY_CAPTURE_GROUPS:
|
||||||
|
p = "too many capture groups are specified"; break;
|
||||||
|
case ONIGERR_INVALID_CODE_POINT_VALUE:
|
||||||
|
p = "invalid code point value"; break;
|
||||||
|
case ONIGERR_TOO_BIG_WIDE_CHAR_VALUE:
|
||||||
|
p = "too big wide-char value"; break;
|
||||||
case ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION:
|
case ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION:
|
||||||
p = "not supported encoding combination"; break;
|
p = "not supported encoding combination"; break;
|
||||||
case ONIGERR_INVALID_COMBINATION_OF_OPTIONS:
|
case ONIGERR_INVALID_COMBINATION_OF_OPTIONS:
|
||||||
|
@ -307,8 +309,12 @@ onig_error_code_to_str(s, code, va_alist)
|
||||||
|
|
||||||
default:
|
default:
|
||||||
q = onig_error_code_to_format(code);
|
q = onig_error_code_to_format(code);
|
||||||
len = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, q);
|
if (q) {
|
||||||
xmemcpy(s, q, len);
|
len = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, q);
|
||||||
|
xmemcpy(s, q, len);
|
||||||
|
} else {
|
||||||
|
len = 0;
|
||||||
|
}
|
||||||
s[len] = '\0';
|
s[len] = '\0';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
81
regexec.c
81
regexec.c
|
@ -3,7 +3,7 @@
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
* Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
||||||
* Copyright (c) 2011-2013 K.Takata <kentkt AT csc DOT jp>
|
* Copyright (c) 2011-2014 K.Takata <kentkt AT csc DOT jp>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -444,9 +444,26 @@ onig_region_copy(OnigRegion* to, OnigRegion* from)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define STACK_INIT(alloc_addr, ptr_num, stack_num) do {\
|
#define MAX_PTR_NUM 100
|
||||||
if (msa->stack_p) {\
|
|
||||||
|
#define STACK_INIT(alloc_addr, heap_addr, ptr_num, stack_num) do {\
|
||||||
|
if (ptr_num > MAX_PTR_NUM) {\
|
||||||
|
alloc_addr = (char* )xmalloc(sizeof(OnigStackIndex) * (ptr_num));\
|
||||||
|
heap_addr = alloc_addr;\
|
||||||
|
if (msa->stack_p) {\
|
||||||
|
stk_alloc = (OnigStackType* )(msa->stack_p);\
|
||||||
|
stk_base = stk_alloc;\
|
||||||
|
stk = stk_base;\
|
||||||
|
stk_end = stk_base + msa->stack_n;\
|
||||||
|
} else {\
|
||||||
|
stk_alloc = (OnigStackType* )xalloca(sizeof(OnigStackType) * (stack_num));\
|
||||||
|
stk_base = stk_alloc;\
|
||||||
|
stk = stk_base;\
|
||||||
|
stk_end = stk_base + (stack_num);\
|
||||||
|
}\
|
||||||
|
} else if (msa->stack_p) {\
|
||||||
alloc_addr = (char* )xalloca(sizeof(OnigStackIndex) * (ptr_num));\
|
alloc_addr = (char* )xalloca(sizeof(OnigStackIndex) * (ptr_num));\
|
||||||
|
heap_addr = NULL;\
|
||||||
stk_alloc = (OnigStackType* )(msa->stack_p);\
|
stk_alloc = (OnigStackType* )(msa->stack_p);\
|
||||||
stk_base = stk_alloc;\
|
stk_base = stk_alloc;\
|
||||||
stk = stk_base;\
|
stk = stk_base;\
|
||||||
|
@ -455,6 +472,7 @@ onig_region_copy(OnigRegion* to, OnigRegion* from)
|
||||||
else {\
|
else {\
|
||||||
alloc_addr = (char* )xalloca(sizeof(OnigStackIndex) * (ptr_num)\
|
alloc_addr = (char* )xalloca(sizeof(OnigStackIndex) * (ptr_num)\
|
||||||
+ sizeof(OnigStackType) * (stack_num));\
|
+ sizeof(OnigStackType) * (stack_num));\
|
||||||
|
heap_addr = NULL;\
|
||||||
stk_alloc = (OnigStackType* )(alloc_addr + sizeof(OnigStackIndex) * (ptr_num));\
|
stk_alloc = (OnigStackType* )(alloc_addr + sizeof(OnigStackIndex) * (ptr_num));\
|
||||||
stk_base = stk_alloc;\
|
stk_base = stk_alloc;\
|
||||||
stk = stk_base;\
|
stk = stk_base;\
|
||||||
|
@ -529,7 +547,11 @@ stack_double(OnigStackType** arg_stk_base, OnigStackType** arg_stk_end,
|
||||||
#define STACK_ENSURE(n) do {\
|
#define STACK_ENSURE(n) do {\
|
||||||
if (stk_end - stk < (n)) {\
|
if (stk_end - stk < (n)) {\
|
||||||
int r = stack_double(&stk_base, &stk_end, &stk, stk_alloc, msa);\
|
int r = stack_double(&stk_base, &stk_end, &stk, stk_alloc, msa);\
|
||||||
if (r != 0) { STACK_SAVE; return r; } \
|
if (r != 0) {\
|
||||||
|
STACK_SAVE;\
|
||||||
|
if (xmalloc_base) xfree(xmalloc_base);\
|
||||||
|
return r;\
|
||||||
|
}\
|
||||||
}\
|
}\
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
|
@ -1299,9 +1321,6 @@ typedef struct {
|
||||||
regoff_t rm_eo;
|
regoff_t rm_eo;
|
||||||
} posix_regmatch_t;
|
} posix_regmatch_t;
|
||||||
|
|
||||||
void onig_print_compiled_byte_code(FILE* f, UChar* bp, UChar* bpend, UChar** nextp,
|
|
||||||
OnigEncoding enc);
|
|
||||||
|
|
||||||
/* match data(str - end) from position (sstart). */
|
/* match data(str - end) from position (sstart). */
|
||||||
/* if sstart == str then set sprev to NULL. */
|
/* if sstart == str then set sprev to NULL. */
|
||||||
static OnigPosition
|
static OnigPosition
|
||||||
|
@ -1325,6 +1344,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||||
UChar *p = reg->p;
|
UChar *p = reg->p;
|
||||||
UChar *pkeep;
|
UChar *pkeep;
|
||||||
char *alloca_base;
|
char *alloca_base;
|
||||||
|
char *xmalloc_base = NULL;
|
||||||
OnigStackType *stk_alloc, *stk_base, *stk, *stk_end;
|
OnigStackType *stk_alloc, *stk_base, *stk, *stk_end;
|
||||||
OnigStackType *stkp; /* used as any purpose. */
|
OnigStackType *stkp; /* used as any purpose. */
|
||||||
OnigStackIndex si;
|
OnigStackIndex si;
|
||||||
|
@ -1340,7 +1360,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||||
/* Stack #0 is used to store the pattern itself and used for (?R), \g<0>, etc. */
|
/* Stack #0 is used to store the pattern itself and used for (?R), \g<0>, etc. */
|
||||||
n = reg->num_repeat + (reg->num_mem + 1) * 2;
|
n = reg->num_repeat + (reg->num_mem + 1) * 2;
|
||||||
|
|
||||||
STACK_INIT(alloca_base, n, INIT_MATCH_STACK_SIZE);
|
STACK_INIT(alloca_base, xmalloc_base, n, INIT_MATCH_STACK_SIZE);
|
||||||
pop_level = reg->stack_pop_level;
|
pop_level = reg->stack_pop_level;
|
||||||
num_mem = reg->num_mem;
|
num_mem = reg->num_mem;
|
||||||
repeat_stk = (OnigStackIndex* )alloca_base;
|
repeat_stk = (OnigStackIndex* )alloca_base;
|
||||||
|
@ -1354,7 +1374,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||||
/* Stack #0 not is used. */
|
/* Stack #0 not is used. */
|
||||||
n = reg->num_repeat + reg->num_mem * 2;
|
n = reg->num_repeat + reg->num_mem * 2;
|
||||||
|
|
||||||
STACK_INIT(alloca_base, n, INIT_MATCH_STACK_SIZE);
|
STACK_INIT(alloca_base, xmalloc_base, n, INIT_MATCH_STACK_SIZE);
|
||||||
pop_level = reg->stack_pop_level;
|
pop_level = reg->stack_pop_level;
|
||||||
num_mem = reg->num_mem;
|
num_mem = reg->num_mem;
|
||||||
repeat_stk = (OnigStackIndex* )alloca_base;
|
repeat_stk = (OnigStackIndex* )alloca_base;
|
||||||
|
@ -1372,7 +1392,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||||
|
|
||||||
#ifdef ONIG_DEBUG_MATCH
|
#ifdef ONIG_DEBUG_MATCH
|
||||||
fprintf(stderr, "match_at: str: %"PRIdPTR" (%p), end: %"PRIdPTR" (%p), start: %"PRIdPTR" (%p), sprev: %"PRIdPTR" (%p)\n",
|
fprintf(stderr, "match_at: str: %"PRIdPTR" (%p), end: %"PRIdPTR" (%p), start: %"PRIdPTR" (%p), sprev: %"PRIdPTR" (%p)\n",
|
||||||
(intptr_t)str, str, (intptr_t)end, end, (intptr_t)sstart, sstart, (intptr_t)sprev, sprev);
|
(intptr_t )str, str, (intptr_t )end, end, (intptr_t )sstart, sstart, (intptr_t )sprev, sprev);
|
||||||
fprintf(stderr, "size: %d, start offset: %d\n",
|
fprintf(stderr, "size: %d, start offset: %d\n",
|
||||||
(int )(end - str), (int )(sstart - str));
|
(int )(end - str), (int )(sstart - str));
|
||||||
#endif
|
#endif
|
||||||
|
@ -1386,7 +1406,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||||
if (s) {
|
if (s) {
|
||||||
UChar *q, *bp, buf[50];
|
UChar *q, *bp, buf[50];
|
||||||
int len;
|
int len;
|
||||||
fprintf(stderr, "%4d> \"", (int )(s - str));
|
fprintf(stderr, "%4d> \"", (*p == OP_FINISH) ? -1 : (int )(s - str));
|
||||||
bp = buf;
|
bp = buf;
|
||||||
if (*p != OP_FINISH) { /* s may not be a valid pointer if OP_FINISH. */
|
if (*p != OP_FINISH) { /* s may not be a valid pointer if OP_FINISH. */
|
||||||
for (i = 0, q = s; i < 7 && q < end; i++) {
|
for (i = 0, q = s; i < 7 && q < end; i++) {
|
||||||
|
@ -2150,6 +2170,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||||
|
|
||||||
case OP_BEGIN_BUF: MOP_IN(OP_BEGIN_BUF);
|
case OP_BEGIN_BUF: MOP_IN(OP_BEGIN_BUF);
|
||||||
if (! ON_STR_BEGIN(s)) goto fail;
|
if (! ON_STR_BEGIN(s)) goto fail;
|
||||||
|
if (IS_NOTBOS(msa->options)) goto fail;
|
||||||
|
|
||||||
MOP_OUT;
|
MOP_OUT;
|
||||||
continue;
|
continue;
|
||||||
|
@ -2157,6 +2178,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||||
|
|
||||||
case OP_END_BUF: MOP_IN(OP_END_BUF);
|
case OP_END_BUF: MOP_IN(OP_END_BUF);
|
||||||
if (! ON_STR_END(s)) goto fail;
|
if (! ON_STR_END(s)) goto fail;
|
||||||
|
if (IS_NOTEOS(msa->options)) goto fail;
|
||||||
|
|
||||||
MOP_OUT;
|
MOP_OUT;
|
||||||
continue;
|
continue;
|
||||||
|
@ -2916,20 +2938,24 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||||
|
|
||||||
finish:
|
finish:
|
||||||
STACK_SAVE;
|
STACK_SAVE;
|
||||||
|
if (xmalloc_base) xfree(xmalloc_base);
|
||||||
return best_len;
|
return best_len;
|
||||||
|
|
||||||
#ifdef ONIG_DEBUG
|
#ifdef ONIG_DEBUG
|
||||||
stack_error:
|
stack_error:
|
||||||
STACK_SAVE;
|
STACK_SAVE;
|
||||||
|
if (xmalloc_base) xfree(xmalloc_base);
|
||||||
return ONIGERR_STACK_BUG;
|
return ONIGERR_STACK_BUG;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bytecode_error:
|
bytecode_error:
|
||||||
STACK_SAVE;
|
STACK_SAVE;
|
||||||
|
if (xmalloc_base) xfree(xmalloc_base);
|
||||||
return ONIGERR_UNDEFINED_BYTECODE;
|
return ONIGERR_UNDEFINED_BYTECODE;
|
||||||
|
|
||||||
unexpected_bytecode_error:
|
unexpected_bytecode_error:
|
||||||
STACK_SAVE;
|
STACK_SAVE;
|
||||||
|
if (xmalloc_base) xfree(xmalloc_base);
|
||||||
return ONIGERR_UNEXPECTED_BYTECODE;
|
return ONIGERR_UNEXPECTED_BYTECODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3159,8 +3185,8 @@ bm_search(regex_t* reg, const UChar* target, const UChar* target_end,
|
||||||
p = s;
|
p = s;
|
||||||
t = tail;
|
t = tail;
|
||||||
#ifdef ONIG_DEBUG_SEARCH
|
#ifdef ONIG_DEBUG_SEARCH
|
||||||
fprintf(stderr, "bm_search_loop: pos: %d %s\n",
|
fprintf(stderr, "bm_search_loop: pos: %"PRIdPTR" %s\n",
|
||||||
(int)(s - text), s);
|
(intptr_t )(s - text), s);
|
||||||
#endif
|
#endif
|
||||||
while (*p == *t) {
|
while (*p == *t) {
|
||||||
if (t == target) return (UChar* )p;
|
if (t == target) return (UChar* )p;
|
||||||
|
@ -3294,8 +3320,8 @@ bm_search_notrev(regex_t* reg, const UChar* target, const UChar* target_end,
|
||||||
OnigEncoding enc = reg->enc;
|
OnigEncoding enc = reg->enc;
|
||||||
|
|
||||||
#ifdef ONIG_DEBUG_SEARCH
|
#ifdef ONIG_DEBUG_SEARCH
|
||||||
fprintf(stderr, "bm_search_notrev: text: %d (%p), text_end: %d (%p), text_range: %d (%p)\n",
|
fprintf(stderr, "bm_search_notrev: text: %"PRIdPTR" (%p), text_end: %"PRIdPTR" (%p), text_range: %"PRIdPTR" (%p)\n",
|
||||||
(int )text, text, (int )text_end, text_end, (int )text_range, text_range);
|
(intptr_t )text, text, (intptr_t )text_end, text_end, (intptr_t )text_range, text_range);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
tail = target_end - 1;
|
tail = target_end - 1;
|
||||||
|
@ -3398,8 +3424,8 @@ bm_search_notrev_ic(regex_t* reg, const UChar* target, const UChar* target_end,
|
||||||
int case_fold_flag = reg->case_fold_flag;
|
int case_fold_flag = reg->case_fold_flag;
|
||||||
|
|
||||||
#ifdef ONIG_DEBUG_SEARCH
|
#ifdef ONIG_DEBUG_SEARCH
|
||||||
fprintf(stderr, "bm_search_notrev_ic: text: %d (%p), text_end: %d (%p), text_range: %d (%p)\n",
|
fprintf(stderr, "bm_search_notrev_ic: text: %"PRIdPTR" (%p), text_end: %"PRIdPTR" (%p), text_range: %"PRIdPTR" (%p)\n",
|
||||||
(int )text, text, (int )text_end, text_end, (int )text_range, text_range);
|
(intptr_t )text, text, (intptr_t )text_end, text_end, (intptr_t )text_range, text_range);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
tail = target_end - 1;
|
tail = target_end - 1;
|
||||||
|
@ -3454,8 +3480,8 @@ bm_search_ic(regex_t* reg, const UChar* target, const UChar* target_end,
|
||||||
int case_fold_flag = reg->case_fold_flag;
|
int case_fold_flag = reg->case_fold_flag;
|
||||||
|
|
||||||
#ifdef ONIG_DEBUG_SEARCH
|
#ifdef ONIG_DEBUG_SEARCH
|
||||||
fprintf(stderr, "bm_search_ic: text: %d (%p), text_end: %d (%p), text_range: %d (%p)\n",
|
fprintf(stderr, "bm_search_ic: text: %"PRIdPTR" (%p), text_end: %"PRIdPTR" (%p), text_range: %"PRIdPTR" (%p)\n",
|
||||||
(int )text, text, (int )text_end, text_end, (int )text_range, text_range);
|
(intptr_t )text, text, (intptr_t )text_end, text_end, (intptr_t )text_range, text_range);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
tail = target_end - 1;
|
tail = target_end - 1;
|
||||||
|
@ -3641,7 +3667,7 @@ forward_search_range(regex_t* reg, const UChar* str, const UChar* end, UChar* s,
|
||||||
|
|
||||||
#ifdef ONIG_DEBUG_SEARCH
|
#ifdef ONIG_DEBUG_SEARCH
|
||||||
fprintf(stderr, "forward_search_range: str: %"PRIuPTR" (%p), end: %"PRIuPTR" (%p), s: %"PRIuPTR" (%p), range: %"PRIuPTR" (%p)\n",
|
fprintf(stderr, "forward_search_range: str: %"PRIuPTR" (%p), end: %"PRIuPTR" (%p), s: %"PRIuPTR" (%p), range: %"PRIuPTR" (%p)\n",
|
||||||
str, str, end, end, s, s, range, range);
|
(intptr_t )str, str, (intptr_t )end, end, (intptr_t )s, s, (intptr_t )range, range);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
p = s;
|
p = s;
|
||||||
|
@ -3754,8 +3780,8 @@ forward_search_range(regex_t* reg, const UChar* str, const UChar* end, UChar* s,
|
||||||
|
|
||||||
#ifdef ONIG_DEBUG_SEARCH
|
#ifdef ONIG_DEBUG_SEARCH
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"forward_search_range success: low: %d, high: %d, dmin: %d, dmax: %d\n",
|
"forward_search_range success: low: %"PRIdPTR", high: %"PRIdPTR", dmin: %"PRIdPTR", dmax: %"PRIdPTR"\n",
|
||||||
(int )(*low - str), (int )(*high - str), reg->dmin, reg->dmax);
|
*low - str, *high - str, reg->dmin, reg->dmax);
|
||||||
#endif
|
#endif
|
||||||
return 1; /* success */
|
return 1; /* success */
|
||||||
}
|
}
|
||||||
|
@ -3919,7 +3945,7 @@ onig_search_gpos(regex_t* reg, const UChar* str, const UChar* end,
|
||||||
#ifdef ONIG_DEBUG_SEARCH
|
#ifdef ONIG_DEBUG_SEARCH
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"onig_search (entry point): str: %"PRIuPTR" (%p), end: %"PRIuPTR", start: %"PRIuPTR", range: %"PRIuPTR"\n",
|
"onig_search (entry point): str: %"PRIuPTR" (%p), end: %"PRIuPTR", start: %"PRIuPTR", range: %"PRIuPTR"\n",
|
||||||
str, str, end - str, start - str, range - str);
|
(intptr_t )str, str, end - str, start - str, range - str);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (region
|
if (region
|
||||||
|
@ -4181,11 +4207,6 @@ onig_search_gpos(regex_t* reg, const UChar* str, const UChar* end,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { /* backward search */
|
else { /* backward search */
|
||||||
#ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE
|
|
||||||
if (orig_start < end)
|
|
||||||
orig_start += enclen(reg->enc, orig_start, end); /* is upper range */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (reg->optimize != ONIG_OPTIMIZE_NONE) {
|
if (reg->optimize != ONIG_OPTIMIZE_NONE) {
|
||||||
UChar *low, *high, *adjrange, *sch_start;
|
UChar *low, *high, *adjrange, *sch_start;
|
||||||
|
|
||||||
|
@ -4268,7 +4289,7 @@ onig_search_gpos(regex_t* reg, const UChar* str, const UChar* end,
|
||||||
|
|
||||||
#ifdef ONIG_DEBUG
|
#ifdef ONIG_DEBUG
|
||||||
if (r != ONIG_MISMATCH)
|
if (r != ONIG_MISMATCH)
|
||||||
fprintf(stderr, "onig_search: error %d\n", r);
|
fprintf(stderr, "onig_search: error %"PRIdPTR"\n", r);
|
||||||
#endif
|
#endif
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
@ -4278,7 +4299,7 @@ onig_search_gpos(regex_t* reg, const UChar* str, const UChar* end,
|
||||||
ONIG_STATE_DEC_THREAD(reg);
|
ONIG_STATE_DEC_THREAD(reg);
|
||||||
#ifdef ONIG_DEBUG
|
#ifdef ONIG_DEBUG
|
||||||
if (r != ONIG_MISMATCH)
|
if (r != ONIG_MISMATCH)
|
||||||
fprintf(stderr, "onig_search: error %d\n", r);
|
fprintf(stderr, "onig_search: error %"PRIdPTR"\n", r);
|
||||||
#endif
|
#endif
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
|
76
regint.h
76
regint.h
|
@ -5,7 +5,7 @@
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
* Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
||||||
* Copyright (c) 2011-2012 K.Takata <kentkt AT csc DOT jp>
|
* Copyright (c) 2011-2014 K.Takata <kentkt AT csc DOT jp>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -92,8 +92,6 @@
|
||||||
# define ARG_UNUSED
|
# define ARG_UNUSED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* */
|
|
||||||
/* escape other system UChar definition */
|
|
||||||
#ifndef RUBY_DEFINES_H
|
#ifndef RUBY_DEFINES_H
|
||||||
#include "ruby/ruby.h"
|
#include "ruby/ruby.h"
|
||||||
#undef xmalloc
|
#undef xmalloc
|
||||||
|
@ -101,23 +99,67 @@
|
||||||
#undef xcalloc
|
#undef xcalloc
|
||||||
#undef xfree
|
#undef xfree
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* */
|
||||||
|
/* escape other system UChar definition */
|
||||||
#ifdef ONIG_ESCAPE_UCHAR_COLLISION
|
#ifdef ONIG_ESCAPE_UCHAR_COLLISION
|
||||||
#undef ONIG_ESCAPE_UCHAR_COLLISION
|
#undef ONIG_ESCAPE_UCHAR_COLLISION
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define USE_WORD_BEGIN_END /* "\<": word-begin, "\>": word-end */
|
#define USE_WORD_BEGIN_END /* "\<": word-begin, "\>": word-end */
|
||||||
#undef USE_MATCH_RANGE_IS_COMPLETE_RANGE
|
|
||||||
#undef USE_CAPTURE_HISTORY
|
#undef USE_CAPTURE_HISTORY
|
||||||
#define USE_VARIABLE_META_CHARS
|
#define USE_VARIABLE_META_CHARS
|
||||||
#define USE_POSIX_API_REGION_OPTION /* needed for POSIX API support */
|
#define USE_POSIX_API_REGION_OPTION /* needed for POSIX API support */
|
||||||
#define USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE
|
#define USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE
|
||||||
/* #define USE_COMBINATION_EXPLOSION_CHECK */ /* (X*)* */
|
/* #define USE_COMBINATION_EXPLOSION_CHECK */ /* (X*)* */
|
||||||
|
|
||||||
|
/* multithread config */
|
||||||
/* #define USE_MULTI_THREAD_SYSTEM */
|
/* #define USE_MULTI_THREAD_SYSTEM */
|
||||||
|
/* #define USE_DEFAULT_MULTI_THREAD_SYSTEM */
|
||||||
|
|
||||||
|
#if defined(USE_MULTI_THREAD_SYSTEM) \
|
||||||
|
&& defined(USE_DEFAULT_MULTI_THREAD_SYSTEM)
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#include <windows.h>
|
||||||
|
extern CRITICAL_SECTION gOnigMutex;
|
||||||
|
#define THREAD_SYSTEM_INIT InitializeCriticalSection(&gOnigMutex)
|
||||||
|
#define THREAD_SYSTEM_END DeleteCriticalSection(&gOnigMutex)
|
||||||
|
#define THREAD_ATOMIC_START EnterCriticalSection(&gOnigMutex)
|
||||||
|
#define THREAD_ATOMIC_END LeaveCriticalSection(&gOnigMutex)
|
||||||
|
#define THREAD_PASS Sleep(0)
|
||||||
|
#else /* _WIN32 */
|
||||||
|
#include <pthread.h>
|
||||||
|
#include <sched.h>
|
||||||
|
extern pthread_mutex_t gOnigMutex;
|
||||||
|
#define THREAD_SYSTEM_INIT pthread_mutex_init(&gOnigMutex, NULL)
|
||||||
|
#define THREAD_SYSTEM_END pthread_mutex_destroy(&gOnigMutex)
|
||||||
|
#define THREAD_ATOMIC_START pthread_mutex_lock(&gOnigMutex)
|
||||||
|
#define THREAD_ATOMIC_END pthread_mutex_unlock(&gOnigMutex)
|
||||||
|
#define THREAD_PASS sched_yield()
|
||||||
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
|
#else /* USE_DEFAULT_MULTI_THREAD_SYSTEM */
|
||||||
|
|
||||||
|
#ifndef THREAD_SYSTEM_INIT
|
||||||
#define THREAD_SYSTEM_INIT /* depend on thread system */
|
#define THREAD_SYSTEM_INIT /* depend on thread system */
|
||||||
|
#endif
|
||||||
|
#ifndef THREAD_SYSTEM_END
|
||||||
#define THREAD_SYSTEM_END /* depend on thread system */
|
#define THREAD_SYSTEM_END /* depend on thread system */
|
||||||
|
#endif
|
||||||
|
#ifndef THREAD_ATOMIC_START
|
||||||
#define THREAD_ATOMIC_START /* depend on thread system */
|
#define THREAD_ATOMIC_START /* depend on thread system */
|
||||||
|
#endif
|
||||||
|
#ifndef THREAD_ATOMIC_END
|
||||||
#define THREAD_ATOMIC_END /* depend on thread system */
|
#define THREAD_ATOMIC_END /* depend on thread system */
|
||||||
|
#endif
|
||||||
|
#ifndef THREAD_PASS
|
||||||
#define THREAD_PASS /* depend on thread system */
|
#define THREAD_PASS /* depend on thread system */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* USE_DEFAULT_MULTI_THREAD_SYSTEM */
|
||||||
|
|
||||||
#ifndef xmalloc
|
#ifndef xmalloc
|
||||||
#define xmalloc malloc
|
#define xmalloc malloc
|
||||||
#define xrealloc realloc
|
#define xrealloc realloc
|
||||||
|
@ -235,12 +277,16 @@
|
||||||
# include <stdint.h>
|
# include <stdint.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_INTTYPES_H
|
||||||
|
# include <inttypes.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef STDC_HEADERS
|
#ifdef STDC_HEADERS
|
||||||
# include <stddef.h>
|
# include <stddef.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __BORLANDC__
|
#ifdef _WIN32
|
||||||
#include <malloc.h>
|
#include <malloc.h> /* for alloca() */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ONIG_DEBUG
|
#ifdef ONIG_DEBUG
|
||||||
|
@ -260,6 +306,18 @@ typedef unsigned int uintptr_t;
|
||||||
#endif
|
#endif
|
||||||
#endif /* _WIN32 */
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
|
#ifndef PRIdPTR
|
||||||
|
#ifdef _WIN64
|
||||||
|
#define PRIdPTR "I64d"
|
||||||
|
#define PRIuPTR "I64u"
|
||||||
|
#define PRIxPTR "I64x"
|
||||||
|
#else
|
||||||
|
#define PRIdPTR "ld"
|
||||||
|
#define PRIuPTR "lu"
|
||||||
|
#define PRIxPTR "lx"
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "regenc.h"
|
#include "regenc.h"
|
||||||
|
|
||||||
RUBY_SYMBOL_EXPORT_BEGIN
|
RUBY_SYMBOL_EXPORT_BEGIN
|
||||||
|
@ -366,6 +424,8 @@ typedef unsigned int BitStatusType;
|
||||||
(ONIG_OPTION_FIND_LONGEST | ONIG_OPTION_FIND_NOT_EMPTY))
|
(ONIG_OPTION_FIND_LONGEST | ONIG_OPTION_FIND_NOT_EMPTY))
|
||||||
#define IS_NOTBOL(option) ((option) & ONIG_OPTION_NOTBOL)
|
#define IS_NOTBOL(option) ((option) & ONIG_OPTION_NOTBOL)
|
||||||
#define IS_NOTEOL(option) ((option) & ONIG_OPTION_NOTEOL)
|
#define IS_NOTEOL(option) ((option) & ONIG_OPTION_NOTEOL)
|
||||||
|
#define IS_NOTBOS(option) ((option) & ONIG_OPTION_NOTBOS)
|
||||||
|
#define IS_NOTEOS(option) ((option) & ONIG_OPTION_NOTEOS)
|
||||||
#define IS_POSIX_REGION(option) ((option) & ONIG_OPTION_POSIX_REGION)
|
#define IS_POSIX_REGION(option) ((option) & ONIG_OPTION_POSIX_REGION)
|
||||||
#define IS_ASCII_RANGE(option) ((option) & ONIG_OPTION_ASCII_RANGE)
|
#define IS_ASCII_RANGE(option) ((option) & ONIG_OPTION_ASCII_RANGE)
|
||||||
#define IS_POSIX_BRACKET_ALL_RANGE(option) ((option) & ONIG_OPTION_POSIX_BRACKET_ALL_RANGE)
|
#define IS_POSIX_BRACKET_ALL_RANGE(option) ((option) & ONIG_OPTION_POSIX_BRACKET_ALL_RANGE)
|
||||||
|
@ -852,7 +912,9 @@ typedef struct {
|
||||||
|
|
||||||
extern OnigOpInfoType OnigOpInfo[];
|
extern OnigOpInfoType OnigOpInfo[];
|
||||||
|
|
||||||
/* extern void onig_print_compiled_byte_code P_((FILE* f, UChar* bp, UChar* bpend, UChar** nextp, OnigEncoding enc)); */
|
#ifdef ONIG_DEBUG
|
||||||
|
extern void onig_print_compiled_byte_code P_((FILE* f, UChar* bp, UChar* bpend, UChar** nextp, OnigEncoding enc));
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef ONIG_DEBUG_STATISTICS
|
#ifdef ONIG_DEBUG_STATISTICS
|
||||||
extern void onig_statistics_init P_((void));
|
extern void onig_statistics_init P_((void));
|
||||||
|
|
188
regparse.c
188
regparse.c
|
@ -3,7 +3,7 @@
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
* Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
||||||
* Copyright (c) 2011-2013 K.Takata <kentkt AT csc DOT jp>
|
* Copyright (c) 2011-2014 K.Takata <kentkt AT csc DOT jp>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -281,6 +281,14 @@ strdup_with_null(OnigEncoding enc, UChar* s, UChar* end)
|
||||||
p += enclen(enc, p, end); \
|
p += enclen(enc, p, end); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define PINC_S do { \
|
||||||
|
p += enclen(enc, p, end); \
|
||||||
|
} while (0)
|
||||||
|
#define PFETCH_S(c) do { \
|
||||||
|
c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
|
||||||
|
p += enclen(enc, p, end); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#define PPEEK (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
|
#define PPEEK (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)
|
||||||
#define PPEEK_IS(c) (PPEEK == (OnigCodePoint )c)
|
#define PPEEK_IS(c) (PPEEK == (OnigCodePoint )c)
|
||||||
|
|
||||||
|
@ -978,6 +986,8 @@ scan_env_add_mem_entry(ScanEnv* env)
|
||||||
Node** p;
|
Node** p;
|
||||||
|
|
||||||
need = env->num_mem + 1;
|
need = env->num_mem + 1;
|
||||||
|
if (need > ONIG_MAX_CAPTURE_GROUP_NUM)
|
||||||
|
return ONIGERR_TOO_MANY_CAPTURE_GROUPS;
|
||||||
if (need >= SCANENV_MEMNODES_SIZE) {
|
if (need >= SCANENV_MEMNODES_SIZE) {
|
||||||
if (env->mem_alloc <= need) {
|
if (env->mem_alloc <= need) {
|
||||||
if (IS_NULL(env->mem_nodes_dynamic)) {
|
if (IS_NULL(env->mem_nodes_dynamic)) {
|
||||||
|
@ -1143,6 +1153,25 @@ node_new(void)
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(USE_MULTI_THREAD_SYSTEM) && \
|
||||||
|
defined(USE_SHARED_CCLASS_TABLE) && \
|
||||||
|
defined(USE_PARSE_TREE_NODE_RECYCLE)
|
||||||
|
static Node*
|
||||||
|
node_new_locked(void)
|
||||||
|
{
|
||||||
|
Node* node;
|
||||||
|
|
||||||
|
if (IS_NOT_NULL(FreeNodeList)) {
|
||||||
|
node = (Node* )FreeNodeList;
|
||||||
|
FreeNodeList = FreeNodeList->next;
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
node = (Node* )xmalloc(sizeof(Node));
|
||||||
|
/* xmemset(node, 0, sizeof(Node)); */
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
initialize_cclass(CClassNode* cc)
|
initialize_cclass(CClassNode* cc)
|
||||||
|
@ -1164,6 +1193,24 @@ node_new_cclass(void)
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(USE_MULTI_THREAD_SYSTEM) && \
|
||||||
|
defined(USE_SHARED_CCLASS_TABLE) && \
|
||||||
|
defined(USE_PARSE_TREE_NODE_RECYCLE)
|
||||||
|
static Node*
|
||||||
|
node_new_cclass_locked(void)
|
||||||
|
{
|
||||||
|
Node* node = node_new_locked();
|
||||||
|
CHECK_NULL_RETURN(node);
|
||||||
|
|
||||||
|
SET_NTYPE(node, NT_CCLASS);
|
||||||
|
initialize_cclass(NCCLASS(node));
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define node_new_cclass_locked() node_new_cclass()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_SHARED_CCLASS_TABLE
|
||||||
static Node*
|
static Node*
|
||||||
node_new_cclass_by_codepoint_range(int not, OnigCodePoint sb_out,
|
node_new_cclass_by_codepoint_range(int not, OnigCodePoint sb_out,
|
||||||
const OnigCodePoint ranges[])
|
const OnigCodePoint ranges[])
|
||||||
|
@ -1172,7 +1219,7 @@ node_new_cclass_by_codepoint_range(int not, OnigCodePoint sb_out,
|
||||||
CClassNode* cc;
|
CClassNode* cc;
|
||||||
OnigCodePoint j;
|
OnigCodePoint j;
|
||||||
|
|
||||||
Node* node = node_new_cclass();
|
Node* node = node_new_cclass_locked();
|
||||||
CHECK_NULL_RETURN(node);
|
CHECK_NULL_RETURN(node);
|
||||||
|
|
||||||
cc = NCCLASS(node);
|
cc = NCCLASS(node);
|
||||||
|
@ -1213,6 +1260,7 @@ node_new_cclass_by_codepoint_range(int not, OnigCodePoint sb_out,
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
#endif /* USE_SHARED_CCLASS_TABLE */
|
||||||
|
|
||||||
static Node*
|
static Node*
|
||||||
node_new_ctype(int type, int not, int ascii_range)
|
node_new_ctype(int type, int not, int ascii_range)
|
||||||
|
@ -2486,22 +2534,21 @@ fetch_escaped_value(UChar** src, UChar* end, ScanEnv* env)
|
||||||
OnigCodePoint c;
|
OnigCodePoint c;
|
||||||
OnigEncoding enc = env->enc;
|
OnigEncoding enc = env->enc;
|
||||||
UChar* p = *src;
|
UChar* p = *src;
|
||||||
PFETCH_READY;
|
|
||||||
|
|
||||||
if (PEND) return ONIGERR_END_PATTERN_AT_ESCAPE;
|
if (PEND) return ONIGERR_END_PATTERN_AT_ESCAPE;
|
||||||
|
|
||||||
PFETCH(c);
|
PFETCH_S(c);
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case 'M':
|
case 'M':
|
||||||
if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META)) {
|
if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META)) {
|
||||||
if (PEND) return ONIGERR_END_PATTERN_AT_META;
|
if (PEND) return ONIGERR_END_PATTERN_AT_META;
|
||||||
PFETCH(c);
|
PFETCH_S(c);
|
||||||
if (c != '-') return ONIGERR_META_CODE_SYNTAX;
|
if (c != '-') return ONIGERR_META_CODE_SYNTAX;
|
||||||
if (PEND) return ONIGERR_END_PATTERN_AT_META;
|
if (PEND) return ONIGERR_END_PATTERN_AT_META;
|
||||||
PFETCH(c);
|
PFETCH_S(c);
|
||||||
if (c == MC_ESC(env->syntax)) {
|
if (c == MC_ESC(env->syntax)) {
|
||||||
v = fetch_escaped_value(&p, end, env);
|
v = fetch_escaped_value(&p, end, env);
|
||||||
if (v < 0) return v;
|
if (v < 0) return v;
|
||||||
c = (OnigCodePoint )v;
|
c = (OnigCodePoint )v;
|
||||||
}
|
}
|
||||||
c = ((c & 0xff) | 0x80);
|
c = ((c & 0xff) | 0x80);
|
||||||
|
@ -2513,7 +2560,7 @@ fetch_escaped_value(UChar** src, UChar* end, ScanEnv* env)
|
||||||
case 'C':
|
case 'C':
|
||||||
if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL)) {
|
if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL)) {
|
||||||
if (PEND) return ONIGERR_END_PATTERN_AT_CONTROL;
|
if (PEND) return ONIGERR_END_PATTERN_AT_CONTROL;
|
||||||
PFETCH(c);
|
PFETCH_S(c);
|
||||||
if (c != '-') return ONIGERR_CONTROL_CODE_SYNTAX;
|
if (c != '-') return ONIGERR_CONTROL_CODE_SYNTAX;
|
||||||
goto control;
|
goto control;
|
||||||
}
|
}
|
||||||
|
@ -2524,9 +2571,9 @@ fetch_escaped_value(UChar** src, UChar* end, ScanEnv* env)
|
||||||
if (IS_SYNTAX_OP(env->syntax, ONIG_SYN_OP_ESC_C_CONTROL)) {
|
if (IS_SYNTAX_OP(env->syntax, ONIG_SYN_OP_ESC_C_CONTROL)) {
|
||||||
control:
|
control:
|
||||||
if (PEND) return ONIGERR_END_PATTERN_AT_CONTROL;
|
if (PEND) return ONIGERR_END_PATTERN_AT_CONTROL;
|
||||||
PFETCH(c);
|
PFETCH_S(c);
|
||||||
if (c == '?') {
|
if (c == '?') {
|
||||||
c = 0177;
|
c = 0177;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (c == MC_ESC(env->syntax)) {
|
if (c == MC_ESC(env->syntax)) {
|
||||||
|
@ -2534,7 +2581,7 @@ fetch_escaped_value(UChar** src, UChar* end, ScanEnv* env)
|
||||||
if (v < 0) return v;
|
if (v < 0) return v;
|
||||||
c = (OnigCodePoint )v;
|
c = (OnigCodePoint )v;
|
||||||
}
|
}
|
||||||
c &= 0x9f;
|
c &= 0x9f;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2630,11 +2677,11 @@ fetch_name_with_level(OnigCodePoint start_code, UChar** src, UChar* end,
|
||||||
|
|
||||||
if (is_num != 0) {
|
if (is_num != 0) {
|
||||||
if (ONIGENC_IS_CODE_DIGIT(enc, c)) {
|
if (ONIGENC_IS_CODE_DIGIT(enc, c)) {
|
||||||
is_num = 1;
|
is_num = 1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
r = ONIGERR_INVALID_GROUP_NAME;
|
r = ONIGERR_INVALID_GROUP_NAME;
|
||||||
is_num = 0;
|
is_num = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!ONIGENC_IS_CODE_WORD(enc, c)) {
|
else if (!ONIGENC_IS_CODE_WORD(enc, c)) {
|
||||||
|
@ -2701,7 +2748,6 @@ fetch_name(OnigCodePoint start_code, UChar** src, UChar* end,
|
||||||
UChar *name_end;
|
UChar *name_end;
|
||||||
UChar *pnum_head;
|
UChar *pnum_head;
|
||||||
UChar *p = *src;
|
UChar *p = *src;
|
||||||
PFETCH_READY;
|
|
||||||
|
|
||||||
*rback_num = 0;
|
*rback_num = 0;
|
||||||
|
|
||||||
|
@ -2716,23 +2762,23 @@ fetch_name(OnigCodePoint start_code, UChar** src, UChar* end,
|
||||||
return ONIGERR_EMPTY_GROUP_NAME;
|
return ONIGERR_EMPTY_GROUP_NAME;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
PFETCH(c);
|
PFETCH_S(c);
|
||||||
if (c == end_code)
|
if (c == end_code)
|
||||||
return ONIGERR_EMPTY_GROUP_NAME;
|
return ONIGERR_EMPTY_GROUP_NAME;
|
||||||
|
|
||||||
if (ONIGENC_IS_CODE_DIGIT(enc, c)) {
|
if (ONIGENC_IS_CODE_DIGIT(enc, c)) {
|
||||||
if (ref == 1)
|
if (ref == 1)
|
||||||
is_num = 1;
|
is_num = 1;
|
||||||
else {
|
else {
|
||||||
r = ONIGERR_INVALID_GROUP_NAME;
|
r = ONIGERR_INVALID_GROUP_NAME;
|
||||||
is_num = 0;
|
is_num = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (c == '-') {
|
else if (c == '-') {
|
||||||
if (ref == 1) {
|
if (ref == 1) {
|
||||||
is_num = 2;
|
is_num = 2;
|
||||||
sign = -1;
|
sign = -1;
|
||||||
pnum_head = p;
|
pnum_head = p;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
r = ONIGERR_INVALID_GROUP_NAME;
|
r = ONIGERR_INVALID_GROUP_NAME;
|
||||||
|
@ -2747,29 +2793,28 @@ fetch_name(OnigCodePoint start_code, UChar** src, UChar* end,
|
||||||
if (r == 0) {
|
if (r == 0) {
|
||||||
while (!PEND) {
|
while (!PEND) {
|
||||||
name_end = p;
|
name_end = p;
|
||||||
PFETCH(c);
|
PFETCH_S(c);
|
||||||
if (c == end_code || c == ')') {
|
if (c == end_code || c == ')') {
|
||||||
if (is_num == 2) r = ONIGERR_INVALID_GROUP_NAME;
|
if (is_num == 2) r = ONIGERR_INVALID_GROUP_NAME;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_num != 0) {
|
if (is_num != 0) {
|
||||||
if (ONIGENC_IS_CODE_DIGIT(enc, c)) {
|
if (ONIGENC_IS_CODE_DIGIT(enc, c)) {
|
||||||
is_num = 1;
|
is_num = 1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (!ONIGENC_IS_CODE_WORD(enc, c))
|
if (!ONIGENC_IS_CODE_WORD(enc, c))
|
||||||
r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
|
r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
|
||||||
else
|
else
|
||||||
r = ONIGERR_INVALID_GROUP_NAME;
|
r = ONIGERR_INVALID_GROUP_NAME;
|
||||||
|
is_num = 0;
|
||||||
is_num = 0;
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (!ONIGENC_IS_CODE_WORD(enc, c)) {
|
if (!ONIGENC_IS_CODE_WORD(enc, c)) {
|
||||||
r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
|
r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2782,8 +2827,8 @@ fetch_name(OnigCodePoint start_code, UChar** src, UChar* end,
|
||||||
*rback_num = onig_scan_unsigned_number(&pnum_head, name_end, enc);
|
*rback_num = onig_scan_unsigned_number(&pnum_head, name_end, enc);
|
||||||
if (*rback_num < 0) return ONIGERR_TOO_BIG_NUMBER;
|
if (*rback_num < 0) return ONIGERR_TOO_BIG_NUMBER;
|
||||||
else if (*rback_num == 0) {
|
else if (*rback_num == 0) {
|
||||||
r = ONIGERR_INVALID_GROUP_NAME;
|
r = ONIGERR_INVALID_GROUP_NAME;
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
*rback_num *= sign;
|
*rback_num *= sign;
|
||||||
|
@ -2796,9 +2841,9 @@ fetch_name(OnigCodePoint start_code, UChar** src, UChar* end,
|
||||||
else {
|
else {
|
||||||
while (!PEND) {
|
while (!PEND) {
|
||||||
name_end = p;
|
name_end = p;
|
||||||
PFETCH(c);
|
PFETCH_S(c);
|
||||||
if (c == end_code || c == ')')
|
if (c == end_code || c == ')')
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (PEND)
|
if (PEND)
|
||||||
name_end = end;
|
name_end = end;
|
||||||
|
@ -4263,10 +4308,9 @@ parse_posix_bracket(CClassNode* cc, UChar** src, UChar* end, ScanEnv* env)
|
||||||
OnigCodePoint c;
|
OnigCodePoint c;
|
||||||
OnigEncoding enc = env->enc;
|
OnigEncoding enc = env->enc;
|
||||||
UChar *p = *src;
|
UChar *p = *src;
|
||||||
PFETCH_READY;
|
|
||||||
|
|
||||||
if (PPEEK_IS('^')) {
|
if (PPEEK_IS('^')) {
|
||||||
PINC;
|
PINC_S;
|
||||||
not = 1;
|
not = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -4279,14 +4323,14 @@ parse_posix_bracket(CClassNode* cc, UChar** src, UChar* end, ScanEnv* env)
|
||||||
if (onigenc_with_ascii_strncmp(enc, p, end, pb->name, pb->len) == 0) {
|
if (onigenc_with_ascii_strncmp(enc, p, end, pb->name, pb->len) == 0) {
|
||||||
p = (UChar* )onigenc_step(enc, p, end, pb->len);
|
p = (UChar* )onigenc_step(enc, p, end, pb->len);
|
||||||
if (onigenc_with_ascii_strncmp(enc, p, end, (UChar* )":]", 2) != 0)
|
if (onigenc_with_ascii_strncmp(enc, p, end, (UChar* )":]", 2) != 0)
|
||||||
return ONIGERR_INVALID_POSIX_BRACKET_TYPE;
|
return ONIGERR_INVALID_POSIX_BRACKET_TYPE;
|
||||||
|
|
||||||
r = add_ctype_to_cc(cc, pb->ctype, not,
|
r = add_ctype_to_cc(cc, pb->ctype, not,
|
||||||
IS_POSIX_BRACKET_ALL_RANGE(env->option),
|
IS_POSIX_BRACKET_ALL_RANGE(env->option),
|
||||||
env);
|
env);
|
||||||
if (r != 0) return r;
|
if (r != 0) return r;
|
||||||
|
|
||||||
PINC; PINC;
|
PINC_S; PINC_S;
|
||||||
*src = p;
|
*src = p;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -4296,15 +4340,15 @@ parse_posix_bracket(CClassNode* cc, UChar** src, UChar* end, ScanEnv* env)
|
||||||
c = 0;
|
c = 0;
|
||||||
i = 0;
|
i = 0;
|
||||||
while (!PEND && ((c = PPEEK) != ':') && c != ']') {
|
while (!PEND && ((c = PPEEK) != ':') && c != ']') {
|
||||||
PINC;
|
PINC_S;
|
||||||
if (++i > POSIX_BRACKET_CHECK_LIMIT_LENGTH) break;
|
if (++i > POSIX_BRACKET_CHECK_LIMIT_LENGTH) break;
|
||||||
}
|
}
|
||||||
if (c == ':' && ! PEND) {
|
if (c == ':' && ! PEND) {
|
||||||
PINC;
|
PINC_S;
|
||||||
if (! PEND) {
|
if (! PEND) {
|
||||||
PFETCH(c);
|
PFETCH_S(c);
|
||||||
if (c == ']')
|
if (c == ']')
|
||||||
return ONIGERR_INVALID_POSIX_BRACKET_TYPE;
|
return ONIGERR_INVALID_POSIX_BRACKET_TYPE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4318,14 +4362,13 @@ fetch_char_property_to_ctype(UChar** src, UChar* end, ScanEnv* env)
|
||||||
OnigCodePoint c;
|
OnigCodePoint c;
|
||||||
OnigEncoding enc = env->enc;
|
OnigEncoding enc = env->enc;
|
||||||
UChar *prev, *start, *p = *src;
|
UChar *prev, *start, *p = *src;
|
||||||
PFETCH_READY;
|
|
||||||
|
|
||||||
r = 0;
|
r = 0;
|
||||||
start = prev = p;
|
start = prev = p;
|
||||||
|
|
||||||
while (!PEND) {
|
while (!PEND) {
|
||||||
prev = p;
|
prev = p;
|
||||||
PFETCH(c);
|
PFETCH_S(c);
|
||||||
if (c == '}') {
|
if (c == '}') {
|
||||||
r = ONIGENC_PROPERTY_NAME_TO_CTYPE(enc, start, prev);
|
r = ONIGENC_PROPERTY_NAME_TO_CTYPE(enc, start, prev);
|
||||||
if (r < 0) break;
|
if (r < 0) break;
|
||||||
|
@ -4483,7 +4526,6 @@ code_exist_check(OnigCodePoint c, UChar* from, UChar* end, int ignore_escaped,
|
||||||
OnigCodePoint code;
|
OnigCodePoint code;
|
||||||
OnigEncoding enc = env->enc;
|
OnigEncoding enc = env->enc;
|
||||||
UChar* p = from;
|
UChar* p = from;
|
||||||
PFETCH_READY;
|
|
||||||
|
|
||||||
in_esc = 0;
|
in_esc = 0;
|
||||||
while (! PEND) {
|
while (! PEND) {
|
||||||
|
@ -4491,7 +4533,7 @@ code_exist_check(OnigCodePoint c, UChar* from, UChar* end, int ignore_escaped,
|
||||||
in_esc = 0;
|
in_esc = 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
PFETCH(code);
|
PFETCH_S(code);
|
||||||
if (code == c) return 1;
|
if (code == c) return 1;
|
||||||
if (code == MC_ESC(env->syntax)) in_esc = 1;
|
if (code == MC_ESC(env->syntax)) in_esc = 1;
|
||||||
}
|
}
|
||||||
|
@ -4960,14 +5002,10 @@ parse_enclose(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
|
||||||
*np = node_new_enclose_memory(env->option, 0);
|
*np = node_new_enclose_memory(env->option, 0);
|
||||||
CHECK_NULL_RETURN_MEMERR(*np);
|
CHECK_NULL_RETURN_MEMERR(*np);
|
||||||
num = scan_env_add_mem_entry(env);
|
num = scan_env_add_mem_entry(env);
|
||||||
if (num < 0) {
|
if (num < 0) return num;
|
||||||
onig_node_free(*np);
|
if (num >= (int )BIT_STATUS_BITS_NUM)
|
||||||
return num;
|
|
||||||
}
|
|
||||||
else if (num >= (int )BIT_STATUS_BITS_NUM) {
|
|
||||||
onig_node_free(*np);
|
|
||||||
return ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY;
|
return ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY;
|
||||||
}
|
|
||||||
NENCLOSE(*np)->regnum = num;
|
NENCLOSE(*np)->regnum = num;
|
||||||
BIT_STATUS_ON_AT_SIMPLE(env->capture_history, num);
|
BIT_STATUS_ON_AT_SIMPLE(env->capture_history, num);
|
||||||
}
|
}
|
||||||
|
@ -4985,11 +5023,14 @@ parse_enclose(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
|
||||||
PUNFETCH;
|
PUNFETCH;
|
||||||
r = fetch_name((OnigCodePoint )'(', &p, end, &name_end, env, &num, 1);
|
r = fetch_name((OnigCodePoint )'(', &p, end, &name_end, env, &num, 1);
|
||||||
if (r < 0) return r;
|
if (r < 0) return r;
|
||||||
|
#if 0
|
||||||
|
/* Relative number is not currently supported. (same as Perl) */
|
||||||
if (num < 0) {
|
if (num < 0) {
|
||||||
num = BACKREF_REL_TO_ABS(num, env);
|
num = BACKREF_REL_TO_ABS(num, env);
|
||||||
if (num <= 0)
|
if (num <= 0)
|
||||||
return ONIGERR_INVALID_BACKREF;
|
return ONIGERR_INVALID_BACKREF;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_STRICT_CHECK_BACKREF)) {
|
if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_STRICT_CHECK_BACKREF)) {
|
||||||
if (num > env->num_mem ||
|
if (num > env->num_mem ||
|
||||||
IS_NULL(SCANENV_MEM_NODES(env)[num]))
|
IS_NULL(SCANENV_MEM_NODES(env)[num]))
|
||||||
|
@ -5291,30 +5332,23 @@ set_quantifier(Node* qnode, Node* target, int group, ScanEnv* env)
|
||||||
#ifdef USE_WARNING_REDUNDANT_NESTED_REPEAT_OPERATOR
|
#ifdef USE_WARNING_REDUNDANT_NESTED_REPEAT_OPERATOR
|
||||||
if (!IS_QUANTIFIER_BY_NUMBER(qn) && !IS_QUANTIFIER_BY_NUMBER(qnt) &&
|
if (!IS_QUANTIFIER_BY_NUMBER(qn) && !IS_QUANTIFIER_BY_NUMBER(qnt) &&
|
||||||
IS_SYNTAX_BV(env->syntax, ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT)) {
|
IS_SYNTAX_BV(env->syntax, ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT)) {
|
||||||
UChar buf[WARN_BUFSIZE];
|
|
||||||
|
|
||||||
switch (ReduceTypeTable[targetq_num][nestq_num]) {
|
switch (ReduceTypeTable[targetq_num][nestq_num]) {
|
||||||
case RQ_ASIS:
|
case RQ_ASIS:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RQ_DEL:
|
case RQ_DEL:
|
||||||
if (onig_verb_warn != onig_null_warn) {
|
if (onig_warn != onig_null_warn) {
|
||||||
onig_snprintf_with_pattern(buf, WARN_BUFSIZE, env->enc,
|
onig_syntax_warn(env, "regular expression has redundant nested repeat operator '%s'",
|
||||||
env->pattern, env->pattern_end,
|
PopularQStr[targetq_num]);
|
||||||
(UChar* )"redundant nested repeat operator");
|
|
||||||
(*onig_verb_warn)((char* )buf);
|
|
||||||
}
|
}
|
||||||
goto warn_exit;
|
goto warn_exit;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (onig_verb_warn != onig_null_warn) {
|
if (onig_warn != onig_null_warn) {
|
||||||
onig_snprintf_with_pattern(buf, WARN_BUFSIZE, env->enc,
|
onig_syntax_warn(env, "nested repeat operator '%s' and '%s' was replaced with '%s' in regular expression",
|
||||||
env->pattern, env->pattern_end,
|
PopularQStr[targetq_num], PopularQStr[nestq_num],
|
||||||
(UChar* )"nested repeat operator %s and %s was replaced with '%s'",
|
ReduceQStr[ReduceTypeTable[targetq_num][nestq_num]]);
|
||||||
PopularQStr[targetq_num], PopularQStr[nestq_num],
|
|
||||||
ReduceQStr[ReduceTypeTable[targetq_num][nestq_num]]);
|
|
||||||
(*onig_verb_warn)((char* )buf);
|
|
||||||
}
|
}
|
||||||
goto warn_exit;
|
goto warn_exit;
|
||||||
break;
|
break;
|
||||||
|
@ -5413,13 +5447,13 @@ i_free_shared_class(type_cclass_key* key, Node* node, void* arg ARG_UNUSED)
|
||||||
extern int
|
extern int
|
||||||
onig_free_shared_cclass_table(void)
|
onig_free_shared_cclass_table(void)
|
||||||
{
|
{
|
||||||
THREAD_ATOMIC_START;
|
/* THREAD_ATOMIC_START; */
|
||||||
if (IS_NOT_NULL(OnigTypeCClassTable)) {
|
if (IS_NOT_NULL(OnigTypeCClassTable)) {
|
||||||
onig_st_foreach(OnigTypeCClassTable, i_free_shared_class, 0);
|
onig_st_foreach(OnigTypeCClassTable, i_free_shared_class, 0);
|
||||||
onig_st_free_table(OnigTypeCClassTable);
|
onig_st_free_table(OnigTypeCClassTable);
|
||||||
OnigTypeCClassTable = NULL;
|
OnigTypeCClassTable = NULL;
|
||||||
}
|
}
|
||||||
THREAD_ATOMIC_END;
|
/* THREAD_ATOMIC_END; */
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -294,7 +294,9 @@ props.each do |name|
|
||||||
end
|
end
|
||||||
make_const(name, data[name], category)
|
make_const(name, data[name], category)
|
||||||
end
|
end
|
||||||
|
print "\n#ifdef USE_UNICODE_AGE_PROPERTIES"
|
||||||
ages = parse_age(data)
|
ages = parse_age(data)
|
||||||
|
puts "#endif /* USE_UNICODE_AGE_PROPERTIES */"
|
||||||
blocks = parse_block(data)
|
blocks = parse_block(data)
|
||||||
puts '#endif /* USE_UNICODE_PROPERTIES */'
|
puts '#endif /* USE_UNICODE_PROPERTIES */'
|
||||||
puts(<<'__HEREDOC')
|
puts(<<'__HEREDOC')
|
||||||
|
@ -304,7 +306,9 @@ __HEREDOC
|
||||||
POSIX_NAMES.each{|name|puts" CR_#{name},"}
|
POSIX_NAMES.each{|name|puts" CR_#{name},"}
|
||||||
puts "#ifdef USE_UNICODE_PROPERTIES"
|
puts "#ifdef USE_UNICODE_PROPERTIES"
|
||||||
props.each{|name| puts" CR_#{name},"}
|
props.each{|name| puts" CR_#{name},"}
|
||||||
|
puts "#ifdef USE_UNICODE_AGE_PROPERTIES"
|
||||||
ages.each{|name| puts" CR_#{constantize_agename(name)},"}
|
ages.each{|name| puts" CR_#{constantize_agename(name)},"}
|
||||||
|
puts "#endif /* USE_UNICODE_AGE_PROPERTIES */"
|
||||||
blocks.each{|name|puts" CR_#{name},"}
|
blocks.each{|name|puts" CR_#{name},"}
|
||||||
|
|
||||||
puts(<<'__HEREDOC')
|
puts(<<'__HEREDOC')
|
||||||
|
@ -340,12 +344,14 @@ aliases.each_pair do |k, v|
|
||||||
next unless v = name_to_index[v]
|
next unless v = name_to_index[v]
|
||||||
puts "%-40s %3d" % [k + ',', v]
|
puts "%-40s %3d" % [k + ',', v]
|
||||||
end
|
end
|
||||||
|
puts "#ifdef USE_UNICODE_AGE_PROPERTIES"
|
||||||
ages.each do |name|
|
ages.each do |name|
|
||||||
i += 1
|
i += 1
|
||||||
name = "age=#{name}"
|
name = "age=#{name}"
|
||||||
name_to_index[name] = i
|
name_to_index[name] = i
|
||||||
puts "%-40s %3d" % [name + ',', i]
|
puts "%-40s %3d" % [name + ',', i]
|
||||||
end
|
end
|
||||||
|
puts "#endif /* USE_UNICODE_AGE_PROPERTIES */"
|
||||||
blocks.each do |name|
|
blocks.each do |name|
|
||||||
i += 1
|
i += 1
|
||||||
name = normalize_propname(name)
|
name = normalize_propname(name)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче