]> granicus.if.org Git - onig/commitdiff
add sample/bug_fix.c
authorkosako <kosako@sofnec.co.jp>
Thu, 28 Jul 2016 09:22:46 +0000 (18:22 +0900)
committerkosako <kosako@sofnec.co.jp>
Thu, 28 Jul 2016 09:22:46 +0000 (18:22 +0900)
sample/.gitignore
sample/Makefile.am
sample/bug_fix.c [new file with mode: 0644]

index 963d2e402140d076c2f2df49830c3aacd2b1fbff..79fab44e7ed419e2f29974253c83533586c6b0da 100644 (file)
@@ -7,4 +7,5 @@
 /sql
 /syntax
 /user_property
+/bug_fix
 /log*
index 53f0d0859d0858d0f4923627e664f608e492f022..6799ecd041b0b222dd346b3d6bdfa25c928d224f 100644 (file)
@@ -6,9 +6,9 @@ LDADD  = $(lib_onig)
 AM_LDFLAGS  = -L$(prefix)/lib
 AM_CPPFLAGS = -I../src -I$(includedir)
 
-TESTS = encode listcap names posix simple sql syntax user_property
+TESTS = encode listcap names posix simple sql syntax user_property bug_fix
 
-check_PROGRAMS = encode listcap names posix simple sql syntax user_property
+check_PROGRAMS = encode listcap names posix simple sql syntax user_property bug_fix
 
 encode_SOURCES  = encode.c
 listcap_SOURCES = listcap.c
@@ -18,10 +18,11 @@ simple_SOURCES  = simple.c
 sql_SOURCES     = sql.c
 syntax_SOURCES  = syntax.c
 user_property_SOURCES = user_property.c
+bug_fix         = bug_fix.c
 
 sampledir = .
 
-test: encode listcap names posix simple sql syntax user_property
+test: encode listcap names posix simple sql syntax user_property bug_fix
        $(sampledir)/encode
        $(sampledir)/listcap
        $(sampledir)/names
@@ -30,3 +31,4 @@ test: encode listcap names posix simple sql syntax user_property
        $(sampledir)/sql
        $(sampledir)/syntax
        $(sampledir)/user_property
+       $(sampledir)/bug_fix
diff --git a/sample/bug_fix.c b/sample/bug_fix.c
new file mode 100644 (file)
index 0000000..038ba77
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+ * bug_fix.c
+ */
+#include <stdio.h>
+#include "oniguruma.h"
+
+static OnigCaseFoldType CF = ONIGENC_CASE_FOLD_MIN;
+
+static int
+search(regex_t* reg, unsigned char* str, unsigned char* end)
+{
+  int r;
+  unsigned char *start, *range;
+  OnigRegion *region;
+
+  region = onig_region_new();
+
+  start = str;
+  range = end;
+  r = onig_search(reg, str, end, start, range, region, ONIG_OPTION_NONE);
+  if (r >= 0) {
+    int i;
+
+    fprintf(stderr, "match at %d  (%s)\n", r,
+            ONIGENC_NAME(onig_get_encoding(reg)));
+    for (i = 0; i < region->num_regs; i++) {
+      fprintf(stderr, "%d: (%d-%d)\n", i, region->beg[i], region->end[i]);
+    }
+  }
+  else if (r == ONIG_MISMATCH) {
+    fprintf(stderr, "search fail (%s)\n",
+            ONIGENC_NAME(onig_get_encoding(reg)));
+  }
+  else { /* error */
+    char s[ONIG_MAX_ERROR_MESSAGE_LEN];
+    onig_error_code_to_str(s, r);
+    fprintf(stderr, "ERROR: %s\n", s);
+    fprintf(stderr, "  (%s)\n", ONIGENC_NAME(onig_get_encoding(reg)));
+    return -1;
+  }
+
+  onig_region_free(region, 1 /* 1:free self, 0:free contents only */);
+  return 0;
+}
+
+static int
+exec_deluxe(OnigEncoding pattern_enc, OnigEncoding str_enc,
+            OnigOptionType options, char* apattern, char* astr)
+{
+  int r;
+  unsigned char *end;
+  regex_t* reg;
+  OnigCompileInfo ci;
+  OnigErrorInfo einfo;
+  UChar* pattern = (UChar* )apattern;
+  UChar* str     = (UChar* )astr;
+
+  onig_initialize(&str_enc, 1);
+
+  ci.num_of_elements = 5;
+  ci.pattern_enc = pattern_enc;
+  ci.target_enc  = str_enc;
+  ci.syntax      = ONIG_SYNTAX_DEFAULT;
+  ci.option      = options;
+  ci.case_fold_flag  = CF;
+
+  r = onig_new_deluxe(&reg, pattern,
+                      pattern + onigenc_str_bytelen_null(pattern_enc, pattern),
+                      &ci, &einfo);
+  if (r != ONIG_NORMAL) {
+    char s[ONIG_MAX_ERROR_MESSAGE_LEN];
+    onig_error_code_to_str(s, r, &einfo);
+    fprintf(stderr, "ERROR: %s\n", s);
+    return -1;
+  }
+
+  end = str + onigenc_str_bytelen_null(str_enc, str);
+  r = search(reg, str, end);
+
+  onig_free(reg);
+  onig_end();
+  return 0;
+}
+
+
+
+extern int main(int argc, char* argv[])
+{
+  /* fix ignore case in look-behind
+     commit: 3340ec2cc5627172665303fe248c9793354d2251 */
+  exec_deluxe(ONIG_ENCODING_UTF8, ONIG_ENCODING_UTF8,
+              ONIG_OPTION_IGNORECASE,
+              "(?<=\305\211)a", "\312\274na"); /* \u{0149}a  \u{02bc}na */
+
+  return 0;
+}