diff options
Diffstat (limited to 'ext/mbstring/oniguruma/reggnu.c')
| -rw-r--r-- | ext/mbstring/oniguruma/reggnu.c | 93 |
1 files changed, 59 insertions, 34 deletions
diff --git a/ext/mbstring/oniguruma/reggnu.c b/ext/mbstring/oniguruma/reggnu.c index 7b95e26f76..9c6a2161c2 100644 --- a/ext/mbstring/oniguruma/reggnu.c +++ b/ext/mbstring/oniguruma/reggnu.c @@ -2,13 +2,17 @@ reggnu.c - Oniguruma (regular expression library) - Copyright (C) 2002-2003 K.Kosako (kosako@sofnec.co.jp) + Copyright (C) 2002-2004 K.Kosako (kosako@sofnec.co.jp) **********************************************************************/ #include "regint.h" +#ifndef ONIGGNU_H /* name changes from oniggnu.h to regex.h in ruby. */ +#include "oniggnu.h" +#endif + #if defined(RUBY_PLATFORM) || defined(RUBY) -#ifndef REG_RUBY_M17N +#ifndef ONIG_RUBY_M17N #define USE_COMPATIBILITY_FOR_RUBY_EXTENSION_LIBRARY #endif #endif @@ -18,25 +22,25 @@ #endif extern void -re_free_registers(RegRegion* r) +re_free_registers(OnigRegion* r) { /* 0: don't free self */ - regex_region_free(r, 0); + onig_region_free(r, 0); } extern int re_adjust_startpos(regex_t* reg, const char* string, int size, int startpos, int range) { - if (startpos > 0 && mbmaxlen(reg->enc) != 1 && startpos < size) { + if (startpos > 0 && ONIGENC_MBC_MAXLEN(reg->enc) != 1 && startpos < size) { UChar *p; UChar *s = (UChar* )string + startpos; if (range > 0) { - p = regex_get_right_adjust_char_head(reg->enc, (UChar* )string, s); + p = onigenc_get_right_adjust_char_head(reg->enc, (UChar* )string, s); } else { - p = regex_get_left_adjust_char_head(reg->enc, (UChar* )string, s); + p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, (UChar* )string, s); } return p - (UChar* )string; } @@ -48,29 +52,30 @@ extern int re_match(regex_t* reg, const char* str, int size, int pos, struct re_registers* regs) { - return regex_match(reg, (UChar* )str, (UChar* )(str + size), - (UChar* )(str + pos), regs, REG_OPTION_NONE); + return onig_match(reg, (UChar* )str, (UChar* )(str + size), + (UChar* )(str + pos), regs, ONIG_OPTION_NONE); } extern int re_search(regex_t* bufp, const char* string, int size, int startpos, int range, struct re_registers* regs) { - return regex_search(bufp, (UChar* )string, (UChar* )(string + size), - (UChar* )(string + startpos), - (UChar* )(string + startpos + range), regs, REG_OPTION_NONE); + return onig_search(bufp, (UChar* )string, (UChar* )(string + size), + (UChar* )(string + startpos), + (UChar* )(string + startpos + range), + regs, ONIG_OPTION_NONE); } extern int re_compile_pattern(const char* pattern, int size, regex_t* reg, char* ebuf) { int r; - RegErrorInfo einfo; + OnigErrorInfo einfo; - r = regex_compile(reg, (UChar* )pattern, (UChar* )(pattern + size), &einfo); + r = onig_compile(reg, (UChar* )pattern, (UChar* )(pattern + size), &einfo); if (r != 0) { if (IS_NOT_NULL(ebuf)) - (void )regex_error_code_to_str((UChar* )ebuf, r, &einfo); + (void )onig_error_code_to_str((UChar* )ebuf, r, &einfo); } return r; @@ -80,19 +85,19 @@ extern int re_recompile_pattern(const char* pattern, int size, regex_t* reg, char* ebuf) { int r; - RegErrorInfo einfo; - RegCharEncoding enc; + OnigErrorInfo einfo; + OnigEncoding enc; /* I think encoding and options should be arguments of this function. But this is adapted to present re.c. (2002/11/29) */ - enc = RegDefaultCharEncoding; + enc = OnigEncDefaultCharEncoding; - r = regex_recompile(reg, (UChar* )pattern, (UChar* )(pattern + size), - reg->options, enc, RegDefaultSyntax, &einfo); + r = onig_recompile(reg, (UChar* )pattern, (UChar* )(pattern + size), + reg->options, enc, OnigDefaultSyntax, &einfo); if (r != 0) { if (IS_NOT_NULL(ebuf)) - (void )regex_error_code_to_str((UChar* )ebuf, r, &einfo); + (void )onig_error_code_to_str((UChar* )ebuf, r, &einfo); } return r; } @@ -100,23 +105,20 @@ re_recompile_pattern(const char* pattern, int size, regex_t* reg, char* ebuf) extern void re_free_pattern(regex_t* reg) { - regex_free(reg); + onig_free(reg); } extern int re_alloc_pattern(regex_t** reg) { - if (RegDefaultCharEncoding == REGCODE_UNDEF) - return REGERR_DEFAULT_ENCODING_IS_NOT_SETTED; - - return regex_alloc_init(reg, REG_OPTION_DEFAULT, RegDefaultCharEncoding, - RegDefaultSyntax); + return onig_alloc_init(reg, ONIG_OPTION_DEFAULT, OnigEncDefaultCharEncoding, + OnigDefaultSyntax); } extern void re_set_casetable(const char* table) { - regex_set_default_trans_table((UChar* )table); + onigenc_set_default_caseconv_table((UChar* )table); } #ifdef USE_COMPATIBILITY_FOR_RUBY_EXTENSION_LIBRARY @@ -167,7 +169,7 @@ static const unsigned char mbctab_sjis[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -200,16 +202,39 @@ const unsigned char *re_mbctab = mbctab_ascii; #endif extern void -#ifdef REG_RUBY_M17N -re_mbcinit(RegCharEncoding enc) +#ifdef ONIG_RUBY_M17N +re_mbcinit(OnigEncoding enc) #else re_mbcinit(int mb_code) #endif { -#ifdef REG_RUBY_M17N - RegDefaultCharEncoding = enc; +#ifdef ONIG_RUBY_M17N + + onigenc_set_default_encoding(enc); + #else - RegDefaultCharEncoding = REG_MBLEN_TABLE[mb_code]; + + OnigEncoding enc; + + switch (mb_code) { + case MBCTYPE_ASCII: + enc = ONIG_ENCODING_ASCII; + break; + case MBCTYPE_EUC: + enc = ONIG_ENCODING_EUC_JP; + break; + case MBCTYPE_SJIS: + enc = ONIG_ENCODING_SJIS; + break; + case MBCTYPE_UTF8: + enc = ONIG_ENCODING_UTF8; + break; + default: + return ; + break; + } + + onigenc_set_default_encoding(enc); #endif #ifdef USE_COMPATIBILITY_FOR_RUBY_EXTENSION_LIBRARY |
