]> granicus.if.org Git - onig/commitdiff
use ENC_FLAG_SKIP_OFFSET_XXX values
authorK.Kosako <kkosako0@gmail.com>
Mon, 8 Oct 2018 07:58:20 +0000 (16:58 +0900)
committerK.Kosako <kkosako0@gmail.com>
Mon, 8 Oct 2018 07:58:20 +0000 (16:58 +0900)
src/regcomp.c
src/regenc.h

index e051fb27e2dd08eed6eeeff430b3d0e313bb1479..78a340f520c9402bbe9c95d0010f120053683a7e 100644 (file)
@@ -4632,21 +4632,14 @@ set_sunday_quick_search_skip_table(regex_t* reg, int case_expand,
   UChar buf[ONIGENC_MBC_CASE_FOLD_MAXLEN];
 
   enc = reg->enc;
-
-  offset = 1;
-  if (ONIGENC_MBC_MINLEN(enc) > 1) {
+  offset = ENC_GET_SKIP_OFFSET(enc);
+  if (offset == ENC_SKIP_OFFSET_1_OR_0) {
     UChar* p = s;
     while (1) {
       len = enclen(enc, p);
       if (p + len >= end) {
-        UChar* q = p + (ONIGENC_MBC_MINLEN(enc) - 1);
-        while (q > p) {
-          if (*q != '\0') {
-            offset = (int )(q - p + 1);
-            break;
-          }
-          q--;
-        }
+       if (len == 1) offset = 1;
+       else          offset = 0;
         break;
       }
       p += len;
@@ -4664,12 +4657,16 @@ set_sunday_quick_search_skip_table(regex_t* reg, int case_expand,
   }
 
   for (p = s; p < end; ) {
+    int z;
+
     clen = enclen(enc, p);
     if (p + clen > end) clen = (int )(end - p);
 
     len = (int )(end - p);
     for (j = 0; j < clen; j++) {
-      skip[p[j]] = len - j + (offset - 1);
+      z = len - j + (offset - 1);
+      if (z <= 0) break;
+      skip[p[j]] = z;
     }
 
     if (case_expand != 0) {
@@ -4678,7 +4675,8 @@ set_sunday_quick_search_skip_table(regex_t* reg, int case_expand,
       for (k = 0; k < n; k++) {
         ONIGENC_CODE_TO_MBC(enc, items[k].code[0], buf);
         for (j = 0; j < clen; j++) {
-          int z = len - j + (offset - 1);
+          z = len - j + (offset - 1);
+         if (z <= 0) break;
           if (skip[buf[j]] > z)
             skip[buf[j]] = z;
         }
index 64adb3e178a5552ef9c4d3657189807056a45e54..8a3397d4d29444865f1f40e98f499bc9385eaf5b 100644 (file)
@@ -121,6 +121,8 @@ struct PropertyNameCtype {
 #define ONIG_ENCODING_INIT_DEFAULT           ONIG_ENCODING_ASCII
 
 
+#define ENC_SKIP_OFFSET_1_OR_0             7
+
 #define ENC_FLAG_ASCII_COMPATIBLE      (1<<0)
 #define ENC_FLAG_UNICODE               (1<<1)
 #define ENC_FLAG_SKIP_OFFSET_MASK      (7<<2)
@@ -129,9 +131,10 @@ struct PropertyNameCtype {
 #define ENC_FLAG_SKIP_OFFSET_2         (2<<2)
 #define ENC_FLAG_SKIP_OFFSET_3         (3<<2)
 #define ENC_FLAG_SKIP_OFFSET_4         (4<<2)
-#define ENC_FLAG_SKIP_OFFSET_1_OR_0    (7<<2)
+#define ENC_FLAG_SKIP_OFFSET_1_OR_0    (ENC_SKIP_OFFSET_1_OR_0<<2)
 
-#define ENC_GET_SKIP_OFFSET(flag)      ((flag)>>2)
+#define ENC_GET_SKIP_OFFSET(enc) \
+  (((enc)->flag & ENC_FLAG_SKIP_OFFSET_MASK)>>2)
 
 
 /* for encoding system implementation (internal) */