/********************************************************************** | |
regsyntax.c - Oniguruma (regular expression library) | |
**********************************************************************/ | |
/*- | |
* Copyright (c) 2002-2019 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_O_BRACE_OCTAL | | |
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_PLUS_POSSESSIVE_REPEAT | ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL | | |
ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE | | |
ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP | | |
ONIG_SYN_OP2_QMARK_BRACE_CALLOUT_CONTENTS | | |
ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME | | |
ONIG_SYN_OP2_ESC_X_Y_TEXT_SEGMENT | | |
ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY | | |
ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT | | |
ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP | | |
ONIG_SYN_OP2_ESC_CAPITAL_R_GENERAL_NEWLINE | | |
ONIG_SYN_OP2_ESC_CAPITAL_N_O_SUPER_DOT ) | |
, 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_O_BRACE_OCTAL | | |
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_PLUS_POSSESSIVE_REPEAT | ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL | | |
ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE | | |
ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP | | |
ONIG_SYN_OP2_QMARK_BRACE_CALLOUT_CONTENTS | | |
ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME | | |
ONIG_SYN_OP2_ESC_X_Y_TEXT_SEGMENT | | |
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 | | |
ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP | | |
ONIG_SYN_OP2_ESC_CAPITAL_R_GENERAL_NEWLINE | | |
ONIG_SYN_OP2_ESC_CAPITAL_N_O_SUPER_DOT | | |
ONIG_SYN_OP2_QMARK_PERL_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_ONIGURUMA; | |
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 */ |