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