summaryrefslogtreecommitdiff
path: root/ext/mbstring/oniguruma/reggnu.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/mbstring/oniguruma/reggnu.c')
-rw-r--r--ext/mbstring/oniguruma/reggnu.c93
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