[Groonga-commit] groonga/groonga [master] [experimental] moved NFKC to plugins/normalizers/.

Back to archive index

null+****@clear***** null+****@clear*****
2012年 2月 9日 (木) 17:21:16 JST


Kouhei Sutou	2012-02-09 17:21:16 +0900 (Thu, 09 Feb 2012)

  New Revision: b85246df11a3dbedcae736b4879ba4daa8389116

  Log:
    [experimental] moved NFKC to plugins/normalizers/.

  Added files:
    plugins/normalizers/Makefile.am
    plugins/normalizers/nfkc.c
    test/benchmark/bench-normalize.c
  Copied files:
    include/groonga/normalizer.h
      (from lib/nfkc.h)
  Modified files:
    configure.ac
    include/groonga.h
    lib/Makefile.am
    lib/dat.cpp
    lib/normalizer.c
    lib/pat.c
    lib/snip.c
    lib/str.c
    lib/str.h
    lib/token.c
    plugins/Makefile.am
    test/benchmark/Makefile.am
  Renamed files:
    plugins/normalizers/icudump.c
      (from lib/icudump.c)
    plugins/normalizers/nfkc-core.c
      (from lib/nfkc.c)
    plugins/normalizers/nfkc-custom-rules.txt
      (from lib/nfkc-custom-rules.txt)
    plugins/normalizers/nfkc.h
      (from lib/nfkc.h)
    plugins/normalizers/nfkc.rb
      (from lib/nfkc.rb)

  Modified: configure.ac (+11 -2)
===================================================================
--- configure.ac    2012-02-09 15:57:47 +0900 (78f4a9a)
+++ configure.ac    2012-02-09 17:21:16 +0900 (47ee055)
@@ -190,6 +190,7 @@ AC_CONFIG_FILES([
   include/groonga/Makefile
   plugins/Makefile
   plugins/tokenizers/Makefile
+  plugins/normalizers/Makefile
   plugins/suggest/Makefile
   examples/Makefile
   examples/dictionary/Makefile
@@ -407,9 +408,10 @@ AC_ARG_ENABLE(nfkc,
   [AS_HELP_STRING([--enable-nfkc],
     [use nfkc based utf8 normalization. [default=yes]])],,
   [enable_nfkc="yes"])
-if test "x$enable_nfkc" != "xyes"; then
-  AC_DEFINE(NO_NFKC, [1], [compile without nfkc.c])
+if test "x$enable_nfkc" = "xyes"; then
+  AC_DEFINE(WITH_NFKC, [1], [compile with nfkc.c])
 fi
+AM_CONDITIONAL([WITH_NFKC], [test "x$enable_nfkc" = "xyes"])
 
 # coverage
 m4_ifdef([AC_CHECK_COVERAGE], [AC_CHECK_COVERAGE])
@@ -999,6 +1001,9 @@ AC_SUBST(pluginsdir)
 tokenizer_pluginsdir="\${pluginsdir}/tokenizers"
 AC_SUBST(tokenizer_pluginsdir)
 
+normalizer_pluginsdir="\${pluginsdir}/normalizers"
+AC_SUBST(normalizer_pluginsdir)
+
 suggest_pluginsdir="\${pluginsdir}/suggest"
 AC_SUBST(suggest_pluginsdir)
 
@@ -1105,6 +1110,10 @@ if test "x$with_kytea" = "xyes"; then
 fi
 echo
 
+echo "Nomralizers:"
+echo "  NFKC:                  $enable_nfkc"
+echo
+
 echo "Libraries:"
 echo "  ZeroMQ:                $zeromq_available"
 if test "x$zeromq_available" = "xyes"; then

  Modified: include/groonga.h (+42 -4)
===================================================================
--- include/groonga.h    2012-02-09 15:57:47 +0900 (728df55)
+++ include/groonga.h    2012-02-09 17:21:16 +0900 (af759e8)
@@ -2459,20 +2459,58 @@ GRN_API grn_rc grn_str_close(grn_ctx *ctx, grn_str *nstr);
 
 /* grn_normalized_text */
 
-#define GRN_NORMALIZED_TEXT_REMOVE_BLANK (0x01<<0)
-#define GRN_NORMALIZED_TEXT_WITH_CTYPES  (0x01<<1)
-#define GRN_NORMALIZED_TEXT_WITH_CHECKS  (0x01<<2)
+#define GRN_NORMALIZE_REMOVE_BLANK (0x01<<0)
+#define GRN_NORMALIZE_WITH_TYPES   (0x01<<1)
+#define GRN_NORMALIZE_WITH_CHECKS  (0x01<<2)
+
+#define GRN_CHAR_BLANK 0x80
+#define GRN_CHAR_IS_BLANK(c) ((c) & (GRN_CHAR_BLANK))
+#define GRN_CHAR_TYPE(c) ((c) & 0x7f)
+
+typedef enum {
+  grn_char_null = 0,
+  grn_char_alpha,
+  grn_char_digit,
+  grn_char_symbol,
+  grn_char_hiragana,
+  grn_char_katakana,
+  grn_char_kanji,
+  grn_char_others
+} grn_char_type;
 
 GRN_API grn_obj *grn_normalized_text_open(grn_ctx *ctx, grn_obj *normalizer,
                                           const char *str, unsigned int str_len,
                                           grn_encoding encoding, int flags);
+GRN_API grn_rc grn_normalized_text_get_original_value(grn_ctx *ctx,
+                                                      grn_obj *normalized_text,
+                                                      const char **value,
+                                                      unsigned int *length_in_bytes);
+GRN_API int grn_normalized_text_get_flags(grn_ctx *ctx,
+                                          grn_obj *normalized_text);
 GRN_API grn_rc grn_normalized_text_get_value(grn_ctx *ctx,
                                              grn_obj *normalized_text,
                                              const char **value,
                                              unsigned int *length,
-                                             unsigned int *binary_length);
+                                             unsigned int *length_in_bytes);
+GRN_API grn_rc grn_normalized_text_set_value(grn_ctx *ctx,
+                                             grn_obj *normalized_text,
+                                             char *value,
+                                             unsigned int length,
+                                             unsigned int length_in_bytes);
+GRN_API short *grn_normalized_text_get_checks(grn_ctx *ctx,
+                                              grn_obj *normalized_text);
+GRN_API grn_rc grn_normalized_text_set_checks(grn_ctx *ctx,
+                                              grn_obj *normalized_text,
+                                              short *checks);
+GRN_API unsigned char *grn_normalized_text_get_types(grn_ctx *ctx,
+                                                     grn_obj *normalized_text);
+GRN_API grn_rc grn_normalized_text_set_types(grn_ctx *ctx,
+                                             grn_obj *normalized_text,
+                                             unsigned char *types);
+
 
 GRN_API int grn_charlen(grn_ctx *ctx, const char *str, const char *end);
+GRN_API int grn_charlen_utf8(grn_ctx *ctx, const unsigned char *str, const unsigned char *end);
 
 /* expr */
 

  Copied: include/groonga/normalizer.h (+13 -15) 63%
===================================================================
--- lib/nfkc.h    2012-02-09 15:57:47 +0900 (791acb3)
+++ include/groonga/normalizer.h    2012-02-09 17:21:16 +0900 (978ab5d)
@@ -1,5 +1,6 @@
 /* -*- c-basic-offset: 2 -*- */
-/* Copyright(C) 2009 Brazil
+/*
+  Copyright(C) 2012 Brazil
 
   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
@@ -14,26 +15,23 @@
   License along with this library; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 */
-#ifndef GRN_NFKC_H
-#define GRN_NFKC_H
+#ifndef GRN_NORMALIZER_H
+#define GRN_NORMALIZER_H
 
-#ifdef	__cplusplus
+#include <groonga/plugin.h>
+
+#ifdef __cplusplus
 extern "C" {
 #endif
 
-enum {
-  grn_str_null = 0,
-  grn_str_alpha,
-  grn_str_digit,
-  grn_str_symbol,
-  grn_str_hiragana,
-  grn_str_katakana,
-  grn_str_kanji,
-  grn_str_others
-};
+#define GRN_NORMALIZER_REGISTER(ctx, name, init_func, normalize_func, fin_func)\
+  (grn_proc_create((ctx), (name), strlen((name)),\
+                   GRN_PROC_NORMALIZER,\
+                   (init_func), (normalize_func), (fin_func),\
+                   0, NULL))
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif /* GRN_NFKC_H */
+#endif /* GRN_NORMALIZER_H */

  Modified: lib/Makefile.am (+0 -2)
===================================================================
--- lib/Makefile.am    2012-02-09 15:57:47 +0900 (c9bea94)
+++ lib/Makefile.am    2012-02-09 17:21:16 +0900 (04ea4e5)
@@ -14,7 +14,6 @@ DEFS += -D_REENTRANT -DGROONGA_VERSION=\"$(GROONGA_VERSION)\" $(GRN_DEFS)
 libgroonga_la_SOURCES =				\
 	io.c					\
 	str.c					\
-	nfkc.c					\
 	normalizer.c				\
 	snip.c					\
 	store.c					\
@@ -54,7 +53,6 @@ noinst_HEADERS =				\
 	hash.h					\
 	ii.h					\
 	io.h					\
-	nfkc.h					\
 	normalizer.c				\
 	output.h				\
 	pat.h					\

  Modified: lib/dat.cpp (+1 -1)
===================================================================
--- lib/dat.cpp    2012-02-09 15:57:47 +0900 (eddb5be)
+++ lib/dat.cpp    2012-02-09 17:21:16 +0900 (e98f033)
@@ -697,7 +697,7 @@ int grn_dat_scan(grn_ctx *ctx, grn_dat *dat, const char *str,
   try {
     if (dat->obj.header.flags & GRN_OBJ_KEY_NORMALIZE) {
       grn_str * const normalized_str = grn_str_open(
-          ctx, str, str_size, GRN_STR_NORMALIZE | GRN_STR_WITH_CHECKS);
+          ctx, str, str_size, GRN_STR_NORMALIZE | GRN_NORMALIZE_WITH_CHECKS);
       if (!normalized_str) {
         fprintf(stderr, "error: grn_str_open() failed!\n");
         return -1;

  Modified: lib/normalizer.c (+247 -274)
===================================================================
--- lib/normalizer.c    2012-02-09 15:57:47 +0900 (a21de48)
+++ lib/normalizer.c    2012-02-09 17:21:16 +0900 (1e647e8)
@@ -31,11 +31,11 @@ grn_normalizer_find(grn_ctx *ctx, grn_encoding encoding)
     normalizer_id = GRN_DB_NORMALIZER_EUC_JP;
     break;
   case GRN_ENC_UTF8 :
-#ifdef NO_NFKC
-    normalizer_id = GRN_DB_NORMALIZER_ASCII;
-#else /* NO_NFKC */
+#ifdef WITH_NFKC
     normalizer_id = GRN_DB_NORMALIZER_UTF8_NFKC;
-#endif /* NO_NFKC */
+#else /* WITH_NFKC */
+    normalizer_id = GRN_DB_NORMALIZER_ASCII;
+#endif /* WITH_NFKC */
     break;
   case GRN_ENC_SJIS :
     normalizer_id = GRN_DB_NORMALIZER_SJIS;
@@ -102,9 +102,41 @@ grn_normalized_text_open(grn_ctx *ctx, grn_obj *normalizer,
 }
 
 grn_rc
+grn_normalized_text_get_original_value(grn_ctx *ctx, grn_obj *normalized_text,
+                                       const char **value,
+                                       unsigned int *length_in_bytes)
+{
+  grn_rc rc;
+  grn_normalized_text *text = (grn_normalized_text *)normalized_text;
+  GRN_API_ENTER;
+  if (text) {
+    if (value) { *value = text->orig; }
+    if (length_in_bytes) { *length_in_bytes = text->orig_blen; }
+    rc = GRN_SUCCESS;
+  } else {
+    rc = GRN_INVALID_ARGUMENT;
+  }
+  GRN_API_RETURN(rc);
+}
+
+int
+grn_normalized_text_get_flags(grn_ctx *ctx, grn_obj *normalized_text)
+{
+  int flags;
+  grn_normalized_text *text = (grn_normalized_text *)normalized_text;
+  GRN_API_ENTER;
+  if (text) {
+    flags = text->flags;
+  } else {
+    flags = 0;
+  }
+  GRN_API_RETURN(flags);
+}
+
+grn_rc
 grn_normalized_text_get_value(grn_ctx *ctx, grn_obj *normalized_text,
                               const char **value, unsigned int *length,
-                              unsigned int *binary_length)
+                              unsigned int *length_in_bytes)
 {
   grn_rc rc;
   grn_normalized_text *text = (grn_normalized_text *)normalized_text;
@@ -112,7 +144,89 @@ grn_normalized_text_get_value(grn_ctx *ctx, grn_obj *normalized_text,
   if (text) {
     if (value) { *value = text->norm; }
     if (length) { *length = text->length; }
-    if (binary_length) { *binary_length = text->norm_blen; }
+    if (length_in_bytes) { *length_in_bytes = text->norm_blen; }
+    rc = GRN_SUCCESS;
+  } else {
+    rc = GRN_INVALID_ARGUMENT;
+  }
+  GRN_API_RETURN(rc);
+}
+
+grn_rc
+grn_normalized_text_set_value(grn_ctx *ctx, grn_obj *normalized_text,
+                              char *value, unsigned int length,
+                              unsigned int length_in_bytes)
+{
+  grn_rc rc;
+  grn_normalized_text *text = (grn_normalized_text *)normalized_text;
+  GRN_API_ENTER;
+  if (text) {
+    if (text->norm) { GRN_FREE(text->norm); }
+    text->norm = value;
+    text->length = length;
+    text->norm_blen = length_in_bytes;
+    rc = GRN_SUCCESS;
+  } else {
+    rc = GRN_INVALID_ARGUMENT;
+  }
+  GRN_API_RETURN(rc);
+}
+
+short *
+grn_normalized_text_get_checks(grn_ctx *ctx, grn_obj *normalized_text)
+{
+  int16_t *checks = NULL;
+  grn_normalized_text *text = (grn_normalized_text *)normalized_text;
+  GRN_API_ENTER;
+  if (text) {
+    checks = text->checks;
+  } else {
+    checks = NULL;
+  }
+  GRN_API_RETURN(checks);
+}
+
+grn_rc
+grn_normalized_text_set_checks(grn_ctx *ctx, grn_obj *normalized_text,
+                               short *checks)
+{
+  grn_rc rc;
+  grn_normalized_text *text = (grn_normalized_text *)normalized_text;
+  GRN_API_ENTER;
+  if (text) {
+    if (text->checks) { GRN_FREE(text->checks); }
+    text->checks = checks;
+    rc = GRN_SUCCESS;
+  } else {
+    rc = GRN_INVALID_ARGUMENT;
+  }
+  GRN_API_RETURN(rc);
+}
+
+unsigned char *
+grn_normalized_text_get_types(grn_ctx *ctx, grn_obj *normalized_text)
+{
+  uint_least8_t *types = NULL;
+  grn_normalized_text *text = (grn_normalized_text *)normalized_text;
+  GRN_API_ENTER;
+  if (text) {
+    types = text->ctypes;
+  } else {
+    types = NULL;
+  }
+  GRN_API_RETURN(types);
+}
+
+grn_rc
+grn_normalized_text_set_types(grn_ctx *ctx, grn_obj *normalized_text,
+                              unsigned char *types)
+{
+  grn_rc rc;
+  grn_normalized_text *text = (grn_normalized_text *)normalized_text;
+  GRN_API_ENTER;
+  if (text) {
+    if (text->ctypes) { GRN_FREE(text->ctypes); }
+    text->ctypes = types;
     rc = GRN_SUCCESS;
   } else {
     rc = GRN_INVALID_ARGUMENT;
@@ -174,14 +288,14 @@ eucjp_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
   unsigned char *d, *d0, *d_, b;
   uint_least8_t *cp, *ctypes, ctype;
   size_t size = nstr->orig_blen, length = 0;
-  int removeblankp = nstr->flags & GRN_STR_REMOVEBLANK;
+  int removeblankp = nstr->flags & GRN_NORMALIZE_REMOVE_BLANK;
   if (!(nstr->norm = GRN_MALLOC(size * 2 + 1))) {
     ERR(GRN_NO_MEMORY_AVAILABLE,
         "[normalizer][eucjp] failed to allocate normalized text space");
     return NULL;
   }
   d0 = (unsigned char *) nstr->norm;
-  if (nstr->flags & GRN_STR_WITH_CHECKS) {
+  if (nstr->flags & GRN_NORMALIZE_WITH_CHECKS) {
     if (!(nstr->checks = GRN_MALLOC(size * 2 * sizeof(int16_t) + 1))) {
       GRN_FREE(nstr->norm);
       nstr->norm = NULL;
@@ -191,7 +305,7 @@ eucjp_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
     }
   }
   ch = nstr->checks;
-  if (nstr->flags & GRN_STR_WITH_CTYPES) {
+  if (nstr->flags & GRN_NORMALIZE_WITH_TYPES) {
     if (!(nstr->ctypes = GRN_MALLOC(size + 1))) {
       GRN_FREE(nstr->checks);
       GRN_FREE(nstr->norm);
@@ -237,15 +351,15 @@ eucjp_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
               *d++ = c >> 8; *d = c & 0xff;
               break;
             }
-            ctype = grn_str_katakana;
+            ctype = grn_char_katakana;
           } else {
             *d++ = c1; *d = c2;
-            ctype = grn_str_others;
+            ctype = grn_char_others;
           }
           break;
         case 0x09 :
           *d++ = c1; *d = c2;
-          ctype = grn_str_others;
+          ctype = grn_char_others;
           break;
         case 0x0a :
           switch (c1 & 0x0f) {
@@ -253,75 +367,75 @@ eucjp_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
             switch (c2) {
             case 0xbc :
               *d++ = c1; *d = c2;
-              ctype = grn_str_katakana;
+              ctype = grn_char_katakana;
               break;
             case 0xb9 :
               *d++ = c1; *d = c2;
-              ctype = grn_str_kanji;
+              ctype = grn_char_kanji;
               break;
             case 0xa1 :
               if (removeblankp) {
-                if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+                if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
                 continue;
               } else {
                 *d = ' ';
-                ctype = GRN_STR_BLANK|grn_str_symbol;
+                ctype = GRN_CHAR_BLANK|grn_char_symbol;
               }
               break;
             default :
               if (c2 >= 0xa4 && (c3 = symbol[c2 - 0xa4])) {
                 *d = c3;
-                ctype = grn_str_symbol;
+                ctype = grn_char_symbol;
               } else {
                 *d++ = c1; *d = c2;
-                ctype = grn_str_others;
+                ctype = grn_char_others;
               }
               break;
             }
             break;
           case 2 :
             *d++ = c1; *d = c2;
-            ctype = grn_str_symbol;
+            ctype = grn_char_symbol;
             break;
           case 3 :
             c3 = c2 - 0x80;
             if ('a' <= c3 && c3 <= 'z') {
-              ctype = grn_str_alpha;
+              ctype = grn_char_alpha;
               *d = c3;
             } else if ('A' <= c3 && c3 <= 'Z') {
-              ctype = grn_str_alpha;
+              ctype = grn_char_alpha;
               *d = c3 + 0x20;
             } else if ('0' <= c3 && c3 <= '9') {
-              ctype = grn_str_digit;
+              ctype = grn_char_digit;
               *d = c3;
             } else {
-              ctype = grn_str_others;
+              ctype = grn_char_others;
               *d++ = c1; *d = c2;
             }
             break;
           case 4 :
             *d++ = c1; *d = c2;
-            ctype = grn_str_hiragana;
+            ctype = grn_char_hiragana;
             break;
           case 5 :
             *d++ = c1; *d = c2;
-            ctype = grn_str_katakana;
+            ctype = grn_char_katakana;
             break;
           case 6 :
           case 7 :
           case 8 :
             *d++ = c1; *d = c2;
-            ctype = grn_str_symbol;
+            ctype = grn_char_symbol;
             break;
           default :
             *d++ = c1; *d = c2;
-            ctype = grn_str_others;
+            ctype = grn_char_others;
             break;
           }
           break;
         default :
           *d++ = c1; *d = c2;
-          ctype = grn_str_kanji;
+          ctype = grn_char_kanji;
           break;
         }
       } else {
@@ -334,45 +448,45 @@ eucjp_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
       case 0 :
       case 1 :
         /* skip unprintable ascii */
-        if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+        if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
         continue;
       case 2 :
         if (c == 0x20) {
           if (removeblankp) {
-            if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+            if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
             continue;
           } else {
             *d = ' ';
-            ctype = GRN_STR_BLANK|grn_str_symbol;
+            ctype = GRN_CHAR_BLANK|grn_char_symbol;
           }
         } else {
           *d = c;
-          ctype = grn_str_symbol;
+          ctype = grn_char_symbol;
         }
         break;
       case 3 :
         *d = c;
-        ctype = (c <= 0x39) ? grn_str_digit : grn_str_symbol;
+        ctype = (c <= 0x39) ? grn_char_digit : grn_char_symbol;
         break;
       case 4 :
         *d = ('A' <= c) ? c + 0x20 : c;
-        ctype = (c == 0x40) ? grn_str_symbol : grn_str_alpha;
+        ctype = (c == 0x40) ? grn_char_symbol : grn_char_alpha;
         break;
       case 5 :
         *d = (c <= 'Z') ? c + 0x20 : c;
-        ctype = (c <= 0x5a) ? grn_str_alpha : grn_str_symbol;
+        ctype = (c <= 0x5a) ? grn_char_alpha : grn_char_symbol;
         break;
       case 6 :
         *d = c;
-        ctype = (c == 0x60) ? grn_str_symbol : grn_str_alpha;
+        ctype = (c == 0x60) ? grn_char_symbol : grn_char_alpha;
         break;
       case 7 :
         *d = c;
-        ctype = (c <= 0x7a) ? grn_str_alpha : (c == 0x7f ? grn_str_others : grn_str_symbol);
+        ctype = (c <= 0x7a) ? grn_char_alpha : (c == 0x7f ? grn_char_others : grn_char_symbol);
         break;
       default :
         *d = c;
-        ctype = grn_str_others;
+        ctype = grn_char_others;
         break;
       }
     }
@@ -385,158 +499,13 @@ eucjp_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
       while (++d_ < d) { *ch++ = 0; }
     }
   }
-  if (cp) { *cp = grn_str_null; }
+  if (cp) { *cp = grn_char_null; }
   *d = '\0';
   nstr->length = length;
   nstr->norm_blen = (size_t)(d - (unsigned char *)nstr->norm);
   return NULL;
 }
 
-#ifndef NO_NFKC
-uint_least8_t grn_nfkc_ctype(const unsigned char *str);
-const char *grn_nfkc_map1(const unsigned char *str);
-const char *grn_nfkc_map2(const unsigned char *prefix, const unsigned char *suffix);
-
-inline static grn_obj *
-utf8_nfkc_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
-                    grn_user_data *user_data)
-{
-  grn_normalized_text *nstr = (grn_normalized_text *)args[0];
-  int16_t *ch;
-  const unsigned char *s, *s_, *s__ = NULL, *p, *p2, *pe, *e;
-  unsigned char *d, *d_, *de;
-  uint_least8_t *cp;
-  size_t length = 0, ls, lp, size = nstr->orig_blen, ds = size * 3;
-  int removeblankp = nstr->flags & GRN_STR_REMOVEBLANK;
-  if (!(nstr->norm = GRN_MALLOC(ds + 1))) {
-    ERR(GRN_NO_MEMORY_AVAILABLE,
-        "[normalizer][utf8][nfkc] failed to allocate normalized text space");
-    return NULL;
-  }
-  if (nstr->flags & GRN_STR_WITH_CHECKS) {
-    if (!(nstr->checks = GRN_MALLOC(ds * sizeof(int16_t) + 1))) {
-      GRN_FREE(nstr->norm);
-      nstr->norm = NULL;
-      ERR(GRN_NO_MEMORY_AVAILABLE,
-          "[normalizer][utf8][nfkc] failed to allocate checks space");
-      return NULL;
-    }
-  }
-  ch = nstr->checks;
-  if (nstr->flags & GRN_STR_WITH_CTYPES) {
-    if (!(nstr->ctypes = GRN_MALLOC(ds + 1))) {
-      if (nstr->checks) { GRN_FREE(nstr->checks); nstr->checks = NULL; }
-      GRN_FREE(nstr->norm);
-      nstr->norm = NULL;
-      ERR(GRN_NO_MEMORY_AVAILABLE,
-          "[normalizer][utf8][nfkc] failed to allocate character types space");
-      return NULL;
-    }
-  }
-  cp = nstr->ctypes;
-  d = (unsigned char *)nstr->norm;
-  de = d + ds;
-  d_ = NULL;
-  e = (unsigned char *)nstr->orig + size;
-  for (s = s_ = (unsigned char *)nstr->orig; ; s += ls) {
-    if (!(ls = grn_str_charlen_utf8(ctx, s, e))) {
-      break;
-    }
-    if ((p = (unsigned char *)grn_nfkc_map1(s))) {
-      pe = p + strlen((char *)p);
-    } else {
-      p = s;
-      pe = p + ls;
-    }
-    if (d_ && (p2 = (unsigned char *)grn_nfkc_map2(d_, p))) {
-      p = p2;
-      pe = p + strlen((char *)p);
-      if (cp) { cp--; }
-      if (ch) {
-        ch -= (d - d_);
-        s_ = s__;
-      }
-      d = d_;
-      length--;
-    }
-    for (; ; p += lp) {
-      if (!(lp = grn_str_charlen_utf8(ctx, p, pe))) {
-        break;
-      }
-      if ((*p == ' ' && removeblankp) || *p < 0x20  /* skip unprintable ascii */ ) {
-        if (cp > nstr->ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
-      } else {
-        if (de <= d + lp) {
-          unsigned char *norm;
-          ds += (ds >> 1) + lp;
-          if (!(norm = GRN_REALLOC(nstr->norm, ds + 1))) {
-            if (nstr->ctypes) { GRN_FREE(nstr->ctypes); nstr->ctypes = NULL; }
-            if (nstr->checks) { GRN_FREE(nstr->checks); nstr->checks = NULL; }
-            GRN_FREE(nstr->norm); nstr->norm = NULL;
-            ERR(GRN_NO_MEMORY_AVAILABLE,
-                "[normalizer][utf8][nfkc] "
-                "failed to reallocate normalized text space");
-            return NULL;
-          }
-          de = norm + ds;
-          d = norm + (d - (unsigned char *)nstr->norm);
-          nstr->norm = norm;
-          if (ch) {
-            int16_t *checks;
-            if (!(checks = GRN_REALLOC(nstr->checks, ds * sizeof(int16_t)+ 1))) {
-              if (nstr->ctypes) { GRN_FREE(nstr->ctypes); nstr->ctypes = NULL; }
-              GRN_FREE(nstr->checks); nstr->checks = NULL;
-              GRN_FREE(nstr->norm); nstr->norm = NULL;
-              ERR(GRN_NO_MEMORY_AVAILABLE,
-                  "[normalizer][utf8][nfkc] "
-                  "failed to reallocate checks space");
-              return NULL;
-            }
-            ch = checks + (ch - nstr->checks);
-            nstr->checks = checks;
-          }
-          if (cp) {
-            uint_least8_t *ctypes;
-            if (!(ctypes = GRN_REALLOC(nstr->ctypes, ds + 1))) {
-              GRN_FREE(nstr->ctypes); nstr->ctypes = NULL;
-              if (nstr->checks) { GRN_FREE(nstr->checks); nstr->checks = NULL; }
-              GRN_FREE(nstr->norm); nstr->norm = NULL;
-              ERR(GRN_NO_MEMORY_AVAILABLE,
-                  "[normalizer][utf8][nfkc] "
-                  "failed to reallocate character types space");
-              return NULL;
-            }
-            cp = ctypes + (cp - nstr->ctypes);
-            nstr->ctypes = ctypes;
-          }
-        }
-        memcpy(d, p, lp);
-        d_ = d;
-        d += lp;
-        length++;
-        if (cp) { *cp++ = grn_nfkc_ctype(p); }
-        if (ch) {
-          size_t i;
-          if (s_ == s + ls) {
-            *ch++ = -1;
-          } else {
-            *ch++ = (int16_t)(s + ls - s_);
-            s__ = s_;
-            s_ = s + ls;
-          }
-          for (i = lp; i > 1; i--) { *ch++ = 0; }
-        }
-      }
-    }
-  }
-  if (cp) { *cp = grn_str_null; }
-  *d = '\0';
-  nstr->length = length;
-  nstr->norm_blen = (size_t)(d - (unsigned char *)nstr->norm);
-  return NULL;
-}
-#endif /* NO_NFKC */
-
 inline static grn_obj *
 sjis_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
                grn_user_data *user_data)
@@ -566,14 +535,14 @@ sjis_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
   unsigned char *d, *d0, *d_, b, *e;
   uint_least8_t *cp, *ctypes, ctype;
   size_t size = nstr->orig_blen, length = 0;
-  int removeblankp = nstr->flags & GRN_STR_REMOVEBLANK;
+  int removeblankp = nstr->flags & GRN_NORMALIZE_REMOVE_BLANK;
   if (!(nstr->norm = GRN_MALLOC(size * 2 + 1))) {
     ERR(GRN_NO_MEMORY_AVAILABLE,
         "[normalizer][sjis] failed to allocate normalized text space");
     return NULL;
   }
   d0 = (unsigned char *) nstr->norm;
-  if (nstr->flags & GRN_STR_WITH_CHECKS) {
+  if (nstr->flags & GRN_NORMALIZE_WITH_CHECKS) {
     if (!(nstr->checks = GRN_MALLOC(size * 2 * sizeof(int16_t) + 1))) {
       GRN_FREE(nstr->norm);
       nstr->norm = NULL;
@@ -583,7 +552,7 @@ sjis_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
     }
   }
   ch = nstr->checks;
-  if (nstr->flags & GRN_STR_WITH_CTYPES) {
+  if (nstr->flags & GRN_NORMALIZE_WITH_TYPES) {
     if (!(nstr->ctypes = GRN_MALLOC(size + 1))) {
       GRN_FREE(nstr->checks);
       GRN_FREE(nstr->norm);
@@ -625,7 +594,7 @@ sjis_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
           *d++ = c >> 8; *d = c & 0xff;
           break;
         }
-        ctype = grn_str_katakana;
+        ctype = grn_char_katakana;
       } else {
         if ((s + 1) < e && 0x40 <= *(s + 1) && *(s + 1) <= 0xfc) {
           unsigned char c1 = *s++, c2 = *s, c3 = 0;
@@ -635,31 +604,31 @@ sjis_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
               switch (c2) {
               case 0x5b :
                 *d++ = c1; *d = c2;
-                ctype = grn_str_katakana;
+                ctype = grn_char_katakana;
                 break;
               case 0x58 :
                 *d++ = c1; *d = c2;
-                ctype = grn_str_kanji;
+                ctype = grn_char_kanji;
                 break;
               case 0x40 :
                 if (removeblankp) {
-                  if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+                  if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
                   continue;
                 } else {
                   *d = ' ';
-                  ctype = GRN_STR_BLANK|grn_str_symbol;
+                  ctype = GRN_CHAR_BLANK|grn_char_symbol;
                 }
                 break;
               default :
                 if (0x43 <= c2 && c2 <= 0x7e && (c3 = symbol[c2 - 0x43])) {
                   *d = c3;
-                  ctype = grn_str_symbol;
+                  ctype = grn_char_symbol;
                 } else if (0x7f <= c2 && c2 <= 0x97 && (c3 = symbol[c2 - 0x44])) {
                   *d = c3;
-                  ctype = grn_str_symbol;
+                  ctype = grn_char_symbol;
                 } else {
                   *d++ = c1; *d = c2;
-                  ctype = grn_str_others;
+                  ctype = grn_char_others;
                 }
                 break;
               }
@@ -667,44 +636,44 @@ sjis_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
             case 2 :
               c3 = c2 - 0x1f;
               if (0x4f <= c2 && c2 <= 0x58) {
-                ctype = grn_str_digit;
+                ctype = grn_char_digit;
                 *d = c2 - 0x1f;
               } else if (0x60 <= c2 && c2 <= 0x79) {
-                ctype = grn_str_alpha;
+                ctype = grn_char_alpha;
                 *d = c2 + 0x01;
               } else if (0x81 <= c2 && c2 <= 0x9a) {
-                ctype = grn_str_alpha;
+                ctype = grn_char_alpha;
                 *d = c2 - 0x20;
               } else if (0x9f <= c2 && c2 <= 0xf1) {
                 *d++ = c1; *d = c2;
-                ctype = grn_str_hiragana;
+                ctype = grn_char_hiragana;
               } else {
                 *d++ = c1; *d = c2;
-                ctype = grn_str_others;
+                ctype = grn_char_others;
               }
               break;
             case 3 :
               if (0x40 <= c2 && c2 <= 0x96) {
                 *d++ = c1; *d = c2;
-                ctype = grn_str_katakana;
+                ctype = grn_char_katakana;
               } else {
                 *d++ = c1; *d = c2;
-                ctype = grn_str_symbol;
+                ctype = grn_char_symbol;
               }
               break;
             case 4 :
             case 7 :
               *d++ = c1; *d = c2;
-              ctype = grn_str_symbol;
+              ctype = grn_char_symbol;
               break;
             default :
               *d++ = c1; *d = c2;
-              ctype = grn_str_others;
+              ctype = grn_char_others;
               break;
             }
           } else {
             *d++ = c1; *d = c2;
-            ctype = grn_str_kanji;
+            ctype = grn_char_kanji;
           }
         } else {
           /* skip invalid character */
@@ -717,45 +686,45 @@ sjis_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
       case 0 :
       case 1 :
         /* skip unprintable ascii */
-        if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+        if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
         continue;
       case 2 :
         if (c == 0x20) {
           if (removeblankp) {
-            if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+            if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
             continue;
           } else {
             *d = ' ';
-            ctype = GRN_STR_BLANK|grn_str_symbol;
+            ctype = GRN_CHAR_BLANK|grn_char_symbol;
           }
         } else {
           *d = c;
-          ctype = grn_str_symbol;
+          ctype = grn_char_symbol;
         }
         break;
       case 3 :
         *d = c;
-        ctype = (c <= 0x39) ? grn_str_digit : grn_str_symbol;
+        ctype = (c <= 0x39) ? grn_char_digit : grn_char_symbol;
         break;
       case 4 :
         *d = ('A' <= c) ? c + 0x20 : c;
-        ctype = (c == 0x40) ? grn_str_symbol : grn_str_alpha;
+        ctype = (c == 0x40) ? grn_char_symbol : grn_char_alpha;
         break;
       case 5 :
         *d = (c <= 'Z') ? c + 0x20 : c;
-        ctype = (c <= 0x5a) ? grn_str_alpha : grn_str_symbol;
+        ctype = (c <= 0x5a) ? grn_char_alpha : grn_char_symbol;
         break;
       case 6 :
         *d = c;
-        ctype = (c == 0x60) ? grn_str_symbol : grn_str_alpha;
+        ctype = (c == 0x60) ? grn_char_symbol : grn_char_alpha;
         break;
       case 7 :
         *d = c;
-        ctype = (c <= 0x7a) ? grn_str_alpha : (c == 0x7f ? grn_str_others : grn_str_symbol);
+        ctype = (c <= 0x7a) ? grn_char_alpha : (c == 0x7f ? grn_char_others : grn_char_symbol);
         break;
       default :
         *d = c;
-        ctype = grn_str_others;
+        ctype = grn_char_others;
         break;
       }
     }
@@ -768,7 +737,7 @@ sjis_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
       while (++d_ < d) { *ch++ = 0; }
     }
   }
-  if (cp) { *cp = grn_str_null; }
+  if (cp) { *cp = grn_char_null; }
   *d = '\0';
   nstr->length = length;
   nstr->norm_blen = (size_t)(d - (unsigned char *)nstr->norm);
@@ -784,14 +753,14 @@ ascii_normalize(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_dat
   unsigned char *d, *d0, *d_;
   uint_least8_t *cp, *ctypes, ctype;
   size_t size = nstr->orig_blen, length = 0;
-  int removeblankp = nstr->flags & GRN_STR_REMOVEBLANK;
+  int removeblankp = nstr->flags & GRN_NORMALIZE_REMOVE_BLANK;
   if (!(nstr->norm = GRN_MALLOC(size + 1))) {
     ERR(GRN_NO_MEMORY_AVAILABLE,
         "[normalizer][ascii] failed to allocate normalized text space");
     return NULL;
   }
   d0 = (unsigned char *) nstr->norm;
-  if (nstr->flags & GRN_STR_WITH_CHECKS) {
+  if (nstr->flags & GRN_NORMALIZE_WITH_CHECKS) {
     if (!(nstr->checks = GRN_MALLOC(size * sizeof(int16_t) + 1))) {
       GRN_FREE(nstr->norm);
       nstr->norm = NULL;
@@ -801,7 +770,7 @@ ascii_normalize(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_dat
     }
   }
   ch = nstr->checks;
-  if (nstr->flags & GRN_STR_WITH_CTYPES) {
+  if (nstr->flags & GRN_NORMALIZE_WITH_TYPES) {
     if (!(nstr->ctypes = GRN_MALLOC(size + 1))) {
       GRN_FREE(nstr->checks);
       GRN_FREE(nstr->norm);
@@ -820,45 +789,45 @@ ascii_normalize(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_dat
     case 0 :
     case 1 :
       /* skip unprintable ascii */
-      if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+      if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
       continue;
     case 2 :
       if (c == 0x20) {
         if (removeblankp) {
-          if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+          if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
           continue;
         } else {
           *d = ' ';
-          ctype = GRN_STR_BLANK|grn_str_symbol;
+          ctype = GRN_CHAR_BLANK|grn_char_symbol;
         }
       } else {
         *d = c;
-        ctype = grn_str_symbol;
+        ctype = grn_char_symbol;
       }
       break;
     case 3 :
       *d = c;
-      ctype = (c <= 0x39) ? grn_str_digit : grn_str_symbol;
+      ctype = (c <= 0x39) ? grn_char_digit : grn_char_symbol;
       break;
     case 4 :
       *d = ('A' <= c) ? c + 0x20 : c;
-      ctype = (c == 0x40) ? grn_str_symbol : grn_str_alpha;
+      ctype = (c == 0x40) ? grn_char_symbol : grn_char_alpha;
       break;
     case 5 :
       *d = (c <= 'Z') ? c + 0x20 : c;
-      ctype = (c <= 0x5a) ? grn_str_alpha : grn_str_symbol;
+      ctype = (c <= 0x5a) ? grn_char_alpha : grn_char_symbol;
       break;
     case 6 :
       *d = c;
-      ctype = (c == 0x60) ? grn_str_symbol : grn_str_alpha;
+      ctype = (c == 0x60) ? grn_char_symbol : grn_char_alpha;
       break;
     case 7 :
       *d = c;
-      ctype = (c <= 0x7a) ? grn_str_alpha : (c == 0x7f ? grn_str_others : grn_str_symbol);
+      ctype = (c <= 0x7a) ? grn_char_alpha : (c == 0x7f ? grn_char_others : grn_char_symbol);
       break;
     default :
       *d = c;
-      ctype = grn_str_others;
+      ctype = grn_char_others;
       break;
     }
     d++;
@@ -870,7 +839,7 @@ ascii_normalize(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_dat
       while (++d_ < d) { *ch++ = 0; }
     }
   }
-  if (cp) { *cp = grn_str_null; }
+  if (cp) { *cp = grn_char_null; }
   *d = '\0';
   nstr->length = length;
   nstr->norm_blen = (size_t)(d - (unsigned char *)nstr->norm);
@@ -888,14 +857,14 @@ latin1_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
   unsigned char *d, *d0, *d_;
   uint_least8_t *cp, *ctypes, ctype;
   size_t size = strlen(nstr->orig), length = 0;
-  int removeblankp = nstr->flags & GRN_STR_REMOVEBLANK;
+  int removeblankp = nstr->flags & GRN_NORMALIZE_REMOVE_BLANK;
   if (!(nstr->norm = GRN_MALLOC(size + 1))) {
     ERR(GRN_NO_MEMORY_AVAILABLE,
         "[normalizer][latin1] failed to allocate normalized text space");
     return NULL;
   }
   d0 = (unsigned char *) nstr->norm;
-  if (nstr->flags & GRN_STR_WITH_CHECKS) {
+  if (nstr->flags & GRN_NORMALIZE_WITH_CHECKS) {
     if (!(nstr->checks = GRN_MALLOC(size * sizeof(int16_t) + 1))) {
       GRN_FREE(nstr->norm);
       nstr->norm = NULL;
@@ -905,7 +874,7 @@ latin1_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
     }
   }
   ch = nstr->checks;
-  if (nstr->flags & GRN_STR_WITH_CTYPES) {
+  if (nstr->flags & GRN_NORMALIZE_WITH_TYPES) {
     if (!(nstr->ctypes = GRN_MALLOC(size + 1))) {
       GRN_FREE(nstr->checks);
       GRN_FREE(nstr->norm);
@@ -924,79 +893,79 @@ latin1_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
     case 0 :
     case 1 :
       /* skip unprintable ascii */
-      if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+      if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
       continue;
     case 2 :
       if (c == 0x20) {
         if (removeblankp) {
-          if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+          if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
           continue;
         } else {
           *d = ' ';
-          ctype = GRN_STR_BLANK|grn_str_symbol;
+          ctype = GRN_CHAR_BLANK|grn_char_symbol;
         }
       } else {
         *d = c;
-        ctype = grn_str_symbol;
+        ctype = grn_char_symbol;
       }
       break;
     case 3 :
       *d = c;
-      ctype = (c <= 0x39) ? grn_str_digit : grn_str_symbol;
+      ctype = (c <= 0x39) ? grn_char_digit : grn_char_symbol;
       break;
     case 4 :
       *d = ('A' <= c) ? c + 0x20 : c;
-      ctype = (c == 0x40) ? grn_str_symbol : grn_str_alpha;
+      ctype = (c == 0x40) ? grn_char_symbol : grn_char_alpha;
       break;
     case 5 :
       *d = (c <= 'Z') ? c + 0x20 : c;
-      ctype = (c <= 0x5a) ? grn_str_alpha : grn_str_symbol;
+      ctype = (c <= 0x5a) ? grn_char_alpha : grn_char_symbol;
       break;
     case 6 :
       *d = c;
-      ctype = (c == 0x60) ? grn_str_symbol : grn_str_alpha;
+      ctype = (c == 0x60) ? grn_char_symbol : grn_char_alpha;
       break;
     case 7 :
       *d = c;
-      ctype = (c <= 0x7a) ? grn_str_alpha : (c == 0x7f ? grn_str_others : grn_str_symbol);
+      ctype = (c <= 0x7a) ? grn_char_alpha : (c == 0x7f ? grn_char_others : grn_char_symbol);
       break;
     case 8 :
       if (c == 0x8a || c == 0x8c || c == 0x8e) {
         *d = c + 0x10;
-        ctype = grn_str_alpha;
+        ctype = grn_char_alpha;
       } else {
         *d = c;
-        ctype = grn_str_symbol;
+        ctype = grn_char_symbol;
       }
       break;
     case 9 :
       if (c == 0x9a || c == 0x9c || c == 0x9e || c == 0x9f) {
         *d = (c == 0x9f) ? c + 0x60 : c;
-        ctype = grn_str_alpha;
+        ctype = grn_char_alpha;
       } else {
         *d = c;
-        ctype = grn_str_symbol;
+        ctype = grn_char_symbol;
       }
       break;
     case 0x0c :
       *d = c + 0x20;
-      ctype = grn_str_alpha;
+      ctype = grn_char_alpha;
       break;
     case 0x0d :
       *d = (c == 0xd7 || c == 0xdf) ? c : c + 0x20;
-      ctype = (c == 0xd7) ? grn_str_symbol : grn_str_alpha;
+      ctype = (c == 0xd7) ? grn_char_symbol : grn_char_alpha;
       break;
     case 0x0e :
       *d = c;
-      ctype = grn_str_alpha;
+      ctype = grn_char_alpha;
       break;
     case 0x0f :
       *d = c;
-      ctype = (c == 0xf7) ? grn_str_symbol : grn_str_alpha;
+      ctype = (c == 0xf7) ? grn_char_symbol : grn_char_alpha;
       break;
     default :
       *d = c;
-      ctype = grn_str_others;
+      ctype = grn_char_others;
       break;
     }
     d++;
@@ -1008,7 +977,7 @@ latin1_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
       while (++d_ < d) { *ch++ = 0; }
     }
   }
-  if (cp) { *cp = grn_str_null; }
+  if (cp) { *cp = grn_char_null; }
   *d = '\0';
   nstr->length = length;
   nstr->norm_blen = (size_t)(d - (unsigned char *)nstr->norm);
@@ -1025,14 +994,14 @@ koi8r_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
   unsigned char *d, *d0, *d_;
   uint_least8_t *cp, *ctypes, ctype;
   size_t size = strlen(nstr->orig), length = 0;
-  int removeblankp = nstr->flags & GRN_STR_REMOVEBLANK;
+  int removeblankp = nstr->flags & GRN_NORMALIZE_REMOVE_BLANK;
   if (!(nstr->norm = GRN_MALLOC(size + 1))) {
     ERR(GRN_NO_MEMORY_AVAILABLE,
         "[normalizer][koi8r] failed to allocate normalized text space");
     return NULL;
   }
   d0 = (unsigned char *) nstr->norm;
-  if (nstr->flags & GRN_STR_WITH_CHECKS) {
+  if (nstr->flags & GRN_NORMALIZE_WITH_CHECKS) {
     if (!(nstr->checks = GRN_MALLOC(size * sizeof(int16_t) + 1))) {
       GRN_FREE(nstr->norm);
       nstr->norm = NULL;
@@ -1042,7 +1011,7 @@ koi8r_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
     }
   }
   ch = nstr->checks;
-  if (nstr->flags & GRN_STR_WITH_CTYPES) {
+  if (nstr->flags & GRN_NORMALIZE_WITH_TYPES) {
     if (!(nstr->ctypes = GRN_MALLOC(size + 1))) {
       GRN_FREE(nstr->checks);
       GRN_FREE(nstr->norm);
@@ -1061,68 +1030,68 @@ koi8r_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
     case 0 :
     case 1 :
       /* skip unprintable ascii */
-      if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+      if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
       continue;
     case 2 :
       if (c == 0x20) {
         if (removeblankp) {
-          if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+          if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
           continue;
         } else {
           *d = ' ';
-          ctype = GRN_STR_BLANK|grn_str_symbol;
+          ctype = GRN_CHAR_BLANK|grn_char_symbol;
         }
       } else {
         *d = c;
-        ctype = grn_str_symbol;
+        ctype = grn_char_symbol;
       }
       break;
     case 3 :
       *d = c;
-      ctype = (c <= 0x39) ? grn_str_digit : grn_str_symbol;
+      ctype = (c <= 0x39) ? grn_char_digit : grn_char_symbol;
       break;
     case 4 :
       *d = ('A' <= c) ? c + 0x20 : c;
-      ctype = (c == 0x40) ? grn_str_symbol : grn_str_alpha;
+      ctype = (c == 0x40) ? grn_char_symbol : grn_char_alpha;
       break;
     case 5 :
       *d = (c <= 'Z') ? c + 0x20 : c;
-      ctype = (c <= 0x5a) ? grn_str_alpha : grn_str_symbol;
+      ctype = (c <= 0x5a) ? grn_char_alpha : grn_char_symbol;
       break;
     case 6 :
       *d = c;
-      ctype = (c == 0x60) ? grn_str_symbol : grn_str_alpha;
+      ctype = (c == 0x60) ? grn_char_symbol : grn_char_alpha;
       break;
     case 7 :
       *d = c;
-      ctype = (c <= 0x7a) ? grn_str_alpha : (c == 0x7f ? grn_str_others : grn_str_symbol);
+      ctype = (c <= 0x7a) ? grn_char_alpha : (c == 0x7f ? grn_char_others : grn_char_symbol);
       break;
     case 0x0a :
       *d = c;
-      ctype = (c == 0xa3) ? grn_str_alpha : grn_str_others;
+      ctype = (c == 0xa3) ? grn_char_alpha : grn_char_others;
       break;
     case 0x0b :
       if (c == 0xb3) {
         *d = c - 0x10;
-        ctype = grn_str_alpha;
+        ctype = grn_char_alpha;
       } else {
         *d = c;
-        ctype = grn_str_others;
+        ctype = grn_char_others;
       }
       break;
     case 0x0c :
     case 0x0d :
       *d = c;
-      ctype = grn_str_alpha;
+      ctype = grn_char_alpha;
       break;
     case 0x0e :
     case 0x0f :
       *d = c - 0x20;
-      ctype = grn_str_alpha;
+      ctype = grn_char_alpha;
       break;
     default :
       *d = c;
-      ctype = grn_str_others;
+      ctype = grn_char_others;
       break;
     }
     d++;
@@ -1134,7 +1103,7 @@ koi8r_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
       while (++d_ < d) { *ch++ = 0; }
     }
   }
-  if (cp) { *cp = grn_str_null; }
+  if (cp) { *cp = grn_char_null; }
   *d = '\0';
   nstr->length = length;
   nstr->norm_blen = (size_t)(d - (unsigned char *)nstr->norm);
@@ -1154,10 +1123,14 @@ grn_db_init_builtin_normalizers(grn_ctx *ctx)
   if (!obj || ((grn_db_obj *)obj)->id != GRN_DB_NORMALIZER_ASCII) {
     return GRN_FILE_CORRUPT;
   }
-  obj = DEF_NORMALIZERIZER("NormalizerUTF8NFKC", utf8_nfkc_normalize);
-  if (!obj || ((grn_db_obj *)obj)->id != GRN_DB_NORMALIZER_UTF8_NFKC) {
-    return GRN_FILE_CORRUPT;
+#ifdef WITH_NFKC
+  if (grn_plugin_register(ctx, "normalizers/nfkc")) {
+    ERRCLR(ctx);
+#endif
+    grn_obj_register(ctx, grn_ctx_db(ctx), "NormalizerUTF8NFKC", 18);
+#ifdef WITH_NFKC
   }
+#endif
   obj = DEF_NORMALIZERIZER("NormalizerEUCJP", eucjp_normalize);
   if (!obj || ((grn_db_obj *)obj)->id != GRN_DB_NORMALIZER_EUC_JP) {
     return GRN_FILE_CORRUPT;

  Modified: lib/pat.c (+1 -1)
===================================================================
--- lib/pat.c    2012-02-09 15:57:47 +0900 (e575a3e)
+++ lib/pat.c    2012-02-09 17:21:16 +0900 (7b09cd8)
@@ -1541,7 +1541,7 @@ grn_pat_scan(grn_ctx *ctx, grn_pat *pat, const char *str, unsigned int str_len,
   int n = 0;
   grn_id tid;
   if (pat->obj.header.flags & GRN_OBJ_KEY_NORMALIZE) {
-    grn_str *nstr = grn_str_open(ctx, str, str_len, GRN_STR_NORMALIZE|GRN_STR_WITH_CHECKS);
+    grn_str *nstr = grn_str_open(ctx, str, str_len, GRN_STR_NORMALIZE|GRN_NORMALIZE_WITH_CHECKS);
     if (nstr) {
       int16_t *cp = nstr->checks;
       unsigned int offset = 0, offset0 = 0;

  Modified: lib/snip.c (+2 -2)
===================================================================
--- lib/snip.c    2012-02-09 15:57:47 +0900 (0f0f58d)
+++ lib/snip.c    2012-02-09 17:21:16 +0900 (9a727ae)
@@ -250,7 +250,7 @@ grn_snip_cond_init(grn_ctx *ctx, snip_cond *sc, const char *keyword, unsigned in
                    grn_encoding enc, int flags)
 {
   size_t norm_blen;
-  int f = GRN_STR_REMOVEBLANK;
+  int f = GRN_NORMALIZE_REMOVE_BLANK;
   memset(sc, 0, sizeof(snip_cond));
   if (flags & GRN_SNIP_NORMALIZE) { f |= GRN_STR_NORMALIZE; }
   if (!(sc->keyword = grn_str_open(ctx, keyword, keyword_len, f))) {
@@ -524,7 +524,7 @@ grn_snip_exec(grn_ctx *ctx, grn_snip *snip, const char *string, unsigned int str
               unsigned int *nresults, unsigned int *max_tagged_len)
 {
   size_t i;
-  int f = GRN_STR_WITH_CHECKS|GRN_STR_REMOVEBLANK;
+  int f = GRN_NORMALIZE_WITH_CHECKS|GRN_NORMALIZE_REMOVE_BLANK;
   if (!snip || !string || !nresults || !max_tagged_len) {
     return GRN_INVALID_ARGUMENT;
   }

  Modified: lib/str.c (+6 -6)
===================================================================
--- lib/str.c    2012-02-09 15:57:47 +0900 (2865a7b)
+++ lib/str.c    2012-02-09 17:21:16 +0900 (048bd97)
@@ -28,7 +28,7 @@
 #include <math.h>
 
 int
-grn_str_charlen_utf8(grn_ctx *ctx, const unsigned char *str, const unsigned char *end)
+grn_charlen_utf8(grn_ctx *ctx, const unsigned char *str, const unsigned char *end)
 {
   /* MEMO: This function allows non-null-terminated string as str. */
   /*       But requires the end of string. */
@@ -39,12 +39,12 @@ grn_str_charlen_utf8(grn_ctx *ctx, const unsigned char *str, const unsigned char
     int size;
     for (b = 0x40, w = 0; b && (*p & b); b >>= 1, w++);
     if (!w) {
-      GRN_LOG(ctx, GRN_LOG_WARNING, "invalid utf8 string(1) on grn_str_charlen_utf8");
+      GRN_LOG(ctx, GRN_LOG_WARNING, "invalid utf8 string(1) on grn_charlen_utf8");
       return 0;
     }
     for (size = 1; w--; size++) {
       if (++p >= end || !*p || (*p & 0xc0) != 0x80) {
-        GRN_LOG(ctx, GRN_LOG_WARNING, "invalid utf8 string(2) on grn_str_charlen_utf8");
+        GRN_LOG(ctx, GRN_LOG_WARNING, "invalid utf8 string(2) on grn_charlen_utf8");
         return 0;
       }
     }
@@ -139,7 +139,7 @@ grn_charlen_(grn_ctx *ctx, const char *str, const char *end, grn_encoding encodi
     return 1;
     break;
   case GRN_ENC_UTF8 :
-    return grn_str_charlen_utf8(ctx, p, (unsigned char *)end);
+    return grn_charlen_utf8(ctx, p, (unsigned char *)end);
     break;
   case GRN_ENC_SJIS :
     if (*p & 0x80) {
@@ -174,7 +174,7 @@ grn_charlen(grn_ctx *ctx, const char *str, const char *end)
 static grn_str *
 grn_fakenstr_open(grn_ctx *ctx, const char *str, size_t str_len, grn_encoding encoding, int flags)
 {
-  /* TODO: support GRN_STR_REMOVEBLANK flag and ctypes */
+  /* TODO: support GRN_NORMALIZE_REMOVE_BLANK flag and ctypes */
   grn_str *nstr;
   if (!(nstr = GRN_MALLOC(sizeof(grn_str)))) {
     GRN_LOG(ctx, GRN_LOG_ALERT, "memory allocation on grn_fakenstr_open failed !");
@@ -193,7 +193,7 @@ grn_fakenstr_open(grn_ctx *ctx, const char *str, size_t str_len, grn_encoding en
   nstr->ctypes = NULL;
   nstr->flags = flags;
 
-  if (flags & GRN_STR_WITH_CHECKS) {
+  if (flags & GRN_NORMALIZE_WITH_CHECKS) {
     int16_t f = 0;
     unsigned char c;
     size_t i;

  Modified: lib/str.h (+0 -9)
===================================================================
--- lib/str.h    2012-02-09 15:57:47 +0900 (bf98e59)
+++ lib/str.h    2012-02-09 17:21:16 +0900 (4585db1)
@@ -21,10 +21,6 @@
 #include "groonga_in.h"
 #endif /* GROONGA_IN_H */
 
-#ifndef GRN_NFKC_H
-#include "nfkc.h"
-#endif /* GRN_NFKC_H */
-
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -46,10 +42,6 @@ typedef struct {
 
 GRN_API size_t grn_str_len(grn_ctx *ctx, const char *str, grn_encoding encoding, const char **last);
 
-#define GRN_STR_BLANK 0x80
-#define GRN_STR_ISBLANK(c) (c & 0x80)
-#define GRN_STR_CTYPE(c) (c & 0x7f)
-
 GRN_API int grn_isspace(const char *s, grn_encoding encoding);
 int8_t grn_atoi8(const char *nptr, const char *end, const char **rest);
 uint8_t grn_atoui8(const char *nptr, const char *end, const char **rest);
@@ -80,7 +72,6 @@ grn_rc grn_substring(grn_ctx *ctx, char **str, char **str_end, int start, int en
 void grn_logger_fin(void);
 
 GRN_API int grn_charlen_(grn_ctx *ctx, const char *str, const char *end, grn_encoding encoding);
-GRN_API int grn_str_charlen_utf8(grn_ctx *ctx, const unsigned char *str, const unsigned char *end);
 GRN_API grn_str *grn_str_open_(grn_ctx *ctx, const char *str, unsigned int str_len, int flags, grn_encoding encoding);
 
 #define GRN_BULK_INCR_LEN(buf,len) {\

  Modified: lib/token.c (+14 -14)
===================================================================
--- lib/token.c    2012-02-09 15:57:47 +0900 (f387b44)
+++ lib/token.c    2012-02-09 17:21:16 +0900 (3ef64d8)
@@ -202,7 +202,7 @@ ngram_init(grn_ctx *ctx, grn_obj *table, grn_user_data *user_data, uint8_t ngram
            uint8_t uni_alpha, uint8_t uni_digit, uint8_t uni_symbol, uint8_t ignore_blank)
 {
   grn_obj *str;
-  int nflags = GRN_STR_REMOVEBLANK|GRN_STR_WITH_CTYPES;
+  int nflags = GRN_NORMALIZE_REMOVE_BLANK|GRN_NORMALIZE_WITH_TYPES;
   grn_ngram_tokenizer *token;
   grn_obj_flags table_flags;
   if (!(str = grn_ctx_pop(ctx))) {
@@ -284,30 +284,30 @@ ngram_next(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
   const unsigned char *p = token->next, *r = p, *e = token->end;
   int32_t len = 0, pos = token->pos + token->skip, status = 0;
   uint_least8_t *cp = token->ctypes ? token->ctypes + pos : NULL;
-  if (cp && token->uni_alpha && GRN_STR_CTYPE(*cp) == grn_str_alpha) {
+  if (cp && token->uni_alpha && GRN_CHAR_TYPE(*cp) == grn_char_alpha) {
     while ((cl = grn_charlen_(ctx, (char *)r, (char *)e, token->encoding))) {
       len++;
       r += cl;
-      if (/* !token->ignore_blank && */ GRN_STR_ISBLANK(*cp)) { break; }
-      if (GRN_STR_CTYPE(*++cp) != grn_str_alpha) { break; }
+      if (/* !token->ignore_blank && */ GRN_CHAR_IS_BLANK(*cp)) { break; }
+      if (GRN_CHAR_TYPE(*++cp) != grn_char_alpha) { break; }
     }
     token->next = r;
     token->overlap = 0;
-  } else if (cp && token->uni_digit && GRN_STR_CTYPE(*cp) == grn_str_digit) {
+  } else if (cp && token->uni_digit && GRN_CHAR_TYPE(*cp) == grn_char_digit) {
     while ((cl = grn_charlen_(ctx, (char *)r, (char *)e, token->encoding))) {
       len++;
       r += cl;
-      if (/* !token->ignore_blank && */ GRN_STR_ISBLANK(*cp)) { break; }
-      if (GRN_STR_CTYPE(*++cp) != grn_str_digit) { break; }
+      if (/* !token->ignore_blank && */ GRN_CHAR_IS_BLANK(*cp)) { break; }
+      if (GRN_CHAR_TYPE(*++cp) != grn_char_digit) { break; }
     }
     token->next = r;
     token->overlap = 0;
-  } else if (cp && token->uni_symbol && GRN_STR_CTYPE(*cp) == grn_str_symbol) {
+  } else if (cp && token->uni_symbol && GRN_CHAR_TYPE(*cp) == grn_char_symbol) {
     while ((cl = grn_charlen_(ctx, (char *)r, (char *)e, token->encoding))) {
       len++;
       r += cl;
-      if (!token->ignore_blank && GRN_STR_ISBLANK(*cp)) { break; }
-      if (GRN_STR_CTYPE(*++cp) != grn_str_symbol) { break; }
+      if (!token->ignore_blank && GRN_CHAR_IS_BLANK(*cp)) { break; }
+      if (GRN_CHAR_TYPE(*++cp) != grn_char_symbol) { break; }
     }
     token->next = r;
     token->overlap = 0;
@@ -336,11 +336,11 @@ ngram_next(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
       while (len < token->ngram_unit &&
              (cl = grn_charlen_(ctx, (char *)r, (char *)e, token->encoding))) {
         if (cp) {
-          if (!token->ignore_blank && GRN_STR_ISBLANK(*cp)) { break; }
+          if (!token->ignore_blank && GRN_CHAR_IS_BLANK(*cp)) { break; }
           cp++;
-          if ((token->uni_alpha && GRN_STR_CTYPE(*cp) == grn_str_alpha) ||
-              (token->uni_digit && GRN_STR_CTYPE(*cp) == grn_str_digit) ||
-              (token->uni_symbol && GRN_STR_CTYPE(*cp) == grn_str_symbol)) { break; }
+          if ((token->uni_alpha && GRN_CHAR_TYPE(*cp) == grn_char_alpha) ||
+              (token->uni_digit && GRN_CHAR_TYPE(*cp) == grn_char_digit) ||
+              (token->uni_symbol && GRN_CHAR_TYPE(*cp) == grn_char_symbol)) { break; }
         }
         len++;
         r += cl;

  Modified: plugins/Makefile.am (+1 -0)
===================================================================
--- plugins/Makefile.am    2012-02-09 15:57:47 +0900 (39e9ed8)
+++ plugins/Makefile.am    2012-02-09 17:21:16 +0900 (446f4fe)
@@ -1,3 +1,4 @@
 SUBDIRS =		\
 	tokenizers	\
+	normalizers	\
 	suggest

  Added: plugins/normalizers/Makefile.am (+24 -0) 100644
===================================================================
--- /dev/null
+++ plugins/normalizers/Makefile.am    2012-02-09 17:21:16 +0900 (7652acc)
@@ -0,0 +1,24 @@
+INCLUDES =			\
+	-I$(top_builddir)	\
+	-I$(top_srcdir)/include	\
+	-I$(top_srcdir)/lib
+
+AM_CFLAGS =					\
+	$(MSGPACK_CFLAGS)
+
+AM_LDFLAGS =					\
+	-avoid-version				\
+	-module					\
+	-no-undefined
+
+LIBS =						\
+	$(top_builddir)/lib/libgroonga.la	\
+	$(MSGPACK_LIBS)
+
+normalizer_plugins_LTLIBRARIES =
+if WITH_NFKC
+normalizer_plugins_LTLIBRARIES += nfkc.la
+endif
+
+nfkc_la_SOURCES = nfkc.c nfkc-core.c
+noinst_HEADERS = nfkc.h

  Renamed: plugins/normalizers/icudump.c (+8 -8) 97%
===================================================================
--- lib/icudump.c    2012-02-09 15:57:47 +0900 (2cbc15c)
+++ plugins/normalizers/icudump.c    2012-02-09 17:21:16 +0900 (25ca666)
@@ -156,14 +156,14 @@ enum {
 };
 
 static const char *ctypes[] = {
-  "grn_str_null",
-  "grn_str_alpha",
-  "grn_str_digit",
-  "grn_str_symbol",
-  "grn_str_hiragana",
-  "grn_str_katakana",
-  "grn_str_kanji",
-  "grn_str_others"
+  "grn_char_null",
+  "grn_char_alpha",
+  "grn_char_digit",
+  "grn_char_symbol",
+  "grn_char_hiragana",
+  "grn_char_katakana",
+  "grn_char_kanji",
+  "grn_char_others"
 };
 
 void

  Renamed: plugins/normalizers/nfkc-core.c (+1152 -1156) 97%
===================================================================
--- lib/nfkc.c    2012-02-09 15:57:47 +0900 (fac5654)
+++ plugins/normalizers/nfkc-core.c    2012-02-09 17:21:16 +0900 (18092d9)
@@ -19,8 +19,6 @@ don't edit this file by hand. it generated automatically by nfkc.rb
 
 #include "nfkc.h"
 
-#ifndef NO_NFKC
-
 unsigned char
 grn_nfkc_ctype(const unsigned char *str)
 {
@@ -57,7 +55,7 @@ case 0x1D :
 case 0x1E :
 case 0x1F :
 case 0x20 :
-  return grn_str_others;
+  return grn_char_others;
   break;
 case 0x21 :
 case 0x22 :
@@ -74,7 +72,7 @@ case 0x2C :
 case 0x2D :
 case 0x2E :
 case 0x2F :
-  return grn_str_symbol;
+  return grn_char_symbol;
   break;
 case 0x30 :
 case 0x31 :
@@ -86,7 +84,7 @@ case 0x36 :
 case 0x37 :
 case 0x38 :
 case 0x39 :
-  return grn_str_digit;
+  return grn_char_digit;
   break;
 case 0x3A :
 case 0x3B :
@@ -95,7 +93,7 @@ case 0x3D :
 case 0x3E :
 case 0x3F :
 case 0x40 :
-  return grn_str_symbol;
+  return grn_char_symbol;
   break;
 case 0x41 :
 case 0x42 :
@@ -123,7 +121,7 @@ case 0x57 :
 case 0x58 :
 case 0x59 :
 case 0x5A :
-  return grn_str_alpha;
+  return grn_char_alpha;
   break;
 case 0x5B :
 case 0x5C :
@@ -131,7 +129,7 @@ case 0x5D :
 case 0x5E :
 case 0x5F :
 case 0x60 :
-  return grn_str_symbol;
+  return grn_char_symbol;
   break;
 case 0x61 :
 case 0x62 :
@@ -159,13 +157,13 @@ case 0x77 :
 case 0x78 :
 case 0x79 :
 case 0x7A :
-  return grn_str_alpha;
+  return grn_char_alpha;
   break;
 case 0x7B :
 case 0x7C :
 case 0x7D :
 case 0x7E :
-  return grn_str_symbol;
+  return grn_char_symbol;
   break;
 case 0x7F :
 case 0x80 :
@@ -234,7 +232,7 @@ case 0xBE :
 case 0xBF :
 case 0xC0 :
 case 0xC1 :
-  return grn_str_others;
+  return grn_char_others;
   break;
 case 0xC2 :
   switch (str[1]) {
@@ -271,7 +269,7 @@ case 0xC2 :
   case 0x9E :
   case 0x9F :
   case 0xA0 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xA1 :
   case 0xA2 :
@@ -282,58 +280,58 @@ case 0xC2 :
   case 0xA7 :
   case 0xA8 :
   case 0xA9 :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0xAA :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xAB :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xAC :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0xAD :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xAE :
   case 0xAF :
   case 0xB0 :
   case 0xB1 :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0xB2 :
   case 0xB3 :
-    return grn_str_digit;
+    return grn_char_digit;
     break;
   case 0xB4 :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0xB5 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xB6 :
   case 0xB7 :
   case 0xB8 :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0xB9 :
-    return grn_str_digit;
+    return grn_char_digit;
     break;
   case 0xBA :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xBB :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xBC :
   case 0xBD :
   case 0xBE :
-    return grn_str_digit;
+    return grn_char_digit;
     break;
   case 0xBF :
   default :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   }
   break;
@@ -362,10 +360,10 @@ case 0xC3 :
   case 0x94 :
   case 0x95 :
   case 0x96 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0x97 :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0x98 :
   case 0x99 :
@@ -398,14 +396,14 @@ case 0xC3 :
   case 0xB4 :
   case 0xB5 :
   case 0xB6 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xB7 :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0xB8 :
   default :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   }
   break;
@@ -416,19 +414,19 @@ case 0xC7 :
 case 0xC8 :
 case 0xC9 :
 case 0xCA :
-  return grn_str_alpha;
+  return grn_char_alpha;
   break;
 case 0xCB :
   switch (str[1]) {
   case 0x80 :
   case 0x81 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0x82 :
   case 0x83 :
   case 0x84 :
   case 0x85 :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0x86 :
   case 0x87 :
@@ -442,7 +440,7 @@ case 0xCB :
   case 0x8F :
   case 0x90 :
   case 0x91 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0x92 :
   case 0x93 :
@@ -458,14 +456,14 @@ case 0xCB :
   case 0x9D :
   case 0x9E :
   case 0x9F :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0xA0 :
   case 0xA1 :
   case 0xA2 :
   case 0xA3 :
   case 0xA4 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xA5 :
   case 0xA6 :
@@ -476,19 +474,19 @@ case 0xCB :
   case 0xAB :
   case 0xAC :
   case 0xAD :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0xAE :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xAF :
   default :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   }
   break;
 case 0xCC :
-  return grn_str_others;
+  return grn_char_others;
   break;
 case 0xCD :
   switch (str[1]) {
@@ -544,30 +542,30 @@ case 0xCD :
   case 0xB1 :
   case 0xB2 :
   case 0xB3 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xB4 :
   case 0xB5 :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0xB6 :
   case 0xB7 :
   case 0xB8 :
   case 0xB9 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xBA :
   case 0xBB :
   case 0xBC :
   case 0xBD :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xBE :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0xBF :
   default :
-    return grn_str_others;
+    return grn_char_others;
     break;
   }
   break;
@@ -577,31 +575,31 @@ case 0xCE :
   case 0x81 :
   case 0x82 :
   case 0x83 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0x84 :
   case 0x85 :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0x86 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0x87 :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0x88 :
   case 0x89 :
   case 0x8A :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0x8B :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0x8C :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0x8D :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0x8E :
   case 0x8F :
@@ -623,14 +621,14 @@ case 0xCE :
   case 0x9F :
   case 0xA0 :
   case 0xA1 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xA2 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xA3 :
   default :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   }
   break;
@@ -651,10 +649,10 @@ case 0xCF :
   case 0x8C :
   case 0x8D :
   case 0x8E :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0x8F :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0x90 :
   case 0x91 :
@@ -694,29 +692,29 @@ case 0xCF :
   case 0xB3 :
   case 0xB4 :
   case 0xB5 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xB6 :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0xB7 :
   default :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   }
   break;
 case 0xD0 :
 case 0xD1 :
-  return grn_str_alpha;
+  return grn_char_alpha;
   break;
 case 0xD2 :
   switch (str[1]) {
   case 0x80 :
   case 0x81 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0x82 :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0x83 :
   case 0x84 :
@@ -725,21 +723,21 @@ case 0xD2 :
   case 0x87 :
   case 0x88 :
   case 0x89 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0x8A :
   default :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   }
   break;
 case 0xD3 :
-  return grn_str_alpha;
+  return grn_char_alpha;
   break;
 case 0xD4 :
-  if (str[1] < 0x94) { return grn_str_alpha; }
-  if (str[1] < 0xB1) { return grn_str_others; }
-  return grn_str_alpha;
+  if (str[1] < 0x94) { return grn_char_alpha; }
+  if (str[1] < 0xB1) { return grn_char_others; }
+  return grn_char_alpha;
   break;
 case 0xD5 :
   switch (str[1]) {
@@ -766,14 +764,14 @@ case 0xD5 :
   case 0x94 :
   case 0x95 :
   case 0x96 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0x97 :
   case 0x98 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0x99 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0x9A :
   case 0x9B :
@@ -781,14 +779,14 @@ case 0xD5 :
   case 0x9D :
   case 0x9E :
   case 0x9F :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0xA0 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xA1 :
   default :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   }
   break;
@@ -802,14 +800,14 @@ case 0xD6 :
   case 0x85 :
   case 0x86 :
   case 0x87 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0x88 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0x89 :
   case 0x8A :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0x8B :
   case 0x8C :
@@ -862,35 +860,35 @@ case 0xD6 :
   case 0xBB :
   case 0xBC :
   case 0xBD :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xBE :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0xBF :
   default :
-    return grn_str_others;
+    return grn_char_others;
     break;
   }
   break;
 case 0xD7 :
   switch (str[1]) {
   case 0x80 :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0x81 :
   case 0x82 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0x83 :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0x84 :
   case 0x85 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0x86 :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0x87 :
   case 0x88 :
@@ -901,7 +899,7 @@ case 0xD7 :
   case 0x8D :
   case 0x8E :
   case 0x8F :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0x90 :
   case 0x91 :
@@ -930,27 +928,27 @@ case 0xD7 :
   case 0xA8 :
   case 0xA9 :
   case 0xAA :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xAB :
   case 0xAC :
   case 0xAD :
   case 0xAE :
   case 0xAF :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xB0 :
   case 0xB1 :
   case 0xB2 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xB3 :
   case 0xB4 :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0xB5 :
   default :
-    return grn_str_others;
+    return grn_char_others;
     break;
   }
   break;
@@ -967,14 +965,14 @@ case 0xD8 :
   case 0x88 :
   case 0x89 :
   case 0x8A :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0x8B :
   case 0x8C :
   case 0x8D :
   case 0x8E :
   case 0x8F :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0x90 :
   case 0x91 :
@@ -987,21 +985,21 @@ case 0xD8 :
   case 0x98 :
   case 0x99 :
   case 0x9A :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0x9B :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0x9C :
   case 0x9D :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0x9E :
   case 0x9F :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0xA0 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xA1 :
   case 0xA2 :
@@ -1029,11 +1027,11 @@ case 0xD8 :
   case 0xB8 :
   case 0xB9 :
   case 0xBA :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xBB :
   default :
-    return grn_str_others;
+    return grn_char_others;
     break;
   }
   break;
@@ -1050,7 +1048,7 @@ case 0xD9 :
   case 0x88 :
   case 0x89 :
   case 0x8A :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0x8B :
   case 0x8C :
@@ -1073,7 +1071,7 @@ case 0xD9 :
   case 0x9D :
   case 0x9E :
   case 0x9F :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xA0 :
   case 0xA1 :
@@ -1085,29 +1083,29 @@ case 0xD9 :
   case 0xA7 :
   case 0xA8 :
   case 0xA9 :
-    return grn_str_digit;
+    return grn_char_digit;
     break;
   case 0xAA :
   case 0xAB :
   case 0xAC :
   case 0xAD :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0xAE :
   case 0xAF :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xB0 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xB1 :
   default :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   }
   break;
 case 0xDA :
-  return grn_str_alpha;
+  return grn_char_alpha;
   break;
 case 0xDB :
   switch (str[1]) {
@@ -1131,13 +1129,13 @@ case 0xDB :
   case 0x91 :
   case 0x92 :
   case 0x93 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0x94 :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0x95 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0x96 :
   case 0x97 :
@@ -1154,28 +1152,28 @@ case 0xDB :
   case 0xA2 :
   case 0xA3 :
   case 0xA4 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xA5 :
   case 0xA6 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xA7 :
   case 0xA8 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xA9 :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0xAA :
   case 0xAB :
   case 0xAC :
   case 0xAD :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xAE :
   case 0xAF :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xB0 :
   case 0xB1 :
@@ -1187,20 +1185,20 @@ case 0xDB :
   case 0xB7 :
   case 0xB8 :
   case 0xB9 :
-    return grn_str_digit;
+    return grn_char_digit;
     break;
   case 0xBA :
   case 0xBB :
   case 0xBC :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xBD :
   case 0xBE :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0xBF :
   default :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   }
   break;
@@ -1220,17 +1218,17 @@ case 0xDC :
   case 0x8B :
   case 0x8C :
   case 0x8D :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0x8E :
   case 0x8F :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0x90 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0x91 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0x92 :
   case 0x93 :
@@ -1262,18 +1260,18 @@ case 0xDC :
   case 0xAD :
   case 0xAE :
   case 0xAF :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xB0 :
   default :
-    return grn_str_others;
+    return grn_char_others;
     break;
   }
   break;
 case 0xDD :
-  if (str[1] < 0x8D) { return grn_str_others; }
-  if (str[1] < 0xAE) { return grn_str_alpha; }
-  return grn_str_others;
+  if (str[1] < 0x8D) { return grn_char_others; }
+  if (str[1] < 0xAE) { return grn_char_alpha; }
+  return grn_char_others;
   break;
 case 0xDE :
   switch (str[1]) {
@@ -1315,7 +1313,7 @@ case 0xDE :
   case 0xA3 :
   case 0xA4 :
   case 0xA5 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xA6 :
   case 0xA7 :
@@ -1328,14 +1326,14 @@ case 0xDE :
   case 0xAE :
   case 0xAF :
   case 0xB0 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xB1 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xB2 :
   default :
-    return grn_str_others;
+    return grn_char_others;
     break;
   }
   break;
@@ -1351,7 +1349,7 @@ case 0xDF :
   case 0x87 :
   case 0x88 :
   case 0x89 :
-    return grn_str_digit;
+    return grn_char_digit;
     break;
   case 0x8A :
   case 0x8B :
@@ -1386,7 +1384,7 @@ case 0xDF :
   case 0xA8 :
   case 0xA9 :
   case 0xAA :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xAB :
   case 0xAC :
@@ -1397,24 +1395,24 @@ case 0xDF :
   case 0xB1 :
   case 0xB2 :
   case 0xB3 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xB4 :
   case 0xB5 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xB6 :
   case 0xB7 :
   case 0xB8 :
   case 0xB9 :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0xBA :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xBB :
   default :
-    return grn_str_others;
+    return grn_char_others;
     break;
   }
   break;
@@ -1456,7 +1454,7 @@ case 0xE0 :
   case 0xA1 :
   case 0xA2 :
   case 0xA3 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xA4 :
     switch (str[2]) {
@@ -1464,7 +1462,7 @@ case 0xE0 :
     case 0x81 :
     case 0x82 :
     case 0x83 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x84 :
     case 0x85 :
@@ -1520,19 +1518,19 @@ case 0xE0 :
     case 0xB7 :
     case 0xB8 :
     case 0xB9 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBA :
     case 0xBB :
     case 0xBC :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xBD :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBE :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -1554,10 +1552,10 @@ case 0xE0 :
     case 0x8D :
     case 0x8E :
     case 0x8F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x90 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x91 :
     case 0x92 :
@@ -1566,7 +1564,7 @@ case 0xE0 :
     case 0x95 :
     case 0x96 :
     case 0x97 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x98 :
     case 0x99 :
@@ -1578,15 +1576,15 @@ case 0xE0 :
     case 0x9F :
     case 0xA0 :
     case 0xA1 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA2 :
     case 0xA3 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA4 :
     case 0xA5 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xA6 :
     case 0xA7 :
@@ -1598,10 +1596,10 @@ case 0xE0 :
     case 0xAD :
     case 0xAE :
     case 0xAF :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0xB0 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xB1 :
     case 0xB2 :
@@ -1613,11 +1611,11 @@ case 0xE0 :
     case 0xB8 :
     case 0xB9 :
     case 0xBA :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xBB :
     default :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     }
     break;
@@ -1628,7 +1626,7 @@ case 0xE0 :
     case 0x82 :
     case 0x83 :
     case 0x84 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x85 :
     case 0x86 :
@@ -1638,19 +1636,19 @@ case 0xE0 :
     case 0x8A :
     case 0x8B :
     case 0x8C :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x8D :
     case 0x8E :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8F :
     case 0x90 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x91 :
     case 0x92 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x93 :
     case 0x94 :
@@ -1674,10 +1672,10 @@ case 0xE0 :
     case 0xA6 :
     case 0xA7 :
     case 0xA8 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA9 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xAA :
     case 0xAB :
@@ -1686,36 +1684,36 @@ case 0xE0 :
     case 0xAE :
     case 0xAF :
     case 0xB0 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB1 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB2 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB3 :
     case 0xB4 :
     case 0xB5 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB6 :
     case 0xB7 :
     case 0xB8 :
     case 0xB9 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBA :
     case 0xBB :
     case 0xBC :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xBD :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBE :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -1735,10 +1733,10 @@ case 0xE0 :
     case 0x8B :
     case 0x8C :
     case 0x8D :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8E :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x8F :
     case 0x90 :
@@ -1753,25 +1751,25 @@ case 0xE0 :
     case 0x99 :
     case 0x9A :
     case 0x9B :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x9C :
     case 0x9D :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9E :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x9F :
     case 0xA0 :
     case 0xA1 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA2 :
     case 0xA3 :
     case 0xA4 :
     case 0xA5 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA6 :
     case 0xA7 :
@@ -1783,15 +1781,15 @@ case 0xE0 :
     case 0xAD :
     case 0xAE :
     case 0xAF :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0xB0 :
     case 0xB1 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB2 :
     case 0xB3 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xB4 :
     case 0xB5 :
@@ -1799,14 +1797,14 @@ case 0xE0 :
     case 0xB7 :
     case 0xB8 :
     case 0xB9 :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0xBA :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xBB :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -1817,7 +1815,7 @@ case 0xE0 :
     case 0x82 :
     case 0x83 :
     case 0x84 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x85 :
     case 0x86 :
@@ -1825,21 +1823,21 @@ case 0xE0 :
     case 0x88 :
     case 0x89 :
     case 0x8A :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x8B :
     case 0x8C :
     case 0x8D :
     case 0x8E :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8F :
     case 0x90 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x91 :
     case 0x92 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x93 :
     case 0x94 :
@@ -1863,10 +1861,10 @@ case 0xE0 :
     case 0xA6 :
     case 0xA7 :
     case 0xA8 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA9 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xAA :
     case 0xAB :
@@ -1875,32 +1873,32 @@ case 0xE0 :
     case 0xAE :
     case 0xAF :
     case 0xB0 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB1 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB2 :
     case 0xB3 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB4 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB5 :
     case 0xB6 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB7 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB8 :
     case 0xB9 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBA :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -1931,19 +1929,19 @@ case 0xE0 :
     case 0x96 :
     case 0x97 :
     case 0x98 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x99 :
     case 0x9A :
     case 0x9B :
     case 0x9C :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9D :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x9E :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9F :
     case 0xA0 :
@@ -1952,7 +1950,7 @@ case 0xE0 :
     case 0xA3 :
     case 0xA4 :
     case 0xA5 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA6 :
     case 0xA7 :
@@ -1964,20 +1962,20 @@ case 0xE0 :
     case 0xAD :
     case 0xAE :
     case 0xAF :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0xB0 :
     case 0xB1 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB2 :
     case 0xB3 :
     case 0xB4 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB5 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -1988,7 +1986,7 @@ case 0xE0 :
     case 0x82 :
     case 0x83 :
     case 0x84 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x85 :
     case 0x86 :
@@ -1999,18 +1997,18 @@ case 0xE0 :
     case 0x8B :
     case 0x8C :
     case 0x8D :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x8E :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8F :
     case 0x90 :
     case 0x91 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x92 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x93 :
     case 0x94 :
@@ -2034,10 +2032,10 @@ case 0xE0 :
     case 0xA6 :
     case 0xA7 :
     case 0xA8 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA9 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xAA :
     case 0xAB :
@@ -2046,36 +2044,36 @@ case 0xE0 :
     case 0xAE :
     case 0xAF :
     case 0xB0 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB1 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB2 :
     case 0xB3 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB4 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB5 :
     case 0xB6 :
     case 0xB7 :
     case 0xB8 :
     case 0xB9 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBA :
     case 0xBB :
     case 0xBC :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xBD :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBE :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -2097,10 +2095,10 @@ case 0xE0 :
     case 0x8D :
     case 0x8E :
     case 0x8F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x90 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x91 :
     case 0x92 :
@@ -2117,17 +2115,17 @@ case 0xE0 :
     case 0x9D :
     case 0x9E :
     case 0x9F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA0 :
     case 0xA1 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA2 :
     case 0xA3 :
     case 0xA4 :
     case 0xA5 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA6 :
     case 0xA7 :
@@ -2139,17 +2137,17 @@ case 0xE0 :
     case 0xAD :
     case 0xAE :
     case 0xAF :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0xB0 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB1 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xB2 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -2160,7 +2158,7 @@ case 0xE0 :
     case 0x82 :
     case 0x83 :
     case 0x84 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x85 :
     case 0x86 :
@@ -2170,19 +2168,19 @@ case 0xE0 :
     case 0x8A :
     case 0x8B :
     case 0x8C :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x8D :
     case 0x8E :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8F :
     case 0x90 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x91 :
     case 0x92 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x93 :
     case 0x94 :
@@ -2206,10 +2204,10 @@ case 0xE0 :
     case 0xA6 :
     case 0xA7 :
     case 0xA8 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA9 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xAA :
     case 0xAB :
@@ -2218,36 +2216,36 @@ case 0xE0 :
     case 0xAE :
     case 0xAF :
     case 0xB0 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB1 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB2 :
     case 0xB3 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB4 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB5 :
     case 0xB6 :
     case 0xB7 :
     case 0xB8 :
     case 0xB9 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBA :
     case 0xBB :
     case 0xBC :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xBD :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBE :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -2281,25 +2279,25 @@ case 0xE0 :
     case 0x99 :
     case 0x9A :
     case 0x9B :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x9C :
     case 0x9D :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9E :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x9F :
     case 0xA0 :
     case 0xA1 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA2 :
     case 0xA3 :
     case 0xA4 :
     case 0xA5 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA6 :
     case 0xA7 :
@@ -2311,17 +2309,17 @@ case 0xE0 :
     case 0xAD :
     case 0xAE :
     case 0xAF :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0xB0 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xB1 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB2 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -2330,13 +2328,13 @@ case 0xE0 :
     case 0x80 :
     case 0x81 :
     case 0x82 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x83 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x84 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x85 :
     case 0x86 :
@@ -2344,72 +2342,72 @@ case 0xE0 :
     case 0x88 :
     case 0x89 :
     case 0x8A :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x8B :
     case 0x8C :
     case 0x8D :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8E :
     case 0x8F :
     case 0x90 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x91 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x92 :
     case 0x93 :
     case 0x94 :
     case 0x95 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x96 :
     case 0x97 :
     case 0x98 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x99 :
     case 0x9A :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9B :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x9C :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9D :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x9E :
     case 0x9F :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA0 :
     case 0xA1 :
     case 0xA2 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA3 :
     case 0xA4 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA5 :
     case 0xA6 :
     case 0xA7 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA8 :
     case 0xA9 :
     case 0xAA :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xAB :
     case 0xAC :
     case 0xAD :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xAE :
     case 0xAF :
@@ -2423,11 +2421,11 @@ case 0xE0 :
     case 0xB7 :
     case 0xB8 :
     case 0xB9 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBA :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -2471,7 +2469,7 @@ case 0xE0 :
     case 0xA3 :
     case 0xA4 :
     case 0xA5 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA6 :
     case 0xA7 :
@@ -2486,7 +2484,7 @@ case 0xE0 :
     case 0xB0 :
     case 0xB1 :
     case 0xB2 :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0xB3 :
     case 0xB4 :
@@ -2496,11 +2494,11 @@ case 0xE0 :
     case 0xB8 :
     case 0xB9 :
     case 0xBA :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xBB :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -2511,7 +2509,7 @@ case 0xE0 :
     case 0x82 :
     case 0x83 :
     case 0x84 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x85 :
     case 0x86 :
@@ -2521,18 +2519,18 @@ case 0xE0 :
     case 0x8A :
     case 0x8B :
     case 0x8C :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x8D :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8E :
     case 0x8F :
     case 0x90 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x91 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x92 :
     case 0x93 :
@@ -2557,10 +2555,10 @@ case 0xE0 :
     case 0xA6 :
     case 0xA7 :
     case 0xA8 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA9 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xAA :
     case 0xAB :
@@ -2572,21 +2570,21 @@ case 0xE0 :
     case 0xB1 :
     case 0xB2 :
     case 0xB3 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB4 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB5 :
     case 0xB6 :
     case 0xB7 :
     case 0xB8 :
     case 0xB9 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBA :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -2624,17 +2622,17 @@ case 0xE0 :
     case 0x9D :
     case 0x9E :
     case 0x9F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA0 :
     case 0xA1 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA2 :
     case 0xA3 :
     case 0xA4 :
     case 0xA5 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA6 :
     case 0xA7 :
@@ -2646,11 +2644,11 @@ case 0xE0 :
     case 0xAD :
     case 0xAE :
     case 0xAF :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0xB0 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -2661,7 +2659,7 @@ case 0xE0 :
     case 0x82 :
     case 0x83 :
     case 0x84 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x85 :
     case 0x86 :
@@ -2671,18 +2669,18 @@ case 0xE0 :
     case 0x8A :
     case 0x8B :
     case 0x8C :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x8D :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8E :
     case 0x8F :
     case 0x90 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x91 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x92 :
     case 0x93 :
@@ -2707,10 +2705,10 @@ case 0xE0 :
     case 0xA6 :
     case 0xA7 :
     case 0xA8 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA9 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xAA :
     case 0xAB :
@@ -2722,29 +2720,29 @@ case 0xE0 :
     case 0xB1 :
     case 0xB2 :
     case 0xB3 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB4 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB5 :
     case 0xB6 :
     case 0xB7 :
     case 0xB8 :
     case 0xB9 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBA :
     case 0xBB :
     case 0xBC :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xBD :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBE :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -2780,23 +2778,23 @@ case 0xE0 :
     case 0x9B :
     case 0x9C :
     case 0x9D :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x9E :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA0 :
     case 0xA1 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA2 :
     case 0xA3 :
     case 0xA4 :
     case 0xA5 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA6 :
     case 0xA7 :
@@ -2808,18 +2806,18 @@ case 0xE0 :
     case 0xAD :
     case 0xAE :
     case 0xAF :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0xB0 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB1 :
     case 0xB2 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xB3 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -2830,7 +2828,7 @@ case 0xE0 :
     case 0x82 :
     case 0x83 :
     case 0x84 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x85 :
     case 0x86 :
@@ -2840,18 +2838,18 @@ case 0xE0 :
     case 0x8A :
     case 0x8B :
     case 0x8C :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x8D :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8E :
     case 0x8F :
     case 0x90 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x91 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x92 :
     case 0x93 :
@@ -2876,10 +2874,10 @@ case 0xE0 :
     case 0xA6 :
     case 0xA7 :
     case 0xA8 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA9 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xAA :
     case 0xAB :
@@ -2897,11 +2895,11 @@ case 0xE0 :
     case 0xB7 :
     case 0xB8 :
     case 0xB9 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBA :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -2939,17 +2937,17 @@ case 0xE0 :
     case 0x9D :
     case 0x9E :
     case 0x9F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA0 :
     case 0xA1 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA2 :
     case 0xA3 :
     case 0xA4 :
     case 0xA5 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA6 :
     case 0xA7 :
@@ -2961,11 +2959,11 @@ case 0xE0 :
     case 0xAD :
     case 0xAE :
     case 0xAF :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0xB0 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -2976,7 +2974,7 @@ case 0xE0 :
     case 0x82 :
     case 0x83 :
     case 0x84 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x85 :
     case 0x86 :
@@ -2996,12 +2994,12 @@ case 0xE0 :
     case 0x94 :
     case 0x95 :
     case 0x96 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x97 :
     case 0x98 :
     case 0x99 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x9A :
     case 0x9B :
@@ -3027,10 +3025,10 @@ case 0xE0 :
     case 0xAF :
     case 0xB0 :
     case 0xB1 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB2 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB3 :
     case 0xB4 :
@@ -3041,17 +3039,17 @@ case 0xE0 :
     case 0xB9 :
     case 0xBA :
     case 0xBB :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBC :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xBD :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBE :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -3064,7 +3062,7 @@ case 0xE0 :
     case 0x84 :
     case 0x85 :
     case 0x86 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x87 :
     case 0x88 :
@@ -3111,21 +3109,21 @@ case 0xE0 :
     case 0xB1 :
     case 0xB2 :
     case 0xB3 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB4 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xB5 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
   case 0xB8 :
     switch (str[2]) {
     case 0x80 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x81 :
     case 0x82 :
@@ -3175,14 +3173,14 @@ case 0xE0 :
     case 0xAE :
     case 0xAF :
     case 0xB0 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB1 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB2 :
     case 0xB3 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB4 :
     case 0xB5 :
@@ -3195,11 +3193,11 @@ case 0xE0 :
     case 0xBC :
     case 0xBD :
     case 0xBE :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xBF :
     default :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     }
     break;
@@ -3212,7 +3210,7 @@ case 0xE0 :
     case 0x84 :
     case 0x85 :
     case 0x86 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x87 :
     case 0x88 :
@@ -3222,10 +3220,10 @@ case 0xE0 :
     case 0x8C :
     case 0x8D :
     case 0x8E :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8F :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x90 :
     case 0x91 :
@@ -3237,53 +3235,53 @@ case 0xE0 :
     case 0x97 :
     case 0x98 :
     case 0x99 :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0x9A :
     case 0x9B :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x9C :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
   case 0xBA :
     switch (str[2]) {
     case 0x80 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x81 :
     case 0x82 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x83 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x84 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x85 :
     case 0x86 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x87 :
     case 0x88 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x89 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8A :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x8B :
     case 0x8C :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8D :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x8E :
     case 0x8F :
@@ -3291,16 +3289,16 @@ case 0xE0 :
     case 0x91 :
     case 0x92 :
     case 0x93 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x94 :
     case 0x95 :
     case 0x96 :
     case 0x97 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x98 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x99 :
     case 0x9A :
@@ -3309,51 +3307,51 @@ case 0xE0 :
     case 0x9D :
     case 0x9E :
     case 0x9F :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA0 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA1 :
     case 0xA2 :
     case 0xA3 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA4 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA5 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA6 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA7 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA8 :
     case 0xA9 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xAA :
     case 0xAB :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xAC :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xAD :
     case 0xAE :
     case 0xAF :
     case 0xB0 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB1 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB2 :
     case 0xB3 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB4 :
     case 0xB5 :
@@ -3364,14 +3362,14 @@ case 0xE0 :
     case 0xBA :
     case 0xBB :
     case 0xBC :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xBD :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBE :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -3382,13 +3380,13 @@ case 0xE0 :
     case 0x82 :
     case 0x83 :
     case 0x84 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x85 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x86 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x87 :
     case 0x88 :
@@ -3399,7 +3397,7 @@ case 0xE0 :
     case 0x8D :
     case 0x8E :
     case 0x8F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x90 :
     case 0x91 :
@@ -3411,26 +3409,26 @@ case 0xE0 :
     case 0x97 :
     case 0x98 :
     case 0x99 :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0x9A :
     case 0x9B :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x9C :
     case 0x9D :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9E :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
   case 0xBC :
     switch (str[2]) {
     case 0x80 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x81 :
     case 0x82 :
@@ -3455,11 +3453,11 @@ case 0xE0 :
     case 0x95 :
     case 0x96 :
     case 0x97 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x98 :
     case 0x99 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x9A :
     case 0x9B :
@@ -3467,7 +3465,7 @@ case 0xE0 :
     case 0x9D :
     case 0x9E :
     case 0x9F :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xA0 :
     case 0xA1 :
@@ -3489,35 +3487,35 @@ case 0xE0 :
     case 0xB1 :
     case 0xB2 :
     case 0xB3 :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0xB4 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xB5 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB6 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xB7 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB8 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xB9 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xBA :
     case 0xBB :
     case 0xBC :
     case 0xBD :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xBE :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -3531,10 +3529,10 @@ case 0xE0 :
     case 0x85 :
     case 0x86 :
     case 0x87 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x88 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x89 :
     case 0x8A :
@@ -3570,11 +3568,11 @@ case 0xE0 :
     case 0xA8 :
     case 0xA9 :
     case 0xAA :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xAB :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -3585,20 +3583,20 @@ case 0xE0 :
     case 0x82 :
     case 0x83 :
     case 0x84 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x85 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x86 :
     case 0x87 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x88 :
     case 0x89 :
     case 0x8A :
     case 0x8B :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x8C :
     case 0x8D :
@@ -3650,11 +3648,11 @@ case 0xE0 :
     case 0xBB :
     case 0xBC :
     case 0xBD :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xBE :
     default :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     }
     break;
@@ -3666,10 +3664,10 @@ case 0xE0 :
     case 0x83 :
     case 0x84 :
     case 0x85 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x86 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x87 :
     case 0x88 :
@@ -3677,25 +3675,25 @@ case 0xE0 :
     case 0x8A :
     case 0x8B :
     case 0x8C :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x8D :
     case 0x8E :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8F :
     case 0x90 :
     case 0x91 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x92 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
   default :
-    return grn_str_others;
+    return grn_char_others;
     break;
   }
   break;
@@ -3737,28 +3735,28 @@ case 0xE1 :
     case 0x9F :
     case 0xA0 :
     case 0xA1 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA2 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA3 :
     case 0xA4 :
     case 0xA5 :
     case 0xA6 :
     case 0xA7 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA8 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA9 :
     case 0xAA :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xAB :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -3774,7 +3772,7 @@ case 0xE1 :
     case 0x87 :
     case 0x88 :
     case 0x89 :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0x8A :
     case 0x8B :
@@ -3782,7 +3780,7 @@ case 0xE1 :
     case 0x8D :
     case 0x8E :
     case 0x8F :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x90 :
     case 0x91 :
@@ -3790,17 +3788,17 @@ case 0xE1 :
     case 0x93 :
     case 0x94 :
     case 0x95 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x96 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
   case 0x82 :
-    if (str[2] < 0xA0) { return grn_str_others; }
-    return grn_str_alpha;
+    if (str[2] < 0xA0) { return grn_char_others; }
+    return grn_char_alpha;
     break;
   case 0x83 :
     switch (str[2]) {
@@ -3810,7 +3808,7 @@ case 0xE1 :
     case 0x83 :
     case 0x84 :
     case 0x85 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x86 :
     case 0x87 :
@@ -3822,7 +3820,7 @@ case 0xE1 :
     case 0x8D :
     case 0x8E :
     case 0x8F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x90 :
     case 0x91 :
@@ -3867,39 +3865,39 @@ case 0xE1 :
     case 0xB8 :
     case 0xB9 :
     case 0xBA :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBB :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xBC :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBD :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
   case 0x84 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0x85 :
-    if (str[2] < 0x9A) { return grn_str_alpha; }
-    if (str[2] < 0x9F) { return grn_str_others; }
-    return grn_str_alpha;
+    if (str[2] < 0x9A) { return grn_char_alpha; }
+    if (str[2] < 0x9F) { return grn_char_others; }
+    return grn_char_alpha;
     break;
   case 0x86 :
-    if (str[2] < 0xA3) { return grn_str_alpha; }
-    if (str[2] < 0xA8) { return grn_str_others; }
-    return grn_str_alpha;
+    if (str[2] < 0xA3) { return grn_char_alpha; }
+    if (str[2] < 0xA8) { return grn_char_others; }
+    return grn_char_alpha;
     break;
   case 0x87 :
-    if (str[2] < 0xBA) { return grn_str_alpha; }
-    return grn_str_others;
+    if (str[2] < 0xBA) { return grn_char_alpha; }
+    return grn_char_others;
     break;
   case 0x88 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0x89 :
     switch (str[2]) {
@@ -3912,20 +3910,20 @@ case 0xE1 :
     case 0x86 :
     case 0x87 :
     case 0x88 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x89 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8A :
     case 0x8B :
     case 0x8C :
     case 0x8D :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x8E :
     case 0x8F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x90 :
     case 0x91 :
@@ -3934,30 +3932,30 @@ case 0xE1 :
     case 0x94 :
     case 0x95 :
     case 0x96 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x97 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x98 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x99 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x9A :
     case 0x9B :
     case 0x9C :
     case 0x9D :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9E :
     case 0x9F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA0 :
     default :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     }
     break;
@@ -3972,20 +3970,20 @@ case 0xE1 :
     case 0x86 :
     case 0x87 :
     case 0x88 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x89 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8A :
     case 0x8B :
     case 0x8C :
     case 0x8D :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x8E :
     case 0x8F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x90 :
     case 0x91 :
@@ -4020,20 +4018,20 @@ case 0xE1 :
     case 0xAE :
     case 0xAF :
     case 0xB0 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB1 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB2 :
     case 0xB3 :
     case 0xB4 :
     case 0xB5 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB6 :
     case 0xB7 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB8 :
     case 0xB9 :
@@ -4042,31 +4040,31 @@ case 0xE1 :
     case 0xBC :
     case 0xBD :
     case 0xBE :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBF :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
   case 0x8B :
     switch (str[2]) {
     case 0x80 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x81 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x82 :
     case 0x83 :
     case 0x84 :
     case 0x85 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x86 :
     case 0x87 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x88 :
     case 0x89 :
@@ -4083,14 +4081,14 @@ case 0xE1 :
     case 0x94 :
     case 0x95 :
     case 0x96 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x97 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x98 :
     default :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     }
     break;
@@ -4113,24 +4111,24 @@ case 0xE1 :
     case 0x8E :
     case 0x8F :
     case 0x90 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x91 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x92 :
     case 0x93 :
     case 0x94 :
     case 0x95 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x96 :
     case 0x97 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x98 :
     default :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     }
     break;
@@ -4163,14 +4161,14 @@ case 0xE1 :
     case 0x98 :
     case 0x99 :
     case 0x9A :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9B :
     case 0x9C :
     case 0x9D :
     case 0x9E :
     case 0x9F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA0 :
     case 0xA1 :
@@ -4181,7 +4179,7 @@ case 0xE1 :
     case 0xA6 :
     case 0xA7 :
     case 0xA8 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xA9 :
     case 0xAA :
@@ -4203,11 +4201,11 @@ case 0xE1 :
     case 0xBA :
     case 0xBB :
     case 0xBC :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0xBD :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -4229,7 +4227,7 @@ case 0xE1 :
     case 0x8D :
     case 0x8E :
     case 0x8F :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x90 :
     case 0x91 :
@@ -4241,7 +4239,7 @@ case 0xE1 :
     case 0x97 :
     case 0x98 :
     case 0x99 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x9A :
     case 0x9B :
@@ -4249,21 +4247,21 @@ case 0xE1 :
     case 0x9D :
     case 0x9E :
     case 0x9F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA0 :
     default :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     }
     break;
   case 0x8F :
-    if (str[2] < 0xB5) { return grn_str_alpha; }
-    return grn_str_others;
+    if (str[2] < 0xB5) { return grn_char_alpha; }
+    return grn_char_others;
     break;
   case 0x90 :
-    if (str[2] < 0x81) { return grn_str_others; }
-    return grn_str_alpha;
+    if (str[2] < 0x81) { return grn_char_others; }
+    return grn_char_alpha;
     break;
   case 0x91 :
   case 0x92 :
@@ -4273,7 +4271,7 @@ case 0xE1 :
   case 0x96 :
   case 0x97 :
   case 0x98 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0x99 :
     switch (str[2]) {
@@ -4322,11 +4320,11 @@ case 0xE1 :
     case 0xAA :
     case 0xAB :
     case 0xAC :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xAD :
     case 0xAE :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xAF :
     case 0xB0 :
@@ -4336,18 +4334,18 @@ case 0xE1 :
     case 0xB4 :
     case 0xB5 :
     case 0xB6 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB7 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
   case 0x9A :
     switch (str[2]) {
     case 0x80 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x81 :
     case 0x82 :
@@ -4375,20 +4373,20 @@ case 0xE1 :
     case 0x98 :
     case 0x99 :
     case 0x9A :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9B :
     case 0x9C :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x9D :
     case 0x9E :
     case 0x9F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA0 :
     default :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     }
     break;
@@ -4437,21 +4435,21 @@ case 0xE1 :
     case 0xA8 :
     case 0xA9 :
     case 0xAA :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xAB :
     case 0xAC :
     case 0xAD :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xAE :
     case 0xAF :
     case 0xB0 :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0xB1 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -4470,16 +4468,16 @@ case 0xE1 :
     case 0x8A :
     case 0x8B :
     case 0x8C :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x8D :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8E :
     case 0x8F :
     case 0x90 :
     case 0x91 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x92 :
     case 0x93 :
@@ -4495,7 +4493,7 @@ case 0xE1 :
     case 0x9D :
     case 0x9E :
     case 0x9F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA0 :
     case 0xA1 :
@@ -4515,20 +4513,20 @@ case 0xE1 :
     case 0xAF :
     case 0xB0 :
     case 0xB1 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB2 :
     case 0xB3 :
     case 0xB4 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB5 :
     case 0xB6 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xB7 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -4552,7 +4550,7 @@ case 0xE1 :
     case 0x8F :
     case 0x90 :
     case 0x91 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x92 :
     case 0x93 :
@@ -4568,7 +4566,7 @@ case 0xE1 :
     case 0x9D :
     case 0x9E :
     case 0x9F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA0 :
     case 0xA1 :
@@ -4583,25 +4581,25 @@ case 0xE1 :
     case 0xAA :
     case 0xAB :
     case 0xAC :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xAD :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xAE :
     case 0xAF :
     case 0xB0 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB1 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
   case 0x9E :
-    if (str[2] < 0xB4) { return grn_str_alpha; }
-    return grn_str_others;
+    if (str[2] < 0xB4) { return grn_char_alpha; }
+    return grn_char_others;
     break;
   case 0x9F :
     switch (str[2]) {
@@ -4625,29 +4623,29 @@ case 0xE1 :
     case 0x91 :
     case 0x92 :
     case 0x93 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x94 :
     case 0x95 :
     case 0x96 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x97 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x98 :
     case 0x99 :
     case 0x9A :
     case 0x9B :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x9C :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9D :
     case 0x9E :
     case 0x9F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA0 :
     case 0xA1 :
@@ -4659,7 +4657,7 @@ case 0xE1 :
     case 0xA7 :
     case 0xA8 :
     case 0xA9 :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0xAA :
     case 0xAB :
@@ -4667,7 +4665,7 @@ case 0xE1 :
     case 0xAD :
     case 0xAE :
     case 0xAF :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB0 :
     case 0xB1 :
@@ -4679,11 +4677,11 @@ case 0xE1 :
     case 0xB7 :
     case 0xB8 :
     case 0xB9 :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0xBA :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -4700,14 +4698,14 @@ case 0xE1 :
     case 0x88 :
     case 0x89 :
     case 0x8A :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x8B :
     case 0x8C :
     case 0x8D :
     case 0x8E :
     case 0x8F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x90 :
     case 0x91 :
@@ -4719,7 +4717,7 @@ case 0xE1 :
     case 0x97 :
     case 0x98 :
     case 0x99 :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0x9A :
     case 0x9B :
@@ -4727,42 +4725,42 @@ case 0xE1 :
     case 0x9D :
     case 0x9E :
     case 0x9F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA0 :
     default :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     }
     break;
   case 0xA1 :
-    if (str[2] < 0xB8) { return grn_str_alpha; }
-    return grn_str_others;
+    if (str[2] < 0xB8) { return grn_char_alpha; }
+    return grn_char_others;
     break;
   case 0xA2 :
-    if (str[2] < 0xA9) { return grn_str_alpha; }
-    return grn_str_others;
+    if (str[2] < 0xA9) { return grn_char_alpha; }
+    return grn_char_others;
     break;
   case 0xA3 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xA4 :
-    if (str[2] < 0x9D) { return grn_str_alpha; }
-    return grn_str_others;
+    if (str[2] < 0x9D) { return grn_char_alpha; }
+    return grn_char_others;
     break;
   case 0xA5 :
     switch (str[2]) {
     case 0x80 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x81 :
     case 0x82 :
     case 0x83 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x84 :
     case 0x85 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x86 :
     case 0x87 :
@@ -4774,7 +4772,7 @@ case 0xE1 :
     case 0x8D :
     case 0x8E :
     case 0x8F :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0x90 :
     case 0x91 :
@@ -4806,33 +4804,33 @@ case 0xE1 :
     case 0xAB :
     case 0xAC :
     case 0xAD :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xAE :
     case 0xAF :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB0 :
     case 0xB1 :
     case 0xB2 :
     case 0xB3 :
     case 0xB4 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB5 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
   case 0xA6 :
-    if (str[2] < 0xAA) { return grn_str_alpha; }
-    return grn_str_others;
+    if (str[2] < 0xAA) { return grn_char_alpha; }
+    return grn_char_others;
     break;
   case 0xA7 :
     switch (str[2]) {
     case 0x80 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x81 :
     case 0x82 :
@@ -4841,7 +4839,7 @@ case 0xE1 :
     case 0x85 :
     case 0x86 :
     case 0x87 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x88 :
     case 0x89 :
@@ -4851,7 +4849,7 @@ case 0xE1 :
     case 0x8D :
     case 0x8E :
     case 0x8F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x90 :
     case 0x91 :
@@ -4863,17 +4861,17 @@ case 0xE1 :
     case 0x97 :
     case 0x98 :
     case 0x99 :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0x9A :
     case 0x9B :
     case 0x9C :
     case 0x9D :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x9E :
     default :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     }
     break;
@@ -4902,7 +4900,7 @@ case 0xE1 :
     case 0x94 :
     case 0x95 :
     case 0x96 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x97 :
     case 0x98 :
@@ -4911,27 +4909,27 @@ case 0xE1 :
     case 0x9B :
     case 0x9C :
     case 0x9D :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x9E :
     case 0x9F :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xA0 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
   case 0xA9 :
   case 0xAA :
   case 0xAB :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xAC :
-    if (str[2] < 0x85) { return grn_str_others; }
-    if (str[2] < 0xB4) { return grn_str_alpha; }
-    return grn_str_others;
+    if (str[2] < 0x85) { return grn_char_others; }
+    if (str[2] < 0xB4) { return grn_char_alpha; }
+    return grn_char_others;
     break;
   case 0xAD :
     switch (str[2]) {
@@ -4940,7 +4938,7 @@ case 0xE1 :
     case 0x82 :
     case 0x83 :
     case 0x84 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x85 :
     case 0x86 :
@@ -4949,13 +4947,13 @@ case 0xE1 :
     case 0x89 :
     case 0x8A :
     case 0x8B :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x8C :
     case 0x8D :
     case 0x8E :
     case 0x8F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x90 :
     case 0x91 :
@@ -4967,7 +4965,7 @@ case 0xE1 :
     case 0x97 :
     case 0x98 :
     case 0x99 :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0x9A :
     case 0x9B :
@@ -4986,7 +4984,7 @@ case 0xE1 :
     case 0xA8 :
     case 0xA9 :
     case 0xAA :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xAB :
     case 0xAC :
@@ -4997,7 +4995,7 @@ case 0xE1 :
     case 0xB1 :
     case 0xB2 :
     case 0xB3 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB4 :
     case 0xB5 :
@@ -5008,11 +5006,11 @@ case 0xE1 :
     case 0xBA :
     case 0xBB :
     case 0xBC :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xBD :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -5022,28 +5020,28 @@ case 0xE1 :
   case 0xB1 :
   case 0xB2 :
   case 0xB3 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xB4 :
   case 0xB5 :
   case 0xB6 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xB7 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xB8 :
   case 0xB9 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xBA :
-    if (str[2] < 0x9C) { return grn_str_alpha; }
-    if (str[2] < 0xA0) { return grn_str_others; }
-    return grn_str_alpha;
+    if (str[2] < 0x9C) { return grn_char_alpha; }
+    if (str[2] < 0xA0) { return grn_char_others; }
+    return grn_char_alpha;
     break;
   case 0xBB :
-    if (str[2] < 0xBA) { return grn_str_alpha; }
-    return grn_str_others;
+    if (str[2] < 0xBA) { return grn_char_alpha; }
+    return grn_char_others;
     break;
   case 0xBC :
     switch (str[2]) {
@@ -5069,11 +5067,11 @@ case 0xE1 :
     case 0x93 :
     case 0x94 :
     case 0x95 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x96 :
     case 0x97 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x98 :
     case 0x99 :
@@ -5081,15 +5079,15 @@ case 0xE1 :
     case 0x9B :
     case 0x9C :
     case 0x9D :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9E :
     case 0x9F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA0 :
     default :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     }
     break;
@@ -5101,11 +5099,11 @@ case 0xE1 :
     case 0x83 :
     case 0x84 :
     case 0x85 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x86 :
     case 0x87 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x88 :
     case 0x89 :
@@ -5113,11 +5111,11 @@ case 0xE1 :
     case 0x8B :
     case 0x8C :
     case 0x8D :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x8E :
     case 0x8F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x90 :
     case 0x91 :
@@ -5127,28 +5125,28 @@ case 0xE1 :
     case 0x95 :
     case 0x96 :
     case 0x97 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x98 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x99 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9A :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x9B :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9C :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x9D :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9E :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x9F :
     case 0xA0 :
@@ -5181,11 +5179,11 @@ case 0xE1 :
     case 0xBB :
     case 0xBC :
     case 0xBD :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBE :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -5244,10 +5242,10 @@ case 0xE1 :
     case 0xB2 :
     case 0xB3 :
     case 0xB4 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB5 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB6 :
     case 0xB7 :
@@ -5256,17 +5254,17 @@ case 0xE1 :
     case 0xBA :
     case 0xBB :
     case 0xBC :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBD :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xBE :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBF :
     default :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     }
     break;
@@ -5274,15 +5272,15 @@ case 0xE1 :
     switch (str[2]) {
     case 0x80 :
     case 0x81 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x82 :
     case 0x83 :
     case 0x84 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x85 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x86 :
     case 0x87 :
@@ -5291,22 +5289,22 @@ case 0xE1 :
     case 0x8A :
     case 0x8B :
     case 0x8C :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x8D :
     case 0x8E :
     case 0x8F :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x90 :
     case 0x91 :
     case 0x92 :
     case 0x93 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x94 :
     case 0x95 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x96 :
     case 0x97 :
@@ -5314,15 +5312,15 @@ case 0xE1 :
     case 0x99 :
     case 0x9A :
     case 0x9B :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9C :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x9D :
     case 0x9E :
     case 0x9F :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xA0 :
     case 0xA1 :
@@ -5337,24 +5335,24 @@ case 0xE1 :
     case 0xAA :
     case 0xAB :
     case 0xAC :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xAD :
     case 0xAE :
     case 0xAF :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xB0 :
     case 0xB1 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB2 :
     case 0xB3 :
     case 0xB4 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB5 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB6 :
     case 0xB7 :
@@ -5363,20 +5361,20 @@ case 0xE1 :
     case 0xBA :
     case 0xBB :
     case 0xBC :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBD :
     case 0xBE :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xBF :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
   default :
-    return grn_str_others;
+    return grn_char_others;
     break;
   }
   break;
@@ -5400,7 +5398,7 @@ case 0xE2 :
     case 0x8D :
     case 0x8E :
     case 0x8F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x90 :
     case 0x91 :
@@ -5410,25 +5408,25 @@ case 0xE2 :
     case 0x95 :
     case 0x96 :
     case 0x97 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x98 :
     case 0x99 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x9A :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x9B :
     case 0x9C :
     case 0x9D :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x9E :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x9F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA0 :
     case 0xA1 :
@@ -5438,7 +5436,7 @@ case 0xE2 :
     case 0xA5 :
     case 0xA6 :
     case 0xA7 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xA8 :
     case 0xA9 :
@@ -5448,7 +5446,7 @@ case 0xE2 :
     case 0xAD :
     case 0xAE :
     case 0xAF :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB0 :
     case 0xB1 :
@@ -5459,15 +5457,15 @@ case 0xE2 :
     case 0xB6 :
     case 0xB7 :
     case 0xB8 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xB9 :
     case 0xBA :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xBB :
     default :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     }
     break;
@@ -5504,7 +5502,7 @@ case 0xE2 :
     case 0x9C :
     case 0x9D :
     case 0x9E :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x9F :
     case 0xA0 :
@@ -5523,17 +5521,17 @@ case 0xE2 :
     case 0xAD :
     case 0xAE :
     case 0xAF :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB0 :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0xB1 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB2 :
     case 0xB3 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB4 :
     case 0xB5 :
@@ -5541,18 +5539,18 @@ case 0xE2 :
     case 0xB7 :
     case 0xB8 :
     case 0xB9 :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0xBA :
     case 0xBB :
     case 0xBC :
     case 0xBD :
     case 0xBE :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xBF :
     default :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     }
     break;
@@ -5568,24 +5566,24 @@ case 0xE2 :
     case 0x87 :
     case 0x88 :
     case 0x89 :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0x8A :
     case 0x8B :
     case 0x8C :
     case 0x8D :
     case 0x8E :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x8F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x90 :
     case 0x91 :
     case 0x92 :
     case 0x93 :
     case 0x94 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x95 :
     case 0x96 :
@@ -5598,7 +5596,7 @@ case 0xE2 :
     case 0x9D :
     case 0x9E :
     case 0x9F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA0 :
     case 0xA1 :
@@ -5622,38 +5620,38 @@ case 0xE2 :
     case 0xB3 :
     case 0xB4 :
     case 0xB5 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xB6 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
   case 0x83 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0x84 :
     switch (str[2]) {
     case 0x80 :
     case 0x81 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x82 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x83 :
     case 0x84 :
     case 0x85 :
     case 0x86 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x87 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x88 :
     case 0x89 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x8A :
     case 0x8B :
@@ -5665,25 +5663,25 @@ case 0xE2 :
     case 0x91 :
     case 0x92 :
     case 0x93 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x94 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x95 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x96 :
     case 0x97 :
     case 0x98 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x99 :
     case 0x9A :
     case 0x9B :
     case 0x9C :
     case 0x9D :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9E :
     case 0x9F :
@@ -5691,34 +5689,34 @@ case 0xE2 :
     case 0xA1 :
     case 0xA2 :
     case 0xA3 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xA4 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA5 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xA6 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA7 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xA8 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA9 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xAA :
     case 0xAB :
     case 0xAC :
     case 0xAD :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xAE :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xAF :
     case 0xB0 :
@@ -5731,15 +5729,15 @@ case 0xE2 :
     case 0xB7 :
     case 0xB8 :
     case 0xB9 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBA :
     case 0xBB :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xBC :
     default :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     }
     break;
@@ -5750,33 +5748,33 @@ case 0xE2 :
     case 0x82 :
     case 0x83 :
     case 0x84 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x85 :
     case 0x86 :
     case 0x87 :
     case 0x88 :
     case 0x89 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x8A :
     case 0x8B :
     case 0x8C :
     case 0x8D :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x8E :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x8F :
     case 0x90 :
     case 0x91 :
     case 0x92 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x93 :
     default :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     }
     break;
@@ -5785,11 +5783,11 @@ case 0xE2 :
     case 0x80 :
     case 0x81 :
     case 0x82 :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0x83 :
     case 0x84 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x85 :
     case 0x86 :
@@ -5802,11 +5800,11 @@ case 0xE2 :
     case 0x8D :
     case 0x8E :
     case 0x8F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x90 :
     default :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     }
     break;
@@ -5818,15 +5816,15 @@ case 0xE2 :
   case 0x8C :
   case 0x8D :
   case 0x8E :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0x8F :
-    if (str[2] < 0xA8) { return grn_str_symbol; }
-    return grn_str_others;
+    if (str[2] < 0xA8) { return grn_char_symbol; }
+    return grn_char_others;
     break;
   case 0x90 :
-    if (str[2] < 0xA7) { return grn_str_symbol; }
-    return grn_str_others;
+    if (str[2] < 0xA7) { return grn_char_symbol; }
+    return grn_char_others;
     break;
   case 0x91 :
     switch (str[2]) {
@@ -5841,7 +5839,7 @@ case 0xE2 :
     case 0x88 :
     case 0x89 :
     case 0x8A :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x8B :
     case 0x8C :
@@ -5864,21 +5862,21 @@ case 0xE2 :
     case 0x9D :
     case 0x9E :
     case 0x9F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA0 :
     default :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     }
     break;
   case 0x92 :
-    if (str[2] < 0x9C) { return grn_str_digit; }
-    return grn_str_symbol;
+    if (str[2] < 0x9C) { return grn_char_digit; }
+    return grn_char_symbol;
     break;
   case 0x93 :
-    if (str[2] < 0xAA) { return grn_str_symbol; }
-    return grn_str_digit;
+    if (str[2] < 0xAA) { return grn_char_symbol; }
+    return grn_char_digit;
     break;
   case 0x94 :
   case 0x95 :
@@ -5886,7 +5884,7 @@ case 0xE2 :
   case 0x97 :
   case 0x98 :
   case 0x99 :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0x9A :
     switch (str[2]) {
@@ -5919,12 +5917,12 @@ case 0xE2 :
     case 0x9A :
     case 0x9B :
     case 0x9C :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x9D :
     case 0x9E :
     case 0x9F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA0 :
     case 0xA1 :
@@ -5945,40 +5943,40 @@ case 0xE2 :
     case 0xB0 :
     case 0xB1 :
     case 0xB2 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xB3 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
   case 0x9B :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0x9C :
     switch (str[2]) {
     case 0x80 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x81 :
     case 0x82 :
     case 0x83 :
     case 0x84 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x85 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x86 :
     case 0x87 :
     case 0x88 :
     case 0x89 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x8A :
     case 0x8B :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8C :
     case 0x8D :
@@ -6008,14 +6006,14 @@ case 0xE2 :
     case 0xA5 :
     case 0xA6 :
     case 0xA7 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xA8 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA9 :
     default :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     }
     break;
@@ -6033,33 +6031,33 @@ case 0xE2 :
     case 0x89 :
     case 0x8A :
     case 0x8B :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x8C :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8D :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x8E :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8F :
     case 0x90 :
     case 0x91 :
     case 0x92 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x93 :
     case 0x94 :
     case 0x95 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x96 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x97 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x98 :
     case 0x99 :
@@ -6068,11 +6066,11 @@ case 0xE2 :
     case 0x9C :
     case 0x9D :
     case 0x9E :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x9F :
     case 0xA0 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA1 :
     case 0xA2 :
@@ -6095,11 +6093,11 @@ case 0xE2 :
     case 0xB3 :
     case 0xB4 :
     case 0xB5 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xB6 :
     default :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     }
     break;
@@ -6125,15 +6123,15 @@ case 0xE2 :
     case 0x91 :
     case 0x92 :
     case 0x93 :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0x94 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x95 :
     case 0x96 :
     case 0x97 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x98 :
     case 0x99 :
@@ -6159,10 +6157,10 @@ case 0xE2 :
     case 0xAD :
     case 0xAE :
     case 0xAF :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xB0 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB1 :
     case 0xB2 :
@@ -6178,11 +6176,11 @@ case 0xE2 :
     case 0xBC :
     case 0xBD :
     case 0xBE :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xBF :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -6199,14 +6197,14 @@ case 0xE2 :
     case 0x88 :
     case 0x89 :
     case 0x8A :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x8B :
     case 0x8C :
     case 0x8D :
     case 0x8E :
     case 0x8F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x90 :
     case 0x91 :
@@ -6236,17 +6234,17 @@ case 0xE2 :
     case 0xA9 :
     case 0xAA :
     case 0xAB :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xAC :
     case 0xAD :
     case 0xAE :
     case 0xAF :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB0 :
     default :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     }
     break;
@@ -6262,7 +6260,7 @@ case 0xE2 :
   case 0xA9 :
   case 0xAA :
   case 0xAB :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0xAC :
     switch (str[2]) {
@@ -6293,31 +6291,31 @@ case 0xE2 :
     case 0x98 :
     case 0x99 :
     case 0x9A :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x9B :
     case 0x9C :
     case 0x9D :
     case 0x9E :
     case 0x9F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA0 :
     case 0xA1 :
     case 0xA2 :
     case 0xA3 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xA4 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
   case 0xAD :
   case 0xAE :
   case 0xAF :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xB0 :
     switch (str[2]) {
@@ -6368,14 +6366,14 @@ case 0xE2 :
     case 0xAC :
     case 0xAD :
     case 0xAE :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xAF :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB0 :
     default :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     }
     break;
@@ -6412,10 +6410,10 @@ case 0xE2 :
     case 0x9C :
     case 0x9D :
     case 0x9E :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA0 :
     case 0xA1 :
@@ -6430,7 +6428,7 @@ case 0xE2 :
     case 0xAA :
     case 0xAB :
     case 0xAC :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xAD :
     case 0xAE :
@@ -6439,22 +6437,22 @@ case 0xE2 :
     case 0xB1 :
     case 0xB2 :
     case 0xB3 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB4 :
     case 0xB5 :
     case 0xB6 :
     case 0xB7 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB8 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
   case 0xB2 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xB3 :
     switch (str[2]) {
@@ -6495,7 +6493,7 @@ case 0xE2 :
     case 0xA2 :
     case 0xA3 :
     case 0xA4 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA5 :
     case 0xA6 :
@@ -6503,7 +6501,7 @@ case 0xE2 :
     case 0xA8 :
     case 0xA9 :
     case 0xAA :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xAB :
     case 0xAC :
@@ -6519,20 +6517,20 @@ case 0xE2 :
     case 0xB6 :
     case 0xB7 :
     case 0xB8 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB9 :
     case 0xBA :
     case 0xBB :
     case 0xBC :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xBD :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0xBE :
     default :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     }
     break;
@@ -6576,7 +6574,7 @@ case 0xE2 :
     case 0xA3 :
     case 0xA4 :
     case 0xA5 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA6 :
     case 0xA7 :
@@ -6588,11 +6586,11 @@ case 0xE2 :
     case 0xAD :
     case 0xAE :
     case 0xAF :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB0 :
     default :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     }
     break;
@@ -6636,7 +6634,7 @@ case 0xE2 :
     case 0xA3 :
     case 0xA4 :
     case 0xA5 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA6 :
     case 0xA7 :
@@ -6647,14 +6645,14 @@ case 0xE2 :
     case 0xAC :
     case 0xAD :
     case 0xAE :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xAF :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB0 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -6683,7 +6681,7 @@ case 0xE2 :
     case 0x94 :
     case 0x95 :
     case 0x96 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x97 :
     case 0x98 :
@@ -6694,7 +6692,7 @@ case 0xE2 :
     case 0x9D :
     case 0x9E :
     case 0x9F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA0 :
     case 0xA1 :
@@ -6703,10 +6701,10 @@ case 0xE2 :
     case 0xA4 :
     case 0xA5 :
     case 0xA6 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA7 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA8 :
     case 0xA9 :
@@ -6715,10 +6713,10 @@ case 0xE2 :
     case 0xAC :
     case 0xAD :
     case 0xAE :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xAF :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB0 :
     case 0xB1 :
@@ -6727,10 +6725,10 @@ case 0xE2 :
     case 0xB4 :
     case 0xB5 :
     case 0xB6 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB7 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB8 :
     case 0xB9 :
@@ -6739,11 +6737,11 @@ case 0xE2 :
     case 0xBC :
     case 0xBD :
     case 0xBE :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBF :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -6756,10 +6754,10 @@ case 0xE2 :
     case 0x84 :
     case 0x85 :
     case 0x86 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x87 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x88 :
     case 0x89 :
@@ -6768,10 +6766,10 @@ case 0xE2 :
     case 0x8C :
     case 0x8D :
     case 0x8E :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x8F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x90 :
     case 0x91 :
@@ -6780,10 +6778,10 @@ case 0xE2 :
     case 0x94 :
     case 0x95 :
     case 0x96 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x97 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x98 :
     case 0x99 :
@@ -6792,11 +6790,11 @@ case 0xE2 :
     case 0x9C :
     case 0x9D :
     case 0x9E :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9F :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -6804,29 +6802,29 @@ case 0xE2 :
     switch (str[2]) {
     case 0x80 :
     case 0x81 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x82 :
     case 0x83 :
     case 0x84 :
     case 0x85 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x86 :
     case 0x87 :
     case 0x88 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x89 :
     case 0x8A :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8B :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x8C :
     case 0x8D :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8E :
     case 0x8F :
@@ -6838,23 +6836,23 @@ case 0xE2 :
     case 0x95 :
     case 0x96 :
     case 0x97 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x98 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
   case 0xB9 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xBA :
   case 0xBB :
   case 0xBC :
   case 0xBD :
   case 0xBE :
-    return grn_str_kanji;
+    return grn_char_kanji;
     break;
   case 0xBF :
     switch (str[2]) {
@@ -6890,7 +6888,7 @@ case 0xE2 :
     case 0x9D :
     case 0x9E :
     case 0x9F :
-      return grn_str_kanji;
+      return grn_char_kanji;
       break;
     case 0xA0 :
     case 0xA1 :
@@ -6908,7 +6906,7 @@ case 0xE2 :
     case 0xAD :
     case 0xAE :
     case 0xAF :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB0 :
     case 0xB1 :
@@ -6922,42 +6920,42 @@ case 0xE2 :
     case 0xB9 :
     case 0xBA :
     case 0xBB :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xBC :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
   default :
-    return grn_str_others;
+    return grn_char_others;
     break;
   }
   break;
 case 0xE3 :
   switch (str[1]) {
   case 0x80 :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0x81 :
-    return grn_str_hiragana;
+    return grn_char_hiragana;
     break;
   case 0x82 :
-    if (str[2] < 0xA0) { return grn_str_hiragana; }
-    return grn_str_katakana;
+    if (str[2] < 0xA0) { return grn_char_hiragana; }
+    return grn_char_katakana;
     break;
   case 0x83 :
-    return grn_str_katakana;
+    return grn_char_katakana;
     break;
   case 0x84 :
   case 0x85 :
   case 0x86 :
-    return grn_str_kanji;
+    return grn_char_kanji;
     break;
   case 0x87 :
-    if (str[2] < 0xB0) { return grn_str_kanji; }
-    return grn_str_katakana;
+    if (str[2] < 0xB0) { return grn_char_kanji; }
+    return grn_char_katakana;
     break;
   case 0x88 :
   case 0x89 :
@@ -6967,25 +6965,25 @@ case 0xE3 :
   case 0x8D :
   case 0x8E :
   case 0x8F :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0x90 :
   default :
-    return grn_str_kanji;
+    return grn_char_kanji;
     break;
   }
   break;
 case 0xE4 :
-  if (str[1] < 0xB7) { return grn_str_kanji; }
-  if (str[1] < 0xB8) { return grn_str_symbol; }
-  return grn_str_kanji;
+  if (str[1] < 0xB7) { return grn_char_kanji; }
+  if (str[1] < 0xB8) { return grn_char_symbol; }
+  return grn_char_kanji;
   break;
 case 0xE5 :
 case 0xE6 :
 case 0xE7 :
 case 0xE8 :
 case 0xE9 :
-  return grn_str_kanji;
+  return grn_char_kanji;
   break;
 case 0xEA :
   switch (str[1]) {
@@ -7008,11 +7006,11 @@ case 0xEA :
   case 0x90 :
   case 0x91 :
   case 0x92 :
-    return grn_str_kanji;
+    return grn_char_kanji;
     break;
   case 0x93 :
-    if (str[2] < 0x90) { return grn_str_kanji; }
-    return grn_str_others;
+    if (str[2] < 0x90) { return grn_char_kanji; }
+    return grn_char_others;
     break;
   case 0x94 :
   case 0x95 :
@@ -7022,7 +7020,7 @@ case 0xEA :
   case 0x99 :
   case 0x9A :
   case 0x9B :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0x9C :
     switch (str[2]) {
@@ -7049,61 +7047,61 @@ case 0xEA :
     case 0x94 :
     case 0x95 :
     case 0x96 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x97 :
     case 0x98 :
     case 0x99 :
     case 0x9A :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9B :
     case 0x9C :
     case 0x9D :
     case 0x9E :
     case 0x9F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA0 :
     case 0xA1 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xA2 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
   case 0x9D :
   case 0x9E :
   case 0x9F :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xA0 :
     switch (str[2]) {
     case 0x80 :
     case 0x81 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x82 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x83 :
     case 0x84 :
     case 0x85 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x86 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x87 :
     case 0x88 :
     case 0x89 :
     case 0x8A :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x8B :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8C :
     case 0x8D :
@@ -7128,24 +7126,24 @@ case 0xEA :
     case 0xA0 :
     case 0xA1 :
     case 0xA2 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA3 :
     case 0xA4 :
     case 0xA5 :
     case 0xA6 :
     case 0xA7 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA8 :
     case 0xA9 :
     case 0xAA :
     case 0xAB :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xAC :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -7203,17 +7201,17 @@ case 0xEA :
     case 0xB1 :
     case 0xB2 :
     case 0xB3 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB4 :
     case 0xB5 :
     case 0xB6 :
     case 0xB7 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xB8 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -7231,28 +7229,28 @@ case 0xEA :
   case 0xAD :
   case 0xAE :
   case 0xAF :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xB0 :
   default :
-    return grn_str_kanji;
+    return grn_char_kanji;
     break;
   }
   break;
 case 0xEB :
 case 0xEC :
-  return grn_str_kanji;
+  return grn_char_kanji;
   break;
 case 0xED :
-  if (str[1] < 0x9E) { return grn_str_kanji; }
+  if (str[1] < 0x9E) { return grn_char_kanji; }
   if (str[1] == 0x9E) {
-    if (str[2] < 0xB0) { return grn_str_kanji; }
-    return grn_str_others;
+    if (str[2] < 0xB0) { return grn_char_kanji; }
+    return grn_char_others;
   }
-  return grn_str_others;
+  return grn_char_others;
   break;
 case 0xEE :
-  return grn_str_others;
+  return grn_char_others;
   break;
 case 0xEF :
   switch (str[1]) {
@@ -7292,7 +7290,7 @@ case 0xEF :
   case 0xA1 :
   case 0xA2 :
   case 0xA3 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xA4 :
   case 0xA5 :
@@ -7302,7 +7300,7 @@ case 0xEF :
   case 0xA9 :
   case 0xAA :
   case 0xAB :
-    return grn_str_kanji;
+    return grn_char_kanji;
     break;
   case 0xAC :
     switch (str[2]) {
@@ -7313,7 +7311,7 @@ case 0xEF :
     case 0x84 :
     case 0x85 :
     case 0x86 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x87 :
     case 0x88 :
@@ -7327,27 +7325,27 @@ case 0xEF :
     case 0x90 :
     case 0x91 :
     case 0x92 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x93 :
     case 0x94 :
     case 0x95 :
     case 0x96 :
     case 0x97 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x98 :
     case 0x99 :
     case 0x9A :
     case 0x9B :
     case 0x9C :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x9D :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9E :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x9F :
     case 0xA0 :
@@ -7359,10 +7357,10 @@ case 0xEF :
     case 0xA6 :
     case 0xA7 :
     case 0xA8 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xA9 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xAA :
     case 0xAB :
@@ -7377,27 +7375,27 @@ case 0xEF :
     case 0xB4 :
     case 0xB5 :
     case 0xB6 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB7 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB8 :
     case 0xB9 :
     case 0xBA :
     case 0xBB :
     case 0xBC :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBD :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xBE :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBF :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -7405,50 +7403,50 @@ case 0xEF :
     switch (str[2]) {
     case 0x80 :
     case 0x81 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x82 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x83 :
     case 0x84 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x85 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x86 :
     default :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     }
     break;
   case 0xAE :
-    if (str[2] < 0xB2) { return grn_str_alpha; }
-    return grn_str_others;
+    if (str[2] < 0xB2) { return grn_char_alpha; }
+    return grn_char_others;
     break;
   case 0xAF :
-    if (str[2] < 0x93) { return grn_str_others; }
-    return grn_str_alpha;
+    if (str[2] < 0x93) { return grn_char_others; }
+    return grn_char_alpha;
     break;
   case 0xB0 :
   case 0xB1 :
   case 0xB2 :
   case 0xB3 :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xB4 :
-    if (str[2] < 0xBE) { return grn_str_alpha; }
-    return grn_str_symbol;
+    if (str[2] < 0xBE) { return grn_char_alpha; }
+    return grn_char_symbol;
     break;
   case 0xB5 :
-    if (str[2] < 0x90) { return grn_str_others; }
-    return grn_str_alpha;
+    if (str[2] < 0x90) { return grn_char_others; }
+    return grn_char_alpha;
     break;
   case 0xB6 :
-    if (str[2] < 0x90) { return grn_str_alpha; }
-    if (str[2] < 0x92) { return grn_str_others; }
-    return grn_str_alpha;
+    if (str[2] < 0x90) { return grn_char_alpha; }
+    if (str[2] < 0x92) { return grn_char_others; }
+    return grn_char_alpha;
     break;
   case 0xB7 :
     switch (str[2]) {
@@ -7460,7 +7458,7 @@ case 0xEF :
     case 0x85 :
     case 0x86 :
     case 0x87 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x88 :
     case 0x89 :
@@ -7502,7 +7500,7 @@ case 0xEF :
     case 0xAD :
     case 0xAE :
     case 0xAF :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB0 :
     case 0xB1 :
@@ -7516,15 +7514,15 @@ case 0xEF :
     case 0xB9 :
     case 0xBA :
     case 0xBB :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBC :
     case 0xBD :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xBE :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -7546,7 +7544,7 @@ case 0xEF :
     case 0x8D :
     case 0x8E :
     case 0x8F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x90 :
     case 0x91 :
@@ -7558,7 +7556,7 @@ case 0xEF :
     case 0x97 :
     case 0x98 :
     case 0x99 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x9A :
     case 0x9B :
@@ -7582,11 +7580,11 @@ case 0xEF :
     case 0xAD :
     case 0xAE :
     case 0xAF :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB0 :
     default :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     }
     break;
@@ -7611,10 +7609,10 @@ case 0xEF :
     case 0x90 :
     case 0x91 :
     case 0x92 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x93 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x94 :
     case 0x95 :
@@ -7635,50 +7633,50 @@ case 0xEF :
     case 0xA4 :
     case 0xA5 :
     case 0xA6 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xA7 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA8 :
     case 0xA9 :
     case 0xAA :
     case 0xAB :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xAC :
     case 0xAD :
     case 0xAE :
     case 0xAF :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB0 :
     case 0xB1 :
     case 0xB2 :
     case 0xB3 :
     case 0xB4 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xB5 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xB6 :
     default :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     }
     break;
   case 0xBA :
-    return grn_str_alpha;
+    return grn_char_alpha;
     break;
   case 0xBB :
-    if (str[2] < 0xBD) { return grn_str_alpha; }
-    return grn_str_others;
+    if (str[2] < 0xBD) { return grn_char_alpha; }
+    return grn_char_others;
     break;
   case 0xBC :
     switch (str[2]) {
     case 0x80 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x81 :
     case 0x82 :
@@ -7695,7 +7693,7 @@ case 0xEF :
     case 0x8D :
     case 0x8E :
     case 0x8F :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x90 :
     case 0x91 :
@@ -7707,7 +7705,7 @@ case 0xEF :
     case 0x97 :
     case 0x98 :
     case 0x99 :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0x9A :
     case 0x9B :
@@ -7716,7 +7714,7 @@ case 0xEF :
     case 0x9E :
     case 0x9F :
     case 0xA0 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xA1 :
     case 0xA2 :
@@ -7744,18 +7742,18 @@ case 0xEF :
     case 0xB8 :
     case 0xB9 :
     case 0xBA :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0xBB :
     default :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     }
     break;
   case 0xBD :
     switch (str[2]) {
     case 0x80 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x81 :
     case 0x82 :
@@ -7783,7 +7781,7 @@ case 0xEF :
     case 0x98 :
     case 0x99 :
     case 0x9A :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9B :
     case 0x9C :
@@ -7796,23 +7794,23 @@ case 0xEF :
     case 0xA3 :
     case 0xA4 :
     case 0xA5 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xA6 :
     default :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     }
     break;
   case 0xBE :
-    if (str[2] < 0xBF) { return grn_str_alpha; }
-    return grn_str_others;
+    if (str[2] < 0xBF) { return grn_char_alpha; }
+    return grn_char_others;
     break;
   case 0xBF :
     switch (str[2]) {
     case 0x80 :
     case 0x81 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x82 :
     case 0x83 :
@@ -7820,11 +7818,11 @@ case 0xEF :
     case 0x85 :
     case 0x86 :
     case 0x87 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x88 :
     case 0x89 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8A :
     case 0x8B :
@@ -7832,11 +7830,11 @@ case 0xEF :
     case 0x8D :
     case 0x8E :
     case 0x8F :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x90 :
     case 0x91 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x92 :
     case 0x93 :
@@ -7844,21 +7842,21 @@ case 0xEF :
     case 0x95 :
     case 0x96 :
     case 0x97 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x98 :
     case 0x99 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x9A :
     case 0x9B :
     case 0x9C :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9D :
     case 0x9E :
     case 0x9F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA0 :
     case 0xA1 :
@@ -7867,10 +7865,10 @@ case 0xEF :
     case 0xA4 :
     case 0xA5 :
     case 0xA6 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xA7 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA8 :
     case 0xA9 :
@@ -7879,7 +7877,7 @@ case 0xEF :
     case 0xAC :
     case 0xAD :
     case 0xAE :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0xAF :
     case 0xB0 :
@@ -7894,16 +7892,16 @@ case 0xEF :
     case 0xB9 :
     case 0xBA :
     case 0xBB :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xBC :
     default :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     }
     break;
   default :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   }
   break;
@@ -7925,7 +7923,7 @@ case 0xF0 :
   case 0x8D :
   case 0x8E :
   case 0x8F :
-    return grn_str_symbol;
+    return grn_char_symbol;
     break;
   case 0x90 :
     switch (str[2]) {
@@ -7943,10 +7941,10 @@ case 0xF0 :
       case 0x89 :
       case 0x8A :
       case 0x8B :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x8C :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x8D :
       case 0x8E :
@@ -7974,10 +7972,10 @@ case 0xF0 :
       case 0xA4 :
       case 0xA5 :
       case 0xA6 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0xA7 :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0xA8 :
       case 0xA9 :
@@ -7998,21 +7996,21 @@ case 0xF0 :
       case 0xB8 :
       case 0xB9 :
       case 0xBA :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0xBB :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0xBC :
       case 0xBD :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0xBE :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0xBF :
       default :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       }
       break;
@@ -8032,11 +8030,11 @@ case 0xF0 :
       case 0x8B :
       case 0x8C :
       case 0x8D :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x8E :
       case 0x8F :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x90 :
       case 0x91 :
@@ -8052,33 +8050,33 @@ case 0xF0 :
       case 0x9B :
       case 0x9C :
       case 0x9D :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x9E :
       default :
-        return grn_str_others;
+        return grn_char_others;
         break;
       }
       break;
     case 0x82 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x83 :
-      if (str[3] < 0xBB) { return grn_str_alpha; }
-      return grn_str_others;
+      if (str[3] < 0xBB) { return grn_char_alpha; }
+      return grn_char_others;
       break;
     case 0x84 :
       switch (str[3]) {
       case 0x80 :
       case 0x81 :
       case 0x82 :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0x83 :
       case 0x84 :
       case 0x85 :
       case 0x86 :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x87 :
       case 0x88 :
@@ -8125,34 +8123,34 @@ case 0xF0 :
       case 0xB1 :
       case 0xB2 :
       case 0xB3 :
-        return grn_str_digit;
+        return grn_char_digit;
         break;
       case 0xB4 :
       case 0xB5 :
       case 0xB6 :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0xB7 :
       default :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       }
       break;
     case 0x85 :
-      if (str[3] < 0xB9) { return grn_str_digit; }
-      return grn_str_symbol;
+      if (str[3] < 0xB9) { return grn_char_digit; }
+      return grn_char_symbol;
       break;
     case 0x86 :
-      if (str[3] < 0x8A) { return grn_str_symbol; }
-      if (str[3] < 0x8B) { return grn_str_digit; }
-      return grn_str_others;
+      if (str[3] < 0x8A) { return grn_char_symbol; }
+      if (str[3] < 0x8B) { return grn_char_digit; }
+      return grn_char_others;
       break;
     case 0x87 :
     case 0x88 :
     case 0x89 :
     case 0x8A :
     case 0x8B :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8C :
       switch (str[3]) {
@@ -8187,16 +8185,16 @@ case 0xF0 :
       case 0x9C :
       case 0x9D :
       case 0x9E :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x9F :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0xA0 :
       case 0xA1 :
       case 0xA2 :
       case 0xA3 :
-        return grn_str_digit;
+        return grn_char_digit;
         break;
       case 0xA4 :
       case 0xA5 :
@@ -8210,21 +8208,21 @@ case 0xF0 :
       case 0xAD :
       case 0xAE :
       case 0xAF :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0xB0 :
       default :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       }
       break;
     case 0x8D :
       switch (str[3]) {
       case 0x80 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x81 :
-        return grn_str_digit;
+        return grn_char_digit;
         break;
       case 0x82 :
       case 0x83 :
@@ -8234,14 +8232,14 @@ case 0xF0 :
       case 0x87 :
       case 0x88 :
       case 0x89 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x8A :
-        return grn_str_digit;
+        return grn_char_digit;
         break;
       case 0x8B :
       default :
-        return grn_str_others;
+        return grn_char_others;
         break;
       }
       break;
@@ -8277,17 +8275,17 @@ case 0xF0 :
       case 0x9B :
       case 0x9C :
       case 0x9D :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x9E :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x9F :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0xA0 :
       default :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       }
       break;
@@ -8297,13 +8295,13 @@ case 0xF0 :
       case 0x81 :
       case 0x82 :
       case 0x83 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x84 :
       case 0x85 :
       case 0x86 :
       case 0x87 :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x88 :
       case 0x89 :
@@ -8313,27 +8311,27 @@ case 0xF0 :
       case 0x8D :
       case 0x8E :
       case 0x8F :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x90 :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0x91 :
       case 0x92 :
       case 0x93 :
       case 0x94 :
       case 0x95 :
-        return grn_str_digit;
+        return grn_char_digit;
         break;
       case 0x96 :
       default :
-        return grn_str_others;
+        return grn_char_others;
         break;
       }
       break;
     case 0x90 :
     case 0x91 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x92 :
       switch (str[3]) {
@@ -8367,11 +8365,11 @@ case 0xF0 :
       case 0x9B :
       case 0x9C :
       case 0x9D :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x9E :
       case 0x9F :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0xA0 :
       case 0xA1 :
@@ -8383,11 +8381,11 @@ case 0xF0 :
       case 0xA7 :
       case 0xA8 :
       case 0xA9 :
-        return grn_str_digit;
+        return grn_char_digit;
         break;
       case 0xAA :
       default :
-        return grn_str_others;
+        return grn_char_others;
         break;
       }
       break;
@@ -8404,7 +8402,7 @@ case 0xF0 :
     case 0x9D :
     case 0x9E :
     case 0x9F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA0 :
       switch (str[3]) {
@@ -8414,17 +8412,17 @@ case 0xF0 :
       case 0x83 :
       case 0x84 :
       case 0x85 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x86 :
       case 0x87 :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x88 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x89 :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x8A :
       case 0x8B :
@@ -8470,37 +8468,37 @@ case 0xF0 :
       case 0xB3 :
       case 0xB4 :
       case 0xB5 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0xB6 :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0xB7 :
       case 0xB8 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0xB9 :
       case 0xBA :
       case 0xBB :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0xBC :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0xBD :
       case 0xBE :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0xBF :
       default :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       }
       break;
     case 0xA1 :
     case 0xA2 :
     case 0xA3 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA4 :
       switch (str[3]) {
@@ -8526,39 +8524,39 @@ case 0xF0 :
       case 0x93 :
       case 0x94 :
       case 0x95 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x96 :
       case 0x97 :
       case 0x98 :
       case 0x99 :
-        return grn_str_digit;
+        return grn_char_digit;
         break;
       case 0x9A :
       case 0x9B :
       case 0x9C :
       case 0x9D :
       case 0x9E :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x9F :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0xA0 :
       default :
-        return grn_str_others;
+        return grn_char_others;
         break;
       }
       break;
     case 0xA5 :
     case 0xA6 :
     case 0xA7 :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0xA8 :
       switch (str[3]) {
       case 0x80 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x81 :
       case 0x82 :
@@ -8575,24 +8573,24 @@ case 0xF0 :
       case 0x8D :
       case 0x8E :
       case 0x8F :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x90 :
       case 0x91 :
       case 0x92 :
       case 0x93 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x94 :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x95 :
       case 0x96 :
       case 0x97 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x98 :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x99 :
       case 0x9A :
@@ -8621,11 +8619,11 @@ case 0xF0 :
       case 0xB1 :
       case 0xB2 :
       case 0xB3 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0xB4 :
       default :
-        return grn_str_others;
+        return grn_char_others;
         break;
       }
       break;
@@ -8639,7 +8637,7 @@ case 0xF0 :
       case 0x85 :
       case 0x86 :
       case 0x87 :
-        return grn_str_digit;
+        return grn_char_digit;
         break;
       case 0x88 :
       case 0x89 :
@@ -8649,7 +8647,7 @@ case 0xF0 :
       case 0x8D :
       case 0x8E :
       case 0x8F :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x90 :
       case 0x91 :
@@ -8660,21 +8658,21 @@ case 0xF0 :
       case 0x96 :
       case 0x97 :
       case 0x98 :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0x99 :
       default :
-        return grn_str_others;
+        return grn_char_others;
         break;
       }
       break;
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
   case 0x91 :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0x92 :
     switch (str[2]) {
@@ -8691,18 +8689,18 @@ case 0xF0 :
     case 0x8A :
     case 0x8B :
     case 0x8C :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x8D :
-      if (str[3] < 0xAF) { return grn_str_alpha; }
-      return grn_str_others;
+      if (str[3] < 0xAF) { return grn_char_alpha; }
+      return grn_char_others;
       break;
     case 0x8E :
     case 0x8F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x90 :
-      return grn_str_digit;
+      return grn_char_digit;
       break;
     case 0x91 :
       switch (str[3]) {
@@ -8741,7 +8739,7 @@ case 0xF0 :
       case 0xA0 :
       case 0xA1 :
       case 0xA2 :
-        return grn_str_digit;
+        return grn_char_digit;
         break;
       case 0xA3 :
       case 0xA4 :
@@ -8756,22 +8754,22 @@ case 0xF0 :
       case 0xAD :
       case 0xAE :
       case 0xAF :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0xB0 :
       case 0xB1 :
       case 0xB2 :
       case 0xB3 :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0xB4 :
       default :
-        return grn_str_others;
+        return grn_char_others;
         break;
       }
       break;
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
@@ -8785,18 +8783,18 @@ case 0xF0 :
   case 0x9A :
   case 0x9B :
   case 0x9C :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0x9D :
     switch (str[2]) {
     case 0x80 :
     case 0x81 :
     case 0x82 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x83 :
-      if (str[3] < 0xB6) { return grn_str_symbol; }
-      return grn_str_others;
+      if (str[3] < 0xB6) { return grn_char_symbol; }
+      return grn_char_others;
       break;
     case 0x84 :
       switch (str[3]) {
@@ -8839,16 +8837,16 @@ case 0xF0 :
       case 0xA4 :
       case 0xA5 :
       case 0xA6 :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0xA7 :
       case 0xA8 :
       case 0xA9 :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0xAA :
       default :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       }
       break;
@@ -8891,23 +8889,23 @@ case 0xF0 :
       case 0xA2 :
       case 0xA3 :
       case 0xA4 :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0xA5 :
       case 0xA6 :
       case 0xA7 :
       case 0xA8 :
       case 0xA9 :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0xAA :
       case 0xAB :
       case 0xAC :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0xAD :
       default :
-        return grn_str_others;
+        return grn_char_others;
         break;
       }
       break;
@@ -8916,11 +8914,11 @@ case 0xF0 :
       case 0x80 :
       case 0x81 :
       case 0x82 :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x83 :
       case 0x84 :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0x85 :
       case 0x86 :
@@ -8929,7 +8927,7 @@ case 0xF0 :
       case 0x89 :
       case 0x8A :
       case 0x8B :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x8C :
       case 0x8D :
@@ -8961,53 +8959,53 @@ case 0xF0 :
       case 0xA7 :
       case 0xA8 :
       case 0xA9 :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0xAA :
       case 0xAB :
       case 0xAC :
       case 0xAD :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0xAE :
       default :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       }
       break;
     case 0x87 :
-      if (str[3] < 0x9E) { return grn_str_symbol; }
-      return grn_str_others;
+      if (str[3] < 0x9E) { return grn_char_symbol; }
+      return grn_char_others;
       break;
     case 0x88 :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x89 :
       switch (str[3]) {
       case 0x80 :
       case 0x81 :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0x82 :
       case 0x83 :
       case 0x84 :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x85 :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0x86 :
       default :
-        return grn_str_others;
+        return grn_char_others;
         break;
       }
       break;
     case 0x8A :
     case 0x8B :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x8C :
-      return grn_str_symbol;
+      return grn_char_symbol;
       break;
     case 0x8D :
       switch (str[3]) {
@@ -9034,7 +9032,7 @@ case 0xF0 :
       case 0x94 :
       case 0x95 :
       case 0x96 :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0x97 :
       case 0x98 :
@@ -9045,7 +9043,7 @@ case 0xF0 :
       case 0x9D :
       case 0x9E :
       case 0x9F :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0xA0 :
       case 0xA1 :
@@ -9065,25 +9063,25 @@ case 0xF0 :
       case 0xAF :
       case 0xB0 :
       case 0xB1 :
-        return grn_str_digit;
+        return grn_char_digit;
         break;
       case 0xB2 :
       default :
-        return grn_str_others;
+        return grn_char_others;
         break;
       }
       break;
     case 0x8E :
     case 0x8F :
-      return grn_str_others;
+      return grn_char_others;
       break;
     case 0x90 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x91 :
-      if (str[3] < 0x95) { return grn_str_alpha; }
-      if (str[3] < 0x96) { return grn_str_others; }
-      return grn_str_alpha;
+      if (str[3] < 0x95) { return grn_char_alpha; }
+      if (str[3] < 0x96) { return grn_char_others; }
+      return grn_char_alpha;
       break;
     case 0x92 :
       switch (str[3]) {
@@ -9116,42 +9114,42 @@ case 0xF0 :
       case 0x9A :
       case 0x9B :
       case 0x9C :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x9D :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x9E :
       case 0x9F :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0xA0 :
       case 0xA1 :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0xA2 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0xA3 :
       case 0xA4 :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0xA5 :
       case 0xA6 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0xA7 :
       case 0xA8 :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0xA9 :
       case 0xAA :
       case 0xAB :
       case 0xAC :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0xAD :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0xAE :
       case 0xAF :
@@ -9165,27 +9163,27 @@ case 0xF0 :
       case 0xB7 :
       case 0xB8 :
       case 0xB9 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0xBA :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0xBB :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0xBC :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0xBD :
       default :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       }
       break;
     case 0x93 :
-      if (str[3] < 0x84) { return grn_str_alpha; }
-      if (str[3] < 0x85) { return grn_str_others; }
-      return grn_str_alpha;
+      if (str[3] < 0x84) { return grn_char_alpha; }
+      if (str[3] < 0x85) { return grn_char_others; }
+      return grn_char_alpha;
       break;
     case 0x94 :
       switch (str[3]) {
@@ -9195,20 +9193,20 @@ case 0xF0 :
       case 0x83 :
       case 0x84 :
       case 0x85 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x86 :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x87 :
       case 0x88 :
       case 0x89 :
       case 0x8A :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x8B :
       case 0x8C :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x8D :
       case 0x8E :
@@ -9218,10 +9216,10 @@ case 0xF0 :
       case 0x92 :
       case 0x93 :
       case 0x94 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x95 :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x96 :
       case 0x97 :
@@ -9230,10 +9228,10 @@ case 0xF0 :
       case 0x9A :
       case 0x9B :
       case 0x9C :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x9D :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x9E :
       case 0x9F :
@@ -9263,20 +9261,20 @@ case 0xF0 :
       case 0xB7 :
       case 0xB8 :
       case 0xB9 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0xBA :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0xBB :
       case 0xBC :
       case 0xBD :
       case 0xBE :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0xBF :
       default :
-        return grn_str_others;
+        return grn_char_others;
         break;
       }
       break;
@@ -9287,18 +9285,18 @@ case 0xF0 :
       case 0x82 :
       case 0x83 :
       case 0x84 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x85 :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x86 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x87 :
       case 0x88 :
       case 0x89 :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x8A :
       case 0x8B :
@@ -9307,14 +9305,14 @@ case 0xF0 :
       case 0x8E :
       case 0x8F :
       case 0x90 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x91 :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x92 :
       default :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       }
       break;
@@ -9322,20 +9320,20 @@ case 0xF0 :
     case 0x97 :
     case 0x98 :
     case 0x99 :
-      return grn_str_alpha;
+      return grn_char_alpha;
       break;
     case 0x9A :
-      if (str[3] < 0xA6) { return grn_str_alpha; }
-      if (str[3] < 0xA8) { return grn_str_others; }
-      return grn_str_alpha;
+      if (str[3] < 0xA6) { return grn_char_alpha; }
+      if (str[3] < 0xA8) { return grn_char_others; }
+      return grn_char_alpha;
       break;
     case 0x9B :
       switch (str[3]) {
       case 0x80 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x81 :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0x82 :
       case 0x83 :
@@ -9362,10 +9360,10 @@ case 0xF0 :
       case 0x98 :
       case 0x99 :
       case 0x9A :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x9B :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0x9C :
       case 0x9D :
@@ -9398,14 +9396,14 @@ case 0xF0 :
       case 0xB8 :
       case 0xB9 :
       case 0xBA :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0xBB :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0xBC :
       default :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       }
       break;
@@ -9432,10 +9430,10 @@ case 0xF0 :
       case 0x92 :
       case 0x93 :
       case 0x94 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x95 :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0x96 :
       case 0x97 :
@@ -9468,14 +9466,14 @@ case 0xF0 :
       case 0xB2 :
       case 0xB3 :
       case 0xB4 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0xB5 :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0xB6 :
       default :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       }
       break;
@@ -9496,10 +9494,10 @@ case 0xF0 :
       case 0x8C :
       case 0x8D :
       case 0x8E :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x8F :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0x90 :
       case 0x91 :
@@ -9532,14 +9530,14 @@ case 0xF0 :
       case 0xAC :
       case 0xAD :
       case 0xAE :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0xAF :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0xB0 :
       default :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       }
       break;
@@ -9554,10 +9552,10 @@ case 0xF0 :
       case 0x86 :
       case 0x87 :
       case 0x88 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x89 :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0x8A :
       case 0x8B :
@@ -9590,14 +9588,14 @@ case 0xF0 :
       case 0xA6 :
       case 0xA7 :
       case 0xA8 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0xA9 :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0xAA :
       default :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       }
       break;
@@ -9606,10 +9604,10 @@ case 0xF0 :
       case 0x80 :
       case 0x81 :
       case 0x82 :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x83 :
-        return grn_str_symbol;
+        return grn_char_symbol;
         break;
       case 0x84 :
       case 0x85 :
@@ -9619,27 +9617,27 @@ case 0xF0 :
       case 0x89 :
       case 0x8A :
       case 0x8B :
-        return grn_str_alpha;
+        return grn_char_alpha;
         break;
       case 0x8C :
       case 0x8D :
-        return grn_str_others;
+        return grn_char_others;
         break;
       case 0x8E :
       default :
-        return grn_str_digit;
+        return grn_char_digit;
         break;
       }
       break;
     case 0xA0 :
     default :
-      return grn_str_others;
+      return grn_char_others;
       break;
     }
     break;
   case 0x9E :
   case 0x9F :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xA0 :
   case 0xA1 :
@@ -9651,38 +9649,38 @@ case 0xF0 :
   case 0xA7 :
   case 0xA8 :
   case 0xA9 :
-    return grn_str_kanji;
+    return grn_char_kanji;
     break;
   case 0xAA :
-    if (str[2] < 0x9B) { return grn_str_kanji; }
+    if (str[2] < 0x9B) { return grn_char_kanji; }
     if (str[2] == 0x9B) {
-      if (str[3] < 0xA0) { return grn_str_kanji; }
-      return grn_str_others;
+      if (str[3] < 0xA0) { return grn_char_kanji; }
+      return grn_char_others;
     }
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xAB :
   case 0xAC :
   case 0xAD :
   case 0xAE :
-    return grn_str_others;
+    return grn_char_others;
     break;
   case 0xAF :
-    if (str[2] < 0xA0) { return grn_str_others; }
-    if (str[2] < 0xA8) { return grn_str_kanji; }
+    if (str[2] < 0xA0) { return grn_char_others; }
+    if (str[2] < 0xA8) { return grn_char_kanji; }
     if (str[2] == 0xA8) {
-      if (str[3] < 0xA0) { return grn_str_kanji; }
-      return grn_str_others;
+      if (str[3] < 0xA0) { return grn_char_kanji; }
+      return grn_char_others;
     }
-    return grn_str_others;
+    return grn_char_others;
     break;
   default :
-    return grn_str_others;
+    return grn_char_others;
     break;
   }
   break;
 default :
-  return grn_str_others;
+  return grn_char_others;
   break;
 }
   return -1;
@@ -80241,5 +80239,3 @@ case 0xE3 :
   return 0;
 }
 
-#endif /* NO_NFKC */
-

  Renamed: plugins/normalizers/nfkc-custom-rules.txt (+0 -0) 100%
===================================================================

  Added: plugins/normalizers/nfkc.c (+208 -0) 100644
===================================================================
--- /dev/null
+++ plugins/normalizers/nfkc.c    2012-02-09 17:21:16 +0900 (cc6ff51)
@@ -0,0 +1,208 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+  Copyright(C) 2012 Brazil
+
+  This library is free software; you can redistribute it and/or
+  modify it under the terms of the GNU Lesser General Public
+  License version 2.1 as published by the Free Software Foundation.
+
+  This library is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with this library; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <groonga/normalizer.h>
+#include "nfkc.h"
+
+static grn_obj *
+utf8_nfkc_normalize(grn_ctx *ctx, int nargs, grn_obj **args,
+                    grn_user_data *user_data)
+{
+  grn_obj *normalized_text = args[0];
+  const char *orig;
+  char *norm;
+  short *checks = NULL, *ch;
+  const unsigned char *s, *s_, *s__ = NULL, *p, *p2, *pe, *e;
+  unsigned char *d, *d_, *de;
+  unsigned char *ctypes = NULL, *cp;
+  size_t length = 0, ls, lp;
+  unsigned int size, ds;
+  int flags;
+  grn_bool remove_blank_p;
+
+  grn_normalized_text_get_original_value(ctx, normalized_text, &orig, &size);
+  ds = size * 3;
+  flags = grn_normalized_text_get_flags(ctx, normalized_text);
+  remove_blank_p = flags & GRN_NORMALIZE_REMOVE_BLANK;
+  if (!(norm = GRN_PLUGIN_MALLOC(ctx, ds + 1))) {
+    GRN_PLUGIN_ERROR(ctx,
+                     GRN_NO_MEMORY_AVAILABLE,
+                     "[normalizer][utf8][nfkc] "
+                     "failed to allocate normalized text space");
+    return NULL;
+  }
+  if (flags & GRN_NORMALIZE_WITH_CHECKS) {
+    if (!(checks = GRN_PLUGIN_MALLOC(ctx, ds * sizeof(short) + 1))) {
+      GRN_PLUGIN_FREE(ctx, norm);
+      GRN_PLUGIN_ERROR(ctx,
+                       GRN_NO_MEMORY_AVAILABLE,
+                       "[normalizer][utf8][nfkc] "
+                       "failed to allocate checks space");
+      return NULL;
+    }
+  }
+  ch = checks;
+  if (flags & GRN_NORMALIZE_WITH_TYPES) {
+    if (!(ctypes = GRN_PLUGIN_MALLOC(ctx, ds + 1))) {
+      if (checks) { GRN_PLUGIN_FREE(ctx, checks); }
+      GRN_PLUGIN_FREE(ctx, norm);
+      GRN_PLUGIN_ERROR(ctx,
+                       GRN_NO_MEMORY_AVAILABLE,
+                       "[normalizer][utf8][nfkc] "
+                       "failed to allocate character types space");
+      return NULL;
+    }
+  }
+  cp = ctypes;
+  d = (unsigned char *)norm;
+  de = d + ds;
+  d_ = NULL;
+  e = (unsigned char *)orig + size;
+  for (s = s_ = (unsigned char *)orig; ; s += ls) {
+    if (!(ls = grn_charlen_utf8(ctx, s, e))) {
+      break;
+    }
+    if ((p = (unsigned char *)grn_nfkc_map1(s))) {
+      pe = p + strlen((char *)p);
+    } else {
+      p = s;
+      pe = p + ls;
+    }
+    if (d_ && (p2 = (unsigned char *)grn_nfkc_map2(d_, p))) {
+      p = p2;
+      pe = p + strlen((char *)p);
+      if (cp) { cp--; }
+      if (ch) {
+        ch -= (d - d_);
+        s_ = s__;
+      }
+      d = d_;
+      length--;
+    }
+    for (; ; p += lp) {
+      if (!(lp = grn_charlen_utf8(ctx, p, pe))) {
+        break;
+      }
+      if ((*p == ' ' && remove_blank_p) || *p < 0x20  /* skip unprintable ascii */ ) {
+        if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
+      } else {
+        if (de <= d + lp) {
+          unsigned char *new_norm;
+          ds += (ds >> 1) + lp;
+          if (!(new_norm = GRN_PLUGIN_REALLOC(ctx, norm, ds + 1))) {
+            if (ctypes) { GRN_PLUGIN_FREE(ctx, ctypes); }
+            if (checks) { GRN_PLUGIN_FREE(ctx, checks); }
+            GRN_PLUGIN_FREE(ctx, norm);
+            GRN_PLUGIN_ERROR(ctx,
+                             GRN_NO_MEMORY_AVAILABLE,
+                             "[normalizer][utf8][nfkc] "
+                             "failed to reallocate normalized text space");
+            return NULL;
+          }
+          de = new_norm + ds;
+          d = new_norm + (d - (unsigned char *)norm);
+          norm = new_norm;
+          if (ch) {
+            short *new_checks;
+            new_checks = GRN_PLUGIN_REALLOC(ctx, checks, ds * sizeof(short) + 1);
+            if (!new_checks) {
+              if (ctypes) { GRN_PLUGIN_FREE(ctx, ctypes); }
+              GRN_PLUGIN_FREE(ctx, checks);
+              GRN_PLUGIN_FREE(ctx, norm);
+              GRN_PLUGIN_ERROR(ctx,
+                               GRN_NO_MEMORY_AVAILABLE,
+                               "[normalizer][utf8][nfkc] "
+                               "failed to reallocate checks space");
+              return NULL;
+            }
+            ch = new_checks + (ch - checks);
+            checks = new_checks;
+          }
+          if (cp) {
+            unsigned char *new_ctypes;
+            if (!(new_ctypes = GRN_PLUGIN_REALLOC(ctx, ctypes, ds + 1))) {
+              GRN_PLUGIN_FREE(ctx, ctypes);
+              if (checks) { GRN_PLUGIN_FREE(ctx, checks); }
+              GRN_PLUGIN_FREE(ctx, norm);
+              GRN_PLUGIN_ERROR(ctx,
+                               GRN_NO_MEMORY_AVAILABLE,
+                               "[normalizer][utf8][nfkc] "
+                               "failed to reallocate character types space");
+              return NULL;
+            }
+            cp = new_ctypes + (cp - ctypes);
+            ctypes = new_ctypes;
+          }
+        }
+        memcpy(d, p, lp);
+        d_ = d;
+        d += lp;
+        length++;
+        if (cp) { *cp++ = grn_nfkc_ctype(p); }
+        if (ch) {
+          size_t i;
+          if (s_ == s + ls) {
+            *ch++ = -1;
+          } else {
+            *ch++ = (short)(s + ls - s_);
+            s__ = s_;
+            s_ = s + ls;
+          }
+          for (i = lp; i > 1; i--) { *ch++ = 0; }
+        }
+      }
+    }
+  }
+  if (cp) { *cp = grn_char_null; }
+  *d = '\0';
+  grn_normalized_text_set_value(ctx, normalized_text,
+                                norm, length,
+                                (size_t)(d - (unsigned char *)norm));
+  grn_normalized_text_set_checks(ctx, normalized_text, checks);
+  grn_normalized_text_set_types(ctx, normalized_text, ctypes);
+  return NULL;
+}
+
+grn_rc
+GRN_PLUGIN_INIT(grn_ctx *ctx)
+{
+  return GRN_SUCCESS;
+}
+
+grn_rc
+GRN_PLUGIN_REGISTER(grn_ctx *ctx)
+{
+  grn_obj *normalizer;
+
+  normalizer = GRN_NORMALIZER_REGISTER(ctx, "NormalizerUTF8NFKC",
+                                       NULL, utf8_nfkc_normalize, NULL);
+  if (normalizer) {
+    return GRN_SUCCESS;
+  } else {
+    return GRN_FILE_CORRUPT;
+  }
+}
+
+grn_rc
+GRN_PLUGIN_FIN(grn_ctx *ctx)
+{
+  return GRN_SUCCESS;
+}

  Renamed: plugins/normalizers/nfkc.h (+5 -10) 79%
===================================================================
--- lib/nfkc.h    2012-02-09 15:57:47 +0900 (791acb3)
+++ plugins/normalizers/nfkc.h    2012-02-09 17:21:16 +0900 (077391d)
@@ -17,20 +17,15 @@
 #ifndef GRN_NFKC_H
 #define GRN_NFKC_H
 
+#include <groonga.h>
+
 #ifdef	__cplusplus
 extern "C" {
 #endif
 
-enum {
-  grn_str_null = 0,
-  grn_str_alpha,
-  grn_str_digit,
-  grn_str_symbol,
-  grn_str_hiragana,
-  grn_str_katakana,
-  grn_str_kanji,
-  grn_str_others
-};
+unsigned char grn_nfkc_ctype(const unsigned char *str);
+const char *grn_nfkc_map1(const unsigned char *str);
+const char *grn_nfkc_map2(const unsigned char *prefix, const unsigned char *suffix);
 
 #ifdef __cplusplus
 }

  Renamed: plugins/normalizers/nfkc.rb (+1 -1) 99%
===================================================================
--- lib/nfkc.rb    2012-02-09 15:57:47 +0900 (3d83991)
+++ plugins/normalizers/nfkc.rb    2012-02-09 17:21:16 +0900 (ef85c60)
@@ -393,7 +393,7 @@ map1 = create_map1()
 STDERR.puts('creating map2..')
 map2 = create_map2(map1)
 
-outf = open('nfkc.c', 'w')
+outf = open('nfkc-core.c', 'w')
 
 tmps = template.split(/%/)
 

  Modified: test/benchmark/Makefile.am (+2 -1)
===================================================================
--- test/benchmark/Makefile.am    2012-02-09 15:57:47 +0900 (38347c2)
+++ test/benchmark/Makefile.am    2012-02-09 17:21:16 +0900 (453c034)
@@ -8,7 +8,8 @@ if WITH_BENCHMARK
 noinst_PROGRAMS =		\
 	bench-table-factory	\
 	bench-geo-distance	\
-	bench-geo-select
+	bench-geo-select	\
+	bench-normalize
 endif
 
 INCLUDES =			\

  Added: test/benchmark/bench-normalize.c (+402 -0) 100644
===================================================================
--- /dev/null
+++ test/benchmark/bench-normalize.c    2012-02-09 17:21:16 +0900 (268c1d0)
@@ -0,0 +1,402 @@
+/* -*- c-basic-offset: 2; coding: utf-8 -*- */
+/*
+  Copyright (C) 2012  Kouhei Sutou <kou****@clear*****>
+
+  This library is free software; you can redistribute it and/or
+  modify it under the terms of the GNU Lesser General Public
+  License version 2.1 as published by the Free Software Foundation.
+
+  This library is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with this library; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+/*
+  groonga: 5632ce3e39c0d8bf3c6b758d4cbf5e012cfa00b0
+  CFLAGS: -O3
+  CPU: Intel(R) Core(TM) i5 CPU         650  @ 3.20GHz
+  % make -j8 > /dev/null && GROONGA_BENCH_N=10000 test/benchmark/bench-normalize
+
+  groonga: 5632ce3e39c0d8bf3c6b758d4cbf5e012cfa00b0
+  CFLAGS: -O3 -ggdb3
+  CPU: Intel(R) Core(TM) i5 CPU         650  @ 3.20GHz
+  % make -j8 > /dev/null && GROONGA_BENCH_N=10000 test/benchmark/bench-normalize
+                  (time)
+    NFKC: plugin: (3.05917)
+    NFKC: bundle: (3.13312)
+*/
+
+#include <string.h>
+
+#include <locale.h>
+
+#include <db.h>
+#include <groonga.h>
+#include <groonga_in.h>
+
+#define grn_nfkc_ctype bundle_grn_nfkc_ctype
+#define grn_nfkc_map1 bundle_grn_nfkc_map1
+#define grn_nfkc_map2 bundle_grn_nfkc_map2
+
+#include "plugins/normalizers/nfkc-core.c"
+
+#define GRN_STR_REMOVEBLANK  (0x01<<0)
+#define GRN_STR_WITH_TYPES   (0x01<<1)
+#define GRN_STR_WITH_CHECKS  (0x01<<2)
+
+#define GRN_STR_BLANK 0x80
+
+enum {
+  grn_str_null = 0,
+  grn_str_alpha,
+  grn_str_digit,
+  grn_str_symbol,
+  grn_str_hiragana,
+  grn_str_katakana,
+  grn_str_kanji,
+  grn_str_others
+};
+
+inline static grn_obj *
+utf8_nfkc_normalize(grn_ctx *ctx, grn_str *nstr)
+{
+  int16_t *ch;
+  const unsigned char *s, *s_, *s__ = NULL, *p, *p2, *pe, *e;
+  unsigned char *d, *d_, *de;
+  uint_least8_t *cp;
+  size_t length = 0, ls, lp, size = nstr->orig_blen, ds = size * 3;
+  int removeblankp = nstr->flags & GRN_STR_REMOVEBLANK;
+  if (!(nstr->norm = GRN_MALLOC(ds + 1))) {
+    ERR(GRN_NO_MEMORY_AVAILABLE,
+        "[normalizer][utf8][nfkc] failed to allocate normalized text space");
+    return NULL;
+  }
+  if (nstr->flags & GRN_STR_WITH_CHECKS) {
+    if (!(nstr->checks = GRN_MALLOC(ds * sizeof(int16_t) + 1))) {
+      GRN_FREE(nstr->norm);
+      nstr->norm = NULL;
+      ERR(GRN_NO_MEMORY_AVAILABLE,
+          "[normalizer][utf8][nfkc] failed to allocate checks space");
+      return NULL;
+    }
+  }
+  ch = nstr->checks;
+  if (nstr->flags & GRN_STR_WITH_CTYPES) {
+    if (!(nstr->ctypes = GRN_MALLOC(ds + 1))) {
+      if (nstr->checks) { GRN_FREE(nstr->checks); nstr->checks = NULL; }
+      GRN_FREE(nstr->norm);
+      nstr->norm = NULL;
+      ERR(GRN_NO_MEMORY_AVAILABLE,
+          "[normalizer][utf8][nfkc] failed to allocate character types space");
+      return NULL;
+    }
+  }
+  cp = nstr->ctypes;
+  d = (unsigned char *)nstr->norm;
+  de = d + ds;
+  d_ = NULL;
+  e = (unsigned char *)nstr->orig + size;
+  for (s = s_ = (unsigned char *)nstr->orig; ; s += ls) {
+    if (!(ls = grn_charlen_utf8(ctx, s, e))) {
+      break;
+    }
+    if ((p = (unsigned char *)grn_nfkc_map1(s))) {
+      pe = p + strlen((char *)p);
+    } else {
+      p = s;
+      pe = p + ls;
+    }
+    if (d_ && (p2 = (unsigned char *)grn_nfkc_map2(d_, p))) {
+      p = p2;
+      pe = p + strlen((char *)p);
+      if (cp) { cp--; }
+      if (ch) {
+        ch -= (d - d_);
+        s_ = s__;
+      }
+      d = d_;
+      length--;
+    }
+    for (; ; p += lp) {
+      if (!(lp = grn_charlen_utf8(ctx, p, pe))) {
+        break;
+      }
+      if ((*p == ' ' && removeblankp) || *p < 0x20  /* skip unprintable ascii */ ) {
+        if (cp > nstr->ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+      } else {
+        if (de <= d + lp) {
+          unsigned char *norm;
+          ds += (ds >> 1) + lp;
+          if (!(norm = GRN_REALLOC(nstr->norm, ds + 1))) {
+            if (nstr->ctypes) { GRN_FREE(nstr->ctypes); nstr->ctypes = NULL; }
+            if (nstr->checks) { GRN_FREE(nstr->checks); nstr->checks = NULL; }
+            GRN_FREE(nstr->norm); nstr->norm = NULL;
+            ERR(GRN_NO_MEMORY_AVAILABLE,
+                "[normalizer][utf8][nfkc] "
+                "failed to reallocate normalized text space");
+            return NULL;
+          }
+          de = norm + ds;
+          d = norm + (d - (unsigned char *)nstr->norm);
+          nstr->norm = norm;
+          if (ch) {
+            int16_t *checks;
+            if (!(checks = GRN_REALLOC(nstr->checks, ds * sizeof(int16_t)+ 1))) {
+              if (nstr->ctypes) { GRN_FREE(nstr->ctypes); nstr->ctypes = NULL; }
+              GRN_FREE(nstr->checks); nstr->checks = NULL;
+              GRN_FREE(nstr->norm); nstr->norm = NULL;
+              ERR(GRN_NO_MEMORY_AVAILABLE,
+                  "[normalizer][utf8][nfkc] "
+                  "failed to reallocate checks space");
+              return NULL;
+            }
+            ch = checks + (ch - nstr->checks);
+            nstr->checks = checks;
+          }
+          if (cp) {
+            uint_least8_t *ctypes;
+            if (!(ctypes = GRN_REALLOC(nstr->ctypes, ds + 1))) {
+              GRN_FREE(nstr->ctypes); nstr->ctypes = NULL;
+              if (nstr->checks) { GRN_FREE(nstr->checks); nstr->checks = NULL; }
+              GRN_FREE(nstr->norm); nstr->norm = NULL;
+              ERR(GRN_NO_MEMORY_AVAILABLE,
+                  "[normalizer][utf8][nfkc] "
+                  "failed to reallocate character types space");
+              return NULL;
+            }
+            cp = ctypes + (cp - nstr->ctypes);
+            nstr->ctypes = ctypes;
+          }
+        }
+        memcpy(d, p, lp);
+        d_ = d;
+        d += lp;
+        length++;
+        if (cp) { *cp++ = grn_nfkc_ctype(p); }
+        if (ch) {
+          size_t i;
+          if (s_ == s + ls) {
+            *ch++ = -1;
+          } else {
+            *ch++ = (int16_t)(s + ls - s_);
+            s__ = s_;
+            s_ = s + ls;
+          }
+          for (i = lp; i > 1; i--) { *ch++ = 0; }
+        }
+      }
+    }
+  }
+  if (cp) { *cp = grn_str_null; }
+  *d = '\0';
+  nstr->length = length;
+  nstr->norm_blen = (size_t)(d - (unsigned char *)nstr->norm);
+  return NULL;
+}
+
+#include "lib/benchmark.h"
+
+#define GET(context, name) (grn_ctx_get(context, name, strlen(name)))
+
+static const gchar *text =
+"1. groongaの特徴\n"
+"1.1. groonga の概要\n"
+"\n"
+"groonga は転置索引を用いた高速・高精度な全文検索エンジンであり、登録された文書をすぐに検索結果に反映できます。また、参照をブロックせずに更新できることから、即時更新の必要なアプリケーションにおいても高い性能を発揮します。\n"
+"\n"
+"全文検索エンジンとして開発された groonga ですが、独自のカラムストアを持つ列指向のデータベースとしての側面も持っています。そのため、MySQL や PostgreSQL など、既存の代表的なデータベースが苦手とする集計クエリを高速に処理できるという特徴があり、組み合わせによって弱点を補うような使い方もできます。\n"
+"\n"
+"groonga の基本機能は C ライブラリとして提供されていますが、MySQL や PostgreSQL と連携させたり、Ruby から呼び出したりすることもできます。そのため、任意のアプリケーションに組み込むことが可能であり、多様な使い方が考えられます。 興味のある方は 利用例 をご覧ください。\n"
+"1.2. 全文検索と即時更新\n"
+"\n"
+"一般的なデータベースにおいては、追加・削除などの操作がすぐに反映されます。一方、全文検索においては、転置索引が逐次更新の難しいデータ構造であることから、文書の追加・削除に対応しないエンジンが少なくありません。\n"
+"\n"
+"これに対し、転置索引を用いた全文検索エンジンでありながら、groonga は文書を短時間で追加・削除することができます。その上、更新しながらでも検索できるという優れた特徴を持っているため、全文検索エンジンとしてはとても柔軟性があります。また、複数の転置索引を統合するような重い処理を必要としないので、安定して高い性能を発揮することが期待できます。\n"
+"1.3. カラムストアと集計クエリ\n"
+"\n"
+"現代は、インターネットを情報源とすれば、いくらでも情報を収集できる時代です。しかし、膨大な情報から有益な情報を引き出すのは困難であり、多面的な分析による試行錯誤が必要となります。たとえば、日付や時間帯により絞り込んでみたり、地域により絞り込んでみたり、性別や年齢により絞り込んでみたりすることでしょう。そして、そのようなときに便利な存在が集計クエリです。\n"
+"\n"
+"集計クエリとは、指定したカラムの値によってレコードをグループ化し、各グループに含まれるレコードの数を求めるクエリです。たとえば、地域の ID を格納しているカラムを指定すれば、地域毎のレコード数が求まります。日付のカラムを指定したときの出力をグラフ化すれば、レコード数の時間変化を視覚化することができます。さらに、地域による絞り込みと日付に対する集計クエリを組み合わせれば、特定の地域におけるレコード数の時間変化を視覚化ことも可能です。このように、尺度を自由に選択して絞り込み・集計できることは、膨大な情報を扱う上でとても重要になります。\n"
+"\n"
+"groonga が集計クエリを高速に処理できる理由は、データベースの論理構造にカラムストアを採用しているからです。集計クエリが参照するのは指定されたカラムのみであるため、カラム単位でデータを格納する列指向のデータベースでは、必要なカラムのみを無駄なく読み出せることが利点となります。一方、レコード単位でデータを格納する行指向のデータベースでは、隣接するカラムをまとめて読み出してしまうことが欠点となります。\n"
+"1.4. 転置索引とトークナイザ\n"
+"\n"
+"転置索引は大規模な全文検索に用いられる伝統的なデータ構造です。転置索引を用いた全文検索エンジンでは、文書を追加するときに索引語を記録しておき、検索するときはクエリを索引語に分割して出現文書を求めます。そのため、文書やクエリから索引語を抜き出す方法が重要になります。\n"
+"\n"
+"トークナイザは、文字列から索引語を抜き出すモジュールです。日本語を対象とする全文検索においては、形態素を索引語として抜き出す方式と文字 N-gram を抜き出す方式のいずれか、あるいは両方を用いるのが一般的です。形態素方式は検索時間や索引サイズの面で優れているほか、検索結果に不要な文書が含まれにくいという利点を持っています。一方、N-gram 方式には検索漏れが発生しにくいという利点があり、状況によって適した方式を選択することが望ましいとされています。\n"
+"\n"
+"groonga は形態素方式と N-gram 方式の両方に対応しています。初期状態で利用できるトークナイザは空白を区切り文字として用いる方式と N-gram 方式のみですが、形態素解析器 MeCab を組み込んだときは MeCab による分かち書きの結果を用いる形態素方式が有効になります。トークナイザはプラグインとして追加できるため、特徴的なキーワードのみを索引語として採用するなど、独自のトークナイザを開発することが可能です。\n"
+"1.5. 共有可能なストレージと参照ロックフリー\n"
+"\n"
+"CPU のマルチコア化が進んでいるため、同時に複数のクエリを実行したり、一つのクエリを複数のスレッドで実行したりすることの重要性はますます高まっています。\n"
+"\n"
+"groonga のストレージは、複数のスレッド・プロセスで共有することができます。また、参照ロックフリーなデータ構造を採用しているため、更新クエリを実行している状況でも参照クエリを実行することができます。参照クエリを実行できる状態を維持しながら更新クエリを実行できるので、リアルタイムなシステムに適しています。さらには、MySQL を介して更新クエリを実行している最中に groonga の HTTP サーバを介して参照クエリを実行するなど、多彩な運用が可能となっています。\n"
+"1.6. 位置情報(緯度・経度)検索\n"
+"\n"
+"GPS に代表される測位システムを搭載した高機能な携帯端末の普及などによって、位置情報を扱うサービスはますます便利になっています。たとえば、近くにあるレストランを探しているときは、現在地からの距離を基準として検索をおこない、検索結果を地図上に表示してくれるようなサービスが便利です。そのため、位置情報検索を高速に実現できることが重要になっています。\n"
+"\n"
+"groonga では転置索引を応用して高速な位置情報検索を実現しています。矩形・円による範囲検索に対応しているほか、基準点の近くを優先的に探索させることができます。また、距離計算をサポートしているので、位置情報検索の結果を基準点からの距離によって整列することも可能です。\n"
+"1.7. groonga ライブラリ\n"
+"\n"
+"Groonga の基本機能は C ライブラリとして提供されているので、任意のアプリケーションに組み込んで利用することができます。C/C++ 以外については、Ruby から groonga を利用するライブラリなどが関連プロジェクトにおいて提供されています。詳しくは 関連プロジェクト を参照してください。\n"
+"1.8. groonga サーバ\n"
+"\n"
+"groonga にはサーバ機能があるため、レンタルサーバなどの新しいライブラリをインストールできない環境においても利用できます。対応しているのは HTTP, memcached binary プロトコル、およびに groonga の独自プロトコルである gqtp です。サーバとして利用するときはクエリのキャッシュ機能が有効になるため、同じクエリを受け取ったときは応答時間が短くなるという特徴があります。\n"
+"1.9. groonga ストレージエンジン\n"
+"\n"
+"groonga は独自のカラムストアを持つ列指向のデータベースとしての側面を持っていますが、既存の RDBMS のストレージエンジンとして利用することもできます。たとえば、groonga をベースとする MySQL のストレージエンジンとして mroonga が開発されています。mroonga は MySQL のプラグインとして動的にロードすることが可能であり、groonga のカラムストアをストレージとして利用したり、全文検索エンジンとして groonga を MyISAM や InnoDB と連携させたりすることができます。groonga 単体での利用、およびに MyISAM, InnoDB との連携には一長一短があるので、用途に応じて適切な組み合わせを選ぶことが大切です。詳しくは 関連プロジェクト を参照してください。\n";
+static guint text_length;
+
+typedef struct _BenchmarkData
+{
+  gboolean report_result;
+
+  grn_ctx *context;
+  grn_obj *database;
+  grn_obj *normalizer;
+
+  grn_obj *normalized_text;
+  grn_str *nstr;
+} BenchmarkData;
+
+static void
+bench_setup(gpointer user_data)
+{
+  BenchmarkData *data = user_data;
+  data->normalized_text = NULL;
+  data->nstr = NULL;
+}
+
+static void
+bench_plugin(gpointer user_data)
+{
+  BenchmarkData *data = user_data;
+  data->normalized_text = grn_normalized_text_open(data->context,
+                                                   data->normalizer,
+                                                   text, text_length,
+                                                   GRN_ENC_UTF8,
+                                                   GRN_NORMALIZE_REMOVE_BLANK |
+                                                   GRN_NORMALIZE_WITH_TYPES |
+                                                   GRN_NORMALIZE_WITH_CHECKS);
+}
+
+static void
+bench_bundle(gpointer user_data)
+{
+  BenchmarkData *data = user_data;
+  grn_ctx *ctx = data->context;
+  data->nstr = GRN_MALLOC(sizeof(grn_str));
+  data->nstr->orig = text;
+  data->nstr->orig_blen = text_length;
+  data->nstr->checks = NULL;
+  data->nstr->ctypes = NULL;
+  data->nstr->flags =
+    GRN_STR_REMOVEBLANK |
+    GRN_STR_WITH_TYPES |
+    GRN_STR_WITH_CHECKS;
+  utf8_nfkc_normalize(data->context, data->nstr);
+}
+
+static void
+bench_teardown(gpointer user_data)
+{
+  BenchmarkData *data = user_data;
+
+  if (data->report_result) {
+    if (data->normalized_text) {
+      const gchar *value;
+      guint length_in_bytes;
+      grn_normalized_text_get_value(data->context, data->normalized_text,
+                                    &value, NULL, &length_in_bytes);
+      g_print("result: %.*s\n", length_in_bytes, value);
+    } else {
+      g_print("result: %.*s\n",
+              data->nstr->norm_blen,
+              data->nstr->norm);
+    }
+  }
+
+  if (data->normalized_text) {
+    grn_obj_unlink(data->context, data->normalized_text);
+  } else {
+    grn_ctx *ctx = data->context;
+    GRN_FREE(data->nstr);
+  }
+}
+
+static void
+setup_database(BenchmarkData *data)
+{
+  data->database = grn_db_create(data->context, NULL, NULL);
+
+  data->normalizer = GET(data->context, "NormalizerUTF8NFKC");
+}
+
+static void
+teardown_database(BenchmarkData *data)
+{
+  grn_obj_unlink(data->context, data->normalizer);
+  grn_obj_unlink(data->context, data->database);
+}
+
+int
+main(int argc, gchar **argv)
+{
+  BenchmarkData data;
+  BenchReporter *reporter;
+  gint n = 100;
+
+  setlocale(LC_ALL, "");
+
+  grn_init();
+  bench_init(&argc, &argv);
+
+  text_length = strlen(text);
+
+  data.report_result = g_getenv("GROONGA_BENCH_REPORT_RESULT") != NULL;
+
+  data.context = g_new(grn_ctx, 1);
+  grn_ctx_init(data.context, 0);
+
+  setup_database(&data);
+
+  {
+    const gchar *groonga_bench_n;
+    groonga_bench_n = g_getenv("GROONGA_BENCH_N");
+    if (groonga_bench_n) {
+      n = atoi(groonga_bench_n);
+    }
+  }
+
+  reporter = bench_reporter_new();
+
+#define REGISTER(label, type)                                           \
+  bench_reporter_register(reporter,                                     \
+                          label,                                        \
+                          n,                                            \
+                          bench_setup,                                  \
+                          bench_ ## type,                               \
+                          bench_teardown,                               \
+                          &data)
+  REGISTER("NFKC: plugin", plugin);
+  REGISTER("NFKC: bundle", bundle);
+#undef REGISTER
+
+  bench_reporter_run(reporter);
+  g_object_unref(reporter);
+
+  teardown_database(&data);
+
+  grn_ctx_fin(data.context);
+  g_free(data.context);
+
+  bench_quit();
+  grn_fin();
+
+  return 0;
+}




Groonga-commit メーリングリストの案内
Back to archive index