Ruby  2.0.0p247(2013-06-27revision41674)
regsyntax.c
Go to the documentation of this file.
00001 /**********************************************************************
00002   regsyntax.c -  Onigmo (Oniguruma-mod) (regular expression library)
00003 **********************************************************************/
00004 /*-
00005  * Copyright (c) 2002-2006  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
00006  * Copyright (c) 2011-2012  K.Takata  <kentkt AT csc DOT jp>
00007  * All rights reserved.
00008  *
00009  * Redistribution and use in source and binary forms, with or without
00010  * modification, are permitted provided that the following conditions
00011  * are met:
00012  * 1. Redistributions of source code must retain the above copyright
00013  *    notice, this list of conditions and the following disclaimer.
00014  * 2. Redistributions in binary form must reproduce the above copyright
00015  *    notice, this list of conditions and the following disclaimer in the
00016  *    documentation and/or other materials provided with the distribution.
00017  *
00018  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
00019  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00020  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00021  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
00022  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00023  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
00024  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00025  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00026  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
00027  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00028  * SUCH DAMAGE.
00029  */
00030 
00031 #include "regint.h"
00032 
00033 const OnigSyntaxType OnigSyntaxASIS = {
00034     0
00035   , ONIG_SYN_OP2_INEFFECTIVE_ESCAPE
00036   , 0
00037   , ONIG_OPTION_NONE
00038   ,
00039   {
00040       (OnigCodePoint )'\\'                       /* esc */
00041     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.'  */
00042     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*'  */
00043     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
00044     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
00045     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
00046   }
00047 };
00048 
00049 const OnigSyntaxType OnigSyntaxPosixBasic = {
00050   ( SYN_POSIX_COMMON_OP | ONIG_SYN_OP_ESC_LPAREN_SUBEXP |
00051     ONIG_SYN_OP_ESC_BRACE_INTERVAL )
00052   , 0
00053   , 0
00054   , ( ONIG_OPTION_SINGLELINE | ONIG_OPTION_MULTILINE )
00055   ,
00056   {
00057       (OnigCodePoint )'\\'                       /* esc */
00058     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.'  */
00059     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*'  */
00060     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
00061     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
00062     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
00063   }
00064 };
00065 
00066 const OnigSyntaxType OnigSyntaxPosixExtended = {
00067   ( SYN_POSIX_COMMON_OP | ONIG_SYN_OP_LPAREN_SUBEXP |
00068     ONIG_SYN_OP_BRACE_INTERVAL |
00069     ONIG_SYN_OP_PLUS_ONE_INF | ONIG_SYN_OP_QMARK_ZERO_ONE | ONIG_SYN_OP_VBAR_ALT )
00070   , 0
00071   , ( ONIG_SYN_CONTEXT_INDEP_ANCHORS |
00072       ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS | ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS |
00073       ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP |
00074       ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC )
00075   , ( ONIG_OPTION_SINGLELINE | ONIG_OPTION_MULTILINE )
00076   ,
00077   {
00078       (OnigCodePoint )'\\'                       /* esc */
00079     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.'  */
00080     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*'  */
00081     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
00082     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
00083     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
00084   }
00085 };
00086 
00087 const OnigSyntaxType OnigSyntaxEmacs = {
00088   ( ONIG_SYN_OP_DOT_ANYCHAR | ONIG_SYN_OP_BRACKET_CC |
00089     ONIG_SYN_OP_ESC_BRACE_INTERVAL |
00090     ONIG_SYN_OP_ESC_LPAREN_SUBEXP | ONIG_SYN_OP_ESC_VBAR_ALT |
00091     ONIG_SYN_OP_ASTERISK_ZERO_INF | ONIG_SYN_OP_PLUS_ONE_INF |
00092     ONIG_SYN_OP_QMARK_ZERO_ONE | ONIG_SYN_OP_DECIMAL_BACKREF |
00093     ONIG_SYN_OP_LINE_ANCHOR | ONIG_SYN_OP_ESC_CONTROL_CHARS )
00094   , ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR
00095   , ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC
00096   , ONIG_OPTION_NONE
00097   ,
00098   {
00099       (OnigCodePoint )'\\'                       /* esc */
00100     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.'  */
00101     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*'  */
00102     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
00103     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
00104     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
00105   }
00106 };
00107 
00108 const OnigSyntaxType OnigSyntaxGrep = {
00109   ( ONIG_SYN_OP_DOT_ANYCHAR | ONIG_SYN_OP_BRACKET_CC | ONIG_SYN_OP_POSIX_BRACKET |
00110     ONIG_SYN_OP_ESC_BRACE_INTERVAL | ONIG_SYN_OP_ESC_LPAREN_SUBEXP |
00111     ONIG_SYN_OP_ESC_VBAR_ALT |
00112     ONIG_SYN_OP_ASTERISK_ZERO_INF | ONIG_SYN_OP_ESC_PLUS_ONE_INF |
00113     ONIG_SYN_OP_ESC_QMARK_ZERO_ONE | ONIG_SYN_OP_LINE_ANCHOR |
00114     ONIG_SYN_OP_ESC_W_WORD | ONIG_SYN_OP_ESC_B_WORD_BOUND |
00115     ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END | ONIG_SYN_OP_DECIMAL_BACKREF )
00116   , 0
00117   , ( ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC | ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC )
00118   , ONIG_OPTION_NONE
00119   ,
00120   {
00121       (OnigCodePoint )'\\'                       /* esc */
00122     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.'  */
00123     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*'  */
00124     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
00125     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
00126     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
00127   }
00128 };
00129 
00130 const OnigSyntaxType OnigSyntaxGnuRegex = {
00131   SYN_GNU_REGEX_OP
00132   , 0
00133   , SYN_GNU_REGEX_BV
00134   , ONIG_OPTION_NONE
00135   ,
00136   {
00137       (OnigCodePoint )'\\'                       /* esc */
00138     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.'  */
00139     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*'  */
00140     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
00141     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
00142     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
00143   }
00144 };
00145 
00146 const OnigSyntaxType OnigSyntaxJava = {
00147   (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |
00148      ONIG_SYN_OP_ESC_CONTROL_CHARS | ONIG_SYN_OP_ESC_C_CONTROL |
00149      ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 )
00150    & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )
00151   , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE | ONIG_SYN_OP2_QMARK_GROUP_EFFECT |
00152       ONIG_SYN_OP2_OPTION_PERL | ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT |
00153       ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL | ONIG_SYN_OP2_CCLASS_SET_OP |
00154       ONIG_SYN_OP2_ESC_V_VTAB | ONIG_SYN_OP2_ESC_U_HEX4 |
00155       ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY )
00156   , ( SYN_GNU_REGEX_BV | ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND )
00157   , ( ONIG_OPTION_SINGLELINE | ONIG_OPTION_ASCII_RANGE |
00158       ONIG_OPTION_WORD_BOUND_ALL_RANGE )
00159   ,
00160   {
00161       (OnigCodePoint )'\\'                       /* esc */
00162     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.'  */
00163     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*'  */
00164     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
00165     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
00166     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
00167   }
00168 };
00169 
00170 /* Perl 5.8 */
00171 const OnigSyntaxType OnigSyntaxPerl58 = {
00172   (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |
00173      ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 |
00174      ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_CONTROL_CHARS |
00175      ONIG_SYN_OP_ESC_C_CONTROL )
00176    & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )
00177   , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE |
00178       ONIG_SYN_OP2_QMARK_GROUP_EFFECT | ONIG_SYN_OP2_OPTION_PERL |
00179       ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY |
00180       ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT |
00181       ONIG_SYN_OP2_ESC_CAPITAL_X_EXTENDED_GRAPHEME_CLUSTER |
00182       ONIG_SYN_OP2_QMARK_LPAREN_CONDITION)
00183   , SYN_GNU_REGEX_BV
00184   , ONIG_OPTION_SINGLELINE
00185   ,
00186   {
00187       (OnigCodePoint )'\\'                       /* esc */
00188     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.'  */
00189     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*'  */
00190     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
00191     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
00192     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
00193   }
00194 };
00195 
00196 /* Perl 5.8 + named group */
00197 const OnigSyntaxType OnigSyntaxPerl58_NG = {
00198   (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |
00199      ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 |
00200      ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_CONTROL_CHARS |
00201      ONIG_SYN_OP_ESC_C_CONTROL )
00202    & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )
00203   , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE |
00204       ONIG_SYN_OP2_QMARK_GROUP_EFFECT | ONIG_SYN_OP2_OPTION_PERL |
00205       ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY  |
00206       ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT |
00207       ONIG_SYN_OP2_ESC_CAPITAL_X_EXTENDED_GRAPHEME_CLUSTER |
00208       ONIG_SYN_OP2_QMARK_LPAREN_CONDITION     |
00209       ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP       |
00210       ONIG_SYN_OP2_ESC_K_NAMED_BACKREF        |
00211       ONIG_SYN_OP2_ESC_G_SUBEXP_CALL )
00212   , ( SYN_GNU_REGEX_BV |
00213       ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP |
00214       ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME )
00215   , ONIG_OPTION_SINGLELINE
00216   ,
00217   {
00218       (OnigCodePoint )'\\'                       /* esc */
00219     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.'  */
00220     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*'  */
00221     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
00222     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
00223     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
00224   }
00225 };
00226 
00227 /* Perl 5.10+ */
00228 const OnigSyntaxType OnigSyntaxPerl = {
00229   (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |
00230      ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 |
00231      ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_CONTROL_CHARS |
00232      ONIG_SYN_OP_ESC_C_CONTROL )
00233    & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )
00234   , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE |
00235       ONIG_SYN_OP2_QMARK_GROUP_EFFECT | ONIG_SYN_OP2_OPTION_PERL |
00236       ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY  |
00237       ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT |
00238       ONIG_SYN_OP2_ESC_CAPITAL_X_EXTENDED_GRAPHEME_CLUSTER |
00239       ONIG_SYN_OP2_QMARK_LPAREN_CONDITION |
00240       ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT |
00241       ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL |
00242       ONIG_SYN_OP2_ESC_CAPITAL_R_LINEBREAK |
00243       ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP |
00244       ONIG_SYN_OP2_QMARK_SUBEXP_CALL |
00245       ONIG_SYN_OP2_ESC_G_BRACE_BACKREF |
00246       ONIG_SYN_OP2_QMARK_CAPITAL_P_NAMED_GROUP |
00247       ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP |
00248       ONIG_SYN_OP2_ESC_K_NAMED_BACKREF )
00249   , ( SYN_GNU_REGEX_BV |
00250       ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME |
00251       ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME_CALL )
00252   , ( ONIG_OPTION_SINGLELINE | ONIG_OPTION_CAPTURE_GROUP )
00253   ,
00254   {
00255       (OnigCodePoint )'\\'                       /* esc */
00256     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.'  */
00257     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*'  */
00258     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
00259     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
00260     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
00261   }
00262 };
00263 
00264 const OnigSyntaxType OnigSyntaxPython = {
00265   (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |
00266      ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 |
00267      ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_CONTROL_CHARS |
00268      ONIG_SYN_OP_ESC_C_CONTROL )
00269    & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )
00270   , ( ONIG_SYN_OP2_QMARK_GROUP_EFFECT | ONIG_SYN_OP2_OPTION_PERL |
00271       ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY  |
00272       ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT |
00273       ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT |
00274       ONIG_SYN_OP2_ESC_V_VTAB |
00275       ONIG_SYN_OP2_ESC_U_HEX4 |
00276       ONIG_SYN_OP2_QMARK_LPAREN_CONDITION |
00277       ONIG_SYN_OP2_QMARK_CAPITAL_P_NAMED_GROUP )
00278   , ( SYN_GNU_REGEX_BV |
00279       ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV )
00280   , ( ONIG_OPTION_SINGLELINE | ONIG_OPTION_ASCII_RANGE )
00281   ,
00282   {
00283       (OnigCodePoint )'\\'                       /* esc */
00284     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.'  */
00285     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*'  */
00286     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
00287     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
00288     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
00289   }
00290 };
00291 
00292 
00293 
00294 extern int
00295 onig_set_default_syntax(const OnigSyntaxType* syntax)
00296 {
00297   if (IS_NULL(syntax))
00298     syntax = ONIG_SYNTAX_RUBY;
00299 
00300   OnigDefaultSyntax = syntax;
00301   return 0;
00302 }
00303 
00304 extern void
00305 onig_copy_syntax(OnigSyntaxType* to, const OnigSyntaxType* from)
00306 {
00307   *to = *from;
00308 }
00309 
00310 extern void
00311 onig_set_syntax_op(OnigSyntaxType* syntax, unsigned int op)
00312 {
00313   syntax->op = op;
00314 }
00315 
00316 extern void
00317 onig_set_syntax_op2(OnigSyntaxType* syntax, unsigned int op2)
00318 {
00319   syntax->op2 = op2;
00320 }
00321 
00322 extern void
00323 onig_set_syntax_behavior(OnigSyntaxType* syntax, unsigned int behavior)
00324 {
00325   syntax->behavior = behavior;
00326 }
00327 
00328 extern void
00329 onig_set_syntax_options(OnigSyntaxType* syntax, OnigOptionType options)
00330 {
00331   syntax->options = options;
00332 }
00333 
00334 extern unsigned int
00335 onig_get_syntax_op(OnigSyntaxType* syntax)
00336 {
00337   return syntax->op;
00338 }
00339 
00340 extern unsigned int
00341 onig_get_syntax_op2(OnigSyntaxType* syntax)
00342 {
00343   return syntax->op2;
00344 }
00345 
00346 extern unsigned int
00347 onig_get_syntax_behavior(OnigSyntaxType* syntax)
00348 {
00349   return syntax->behavior;
00350 }
00351 
00352 extern OnigOptionType
00353 onig_get_syntax_options(OnigSyntaxType* syntax)
00354 {
00355   return syntax->options;
00356 }
00357 
00358 #ifdef USE_VARIABLE_META_CHARS
00359 extern int onig_set_meta_char(OnigSyntaxType* enc,
00360                               unsigned int what, OnigCodePoint code)
00361 {
00362   switch (what) {
00363   case ONIG_META_CHAR_ESCAPE:
00364     enc->meta_char_table.esc = code;
00365     break;
00366   case ONIG_META_CHAR_ANYCHAR:
00367     enc->meta_char_table.anychar = code;
00368     break;
00369   case ONIG_META_CHAR_ANYTIME:
00370     enc->meta_char_table.anytime = code;
00371     break;
00372   case ONIG_META_CHAR_ZERO_OR_ONE_TIME:
00373     enc->meta_char_table.zero_or_one_time = code;
00374     break;
00375   case ONIG_META_CHAR_ONE_OR_MORE_TIME:
00376     enc->meta_char_table.one_or_more_time = code;
00377     break;
00378   case ONIG_META_CHAR_ANYCHAR_ANYTIME:
00379     enc->meta_char_table.anychar_anytime = code;
00380     break;
00381   default:
00382     return ONIGERR_INVALID_ARGUMENT;
00383     break;
00384   }
00385   return 0;
00386 }
00387 #endif /* USE_VARIABLE_META_CHARS */
00388