Ruby  2.0.0p598(2014-11-13revision48408)
regsyntax.c
Go to the documentation of this file.
1 /**********************************************************************
2  regsyntax.c - Onigmo (Oniguruma-mod) (regular expression library)
3 **********************************************************************/
4 /*-
5  * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
6  * Copyright (c) 2011-2012 K.Takata <kentkt AT csc DOT jp>
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in the
16  * documentation and/or other materials provided with the distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28  * SUCH DAMAGE.
29  */
30 
31 #include "regint.h"
32 
34  0
36  , 0
38  ,
39  {
40  (OnigCodePoint )'\\' /* esc */
41  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */
42  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */
43  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
44  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
45  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
46  }
47 };
48 
52  , 0
53  , 0
55  ,
56  {
57  (OnigCodePoint )'\\' /* esc */
58  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */
59  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */
60  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
61  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
62  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
63  }
64 };
65 
70  , 0
76  ,
77  {
78  (OnigCodePoint )'\\' /* esc */
79  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */
80  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */
81  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
82  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
83  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
84  }
85 };
86 
97  ,
98  {
99  (OnigCodePoint )'\\' /* esc */
100  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */
101  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */
102  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
103  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
104  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
105  }
106 };
107 
116  , 0
119  ,
120  {
121  (OnigCodePoint )'\\' /* esc */
122  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */
123  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */
124  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
125  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
126  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
127  }
128 };
129 
132  , 0
135  ,
136  {
137  (OnigCodePoint )'\\' /* esc */
138  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */
139  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */
140  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
141  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
142  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
143  }
144 };
145 
159  ,
160  {
161  (OnigCodePoint )'\\' /* esc */
162  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */
163  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */
164  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
165  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
166  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
167  }
168 };
169 
170 /* Perl 5.8 */
185  ,
186  {
187  (OnigCodePoint )'\\' /* esc */
188  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */
189  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */
190  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
191  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
192  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
193  }
194 };
195 
196 /* Perl 5.8 + named group */
212  , ( SYN_GNU_REGEX_BV |
216  ,
217  {
218  (OnigCodePoint )'\\' /* esc */
219  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */
220  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */
221  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
222  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
223  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
224  }
225 };
226 
227 /* Perl 5.10+ */
249  , ( SYN_GNU_REGEX_BV |
253  ,
254  {
255  (OnigCodePoint )'\\' /* esc */
256  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */
257  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */
258  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
259  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
260  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
261  }
262 };
263 
278  , ( SYN_GNU_REGEX_BV |
281  ,
282  {
283  (OnigCodePoint )'\\' /* esc */
284  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */
285  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */
286  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
287  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
288  , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
289  }
290 };
291 
292 
293 
294 extern int
296 {
297  if (IS_NULL(syntax))
298  syntax = ONIG_SYNTAX_RUBY;
299 
300  OnigDefaultSyntax = syntax;
301  return 0;
302 }
303 
304 extern void
306 {
307  *to = *from;
308 }
309 
310 extern void
311 onig_set_syntax_op(OnigSyntaxType* syntax, unsigned int op)
312 {
313  syntax->op = op;
314 }
315 
316 extern void
317 onig_set_syntax_op2(OnigSyntaxType* syntax, unsigned int op2)
318 {
319  syntax->op2 = op2;
320 }
321 
322 extern void
323 onig_set_syntax_behavior(OnigSyntaxType* syntax, unsigned int behavior)
324 {
325  syntax->behavior = behavior;
326 }
327 
328 extern void
330 {
331  syntax->options = options;
332 }
333 
334 extern unsigned int
336 {
337  return syntax->op;
338 }
339 
340 extern unsigned int
342 {
343  return syntax->op2;
344 }
345 
346 extern unsigned int
348 {
349  return syntax->behavior;
350 }
351 
352 extern OnigOptionType
354 {
355  return syntax->options;
356 }
357 
358 #ifdef USE_VARIABLE_META_CHARS
360  unsigned int what, OnigCodePoint code)
361 {
362  switch (what) {
364  enc->meta_char_table.esc = code;
365  break;
368  break;
371  break;
374  break;
377  break;
380  break;
381  default:
383  break;
384  }
385  return 0;
386 }
387 #endif /* USE_VARIABLE_META_CHARS */
#define ONIG_SYN_OP_ESC_CONTROL_CHARS
#define ONIG_SYN_OP_ESC_X_BRACE_HEX8
#define IS_NULL(p)
Definition: regint.h:278
#define ONIG_OPTION_WORD_BOUND_ALL_RANGE
OnigCodePoint anychar
Definition: ripper.y:152
unsigned int OnigOptionType
Definition: ripper.y:350
#define ONIG_SYNTAX_RUBY
#define ONIG_OPTION_NONE
#define ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND
code
Definition: tcltklib.c:3380
unsigned int onig_get_syntax_op(OnigSyntaxType *syntax)
Definition: regsyntax.c:335
#define ONIG_SYN_OP2_INEFFECTIVE_ESCAPE
#define ONIG_SYN_OP2_ESC_U_HEX4
#define ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END
#define ONIG_SYN_OP_ESC_B_WORD_BOUND
ONIG_EXTERN const OnigSyntaxType OnigSyntaxPerl
Definition: ripper.y:400
unsigned int OnigCodePoint
Definition: ripper.y:115
#define ONIG_META_CHAR_ANYTIME
#define ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL
#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME
ONIG_EXTERN const OnigSyntaxType OnigSyntaxPosixExtended
Definition: ripper.y:393
#define ONIG_SYN_OP_ESC_X_HEX2
VALUE enc
Definition: tcltklib.c:10310
#define ONIG_SYN_OP_LPAREN_SUBEXP
#define ONIG_META_CHAR_ANYCHAR_ANYTIME
#define ONIG_SYN_OP_VBAR_ALT
#define ONIG_SYN_OP_QMARK_ZERO_ONE
int onig_set_default_syntax(const OnigSyntaxType *syntax)
Definition: regsyntax.c:295
OnigCodePoint anytime
Definition: ripper.y:153
#define ONIGERR_INVALID_ARGUMENT
#define ONIG_SYN_OP2_ESC_CAPITAL_X_EXTENDED_GRAPHEME_CLUSTER
#define SYN_POSIX_COMMON_OP
Definition: regint.h:729
#define ONIG_SYN_OP_ESC_QMARK_ZERO_ONE
void onig_set_syntax_op2(OnigSyntaxType *syntax, unsigned int op2)
Definition: regsyntax.c:317
OnigCodePoint one_or_more_time
Definition: ripper.y:155
#define SYN_GNU_REGEX_OP
Definition: regint.h:736
unsigned int behavior
Definition: ripper.y:386
#define ONIG_SYN_OP2_ESC_CAPITAL_R_LINEBREAK
#define ONIG_SYN_OP2_ESC_V_VTAB
#define ONIG_SYN_OP_LINE_ANCHOR
#define ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR
#define ONIG_SYN_OP2_QMARK_SUBEXP_CALL
#define ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE
#define ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS
#define ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY
#define ONIG_SYN_OP2_CCLASS_SET_OP
#define ONIG_SYN_OP_ESC_OCTAL3
#define ONIG_SYN_OP_ESC_W_WORD
unsigned int onig_get_syntax_behavior(OnigSyntaxType *syntax)
Definition: regsyntax.c:347
unsigned int op2
Definition: ripper.y:385
#define ONIG_OPTION_CAPTURE_GROUP
#define ONIG_SYN_OP2_QMARK_GROUP_EFFECT
OnigCodePoint esc
Definition: ripper.y:151
OnigCodePoint zero_or_one_time
Definition: ripper.y:154
#define ONIG_OPTION_SINGLELINE
ONIG_EXTERN const OnigSyntaxType OnigSyntaxASIS
Definition: ripper.y:391
#define ONIG_SYN_OP_POSIX_BRACKET
#define ONIG_SYN_OP2_OPTION_PERL
#define ONIG_SYN_OP2_ESC_G_SUBEXP_CALL
unsigned int onig_get_syntax_op2(OnigSyntaxType *syntax)
Definition: regsyntax.c:341
#define ONIG_SYN_OP_QMARK_NON_GREEDY
ONIG_EXTERN const OnigSyntaxType OnigSyntaxGnuRegex
Definition: ripper.y:396
#define ONIG_META_CHAR_ONE_OR_MORE_TIME
#define ONIG_SYN_OP_ASTERISK_ZERO_INF
#define SYN_GNU_REGEX_BV
Definition: regint.h:749
#define ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC
#define ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP
ONIG_EXTERN const OnigSyntaxType OnigSyntaxPerl58
Definition: ripper.y:398
void onig_set_syntax_op(OnigSyntaxType *syntax, unsigned int op)
Definition: regsyntax.c:311
#define ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV
#define ONIG_SYN_OP_DECIMAL_BACKREF
#define ONIG_SYN_OP_ESC_PLUS_ONE_INF
#define ONIG_SYN_OP_PLUS_ONE_INF
#define ONIG_META_CHAR_ESCAPE
ONIG_EXTERN const OnigSyntaxType OnigSyntaxJava
Definition: ripper.y:397
#define ONIG_SYN_OP_ESC_VBAR_ALT
#define ONIG_SYN_OP_BRACE_INTERVAL
#define ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC
#define ONIG_SYN_OP2_ESC_K_NAMED_BACKREF
void onig_set_syntax_behavior(OnigSyntaxType *syntax, unsigned int behavior)
Definition: regsyntax.c:323
#define ONIG_OPTION_MULTILINE
#define ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP
#define ONIG_INEFFECTIVE_META_CHAR
#define ONIG_SYN_OP2_ESC_G_BRACE_BACKREF
OnigOptionType onig_get_syntax_options(OnigSyntaxType *syntax)
Definition: regsyntax.c:353
void onig_set_syntax_options(OnigSyntaxType *syntax, OnigOptionType options)
Definition: regsyntax.c:329
ONIG_EXTERN const OnigSyntaxType OnigSyntaxEmacs
Definition: ripper.y:394
ONIG_EXTERN const OnigSyntaxType OnigSyntaxPosixBasic
Definition: ripper.y:392
#define ONIG_SYN_OP_BRACKET_CC
#define ONIG_OPTION_ASCII_RANGE
#define ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC
#define ONIG_SYN_CONTEXT_INDEP_ANCHORS
ONIG_EXTERN const OnigSyntaxType OnigSyntaxPython
Definition: ripper.y:402
#define ONIG_SYN_OP_DOT_ANYCHAR
#define ONIG_META_CHAR_ANYCHAR
OnigMetaCharTableType meta_char_table
Definition: ripper.y:388
#define ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT
#define ONIG_SYN_OP_ESC_C_CONTROL
#define ONIG_SYN_OP2_QMARK_CAPITAL_P_NAMED_GROUP
#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME_CALL
void onig_copy_syntax(OnigSyntaxType *to, const OnigSyntaxType *from)
Definition: regsyntax.c:305
#define ONIG_META_CHAR_ZERO_OR_ONE_TIME
#define ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS
int onig_set_meta_char(OnigSyntaxType *enc, unsigned int what, OnigCodePoint code)
Definition: regsyntax.c:359
options
Definition: tcltklib.c:4480
ONIG_EXTERN const OnigSyntaxType OnigSyntaxPerl58_NG
Definition: ripper.y:399
#define ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP
unsigned int op
Definition: ripper.y:384
#define ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP
OnigOptionType options
Definition: ripper.y:387
#define ONIG_SYN_OP_ESC_BRACE_INTERVAL
ONIG_EXTERN const OnigSyntaxType OnigSyntaxGrep
Definition: ripper.y:395
#define ONIG_SYN_OP_ESC_LPAREN_SUBEXP
#define ONIG_SYN_OP2_QMARK_LPAREN_CONDITION
ONIG_EXTERN const OnigSyntaxType * OnigDefaultSyntax
Definition: ripper.y:419
OnigCodePoint anychar_anytime
Definition: ripper.y:156
#define ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT