| /********************************************************************** | |
| regsyntax.c - Oniguruma (regular expression library) | |
| **********************************************************************/ | |
| /*- | |
| * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> | |
| * All rights reserved. | |
| * | |
| * Redistribution and use in source and binary forms, with or without | |
| * modification, are permitted provided that the following conditions | |
| * are met: | |
| * 1. Redistributions of source code must retain the above copyright | |
| * notice, this list of conditions and the following disclaimer. | |
| * 2. Redistributions in binary form must reproduce the above copyright | |
| * notice, this list of conditions and the following disclaimer in the | |
| * documentation and/or other materials provided with the distribution. | |
| * | |
| * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | |
| * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
| * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | |
| * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
| * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
| * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
| * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
| * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
| * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
| * SUCH DAMAGE. | |
| */ | |
| #include "regint.h" | |
| OnigSyntaxType OnigSyntaxASIS = { | |
| 0 | |
| , ONIG_SYN_OP2_INEFFECTIVE_ESCAPE | |
| , 0 | |
| , ONIG_OPTION_NONE | |
| , | |
| { | |
| (OnigCodePoint )'\\' /* esc */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ | |
| } | |
| }; | |
| OnigSyntaxType OnigSyntaxPosixBasic = { | |
| ( SYN_POSIX_COMMON_OP | ONIG_SYN_OP_ESC_LPAREN_SUBEXP | | |
| ONIG_SYN_OP_ESC_BRACE_INTERVAL ) | |
| , 0 | |
| , 0 | |
| , ( ONIG_OPTION_SINGLELINE | ONIG_OPTION_MULTILINE ) | |
| , | |
| { | |
| (OnigCodePoint )'\\' /* esc */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ | |
| } | |
| }; | |
| OnigSyntaxType OnigSyntaxPosixExtended = { | |
| ( SYN_POSIX_COMMON_OP | ONIG_SYN_OP_LPAREN_SUBEXP | | |
| ONIG_SYN_OP_BRACE_INTERVAL | | |
| ONIG_SYN_OP_PLUS_ONE_INF | ONIG_SYN_OP_QMARK_ZERO_ONE | ONIG_SYN_OP_VBAR_ALT ) | |
| , 0 | |
| , ( ONIG_SYN_CONTEXT_INDEP_ANCHORS | | |
| ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS | ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS | | |
| ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP | | |
| ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC ) | |
| , ( ONIG_OPTION_SINGLELINE | ONIG_OPTION_MULTILINE ) | |
| , | |
| { | |
| (OnigCodePoint )'\\' /* esc */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ | |
| } | |
| }; | |
| OnigSyntaxType OnigSyntaxEmacs = { | |
| ( ONIG_SYN_OP_DOT_ANYCHAR | ONIG_SYN_OP_BRACKET_CC | | |
| ONIG_SYN_OP_ESC_BRACE_INTERVAL | | |
| ONIG_SYN_OP_ESC_LPAREN_SUBEXP | ONIG_SYN_OP_ESC_VBAR_ALT | | |
| ONIG_SYN_OP_ASTERISK_ZERO_INF | ONIG_SYN_OP_PLUS_ONE_INF | | |
| ONIG_SYN_OP_QMARK_ZERO_ONE | ONIG_SYN_OP_DECIMAL_BACKREF | | |
| ONIG_SYN_OP_LINE_ANCHOR | ONIG_SYN_OP_ESC_CONTROL_CHARS ) | |
| , ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR | |
| , ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC | |
| , ONIG_OPTION_NONE | |
| , | |
| { | |
| (OnigCodePoint )'\\' /* esc */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ | |
| } | |
| }; | |
| OnigSyntaxType OnigSyntaxGrep = { | |
| ( ONIG_SYN_OP_DOT_ANYCHAR | ONIG_SYN_OP_BRACKET_CC | ONIG_SYN_OP_POSIX_BRACKET | | |
| ONIG_SYN_OP_ESC_BRACE_INTERVAL | ONIG_SYN_OP_ESC_LPAREN_SUBEXP | | |
| ONIG_SYN_OP_ESC_VBAR_ALT | | |
| ONIG_SYN_OP_ASTERISK_ZERO_INF | ONIG_SYN_OP_ESC_PLUS_ONE_INF | | |
| ONIG_SYN_OP_ESC_QMARK_ZERO_ONE | ONIG_SYN_OP_LINE_ANCHOR | | |
| ONIG_SYN_OP_ESC_W_WORD | ONIG_SYN_OP_ESC_B_WORD_BOUND | | |
| ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END | ONIG_SYN_OP_DECIMAL_BACKREF ) | |
| , 0 | |
| , ( ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC | ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC ) | |
| , ONIG_OPTION_NONE | |
| , | |
| { | |
| (OnigCodePoint )'\\' /* esc */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ | |
| } | |
| }; | |
| OnigSyntaxType OnigSyntaxGnuRegex = { | |
| SYN_GNU_REGEX_OP | |
| , 0 | |
| , SYN_GNU_REGEX_BV | |
| , ONIG_OPTION_NONE | |
| , | |
| { | |
| (OnigCodePoint )'\\' /* esc */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ | |
| } | |
| }; | |
| OnigSyntaxType OnigSyntaxJava = { | |
| (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY | | |
| ONIG_SYN_OP_ESC_CONTROL_CHARS | ONIG_SYN_OP_ESC_C_CONTROL | | |
| ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 ) | |
| & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END ) | |
| , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE | ONIG_SYN_OP2_QMARK_GROUP_EFFECT | | |
| ONIG_SYN_OP2_OPTION_PERL | ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT | | |
| ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL | ONIG_SYN_OP2_CCLASS_SET_OP | | |
| ONIG_SYN_OP2_ESC_V_VTAB | ONIG_SYN_OP2_ESC_U_HEX4 | | |
| ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY ) | |
| , ( SYN_GNU_REGEX_BV | ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND ) | |
| , ONIG_OPTION_SINGLELINE | |
| , | |
| { | |
| (OnigCodePoint )'\\' /* esc */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ | |
| } | |
| }; | |
| OnigSyntaxType OnigSyntaxPerl = { | |
| (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY | | |
| ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 | | |
| ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_CONTROL_CHARS | | |
| ONIG_SYN_OP_ESC_C_CONTROL ) | |
| & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END ) | |
| , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE | | |
| ONIG_SYN_OP2_QMARK_GROUP_EFFECT | ONIG_SYN_OP2_OPTION_PERL | | |
| ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY | | |
| ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT ) | |
| , SYN_GNU_REGEX_BV | |
| , ONIG_OPTION_SINGLELINE | |
| , | |
| { | |
| (OnigCodePoint )'\\' /* esc */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ | |
| } | |
| }; | |
| /* Perl + named group */ | |
| OnigSyntaxType OnigSyntaxPerl_NG = { | |
| (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY | | |
| ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 | | |
| ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_CONTROL_CHARS | | |
| ONIG_SYN_OP_ESC_C_CONTROL ) | |
| & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END ) | |
| , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE | | |
| ONIG_SYN_OP2_QMARK_GROUP_EFFECT | ONIG_SYN_OP2_OPTION_PERL | | |
| ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY | | |
| ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT | | |
| ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP | | |
| ONIG_SYN_OP2_ESC_K_NAMED_BACKREF | | |
| ONIG_SYN_OP2_ESC_G_SUBEXP_CALL ) | |
| , ( SYN_GNU_REGEX_BV | | |
| ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP | | |
| ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME ) | |
| , ONIG_OPTION_SINGLELINE | |
| , | |
| { | |
| (OnigCodePoint )'\\' /* esc */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ | |
| , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ | |
| } | |
| }; | |
| extern int | |
| onig_set_default_syntax(OnigSyntaxType* syntax) | |
| { | |
| if (IS_NULL(syntax)) | |
| syntax = ONIG_SYNTAX_RUBY; | |
| OnigDefaultSyntax = syntax; | |
| return 0; | |
| } | |
| extern void | |
| onig_copy_syntax(OnigSyntaxType* to, OnigSyntaxType* from) | |
| { | |
| *to = *from; | |
| } | |
| extern void | |
| onig_set_syntax_op(OnigSyntaxType* syntax, unsigned int op) | |
| { | |
| syntax->op = op; | |
| } | |
| extern void | |
| onig_set_syntax_op2(OnigSyntaxType* syntax, unsigned int op2) | |
| { | |
| syntax->op2 = op2; | |
| } | |
| extern void | |
| onig_set_syntax_behavior(OnigSyntaxType* syntax, unsigned int behavior) | |
| { | |
| syntax->behavior = behavior; | |
| } | |
| extern void | |
| onig_set_syntax_options(OnigSyntaxType* syntax, OnigOptionType options) | |
| { | |
| syntax->options = options; | |
| } | |
| extern unsigned int | |
| onig_get_syntax_op(OnigSyntaxType* syntax) | |
| { | |
| return syntax->op; | |
| } | |
| extern unsigned int | |
| onig_get_syntax_op2(OnigSyntaxType* syntax) | |
| { | |
| return syntax->op2; | |
| } | |
| extern unsigned int | |
| onig_get_syntax_behavior(OnigSyntaxType* syntax) | |
| { | |
| return syntax->behavior; | |
| } | |
| extern OnigOptionType | |
| onig_get_syntax_options(OnigSyntaxType* syntax) | |
| { | |
| return syntax->options; | |
| } | |
| #ifdef USE_VARIABLE_META_CHARS | |
| extern int onig_set_meta_char(OnigSyntaxType* enc, | |
| unsigned int what, OnigCodePoint code) | |
| { | |
| switch (what) { | |
| case ONIG_META_CHAR_ESCAPE: | |
| enc->meta_char_table.esc = code; | |
| break; | |
| case ONIG_META_CHAR_ANYCHAR: | |
| enc->meta_char_table.anychar = code; | |
| break; | |
| case ONIG_META_CHAR_ANYTIME: | |
| enc->meta_char_table.anytime = code; | |
| break; | |
| case ONIG_META_CHAR_ZERO_OR_ONE_TIME: | |
| enc->meta_char_table.zero_or_one_time = code; | |
| break; | |
| case ONIG_META_CHAR_ONE_OR_MORE_TIME: | |
| enc->meta_char_table.one_or_more_time = code; | |
| break; | |
| case ONIG_META_CHAR_ANYCHAR_ANYTIME: | |
| enc->meta_char_table.anychar_anytime = code; | |
| break; | |
| default: | |
| return ONIGERR_INVALID_ARGUMENT; | |
| break; | |
| } | |
| return 0; | |
| } | |
| #endif /* USE_VARIABLE_META_CHARS */ |