1 : /**********************************************************************
2 : regsyntax.c - Oniguruma (regular expression library)
3 : **********************************************************************/
4 : /*-
5 : * Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
6 : * All rights reserved.
7 : *
8 : * Redistribution and use in source and binary forms, with or without
9 : * modification, are permitted provided that the following conditions
10 : * are met:
11 : * 1. Redistributions of source code must retain the above copyright
12 : * notice, this list of conditions and the following disclaimer.
13 : * 2. Redistributions in binary form must reproduce the above copyright
14 : * notice, this list of conditions and the following disclaimer in the
15 : * documentation and/or other materials provided with the distribution.
16 : *
17 : * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18 : * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 : * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 : * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21 : * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 : * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 : * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 : * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 : * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 : * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 : * SUCH DAMAGE.
28 : */
29 :
30 : #include "regint.h"
31 :
32 : OnigSyntaxType OnigSyntaxASIS = {
33 : 0
34 : , ONIG_SYN_OP2_INEFFECTIVE_ESCAPE
35 : , 0
36 : , ONIG_OPTION_NONE
37 : };
38 :
39 : OnigSyntaxType OnigSyntaxPosixBasic = {
40 : ( SYN_POSIX_COMMON_OP | ONIG_SYN_OP_ESC_LPAREN_SUBEXP |
41 : ONIG_SYN_OP_ESC_BRACE_INTERVAL )
42 : , 0
43 : , 0
44 : , ( ONIG_OPTION_SINGLELINE | ONIG_OPTION_MULTILINE )
45 : };
46 :
47 : OnigSyntaxType OnigSyntaxPosixExtended = {
48 : ( SYN_POSIX_COMMON_OP | ONIG_SYN_OP_LPAREN_SUBEXP |
49 : ONIG_SYN_OP_BRACE_INTERVAL |
50 : ONIG_SYN_OP_PLUS_ONE_INF | ONIG_SYN_OP_QMARK_ZERO_ONE | ONIG_SYN_OP_VBAR_ALT )
51 : , 0
52 : , ( ONIG_SYN_CONTEXT_INDEP_ANCHORS |
53 : ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS | ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS |
54 : ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP |
55 : ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC )
56 : , ( ONIG_OPTION_SINGLELINE | ONIG_OPTION_MULTILINE )
57 : };
58 :
59 : OnigSyntaxType OnigSyntaxEmacs = {
60 : ( ONIG_SYN_OP_DOT_ANYCHAR | ONIG_SYN_OP_BRACKET_CC |
61 : ONIG_SYN_OP_ESC_BRACE_INTERVAL |
62 : ONIG_SYN_OP_ESC_LPAREN_SUBEXP | ONIG_SYN_OP_ESC_VBAR_ALT |
63 : ONIG_SYN_OP_ASTERISK_ZERO_INF | ONIG_SYN_OP_PLUS_ONE_INF |
64 : ONIG_SYN_OP_QMARK_ZERO_ONE | ONIG_SYN_OP_DECIMAL_BACKREF |
65 : ONIG_SYN_OP_LINE_ANCHOR | ONIG_SYN_OP_ESC_CONTROL_CHARS )
66 : , ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR
67 : , ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC
68 : , ONIG_OPTION_NONE
69 : };
70 :
71 : OnigSyntaxType OnigSyntaxGrep = {
72 : ( ONIG_SYN_OP_DOT_ANYCHAR | ONIG_SYN_OP_BRACKET_CC | ONIG_SYN_OP_POSIX_BRACKET |
73 : ONIG_SYN_OP_ESC_BRACE_INTERVAL | ONIG_SYN_OP_ESC_LPAREN_SUBEXP |
74 : ONIG_SYN_OP_ESC_VBAR_ALT |
75 : ONIG_SYN_OP_ASTERISK_ZERO_INF | ONIG_SYN_OP_ESC_PLUS_ONE_INF |
76 : ONIG_SYN_OP_ESC_QMARK_ZERO_ONE | ONIG_SYN_OP_LINE_ANCHOR |
77 : ONIG_SYN_OP_ESC_W_WORD | ONIG_SYN_OP_ESC_B_WORD_BOUND |
78 : ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END | ONIG_SYN_OP_DECIMAL_BACKREF )
79 : , 0
80 : , ( ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC | ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC )
81 : , ONIG_OPTION_NONE
82 : };
83 :
84 : OnigSyntaxType OnigSyntaxGnuRegex = {
85 : SYN_GNU_REGEX_OP
86 : , 0
87 : , SYN_GNU_REGEX_BV
88 : , ONIG_OPTION_NONE
89 : };
90 :
91 : OnigSyntaxType OnigSyntaxJava = {
92 : (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |
93 : ONIG_SYN_OP_ESC_CONTROL_CHARS | ONIG_SYN_OP_ESC_C_CONTROL |
94 : ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 )
95 : & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )
96 : , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE | ONIG_SYN_OP2_QMARK_GROUP_EFFECT |
97 : ONIG_SYN_OP2_OPTION_PERL | ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT |
98 : ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL | ONIG_SYN_OP2_CCLASS_SET_OP |
99 : ONIG_SYN_OP2_ESC_V_VTAB | ONIG_SYN_OP2_ESC_U_HEX4 |
100 : ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY )
101 : , ( SYN_GNU_REGEX_BV | ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND )
102 : , ONIG_OPTION_SINGLELINE
103 : };
104 :
105 : OnigSyntaxType OnigSyntaxPerl = {
106 : (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |
107 : ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 |
108 : ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_CONTROL_CHARS |
109 : ONIG_SYN_OP_ESC_C_CONTROL )
110 : & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )
111 : , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE |
112 : ONIG_SYN_OP2_QMARK_GROUP_EFFECT | ONIG_SYN_OP2_OPTION_PERL |
113 : ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY |
114 : ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT |
115 : ONIG_SYN_OP2_CHAR_PROPERTY_PREFIX_IS )
116 : , SYN_GNU_REGEX_BV
117 : , ONIG_OPTION_SINGLELINE
118 : };
119 :
120 : /* Perl + named group */
121 : OnigSyntaxType OnigSyntaxPerl_NG = {
122 : (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |
123 : ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 |
124 : ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_CONTROL_CHARS |
125 : ONIG_SYN_OP_ESC_C_CONTROL )
126 : & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )
127 : , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE |
128 : ONIG_SYN_OP2_QMARK_GROUP_EFFECT | ONIG_SYN_OP2_OPTION_PERL |
129 : ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY |
130 : ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT |
131 : ONIG_SYN_OP2_CHAR_PROPERTY_PREFIX_IS |
132 : ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP |
133 : ONIG_SYN_OP2_ESC_K_NAMED_BACKREF |
134 : ONIG_SYN_OP2_ESC_G_SUBEXP_CALL )
135 : , ( SYN_GNU_REGEX_BV |
136 : ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP |
137 : ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME )
138 : , ONIG_OPTION_SINGLELINE
139 : };
140 :
141 :
142 :
143 : extern int
144 : onig_set_default_syntax(OnigSyntaxType* syntax)
145 0 : {
146 0 : if (IS_NULL(syntax))
147 0 : syntax = ONIG_SYNTAX_RUBY;
148 :
149 0 : OnigDefaultSyntax = syntax;
150 0 : return 0;
151 : }
152 :
153 : extern void
154 : onig_copy_syntax(OnigSyntaxType* to, OnigSyntaxType* from)
155 0 : {
156 0 : *to = *from;
157 0 : }
158 :
159 : extern void
160 : onig_set_syntax_op(OnigSyntaxType* syntax, unsigned int op)
161 0 : {
162 0 : syntax->op = op;
163 0 : }
164 :
165 : extern void
166 : onig_set_syntax_op2(OnigSyntaxType* syntax, unsigned int op2)
167 0 : {
168 0 : syntax->op2 = op2;
169 0 : }
170 :
171 : extern void
172 : onig_set_syntax_behavior(OnigSyntaxType* syntax, unsigned int behavior)
173 0 : {
174 0 : syntax->behavior = behavior;
175 0 : }
176 :
177 : extern void
178 : onig_set_syntax_options(OnigSyntaxType* syntax, OnigOptionType options)
179 0 : {
180 0 : syntax->options = options;
181 0 : }
182 :
183 : extern unsigned int
184 : onig_get_syntax_op(OnigSyntaxType* syntax)
185 0 : {
186 0 : return syntax->op;
187 : }
188 :
189 : extern unsigned int
190 : onig_get_syntax_op2(OnigSyntaxType* syntax)
191 0 : {
192 0 : return syntax->op2;
193 : }
194 :
195 : extern unsigned int
196 : onig_get_syntax_behavior(OnigSyntaxType* syntax)
197 0 : {
198 0 : return syntax->behavior;
199 : }
200 :
201 : extern OnigOptionType
202 : onig_get_syntax_options(OnigSyntaxType* syntax)
203 0 : {
204 0 : return syntax->options;
205 : }
206 :
207 : #ifdef USE_VARIABLE_META_CHARS
208 : extern int onig_set_meta_char(OnigEncoding enc,
209 : unsigned int what, OnigCodePoint code)
210 0 : {
211 0 : switch (what) {
212 : case ONIG_META_CHAR_ESCAPE:
213 0 : enc->meta_char_table.esc = code;
214 0 : break;
215 : case ONIG_META_CHAR_ANYCHAR:
216 0 : enc->meta_char_table.anychar = code;
217 0 : break;
218 : case ONIG_META_CHAR_ANYTIME:
219 0 : enc->meta_char_table.anytime = code;
220 0 : break;
221 : case ONIG_META_CHAR_ZERO_OR_ONE_TIME:
222 0 : enc->meta_char_table.zero_or_one_time = code;
223 0 : break;
224 : case ONIG_META_CHAR_ONE_OR_MORE_TIME:
225 0 : enc->meta_char_table.one_or_more_time = code;
226 0 : break;
227 : case ONIG_META_CHAR_ANYCHAR_ANYTIME:
228 0 : enc->meta_char_table.anychar_anytime = code;
229 0 : break;
230 : default:
231 0 : return ONIGERR_INVALID_ARGUMENT;
232 : break;
233 : }
234 0 : return 0;
235 : }
236 : #endif /* USE_VARIABLE_META_CHARS */
|