37onig_error_code_to_format(OnigPosition code)
41 if (code >= 0)
return (UChar* )0;
45 p =
"mismatch";
break;
46 case ONIG_NO_SUPPORT_CONFIG:
47 p =
"no support in this configuration";
break;
49 p =
"failed to allocate memory";
break;
50 case ONIGERR_TYPE_BUG:
51 p =
"undefined type (bug)";
break;
52 case ONIGERR_PARSER_BUG:
53 p =
"internal parser error (bug)";
break;
54 case ONIGERR_STACK_BUG:
55 p =
"stack error (bug)";
break;
56 case ONIGERR_UNDEFINED_BYTECODE:
57 p =
"undefined bytecode (bug)";
break;
58 case ONIGERR_UNEXPECTED_BYTECODE:
59 p =
"unexpected bytecode (bug)";
break;
60 case ONIGERR_MATCH_STACK_LIMIT_OVER:
61 p =
"match-stack limit over";
break;
62 case ONIGERR_PARSE_DEPTH_LIMIT_OVER:
63 p =
"parse depth limit over";
break;
64 case ONIGERR_DEFAULT_ENCODING_IS_NOT_SET:
65 p =
"default multibyte-encoding is not set";
break;
67 case ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR:
68 p =
"can't convert to wide-char on specified multibyte-encoding";
break;
70 case ONIGERR_INVALID_ARGUMENT:
71 p =
"invalid argument";
break;
72 case ONIGERR_END_PATTERN_AT_LEFT_BRACE:
73 p =
"end pattern at left brace";
break;
75 case ONIGERR_END_PATTERN_AT_LEFT_BRACKET:
76 p =
"end pattern at left bracket";
break;
78 case ONIGERR_EMPTY_CHAR_CLASS:
79 p =
"empty char-class";
break;
80 case ONIGERR_PREMATURE_END_OF_CHAR_CLASS:
81 p =
"premature end of char-class";
break;
82 case ONIGERR_END_PATTERN_AT_ESCAPE:
83 p =
"end pattern at escape";
break;
84 case ONIGERR_END_PATTERN_AT_META:
85 p =
"end pattern at meta";
break;
86 case ONIGERR_END_PATTERN_AT_CONTROL:
87 p =
"end pattern at control";
break;
88 case ONIGERR_META_CODE_SYNTAX:
89 p =
"invalid meta-code syntax";
break;
90 case ONIGERR_CONTROL_CODE_SYNTAX:
91 p =
"invalid control-code syntax";
break;
92 case ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE:
93 p =
"char-class value at end of range";
break;
95 case ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE:
96 p =
"char-class value at start of range";
break;
98 case ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS:
99 p =
"unmatched range specifier in char-class";
break;
100 case ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED:
101 p =
"target of repeat operator is not specified";
break;
102 case ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID:
103 p =
"target of repeat operator is invalid";
break;
105 case ONIGERR_NESTED_REPEAT_OPERATOR:
106 p =
"nested repeat operator";
break;
108 case ONIGERR_UNMATCHED_CLOSE_PARENTHESIS:
109 p =
"unmatched close parenthesis";
break;
110 case ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS:
111 p =
"end pattern with unmatched parenthesis";
break;
112 case ONIGERR_END_PATTERN_IN_GROUP:
113 p =
"end pattern in group";
break;
114 case ONIGERR_UNDEFINED_GROUP_OPTION:
115 p =
"undefined group option";
break;
116 case ONIGERR_INVALID_POSIX_BRACKET_TYPE:
117 p =
"invalid POSIX bracket type";
break;
118 case ONIGERR_INVALID_LOOK_BEHIND_PATTERN:
119 p =
"invalid pattern in look-behind";
break;
120 case ONIGERR_INVALID_REPEAT_RANGE_PATTERN:
121 p =
"invalid repeat range {lower,upper}";
break;
122 case ONIGERR_INVALID_CONDITION_PATTERN:
123 p =
"invalid conditional pattern";
break;
124 case ONIGERR_TOO_BIG_NUMBER:
125 p =
"too big number";
break;
126 case ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE:
127 p =
"too big number for repeat range";
break;
128 case ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE:
129 p =
"upper is smaller than lower in repeat range";
break;
130 case ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS:
131 p =
"empty range in char class";
break;
133 case ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE:
134 p =
"mismatch multibyte code length in char-class range";
break;
136 case ONIGERR_TOO_MANY_MULTI_BYTE_RANGES:
137 p =
"too many multibyte code ranges are specified";
break;
138 case ONIGERR_TOO_SHORT_MULTI_BYTE_STRING:
139 p =
"too short multibyte code string";
break;
141 case ONIGERR_TOO_BIG_BACKREF_NUMBER:
142 p =
"too big backref number";
break;
144 case ONIGERR_INVALID_BACKREF:
145#ifdef USE_NAMED_GROUP
146 p =
"invalid backref number/name";
break;
148 p =
"invalid backref number";
break;
150 case ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED:
151 p =
"numbered backref/call is not allowed. (use name)";
break;
152 case ONIGERR_TOO_SHORT_DIGITS:
153 p =
"too short digits";
break;
154 case ONIGERR_TOO_LONG_WIDE_CHAR_VALUE:
155 p =
"too long wide-char value";
break;
156 case ONIGERR_EMPTY_GROUP_NAME:
157 p =
"group name is empty";
break;
158 case ONIGERR_INVALID_GROUP_NAME:
159 p =
"invalid group name <%n>";
break;
160 case ONIGERR_INVALID_CHAR_IN_GROUP_NAME:
161#ifdef USE_NAMED_GROUP
162 p =
"invalid char in group name <%n>";
break;
164 p =
"invalid char in group number <%n>";
break;
166 case ONIGERR_UNDEFINED_NAME_REFERENCE:
167 p =
"undefined name <%n> reference";
break;
168 case ONIGERR_UNDEFINED_GROUP_REFERENCE:
169 p =
"undefined group <%n> reference";
break;
170 case ONIGERR_MULTIPLEX_DEFINED_NAME:
171 p =
"multiplex defined name <%n>";
break;
172 case ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL:
173 p =
"multiplex definition name <%n> call";
break;
174 case ONIGERR_NEVER_ENDING_RECURSION:
175 p =
"never ending recursion";
break;
176#ifdef USE_CAPTURE_HISTORY
177 case ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY:
178 p =
"group number is too big for capture history";
break;
180 case ONIGERR_INVALID_CHAR_PROPERTY_NAME:
181 p =
"invalid character property name {%n}";
break;
182 case ONIGERR_TOO_MANY_RANGE_REPEAT:
183 p =
"too many range repeat";
break;
184 case ONIGERR_TOO_MANY_NULL_CHECK:
185 p =
"too many null check";
break;
186 case ONIGERR_TOO_MANY_CAPTURE_GROUPS:
187 p =
"too many capture groups are specified";
break;
188 case ONIGERR_INVALID_CODE_POINT_VALUE:
189 p =
"invalid code point value";
break;
190 case ONIGERR_TOO_BIG_WIDE_CHAR_VALUE:
191 p =
"too big wide-char value";
break;
192 case ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION:
193 p =
"not supported encoding combination";
break;
194 case ONIGERR_INVALID_COMBINATION_OF_OPTIONS:
195 p =
"invalid combination of options";
break;
198 p =
"undefined error code";
break;
204static void sprint_byte(
char* s,
unsigned int v)
206 xsnprintf(s, 3,
"%02x", (v & 0377));
209static void sprint_byte_with_x(
char* s,
unsigned int v)
211 xsnprintf(s, 5,
"\\x%02x", (v & 0377));
214static int to_ascii(
OnigEncoding enc, UChar *s, UChar *end,
215 UChar buf[],
int buf_size,
int *is_over)
221 if (ONIGENC_MBC_MINLEN(enc) > 1) {
225 code = ONIGENC_MBC_TO_CODE(enc, p, end);
227 if (code > 0xffff &&
len + 10 <= buf_size) {
228 sprint_byte_with_x((
char*)(&(buf[
len])), (
unsigned int)(code >> 24));
229 sprint_byte((
char*)(&(buf[
len+4])), (
unsigned int)(code >> 16));
230 sprint_byte((
char*)(&(buf[
len+6])), (
unsigned int)(code >> 8));
231 sprint_byte((
char*)(&(buf[
len+8])), (
unsigned int)code);
234 else if (
len + 6 <= buf_size) {
235 sprint_byte_with_x((
char*)(&(buf[
len])), (
unsigned int)(code >> 8));
236 sprint_byte((
char*)(&(buf[
len+4])), (
unsigned int)code);
244 buf[
len++] = (UChar )code;
247 p += enclen(enc, p, end);
248 if (
len >= buf_size)
break;
251 *is_over = ((p < end) ? 1 : 0);
254 len = (int )MIN((end - s), buf_size);
255 xmemcpy(buf, s, (
size_t )
len);
256 *is_over = ((buf_size < (end - s)) ? 1 : 0);
264#define MAX_ERROR_PAR_LEN 50
267onig_error_code_to_str(UChar* s, OnigPosition code, ...)
273 UChar parbuf[MAX_ERROR_PAR_LEN];
276 va_start(vargs, code);
279 case ONIGERR_UNDEFINED_NAME_REFERENCE:
280 case ONIGERR_UNDEFINED_GROUP_REFERENCE:
281 case ONIGERR_MULTIPLEX_DEFINED_NAME:
282 case ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL:
283 case ONIGERR_INVALID_GROUP_NAME:
284 case ONIGERR_INVALID_CHAR_IN_GROUP_NAME:
285 case ONIGERR_INVALID_CHAR_PROPERTY_NAME:
287 len = to_ascii(einfo->enc, einfo->par, einfo->par_end,
288 parbuf, MAX_ERROR_PAR_LEN - 3, &is_over);
289 q = onig_error_code_to_format(code);
295 xmemcpy(p, parbuf,
len);
298 xmemcpy(p,
"...", 3);
316 q = onig_error_code_to_format(code);
318 len = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, q);
333onig_vsnprintf_with_pattern(UChar buf[],
int bufsize,
OnigEncoding enc,
334 UChar* pat, UChar* pat_end,
const char *fmt, va_list args)
341 n = xvsnprintf((
char* )buf, bufsize, (
const char* )fmt, args);
343 need = (pat_end - pat) * 4 + 4;
345 if (n + need < (
size_t )bufsize) {
346 static const char sep[] =
": /";
347 memcpy((
char* )buf + n, sep,
sizeof(sep));
348 s = buf + onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, buf);
351 while (p < pat_end) {
352 if (ONIGENC_IS_MBC_HEAD(enc, p, pat_end)) {
353 len = enclen(enc, p, pat_end);
354 if (ONIGENC_MBC_MINLEN(enc) == 1) {
355 while (
len-- > 0) *s++ = *p++;
361 sprint_byte_with_x((
char* )bs, (
unsigned int )(*p++));
362 blen = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, bs);
364 while (blen-- > 0) *s++ = *bp++;
368 else if (*p ==
'\\') {
370 len = enclen(enc, p, pat_end);
371 while (
len-- > 0) *s++ = *p++;
373 else if (*p ==
'/') {
374 *s++ = (
unsigned char )
'\\';
377 else if (!ONIGENC_IS_CODE_PRINT(enc, *p) &&
378 (!ONIGENC_IS_CODE_SPACE(enc, *p) ||
379 ONIGENC_IS_CODE_CNTRL(enc, *p))) {
380 sprint_byte_with_x((
char* )bs, (
unsigned int )(*p++));
381 len = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, bs);
383 while (
len-- > 0) *s++ = *bp++;
397onig_snprintf_with_pattern(UChar buf[],
int bufsize,
OnigEncoding enc,
398 UChar* pat, UChar* pat_end,
const char *fmt, ...)
402 onig_vsnprintf_with_pattern(buf, bufsize, enc,
403 pat, pat_end, fmt, args);
int len
Length of the buffer.